RUS  ENG 

Программная настройка макета печати

Страницы: 1
RSS
Программная настройка макета печати
 
Здравствуйте. Подскажите пожалуйста как программно реализовать функционал по настройке макета печати:
  1. подготовить_фрагмент_карты (центр, масштаб, стандарт размера картинки в макете по умолчанию на весь макет);
  2. поставить_символ_ север (из списка предопределенных);
  3. вставить_текст (мультистрочный текст, Font, Size, позиция в макете);
  4. вставить_таблицу(заголовок, массив строк);
  5. вставить_рамку
  6. вставить_настроенную_легенду (слой, графический тип = ObjectType.GraphicType); - так как сейчас формируется легенда не совсем то, что нужно - выводится вся информация по всем слоям и нет возможности отфильтровать информацию.
  7. сохранить_макет(имя, путь);
  8. макет_обновить_карту(новый центр, новый масштаб);
  9. показать_макет(имя, путь);
Сейчас существует возможность только вызова диалога создания макета печати MapCtrl.ExecCmd('MapLayouts'); без возможности применения дополнительных настроек. При работе с этим диалогом программно тоже возникают некоторые проблемы:
  1. Созданный макет печати программно, после его сохранения под новыми именем и закрытия не виден в zulu и не виден в следующем сеансе работы программы. Хотелось бы, чтобы после сохранения, созданный макет печати автоматически сохранялся в карте.
  2. Если загрузить созданный макет печати в zulu (кнопка открыть), а потом вызвать диалог "Сохранить как..." макет сохраняется как отдельный файл, т.е. функция работает как "Экспорт", при этом его потом можно только импортировать, чтобы продолжить редактирование, но нет возможности после такого сохранения продолжить редактирование макета печати уже с новым именем.
  3. При вставке легенды программа "подвисает", тот же эффект и в зулу, видимо из-за большого объема данных по стилям объектов карты (выводит по всем слоям). Сейчас чтобы скрыть стили всего слоя, в Настройке легенде нужно по каждому элементу щелкнуть и выбрать "Не отображать", нет возможности группового выделения и выделения по слоям. Может быть при вставке легенды вначале выводить окно "Настройка легенды", в которой отметить все выводимые поля стилей с их наименованиями и в настройках легенды добавить кнопку разместить, после чего уже можно будет добавлять легенду в макет.
  4. при настройке отображения карты в макете, чтобы переместиться в нужную позицию нужно дважды щелкнуть и "листать" "ладошкой" в нужном направлении, можно ли добавить какой-нибудь сервис, например, выбор_позиции(ключ, слой) и добавить стандартный метод "Переместиться в...", в диалоге которого задать масштаб и центр карты. Хотелось бы чтобы эти методы были доступны не только по двойному щелчку, но и при простом выделении карты в списке объектов.
Версия зулу 8.0.0.6548; Дата сборки 04.12.2017
Изменено: Kostya_LeoG - 05.12.2017 09:44:53
 
Kostya_LeoG, добрый день!
  1. Сейчас объектной модели для программного редактирования макетов нет - вставим в план
  2. Встроенные в карту макеты сохраняются внутри карты. Т.е. после того, как у созданного макета выполнили "Сохранить", нужно также у карты выполнить "Сохранить".
  3. Про "Сохранить как" не совсем понятно, т. к. после того как он сохранен под новым именем его можно именно "продолжить редактировать уже с новым именем".
  4. Про легенду подумаем
  5. По двойному щелчку включается режим редактирования контента объекта-карты, это важно. По аналогии, как активируется допустим вставленная таблица Excel в документ Word. А команды по позиционированию разовьем.
 
