RUS  ENG 

Михаил Кузьминых (Все сообщения пользователя)

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

Страницы: 1
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Установил сервер, опубликовал там карту, пробую её открыть. Использую следующий код на C#
[CODE]MapDoc map = new MapDoc();
try            
{                
   map.Open(txtMapPath.Text);
   lstLayers.Items.Clear();
   for(short i = 0; i < map.Layers.Count; i++)
   {
       var layer = map.Layers[i];
       lstLayers.Items.Add(layer.Name);
   }
}
catch(Exception ex)
{
   MessageBox.Show("Не удалось открыть карту на сервере: " + ex.Message);
}[/CODE]map.Open отрабатывает, map.Layers.Count содержит правильное количество слоев, но когда доходит до

var layer = map.Layers[i];
вылетает исключение:  ZuluLib Exception: "Недостаточно памяти"
из полезного, может быть: ErrorCode = -2147220988
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Обновил версию Zulu у клиента, использую GetLastErrorCode, получается в ответ -11.
Я предполагал, что проблема в лицензии и теперь это видно.
У клиента серверный ключ, а мое приложение - отдельное, написано на C# и использует библиотеки. Нет ли тут проблемы? Два года назад все было нормально, но что там было с ключами, я не в курсе.
Может быть, нужны какие-то дополнительные действия для задействования лицензии в коде?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
[QUOTE]Дмитрий Озеров написал:
[QUOTE][URL=/forums/?PAGE_NAME=profile_view&UID=1748&sphrase_id=90502]Михаил Кузьминых[/URL] написал:
И все же, а что означает возвращаемое значение "-11" из метода GetLastErrorCode?[/QUOTE]

Она означает, что нет лицензии для выполняемой операции.[/QUOTE]
А есть ли способ выяснить из внешней программы на C#, в каком режиме работает программа, доступна ли вообще лицензия?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
А есть ли возможность где-то скачать предыдущие версии ZuluGIS? В частности, интересует версия 8.0.0.7200u
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
И все же, а что означает возвращаемое значение "-11" из метода GetLastErrorCode?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
[QUOTE]Олег Пахнющий написал:
Можете прислать слой с такими объектами и пример кода на  [URL=mailto:[email protected]][email protected][/URL] ?[/QUOTE]
Я прогнал на этом слое сжатие и оптимизацию, после чего такие объекты исчезли, так что наверное, ничего особо интересного там не было.
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Попробовал получить GetLastErrorCode, на моей машине возвращает -11, но у меня, я так понимаю, демо-версия, я скачал дистрибутив с сайта, лицензии у меня нет.

На рабочей машине пока попробовать не удалось.

При работе возник ещё один вопрос - для перемещения я определяю тип объекта, использую для этого свойство GraphType. И на слое, с которым работаю, некоторые объекты имеют тип -1, eGraphTypeUnknown. При этом если открыть информацию о слое, там у всех объектов есть тип, линии или полигоны. Чем объясняется такое расхождение, и как тут лучше поступать - есть другой способ узнать тип, либо надо пробовать получать контуры и линии и обрабатывать ошибки?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Подниму старую тему, так как возник новый вопрос.

В прошлый раз задача успешно решилась, по прошествии времени понадобилось вернуться к старому модулю.
И возникла проблема - не удается установить новый контур для объекта с пересчитанными координатами. Методы SetContour и SetPolyContour возвращают false, объекты никуда не перемещаются.
При этом если скопировать несколько объектов на новый слой, их обработка проходит успешно. Я предполагал, что дело в ограничениях демо-версии, но на рабочей машине ситуация та же.
Есть ли возможность узнать, почему методы не отрабатывают, получить какую-то расширенную диагностику? Может быть ведется журнал или есть какие-то объекты для этих целей?

