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

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

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Andrey Gheleznyakov
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 280 След.
GIS ToolKit Active Создание объекта карты в 1С
 
Значение 0x7FFE7FFE - это шестнадцатеричная запись числа. Его надо перевести в десятичное представление. Ниже приведен код для создания точечного объекта Колодец.

// Создание точечного объекта карты, когда уже известен его классификационный код в классификаторе *.rsc
Процедура СоздатьОбъектТочечныйНажатие(Элемент)
   карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;
Если карта1.Active  = Ложь Тогда
Сообщить("Карта не открыта");
Возврат;
КонецЕсли;

   // получим объект управления картой из списка карт
   mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0);
   Если mapsite.GetSiteEditFlag() = 0 Тогда
       Сообщить("Редактирование на карте запрещено");                        
Возврат;
   КонецЕсли;
           
Если ЭтаФорма.ЭлементыФормы.УправлениеКартой.Заголовок = "Управление Активно" Тогда
// Остановить стандартное управление местоположением карты
       УправлениеКартойНажатие(Элемент);
КонецЕсли;

карта_ред = ЭтаФорма.ЭлементыФормы.axMapEditMetric;    
карта_ред.StopAction();  // если было активно, то остановить
карта_ред.cMapView = карта1.C_CONTAINER;

   выбортип1 = ЭтаФорма.ЭлементыФормы.axMapSelectObjectRsc;
выбортип1.cMapView = карта1.C_CONTAINER;

   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
карта_объект.cMapView = карта1.C_CONTAINER;  

карта_ред.cMapObj = карта_объект.C_CONTAINER;

координата = ЭтаФорма.ЭлементыФормы.axMapPoint1;
координата.cMapView = карта1.C_CONTAINER;  
карта_ред.cMapPoint = координата.C_CONTAINER;;

//создадим пустую метрику  
IDDOUBLE2 = 2147254268; // = $7FFC7FFCс плавающей запятой двойной точностью          
OL_MARK   = 2;        // точечный объект
Тип_объекта = 31632000; // классификационный код объекта
карта_объект.CreateObject(0, IDDOUBLE2, Ложь, 1, Тип_объекта, OL_MARK);

   emCreate = 1; // создание метрики
карта_ред.MetEditMode = emCreate;

карта1.ViewScale = 25000;

карта_ред.StartAction();  

КонецПроцедуры
GIS ToolKit Active Создание объекта карты в 1С
 
[QUOTE]Анатолий Рогатнев написал:
Пользователю не нужно показывать окно выбора объектов) [/QUOTE]
Если не нужен выбор типа, то Вы сами должны указать параметры создаваемого объекта:
Из документации

axMapEditMetric

Компонент объекта  карты, метрика которого редактируется.

property  cMapObj : axMapObj;

Описание:

Свойство определяет  объект карты, метрика которого редактируется. Если cMapObj не будет настроен на реальный  объект карты, то свойство Active будет всегда выдавать  false.

Таким образом, перед запуском процедуры создания необходимо настроить axMapObj на нужный тип объекта карты:

Из документации

axMapObj

Создать пустой объект  определенного типа.

function CreateObjectByExcode(SiteNumber ,Kind, ExCode, Local :  integer) : integer;

Описание:  

     

Создаётся новый пустой  объект на карте с порядковым номером SiteNumber, с типом метрики Kind, и типом объекта, определяемом  ExCode  и  Local. При ошибке  возвращает 0, иначе идентификатор объекта (integer).

Для справки по параметру Kind:

enum KIND                 // ВИДЫ ФОРМАТОВ МЕТРИКИ

{

 IDLONG2    = 0x7FFE7FFE, // четырехбайтовая целочисленная

 IDDOUBLE2  = 0x7FFC7FFC, // с плавающей запятой двойной точностью

 IDBIGDOUBLE2 = 0x7FFC7FFF, // с плавающей запятой двойной точностью (>= 65535 подобъектов)

 IDLONG3    = 0x7FFA7FFA, // четырехбайтовая целочисленная трехмерная

 IDDOUBLE4  = 0x7FF87FFF, // с плавающей запятой двойной точностью трехмерная и поле M (double)

 IDDOUBLE4F = 0x7FF87FFE, // с плавающей запятой двойной точностью трехмерная и поле F (integer)

 IDDOUBLE3  = 0x7FF87FF8, // с плавающей запятой двойной точностью трехмерная

 IDBAD      = 0x7FF87FF7  // неизвестный вид

};

Изменено: Andrey Gheleznyakov - 27.10.2023 14:50:30
GIS ToolKit Active Создание объекта карты в 1С
 
По части Commit: Вы сами должны его выдать в момент успешного завершения создания или редактирования объекта.
Из документации:

"В зависимости от выбранного режима работы (свойство
MetEditMode) и характера локализации создаваемого (редактируемого) объекта,
редактирование метрики выполняется по-разному.

В режиме создания объектов (MetEditMode = emCreate)  для точечных объектов (axMapObj.Local = OL_MARK) при нажатии правой кнопки мыши на карте, появляется  схематичное изображение создаваемого объекта. Перемещением мыши по карте с  нажатой левой клавишей мыши производиться выбор расположения точечного объекта.  Так как точечный объект должен иметь только одну точку метрики, отжатие кнопки  мыши является завершением процесса создания объекта.

При успешном завершении редактирования (создания) метрики  объекта, новая метрика присваивается объекту, на который настроен компонент  axMapObj, затем вызывается событие OnExecute, свидетельствующее об успешном завершении процесса  редактирования метрики и компонент переводиться в неактивный режим (вызывается  метод StopAction). В противном случае метрика в объект не передается и  событие OnExecute не вызывается."

Вы Commit в событии OnExecute вызывали?

В ответе #76 был пример редактирования метрики с там была процедура записи изменений:

// обработка положительного окончания редактирования
Процедура axMapEditMetricOnExecute(Элемент)
// запишем объект в карту
ЕСЛИ ЭтаФорма.ЭлементыФормы.axMapObj1.Commit() = 0 Тогда
Сообщить("Запись объекта не выполнена");                        

// получим объект управления картой из списка карт
      mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0);
    ЕСЛИ mapsite.GetSiteEditFlag() = 0 Тогда
  Сообщить("Редактирование на карте запрещено");                        
  КонецЕсли;

  Возврат;
КонецЕсли;

Изменено: Andrey Gheleznyakov - 27.10.2023 16:39:38
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Вызвать диалог настройки параметров фильтрации объектов карты и выделить объекты

Процедура ВыделитьДиалогНажатие(Элемент)

карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;
диалог_фильтр = ЭтаФорма.ЭлементыФормы.axMapSelectDialog;

   карта1.SetViewSelectedEx(Ложь, 0);

   iret = диалог_фильтр.Execute(карта1.ViewSelect, Истина);
Если iret = Ложь Тогда
   Возврат;
КонецЕсли;

Если диалог_фильтр.ModalResult <> 12 Тогда // если не "выделить"
   Возврат;
КонецЕсли;

  clRed  = 255;
  карта1.SetViewSelectedEx(Истина, clRed);
КонецПроцедуры
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Процедура ВыделитьПоОбластиНажатие(Элемент)
//Пример группового выделения нескольких объектов по области, заданной другим объектом.
карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;

карта1.Rendering = Ложь; // запретим переисовку, чтобы не моргало изображение карты на экране

карта1.ViewScale = 25000;

   название_карты = "Ногинский район";        

// найдем объект внутри которого ищем
   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
Если карта_объект.SeekObject(название_карты, 38010) = 0 Тогда // кавртал редко застроенный
Сообщить("Объект с номером 38010 не найден");
   Возврат;
КонецЕсли;
карта_объект.Center();

   // код ниже для поиска, а мы будем выделять
//ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1;
//ПоискПоКарте.Active = Ложь;
//ПоискПоКарте.MapSelect.SiteNumber = 0;   // ищем в первой - основной карте
//ПоискПоКарте.MapSelect.UnselectSeekArea(-1);  // сбросим область если была
//ПоискПоКарте.FindPoint = Ложь;            
//ПоискПоКарте.Active = Истина;
//ПоискПоКарте.First() = Истина;

   // установим область по найденному ранее объекту
карта1.ViewSelect.ClearAll();
// установим фильтр для всех доступных карт,
// по контуру объекта карта_объект
// по расстоянию от границы = 0
// с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1
// внутри области = 0
// без учета видимости = 0
// операция для выделения = 1
iret = карта1.ViewSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1);
Если iret = 0 Тогда
Сообщить("Область поиска не установлена");
    карта1.Rendering = Истина;
   Возврат;
КонецЕсли;

clRed  = 255;
   карта1.SetViewSelectedEx(Истина, clRed);

   // разрешим перерисовку
карта1.Rendering = Истина;

КонецПроцедуры
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Что подразумевается под "Выделение произвольной областью"? Координаты произвольной области откуда берутся? Опишите алгоритм действий оператора, который Вы хотите реализовать.
Например, есть компонент получения координат прямоугольной области MapSelectRect. В свойство MapSelect можно установить габариты поиска или координаты области поиска, которые можно взять
из компонента MapObj. Можно выстроить такой алгоритм:
- axMapEditMetric - создается площадной объект (это и будет область поиска), объект в карту не записывается.
- метрика области поиска из axMapEditMetric.MapObj переносится в MapSelect.
Далее можно искать по области, можно выделять по области.