Здравствуйте, Дмитрий
  1. Примерно когда можно ожидать программное редактирование макета?
  2. Сохранение изменений действительно работает с текущим макетом, нужно только вызвать по завершению работы с ним MapCtrl.Map.Save(); Один минус, загружая макет с помощью функции MapCtrl.ExecCmd('MapLayouts'), то как программно я узнаю, были ли какие-либо изменения с макетом (метод ничего полезного не возвращает), а всякий раз вызывать MapCtrl.Map.Save() - тоже не совсем верно.
  3. Про "Сохранить как..." видимость работы именно такая, как я и описал выше: сохраняет макет на диск под новым именем, но в заголовке макета остается прежнее название и складывается ощущение, что продолжаешь редактировать именно предыдущий макет. При этом вызов MapCtrl.Map.Save(); в конце работы так и не подключает/сохраняет макет с новым именем к карте. По крайней мере он не появляется в списке макетов в диалогового окна "Макеты...". И если не выполнить импорт этого макета из зулу с последующим сохранением в карте, то список подключенных к карте макетов не обновляется. В зулу та же картина с "Сохранить как..."
  4. По легенде хочется добавить, чтоб была возможность не только первичного управления стилями данных, но и ограничение этой выборки только стилями элементов в видимой области. Макет с подключенной легендой в старом варианте грузится ну очень долго, пока все посчитает, не удобно и хочется поскорее эту легенду удалить...
  5. Переход к редактированию элемента по двойному щелчку не очевиден, еще нужно догадаться, ведь режимы исходной карты в зулу не переключаются по двойному щелчку. Может быть тогда сделать по аналогии с включением редактора карты - кнопка "карандаш" (конечно сохранив старый вариант двойного щелчка)? В таком случае, если весь макет находится в режиме редактирования, то переход к следующему элементу, например, к тексту, сразу же включался режим редактирования текста.
Изменено: Kostya_LeoG - 05.12.2017 12:35:10
 
