На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

GTK Active: Получение всех объектов чертежа по слоям

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
GTK Active: Получение всех объектов чертежа по слоям
 
Здравствуйте, у нас есть чертеж в формате Панорамы, подскажите, какими методами GIS ToolKit Active можно воспользоваться для перебора всех объектов чертежа по слоям.
Наиболее близкий ответ в этой теме, где автор предлагает использовать модуль поиска TMapFind для выборки всех объектов с последующим считыванием.
На мой взгляд это не очень правильно, т.к. "искать" мне никого не надо. Возможно есть более гуманный способ простого перебора объектов?

Также я просмотрел документацию и большинство примеров C#, поставляемых вместе с SDK, но все они предлагают работу с графическими компонентами WinForms и не содержат какой-либо похожей логики.
Спасибо.
 
Добрый день.
Это и есть самый простой способ перебора. Чтобы перебрать все объекты карты, не устанавливайте никакие параметры фильтрации.
 
Спасибо. Да, такой подход действительно перебирает все классифицированные объекты на чертеже, но почему-то пропускает неклассифицированные.
В документации я не нашел способа для снятия фильтрации с таких объектов. Вот пример моего кода:
Код
// Получаем "итератор" без параметров фильтрации
private static axMapFind GetDrawingReader(string sitPath)
{
   var mapView = new axcMapView();
   mapView.MapOpen(sitPath, false);

   var mapObjFind = new axMapObj { cMapView = mapView.C_CONTAINER };
   var mapFind = new axMapFind
   {
      cMapView = mapView.C_CONTAINER,
      cMapObj = mapObjFind.C_CONTAINER,
      Active = true
   };

   return mapFind;
}

// Перебираем все объекты, согласно примерам
private void ReadObjects(axMapFind mapFind)
{
   mapFind.first();
   while (!mapFind.Eof)
   {
      axMapObj mapObj = mapFind.cMapObj;
      mapFind.Next();
   }
}

Создать чертеж с неклассифицированными объектами можно следующим способом:
  1. Создать пустую карту
  2. Открыть панель рисования (F4) и выбрать "Нанесение линии"
  3. Нарисовать полилинию
  4. Сохранить как карту sit
При этом сама ГИС Панорама вполне корректно воспринимает такие объекты, как при подсчете, так и при редактировании.
Как мне добиться такого же эффекта?
 
На сколько понимаю, речь идет о графических объектах.

// Установить признак отбора графических объектов по обобщенным условиям поиска
// hselect - условия поиска/отображения
// flag = 0 - отбор по "общему" фильтру,
//        1 - отобрать только графические объекты,
//        2 - не отбирать графические объекты.

_MAPIMP void _MAPAPI mapSetDrawObjectsFlag(HSELECT hselect, long int flag);
 
Цитата
На сколько понимаю, речь идет о графических объектах.
Да, все объекты являются графическими (обычные объекты на карте), просто одни имеют код классификатора, а другие - нет (см. скриншот).
Так вот последние в выборку никак не попадают.

Я использую GIS ToolKit Active и в документации по фильтрации объектов никаких похожих настроек не нашел http://help.gisserver.ru/_extra/axGisTool/axGisTool/aimapselect.html
screen.png (29.18 КБ)
 
Цитата
Я использую GIS ToolKit Active и в документации по фильтрации объектов никаких похожих настроек не нашел <noindex>http://help.gisserver.ru/_extra/axGisTool/axGisTool/aimapselect.html</noindex>

Да, в настоящее время соответствующего свойства нет в aiMapSelect.
В какой среде Вы используете GIS ToolKit Active? У Вас есть возможность вызывать функции MAPAPI из ГИС-ядра?
 
Цитата
Денис Вицко написал:
В какой среде Вы используете GIS ToolKit Active? У Вас есть возможность вызывать функции MAPAPI из ГИС-ядра?
  1. MS Visual Studio + C#
  2. Я не знаю. Если есть какая-нибудь инструкция/примеры, то смогу вызвать.
 
Цитата
Robespierre написал:
Цитата
Денис Вицко написал:
В какой среде Вы используете GIS ToolKit Active? У Вас есть возможность вызывать функции MAPAPI из ГИС-ядра?
MS Visual Studio + C#
 Я не знаю. Если есть какая-нибудь инструкция/примеры, то смогу вызвать.

В C# есть возможность вызывать API-функцию напрямую из ГИС-ядра с помощью DllImport.
Функцию, которую Вам надо вызвать Вам подсказал Роман выше.
Первым параметром в нее надо передать Ваш aiMapSelect.SelectHandle
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности