[QUOTE]
Анатолий Рогатнев написал:
Как выделить объекты мне понятно .
А вот как выделенные объекты найти, используя ActiveX в 1С8.3, и внести в эти объекты изменения по семантике ? [/QUOTE]
Перебор найденных объектов показан в примере, который у Вас есть:
[QUOTE]
//Пример группового выделения нескольких объектов по области, заданной объектом в axMapObj
Процедура ВыделитьПоОбласти()
карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;
карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
карта1.Rendering = Ложь;
карта_объект.Center();
ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1;
ПоискПоКарте.Active = Ложь;
ПоискПоКарте.FindPoint = Ложь;
ПоискПоКарте.cMapSelect.ClearAll();
// код ниже для поиска, а мы будем выделять
ПоискПоКарте.cMapSelect.ClearAll();
ПоискПоКарте.cMapSelect.SiteNumber = 0; // ищем в первой - основной карте
ПоискПоКарте.cMapSelect.UnselectSeekArea(-1); // сбросим область если была
// Для примера включим в поиск только объекты с локализацией "векторный" и "подпись"
ПоискПоКарте.cMapSelect.Local_set(-1, Ложь);
ПоискПоКарте.cMapSelect.Local_set(4, Истина);
ПоискПоКарте.cMapSelect.Local_set(3, Истина);
// установим фильтр для всех доступных карт,
// по контуру объекта карта_объект
// по расстоянию от границы = 0
// с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1
// внутри области = 0
// без учета видимости = 0
// операция для выделения = 0
iret = ПоискПоКарте.cMapSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1);
Если iret = 0 Тогда
Сообщить("Область поиска не установлена");
карта1.Rendering = Истина;
Возврат;
КонецЕсли;
ПоискПоКарте.Active = Истина;
ПоискИстина = ПоискПоКарте.First();
номер = 0;
ОчиститьСообщения();
[B]// перебор объектов [/B]
Пока ПоискИстина = Истина Цикл
номер = номер + 1;
НайденныйОбъект = ПоискПоКарте.cMapObj;
локализация = "";
Если НайденныйОбъект.Local = 0 Тогда локализация = "Линия"; КонецЕсли;
Если НайденныйОбъект.Local = 1 Тогда локализация = "Полигон"; КонецЕсли;
Если НайденныйОбъект.Local = 2 Тогда локализация = "Точка"; КонецЕсли;
Если НайденныйОбъект.Local = 3 Тогда локализация = "Подпись"; КонецЕсли;
Если НайденныйОбъект.Local = 4 Тогда локализация = "Векторный"; КонецЕсли;
информация = "" + номер + ". " + локализация + " " + НайденныйОбъект.Key + " (код " + НайденныйОбъект.Excode + ")";
Сообщить(информация);
ПоискИстина = ПоискПоКарте.Next();
КонецЦикла;
карта1.SetViewSelectedEx(Ложь, 0);
карта1.SetObjSelectedEx(ПоискПоКарте.cMapSelect, 255, Истина);
карта1.Rendering = Истина;
КонецПроцедуры
[/QUOTE]
Для чтения и записи свойств объекта (метрики, семантики, условного знака), как Вы уже знаете, предназначен компонент [URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/tmapfind_mapobj.html]axMapObj[/URL].
Объект, на который настроен тот axMapObj (в примере - НайденныйОбъект), который используется в axMapFind (в примере - ПоискПоКарте.cMapObj), пока он используется в цикле перебора найденных объектов напрямую редактировать не стоит, так как это может нарушить список найденных объектов.
Поэтому следует использовать еще один экземпляр axMapObj, который в цикле перебора объекта настраивать на очередной найденный объект карты, после чего можно добавлять/удалять/редактировать его метрику ([URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_metric.html]axMapObj.Metric[/URL]) и/или семантику ([URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_semantic.html]axMapObj.Semantic[/URL]).
После редактирования объекта сохранить его на карте - [URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/axmapobj_commitobject.html]axMapObj.CommitObject[/URL].
Настроить axMapObj (2) на объект карты, который уже установлен в другом axMapObj (1), проще всего так:
[CODE]axMapObj2.Set_ObjHandle(axMapObj1.Get_ObjHandle());[/CODE]
[B]Примерно так [/B]будет выглядеть код редактирования объектов, найденных по каким-то условиям (модификация кода из примера выше):
[QUOTE]
// Разместить axMapObj2 на форме или создать динамически и настроить на axMapView
редактируемый_объект = ЭтаФорма.ЭлементыФормы.axMapObj2;
[B]// перебор объектов [/B]
Пока ПоискИстина = Истина Цикл
номер = номер + 1;
НайденныйОбъект = ПоискПоКарте.cMapObj;
локализация = "";
Если НайденныйОбъект.Local = 0 Тогда локализация = "Линия"; КонецЕсли;
Если НайденныйОбъект.Local = 1 Тогда локализация = "Полигон"; КонецЕсли;
Если НайденныйОбъект.Local = 2 Тогда локализация = "Точка"; КонецЕсли;
Если НайденныйОбъект.Local = 3 Тогда локализация = "Подпись"; КонецЕсли;
Если НайденныйОбъект.Local = 4 Тогда локализация = "Векторный"; КонецЕсли;
информация = "" + номер + ". " + локализация + " " + НайденныйОбъект.Key + " (код " + НайденныйОбъект.Excode + ")";
Сообщить(информация);
[B] // Настроиться на текущий найденный объект карты
редактируемый_объект.Set_ObjHandle(НайденныйОбъект.Get_ObjHandle());
// Внести изменения в текущий найденный объект карты
редактируемый_объект.Semantic.DeleteByCode(9, Истина); // например, удалить семантику 9 (собственное название)
редактируемый_объект.Semantic.AddWithValue(9, "Новое значение"); // добавить семантику 9 (собственное название) с новым значением
// Сохранить отредактированный объект на карту
редактируемый_объект.CommitObject();[/B]
ПоискИстина = ПоискПоКарте.Next();
КонецЦикла;
[/QUOTE]