Kostya_LeoG,
  1. Это не какое-то "короткое" исправление, поэтому мы не даем обещаний по срокам;
  2. Добавили в объект MapDoc свойство Saved по аналогии с Document.Saved (см. https://www.politerm.com/zuludoc/index.html#zuluax/Document_Saved.html) чтобы определять когда надо вызывать Save() (будет доступна в ближайшем обновлении)
  3. Понятно. Команда Сохранить как... сохраняет макет к отдельном документе и поэтому, да, он уже не будет "связан" с картой. Для того, чтобы сделать копию встроенного в карту сейчас в ZuluGIS есть команда "Добавить копию" в окне "Макеты", либо "Копировать" в диалоге "Макеты". Мы добавим подобную команду во всплывающий редактор макетов из MapCtrl.
  4. По легенде мы обсудим с коллегами
  5. Активация по двойному щелчку встроенного элемента в редакторе WYSIWYG долгое время была более чем очевидная операция, (например, вставленные объекты в Microsoft Word или редактирование контента объекта в Adobe Illustrator), поэтому не вызывала нареканий. Для удобства, мы в будущем добавим тогда режим редактирования контента ("карандаш"), позволяющий редактировать контент по одинарному щелчку.
 
Здравствуйте, Дмитрий.
  1. По этому вопросу все ясно.
  2. Спасибо, свойство полезно и буду его использовать для сохранения, но, если честно, я думал, что в будущем пользователю не придется выполнять "лишних" действий по сохранению: если пользователь осознано сохраняет уже существующий макет, то и в карте он должен, как мне кажется, сохраниться автоматически.
  3. По команде "Сохранить как...", опять же как мне кажется, должна быть аналогия с другими редакторами, например, MS Word - там же после выполнения аналогичного действия не нужно дополнительно выполнять никаких других манипуляций, чтобы продолжить редактирования документа с новым названием. А если пользователю захочется получить макет в виде отдельного файла, для этого есть метод "Экспорт".
  4. Очень жду Вашего решения по легенде.
  5. "Карандаш" и дополнительные условия навигации будут, как мне кажется, очень удобны и привычны пользователям зулу.
Изменено: Kostya_LeoG - 07.12.2017 08:45:40
 
Kostya_LeoG,

Уточнения по встроенным макетам:
  1. Встроенный в карту макет ведет себя как встроенный объект. Если, допустим, во внедренной в документ таблице Excel пользователь выполнил "Сохранить" (точнее "Обновить"), то родительский документ от этого автоматически не сохраняется - там ещё может быть полно правок, которые пользователь ещё передумает сохранять. Карта ZuluGIS ведёт себя точно также. В отличии от слоя или базы данных, где изменения фиксируются немедленно, карта является "документом" и все правки в ней необходимо зафиксировать с помощью "Сохранить".
  2. Команда "Сохранить как..." ведёт себя именно так, как в Microsoft Office. Вы просто не берёте в расчёт то, что речь идет о документе, встроенном в другой документ. В оболочке ZuluGIS мы эту команду переименовали в "Сохранить копию как...", я думаю, тоже самое сделаем и во всплывающем редакторе. Также, команда "Сохранить" в данном контексте будет меняться на "Обновить". Команда "Экспорт" в меню "Файл" здесь не подходит, она больше предполагает сохранение документа в каком-то стороннем или обменном формате, возникнет путаница.
 
Здравствуйте, Дмитрий.
  1. Свойства MapDoc.Saved в версии зулу 8.0.0.6550 (дата сборки 06.12.2017) не оказалось (программа не компилируется).
  2. Есть ли решения по легенде, режиму редактирования контента ("карандаш") и дополнительным условиям навигации для позиционирования карты?
 
Kostya_LeoG, добрый день!
  1. Если Вы программируете на Delphi, то нужно заново импортировать библиотеку типов в проект - автоматически Delphi это не делает. Проверьте, пожалуйста.
  2. По легенде и остальном - в плане доработок.
 
Здравствуйте, Дмитрий.
1. Обновил библиотеки, свойство стало доступным, но есть вопросы по его использованию...
Код
//интерфейс
mpDoc := MapCtrl.Map as IMapDoc;
bsave := mpdoc.saved;//возвращается false (т.к. к карте был подключен виртуальный слой, его сохранять не нужно)

//запуск макетов
mpDoc.Saved := TRUE;//попытка сбросить флаг на сохранение предыдущих изменений
zMapMain.ExecCmd('MapLayouts'); 

bsave := mpdoc.saved;//возвращается false (если сохранить, то сохранится и виртуальный слой 
//и при следующей загрузке карты в зулу будет сообщение, что слой не найден...)

if NOT bsave then MapCtrl.Map.Save(); //сохраняются все предыдущие изменения с картой, а это не нужно
То есть приведенный код выполняется, но сохраняет всю карту, чего делать не нужно, сохраняется в том числе и временный виртуальный слой, а нужно сохранить только макет.

2. В версии zulu 8.0.0.6550 (дата сборки 06.12.2017) видимо файл справки *.chm от предыдущей версии и свойство mapdoc.saved не описано.
3. В окне настройки легенды по кнопке "Добавить" не добавляются пункты легенды линейный и полигональный (предварительно легенда была очищена вручную).
Изменено: Kostya_LeoG - 12.12.2017 09:15:20
 
Kostya_LeoG, добрый день!
  1. Карта (как и допустим документ Word) может сохраняться только целиком, а не частями, поэтому MapDoc.Save() действительно сохранит всю карту. Соответственно в ней отразятся все правки.
  2. Метод добавлен в объектную модель оперативно, чтобы Вы могли побыстрее им пользоваться. В chm ещё не успели добавить. Наиболее оперативно обновляющееся описание - online справка у нас на сайте (см. https://www.politerm.com/zuludoc/index.html#zuluax/MapDoc_Saved.html)
  3. По легенде - проверим, потестируем.
 
По легенде - проверили, все работает. Пришлите ваши контакты для связи на [email protected]
 
Здравствуйте, Олег.
  1. Если в диалоге "Добавить в легенду" сразу же выбрать переключатель "Добавить пункт легенды", затем из списка выбрать линейный или полигональный, далее выбрать переключатель "взять из слоя на диске", то после выбора слоя в окне "Импорт стилей из слоя" пусто. Для типовых символов все работает.
  2. Если в диалоге "Добавить в легенду" выбрать "Добавить раздел" и выбрать "по слою на диске" ("по слою текущей карты" почему-то не доступно), то добавляет в легенду правильно, но правда добавляет не в один столбец (по ширине растянутой на макете), а в несколько столбцов (столько, сколько задействовано типовых режимов в карте) и столбцы никак не перетаскиваются и не объединяются.
PS: проверял не только на своей карте, но и на примерах, которые поставляются вместе с zulu - результат один и тот же.
 
Здравствуйте, Дмитрий. По сохранению макета все понятно.
 
Цитата
Дмитрий Озеров написал:
Kostya_LeoG, добрый день!
Сейчас объектной модели для программного редактирования макетов нет - вставим в план
Подскажите, уже есть понимание когда появится программно создание/редактирование макетов?
Страницы: 1