Из документации:

aiMapSelect

Установить параметры  поиска/выделения объектов по области

function SelectSeekArea(SiteNumber: Integer; const aObject:  axMapObj;  

  aDistance: Double; aFilter,  aInside, aVisible, aAction: Integer): Integer;

Описание:

Установить параметры  поиска/выделения объектов по области, метрика которой задается в параметре  aObject. Ограничение устанавливается  только на режим поиска и не влияет на отображение/печать.

Метод принимает  следующие параметры:

SiteNumber     - номер карты в цепочке,  для которой устанавливается ограничение поиска. Если аSiteN = -1 - ограничение установится  для всего списка карт.

aObject  - объект карты (компонент  axMapObj) - область поиска. Координаты  области поиска задаются свойством axMapObj.Metric. aObject не обязан реально существовать  на карте (достаточно динамически создать экземпляр axMapObj, добавить в него метрику).  После вызова метода aObject можно удалить.  Объект карты  может находиться на любой карте из списка.

aDistance  - расстояние от границы  области поиска в метрах.

aAction    - предстоящая операция по  области : выделение/поиск (1/0). Если указано выделение, то будет заполнен  список выделенных объектов, которые можно выделить цветом при отображении карты  (axcMapView.SetViewSelected).

aFillter     - учитывать/не  учитывать(1/0) фильтр объектов, уже установленных в axMapSelect.

aInside    - границы поиска  объектов по области:

0 - внутри области по расстоянию от заданного  объекта;

1 - внутри области от заданного объекта, включая  пересечение границы,

    если задано расстояние, то с учетом  расстояния;

2 - целиком внутри области без касания или  пересечения границы;

4 - целиком снаружи области без касания или  пересечения границы.

aVisible   - с учетом/без учета(1/0)  видимости объектов на карте. Режим - с учетом видимости объектов карты имеет  смысл только в том случае, если для карты было выполнено ограничение перечня  отображаемых объектов карты (используя свойство axcMapView.ViewSelect).

При ошибке метод  возвращает ноль иначе количество карт, для которых ограничения на условия поиска  успешно установлены.

1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Пример на 1С

Процедура Выделить3ОбъектаНажатие(Элемент)
// Пример группового выделения нескольких объектов
// Выделить три объекта, зная название карты и номера объектов
карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;

   карта1.ViewSelect.ClearSampleAll(); // очистим параметры поиска

   название_карты = "Ногинский район";        
   icount = 0;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 104007); // автодорога
Если ret = 0 Тогда
Сообщить("Объект с номером 104007 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 35695); // квартал
Если ret = 0 Тогда
Сообщить("Объект с номером 68512 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 18299); // озеро
Если ret = 0 Тогда
Сообщить("Объект с номером 187140 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

clAqua = 16776960;  
clRed  = 255;
   карта1.SetViewSelectedEx(Истина, clRed);

карта1.ViewScale = 25000;

// спозиционируем первый объект в центр окна
   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
Если карта_объект.SeekObject(название_карты, 104007) <> 0 Тогда
карта_объект.Center();
КонецЕсли;

Сообщить("Выделено " + icount + " объекта(ов)");
КонецПроцедуры
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Пример группового выделения нескольких объектов на языке Паскаль

mvMap - это компонент MapView

procedure TfrmFind.btnSelectGroupClick(Sender: TObject);
var
listname,str : string;
issamp,icount : integer;
ret : integer;
al, at : integer;
begin

listname := "Ногинск(граф дорог)";

mvMap.ViewSelect.ClearSampleAll;
    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB1);
    if ret > 0
      then inc(issamp);

    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB2);
    if ret > 0
      then inc(issamp);

    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB3);
    if ret > 0
      then inc(issamp);

    mvMap.SetViewSelected(true, clAqua);
    icount := mvMap.ViewSelect.GetSampleCount(0,1);
     end
     else mvMap.SetViewSelected(false, clAqua);

    ShowMessage('Выделено ' + inttostr(icount) + ' объекта(ов)');

end;
Изменено: Andrey Gheleznyakov - 26.10.2023 08:27:46
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
За групповое выделение объектов отвечает MapSelect (можно выделить все объекты, доступные в MapSelect методом axMapView.SetViewSelected), а можно выделить по рамке. В axMapSelect можно указать конкретные объекты карты, параметры которых, например, содержатся в справочнике 1С (имя листа и номер или определенная семантика).
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Создание объектов карты различной локализации с помощью axMapEditMetric отражено в теме "GIS ToolKit Active Создание объекта карты в 1С".
Не задавайте абсолютно разные вопросы в одной теме: Выделение объектов - одна тема, Создание объектов - другая.
Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 280 След.



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

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