В работе я использовал последнюю версию, скачанную с сайты, версию на рабочей машине могу, при необходимости, уточнить.
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Спасибо за информацию о сетях, вроде бы добился, чего хотел.
Теперь возник следующий вопрос - в связи с имеющимся набором лицензий, пытаюсь перевести модуль в плагин к Zulu.
Сам плагин создал по примеру для Delphi, переложил на C#, методы вызываются, в целом плагин живой.
Но, мне хочется открыть форму и работать с ней, форма создается, открывается и сразу же закрывается (по видимому, сразу как заканчивается выполнение метода команды.
Почему так, как добиться, чтобы форма открылась и осталась открытой, чтобы можно было с ней работать?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
[QUOTE]Алексей Аширов написал:
2. Перемещение группы объектов:  [URL=https://politerm.com/zuludoc/index.html#zuluax/Layer_MoveSelection.html]https://politerm.com/zuludoc/index.html#zuluax/Layer_MoveSelection.html[/URL]
Параметр KeepLink - признак сохранения связности (если такая была) перемещаемых объектов с объектами, оставшимися на месте;[/QUOTE]
Спасибо за ответ, но вопрос всё же остается. Переместить группу объектов сразу с сохранением связей не получится, так как надо не просто сдвинуть, но и повернуть вокруг начальной точки, соответственно, каждый объект надо сдвинуть немного по-разному. Даже полилинию или контур просто сдвинуть не получится.
Предположил, что можно выбрать связанные элементы, передвинуть их, а затем связать заново, но не нашел подходящий метод для соединения объектов. Вся информация в объекте NetworkObjects только для чтения.
Пожалуйста, подскажите, есть ли возможность программного формирования сетей и какой объект за это отвечает?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Одни вопросы снялись, а другие - появились.
Дошло дело до работы с инженерными сетями, объекты в которых связаны между собой.
Сколько не изучал объектную модель, так и не смог найти какие-то способы обнаружения этих связей и работы с ними.

А связи эти очевидно требуются для корректного переноса сетей на новое место.
Так, попробовал работать с небольшим тестовым набором данных, но результат вышел неудовлетворительный - очевидно, линии были привязаны к какой-то точке, и связь эта не поменялась, в итоге на выходе вместо исходной сети вижу точки, соединенные с какой-то точкой привязки на старом месте.
Как быть, каким методом можно "передвинуть" такую сеть?
Изменено: Михаил Кузьминых - 15.06.2018 16:29:46
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Дело оказалось не в методе, а в том, что на одном месте находилось несколько объектов :)
Вроде бы пока все вопросы снялись.
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Систему координат я не трогаю, по сути дела, просто хочу переместить объект из одного места в другое.
Скорее всего, проблема была в ограничении демо-версии (прошу прощения, что не указал это сразу), на слоях с небольшим количеством объектов вроде бы сдвиг получается.
Возник ещё один вопрос. Я запускаю свою отдельную программу, она перемещает точку (пробую сейчас с точечными объектами, eGraphTypePrimSymbol), и при этом, если сама программа Zulu закрыта, то после того, как я открываю ее для просмотра результата, выясняется, что на старом месте точка тоже есть, но с ID на единицу больше прежнего. Исходная точка переместилась. Если Zulu в это время открыта и обрабатываемый слой виден в окне карты, то точка перемещается, и на старом месте ничего не остается.
Чем это объясняется?
Программное перемещение объектов, Работа с данным Zulu из отдельной программы на C#
 
Я столкнулся с Zulu впервые, пытаюсь решить следующую задачу:
Необходимо выполнить перемещение объектов на слое в новые координаты (по сути, изменяется система координат, но встроенная функция трансформации не подошла, там есть определенная путаница в исходных данных, которая мешает ее применить).
На данный момент я пробую создать просто отдельную программу на C# (знаю его лучше всего), не plugin, а stand-alone, которая открывала бы слой, проходила по всем объектам, пересчитывала координаты и записывала измененные данные.
Пытаюсь выполнить следующую последовательность действий:
- получаю элемент по id (ну или просто перебором, пока с отдельными элементами пробую)
- получаю контур элемента, прохожу по нему, читаю координаты вершин, пересчитываю и формирую массивы
- создаю новый контур из новых координат
- вызываю метод SetContour у элемента. И вот тут проблема - контур не меняется, если смотреть координаты контура у элемента, они остаются старыми.

Дальше не очень понятно, как эти изменения сохранить, это метод WriteElement у слоя? Или сохранение происходит сразу? Или другой метод?

Пожалуйста, подскажите, возможно ли вообще использовать такой подход, или надо делать макрос или плагин, выполняющийся в среде Zulu?
Если подход рабочий - в чем моя проблема, почему не работает?
Изменено: Михаил Кузьминых - 17.05.2018 16:35:45
Страницы: 1