Здравствуйте, у нас есть чертеж в формате Панорамы, подскажите, какими методами 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();
}
}
Создать чертеж с неклассифицированными объектами можно следующим способом:
Создать пустую карту
Открыть панель рисования (F4) и выбрать "Нанесение линии"
Нарисовать полилинию
Сохранить как карту sit
При этом сама ГИС Панорама вполне корректно воспринимает такие объекты, как при подсчете, так и при редактировании. Как мне добиться такого же эффекта?
На сколько понимаю, речь идет о графических объектах.
// Установить признак отбора графических объектов по обобщенным условиям поиска // hselect - условия поиска/отображения // flag = 0 - отбор по "общему" фильтру, // 1 - отобрать только графические объекты, // 2 - не отбирать графические объекты.
_MAPIMP void _MAPAPI mapSetDrawObjectsFlag(HSELECT hselect, long int flag);
На сколько понимаю, речь идет о графических объектах.
Да, все объекты являются графическими (обычные объекты на карте), просто одни имеют код классификатора, а другие - нет (см. скриншот). Так вот последние в выборку никак не попадают.
Да, в настоящее время соответствующего свойства нет в aiMapSelect. В какой среде Вы используете GIS ToolKit Active? У Вас есть возможность вызывать функции MAPAPI из ГИС-ядра?