RUS  ENG 

Kostya_LeoG (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 След.
Программное определение номера версии
 
Здравствуйте.
Как программно определить номер установленной версии zulu
Как программно подключиться к zuluserver
 
Здравствуйте.
Подскажите, пожалуйста, как из программы подключиться к серверу Zulu 8.0. Сейчас в программе используется такая строка MapCtrl.MapPath := 'zulu://sa@' + 192.168.1.27 + ':6473'/YAK_DATA/YAK_MAP/Map/yak.zmp;  строка сохранилась с предыдущей версии zuluserver 7.0. Из оболочки Зулу карта  открывается как серверная
zulu 8.0. 8.0.0.6559 zuluServer 8.0 8.0.0.6559 от 15.12.2017г
Слой 2ГИС, отключение псевдо 3D
 
Здравствуйте.
Карта zulu (локальная и сервер) с подключенными слоями 2GIS и OSM грузится очень медленно, если не подключен интернет (тайловые сервера слоев). Перед запуском пользователь может не обратить внимание, что интернет отвалился. Может ли сервер zulu или локальная карта zulu выдавать какое-нибудь сообщение, например, "Отсутствует соединение с интернет...", и соответственно, чтобы такое же сообщение выдавалось и при программном подключении к карте. Если в карте *.zmp слои 2GIS и OSM сохранены как выключенные, то при старте zulu вообще не проверять, есть ли обновления тайлов, а запускать эту проверку только при включении их.
Изменено: Kostya_LeoG - 18.12.2017 09:00:45
преобразование типового элемента
 
Теперь преобразует в примитив, но этот примитивы выглядят не так как были исходные элементы: символ - как точка, полилиния - как линия с графическим обозначением типом линии из набора взятой по умолчанию...
[CODE]case el.GraphType of
            eGraphTypeTypedPolyline: grType := eGraphTypePrimPolyline; // 0 => 4  Типовой ломаная
            eGraphTypeTypedSquare:grType := eGraphTypePrimSquare;      //1 => 5  Типовой площадной
            eGraphTypeTypedSymbol:grType := eGraphTypePrimSymbol;      //2 => 3 Типовой символ
            else grType := -1;
        end;
        if grType >= 0 then
        begin
          bres := Layer.ConvertTypeToPrimitive(key,el.ElemStyle,grType);
          if bres then zMapMain.Redraw();
        end;[/CODE]
преобразование типового элемента
 
Здравствуйте, Алексей.
Метод, что вы подсказали, не работает по крайней мере в коде:[CODE]var
  el:IElement;
  bres:Boolean;
begin
.......
key := Layer.CurrentID;
el := Layer.Elements.GetElement(key);
if el.Key = -1 then exit;

//Преобразование в примитив с сохранением прежнего изображения стиля el.ElemStyle и графического типа el.GraphType
bres := Layer.ConvertTypeToPrimitive(key,el.ElemStyle,el.GraphType); //возвращает всегда FALSE

if bres then
begin
...
end;
[/CODE]Что не так?
Изменено: Kostya_LeoG - 15.12.2017 12:09:37
преобразование типового элемента
 
Здравствуйте.
Подскажите, пожалуйста, как преобразовать типовой элемент (символьный, площадной, линию) в примитив. Есть участок кода:[CODE]var
  el:IElement;
begin
.......
key := Layer.CurrentID;
el := Layer.Elements.GetElement(key);
if el.Key = -1 then exit;
//Преобразование в примитив с сохранением прежнего изображения
el.ChangeTypeMode(-1,-1); //не срабатывает - элемент сохраняет свой прежний тип и режим
.......
//а так работает, получаем новое отображение элемента с key
Type_ID := 2; Mode_ID = 1;
el.ChangeTypeMode(Type_ID,Mode_ID);
[/CODE]Подскажите, может быть существует другой метод?
Управление видимостью элемента по его ключу
 
Спасибо за подсказку
Управление видимостью элемента по его ключу
 
Здравствуйте.
Подскажите, пожалуйста, как управлять видимостью элемента по его ключу. Есть набор ключей элементов, видимостью которых нужно управлять в зависимости от масштаба карты. Код должен выглядеть примерно так:[CODE]key := Layer.Current_ID;
if MapCtrl.MapScale > 1000 then vis := FALSE
else vis := TRUE;
//Дальше нужно скрыть конкретный элемент по его ключу, причем другие элементы этого режима и типа могут оставаться видимыми
Layer.SetElementVisble(key,vis);//--этой функции не существует в библиотеке (прототип)
[/CODE]Есть функции Layer.SetTypeVisible и Layer.SetModeVisible, но они скрывают весь тип или весь режим, что не совсем подходит для моей задачи.
Изменено: Kostya_LeoG - 14.12.2017 12:57:02
Программная настройка макета печати
 
Здравствуйте, Дмитрий. По сохранению макета все понятно.
Программная настройка макета печати
 
Здравствуйте, Олег.
[LIST=1]
[*]Если в диалоге "Добавить в легенду" сразу же выбрать переключатель "Добавить пункт легенды", затем из списка выбрать линейный или полигональный, далее выбрать переключатель "взять из слоя на диске", то после выбора слоя в окне "Импорт стилей из слоя" пусто. Для типовых символов все работает.
[*]Если в диалоге "Добавить в легенду" выбрать "Добавить раздел" и выбрать "по слою на диске" ("по слою текущей карты" почему-то не доступно), то добавляет в легенду правильно, но правда добавляет не в один столбец (по ширине растянутой на макете), а в несколько столбцов (столько, сколько задействовано типовых режимов в карте) и столбцы никак не перетаскиваются и не объединяются.
[/LIST]PS: проверял не только на своей карте, но и на примерах, которые поставляются вместе с zulu - результат один и тот же.
Программная настройка макета печати
 
Здравствуйте, Дмитрий.
1. Обновил библиотеки, свойство стало доступным, но есть вопросы по его использованию...[CODE]//интерфейс
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(); //сохраняются все предыдущие изменения с картой, а это не нужно[/CODE]То есть приведенный код выполняется, но сохраняет всю карту, чего делать не нужно, сохраняется в том числе и временный виртуальный слой, а нужно сохранить только макет.

2. В версии zulu 8.0.0.6550 (дата сборки 06.12.2017) видимо файл справки *.chm от предыдущей версии и свойство mapdoc.saved не описано.
3. В окне настройки легенды по кнопке "Добавить" не добавляются пункты легенды линейный и полигональный (предварительно легенда была очищена вручную).
Изменено: Kostya_LeoG - 12.12.2017 09:15:20
Программная настройка макета печати
 
Здравствуйте, Дмитрий.
[LIST=1]
[*]Свойства MapDoc.Saved в версии зулу 8.0.0.6550 (дата сборки 06.12.2017) не оказалось (программа не компилируется).
[*]Есть ли решения по легенде, режиму редактирования контента ("карандаш") и дополнительным условиям навигации для позиционирования карты?
[/LIST]
Программная настройка макета печати
 
Здравствуйте, Дмитрий.
[LIST=1]
[*]По этому вопросу все ясно.
[*]Спасибо, свойство полезно и буду его использовать для сохранения, но, если честно, я думал, что в будущем пользователю не придется выполнять "лишних" действий по сохранению: если пользователь осознано сохраняет уже существующий макет, то и в карте он должен, как мне кажется, сохраниться автоматически.
[*]По команде "Сохранить как...", опять же как мне кажется, должна быть аналогия с другими редакторами, например, MS Word - там же после выполнения аналогичного действия не нужно дополнительно выполнять никаких других манипуляций, чтобы продолжить редактирования документа с новым названием. А если пользователю захочется получить макет в виде отдельного файла, для этого есть метод "Экспорт".
[*]Очень жду Вашего решения по легенде.
[*]"Карандаш" и дополнительные условия навигации будут, как мне кажется, очень удобны и привычны пользователям зулу.
[/LIST]
Изменено: Kostya_LeoG - 07.12.2017 08:45:40
Программная настройка макета печати
 
Здравствуйте, Дмитрий
[LIST=1]
[*] Примерно когда можно ожидать программное редактирование макета?
[*]Сохранение изменений действительно работает с текущим макетом, нужно только вызвать по завершению работы с ним MapCtrl.Map.Save(); Один минус, загружая макет с помощью функции MapCtrl.ExecCmd('MapLayouts'), то как программно я узнаю, были ли какие-либо изменения с макетом (метод ничего полезного не возвращает), а всякий раз вызывать MapCtrl.Map.Save() - тоже не совсем верно.
[*]Про "Сохранить как..." видимость работы именно такая, как я и описал выше: сохраняет макет на диск под новым именем, но в заголовке макета остается прежнее название и складывается ощущение, что продолжаешь редактировать именно предыдущий макет. При этом вызов MapCtrl.Map.Save(); в конце работы так и не подключает/сохраняет макет с новым именем к карте. По крайней мере он не появляется в списке макетов в диалогового окна "Макеты...". И если не выполнить импорт этого макета из зулу с последующим сохранением в карте, то список подключенных к карте макетов не обновляется. В зулу та же картина с "Сохранить как..."
[*]По легенде хочется добавить, чтоб была возможность не только первичного управления стилями данных, но и ограничение этой выборки только стилями элементов в видимой области. Макет с подключенной легендой в старом варианте грузится ну очень долго, пока все посчитает, не удобно и хочется поскорее эту легенду удалить...
[*]Переход к редактированию элемента по двойному щелчку не очевиден, еще нужно догадаться, ведь режимы исходной карты в зулу не переключаются по двойному щелчку. Может быть тогда сделать по аналогии с включением редактора карты - кнопка "карандаш" (конечно сохранив старый вариант двойного щелчка)? В таком случае, если весь макет находится в режиме редактирования, то переход к следующему элементу, например, к тексту, сразу же включался режим редактирования текста.
[/LIST]
Изменено: Kostya_LeoG - 05.12.2017 12:35:10
Программная настройка макета печати
 
Здравствуйте. Подскажите пожалуйста как программно реализовать функционал по настройке макета печати:
[LIST=1]
[*]подготовить_фрагмент_карты (центр, масштаб, стандарт размера картинки в макете по умолчанию на весь макет);
[*]поставить_символ_ север (из списка предопределенных);
[*]вставить_текст (мультистрочный текст, Font, Size, позиция в макете);
[*]вставить_таблицу(заголовок, массив строк);
[*]вставить_рамку
[*]вставить_настроенную_легенду (слой, графический тип = ObjectType.GraphicType); - так как сейчас формируется легенда не совсем то, что нужно - выводится вся информация по всем слоям и нет возможности отфильтровать информацию.
[*]сохранить_макет(имя, путь);
[*]макет_обновить_карту(новый центр, новый масштаб);
[*]показать_макет(имя, путь);
[/LIST]
Сейчас существует возможность только вызова диалога создания макета печати MapCtrl.ExecCmd('MapLayouts'); без возможности применения дополнительных настроек. При работе с этим диалогом программно тоже возникают некоторые проблемы:
[LIST=1]
[*]Созданный макет печати программно, после его сохранения под новыми именем и закрытия не виден в zulu и не виден в следующем сеансе работы программы. Хотелось бы, чтобы после сохранения, созданный макет печати автоматически сохранялся в карте.
[*]Если загрузить созданный макет печати в zulu (кнопка открыть), а потом вызвать диалог "Сохранить как..." макет сохраняется как отдельный файл, т.е. функция работает как "Экспорт", при этом его потом можно только импортировать, чтобы продолжить редактирование, но нет возможности после такого сохранения продолжить редактирование макета печати уже с новым именем.
[*]При вставке легенды программа "подвисает", тот же эффект и в зулу, видимо из-за большого объема данных по стилям объектов карты (выводит по всем слоям). Сейчас чтобы скрыть стили всего слоя, в Настройке легенде нужно по каждому элементу щелкнуть и выбрать "Не отображать", нет возможности группового выделения и выделения по слоям. Может быть при вставке легенды вначале выводить окно "Настройка легенды", в которой отметить все выводимые поля стилей с их наименованиями и в настройках легенды добавить кнопку разместить, после чего уже можно будет добавлять легенду в макет.
[*]при настройке отображения карты в макете, чтобы переместиться в нужную позицию нужно дважды щелкнуть и "листать" "ладошкой" в нужном направлении, можно ли добавить какой-нибудь сервис, например, выбор_позиции(ключ, слой) и добавить стандартный метод "Переместиться в...", в диалоге которого задать масштаб и центр карты. Хотелось бы чтобы эти методы были доступны не только по двойному щелчку, но и при простом выделении карты в списке объектов.
[/LIST]Версия зулу 8.0.0.6548; Дата сборки 04.12.2017
Изменено: Kostya_LeoG - 05.12.2017 09:44:53
Рисование линии
 
Здравствуйте, у меня остались вопросы по отображению площадных объектов:
1. Для некоторых линий (разные ID и их начертание) получается различными отображения в образце структуры и на получающемся рисунке. В получающемся рисунке выступы у линии рисуются снаружи от границы, а в образце для этого же типового элемента рисунок выступов у линии, как правило, направлен к центру фигуры. Хотелось бы видеть отображение линий на получающейся картинке такой же, как и на образце в структуре слоя.
2. У площадных объектов задается разным узор, насколько я понял, это параметр хранится ElementStyle.FillStyle, но в какой параметр в функции FillStyleDef.DrawSampleImage() его передать я так и не понял. Получается картинка с одинаковым рисунком заливки.
3. Можно ли получить доступ напрямую к картинке, которая рисуется в поле "Образец", для всех режимов типовых элементов?

Версия zulu  8.0.0.6531u от 17.11.2017
Изменено: Kostya_LeoG - 20.11.2017 09:12:46
Рисование линии
 
Все понятно, спасибо.
Рисование линии
 
Понятно,  вопрос остался по получению некоторых данных[CODE]ObjType := Layer.ObjectTypes.item[tid];
Fid := ObjType.id;
FillStyleDef := iLay.FillStyles.ItemById[Fid];//правильно ли так получать идентификатор типового площадного объекта?
Lid := ObjectMode.ElemStyle.LineStyle;//правильно ли получен стиль линии для типового площадного объекта?
LineStyleDef := Layer.LineStyles.ItemById[LId];

[/CODE]

т.е. у площадного типового объекта свой тип линии и LineStyleDef как правильно его получить. При получении FillStyleDef нужно правильно задать ID, а как этот идентификатор получить? В ObjectMode и ObjectType явно не указано.
В примере отрисовки типового площадного объекта, который я приводил выше,  помимо заливки, еще и линия площадного объекта выводилась, но не та, что описана была в структуре слоя.
Изменено: Kostya_LeoG - 17.11.2017 17:28:48
Рисование линии
 
С линиями вроде бы разобрался, спасибо, подскажите еще пожалуйста по отрисовке типового площадного объекта.

[CODE]var
 iSqre:IFillStyleDef;
 iLnDef:ILineStyleDef;
begin
...
 Fid := ObjType.id;//правильно ли так получать идентификатор типового площадного объекта?
 iSqre := iLay.FillStyles.ItemById[Fid];
 Lid := ObjectMode.ElemStyle.LineStyle;//правильно ли получен стиль линии для типового площадного объекта?
 iLnDef := iLay.LineStyles.ItemById[LId];
 //дальше что-то рисует, но не совсем понятно тот ли площадной объект отрисовывается
 iSqre.DrawSampleImage(iStrm,48,32,1,1,0,clDefault,true,50,lnColor,clWhite,false,iLnDef,lnWidth,clRed);
...
end;
[/CODE]

Подскажите еще описание параметров используемой функции

DrawSampleImage(

const Stream: IUnknown; Width: Integer; Height: Integer;  SpaceX: Integer; SpaceY: Integer; Format: Integer; //-эти параметры как для линии

                        ImageBkColor: Integer; ImageTransparent: WordBool; // как получить эти свойства

                         Scale: Double;

                         Color: Integer; //цвет чего

                         BackColor: Integer;

                        Transparent: WordBool;

                        const BorderStyle: ILineStyleDef;

                        BorderWidth: Double;

                        BorderColor: Integer):

WordBool; safecall;

Изменено: Kostya_LeoG - 17.11.2017 15:30:14
Рисование линии
 
Здравствуйте. У меня получилось нарисовать линию.  Есть код[CODE]procedure zmp_Image(var pict:TPicture);
var
   olestr:TOleStream;
   strg:IStorage;
   iStrm:IStream;
   Stm: TMemoryStream;
begin
      StgCreateDocFile(pWideChar(wPath),STGM_READWRITE or STGM_SHARE_EXCLUSIVE ,0,Strg);//хранилище
      strg.CreateStream(pWideChar(wPath),STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,0,iStrm);//поток
      oleStr := TOLESTream.Create(iStrm);//поток
      ................
      Stm:=TmemoryStream.Create;
      iLnDef := iLay.LineStyles.ItemById[LId];//нужная типовая линия
      ...............
      iLnDef.DrawSampleImage(iStrm,24,24,1,1,0,clDefault,false,50,clRed,2);//место возникновения исключения
      stm.LoadFromStream(oleStr);
      pict.Bitmap.LoadFromStream(stm);
end;
[/CODE]Функция выполняется, но почему фон получается черным? Подскажите пожалуйста в как изменить цвет фона?.
Подскажите еще пожалуйста, как получить интерфейс LineStyle для типовой лини, чтобы можно было рисовывать картинку цветом, который определен в режиме?
Изменено: Kostya_LeoG - 17.11.2017 13:52:56
Рисование линии
 
Понятно, а чтобы нарисовать типовой площадной элемент, тоже нужно воспользоваться методом DrawSampleImage?
Рисование линии
 
Понятно, функцию в браузере увидел, а подскажите пожалуйста, какие параметры эта функция принимает? Stream As Unknown это обычный TStream?
Рисование линии
 
Здравствуйте, подскажите пожалуйста, как нарисовать линию? Написал функцию, в которой успешно выполняется отрисовка типового символа, а вот с отрисовкой типовой линии или типового площадного объекта есть затруднения...[CODE]procedure TfrmTopoGraf.zmp_GetPicture(iLay:ILayer;cMode:IObjectMode);
var
 iSym:ISymbol;
 iLineDef:ILineStyleDef;
 pict:TPicture;
 SymID:integer:
 LineID:Integer;

begin
      pict := TPicture.Create;
      SymId := ElemStyle.SymbolID;
      LineID := cMode.ElemStyle.LineStyle;

      //типовой символ
      iSym := iLay.Symbols.ItemById[SymId];
      SetOlePicture(pict,iSym.Picture);
      Image1.Picture.Assign(pict); //Картинка добавляется
     
      //типовая линия  
      iLineDef := iLay.LineStyles.ItemById[LineID];

     //А дальше тупик: какой метод дальше вызвать, чтобы в итоге на выходе получить картинку - полилинию
     Image2.Picture.Assign(pict);
end;[/CODE]
Режим объекта
 
Спасибо
Режим объекта
 
Здравствуйте. Подскажите пожалуйста, можно ли программно задать/поменять текущий тип и режим активного слоя в карте в режиме редактирования таким образом, чтобы MapCtrl воспринимал действие аналогично тому, как пользователь выберет вручную тип и режим перед началом рисования.[CODE]//Есть функция вызова команды системы zulu для данного окна карты и команда выбор типа и режима
MapCtrl1.ExecCommand("EditSelectType", pArgIn); //сейчас pArgIn должен быть равен нулю
//Например, если в pArgIn передать указатель на структуру, описывающую требуемый тип и режим...
[/CODE]или может быть какой-нибудь другой способ.
Страницы: Пред. 1 2 3 4 5 След.