RUS  ENG 

Выделение нескольких точек

Страницы: 1
RSS
Выделение нескольких точек
 
Добрый день. Прошу помощи, разрабатываю плагин на C#.
Стоит задача сбора информации по некоторому количеству точек. То есть к примеру:
на карте отображены 5 точек, у каждой свои данные (id, name, value) которые подтягиваются из БД. Следует получить информацию по 3 из них. Я выделяю их, к примеру, инструментом "Выделить областью". Задача состоит в том, что бы получить сумму value по этим 3 точкам.
Подскажите, как можно получить и отобразить информацию?
 
Цитата
Артём Карпенко написал:
Добрый день. Прошу помощи, разрабатываю плагин на C#.
Стоит задача сбора информации по некоторому количеству точек. То есть к примеру:
на карте отображены 5 точек, у каждой свои данные (id, name, value) которые подтягиваются из БД. Следует получить информацию по 3 из них. Я выделяю их, к примеру, инструментом "Выделить областью". Задача состоит в том, что бы получить сумму value по этим 3 точкам.
Подскажите, как можно получить и отобразить информацию?
Добрый день. Как вариант SQL запросом
Код
Sub SumSelected
    
   Set Map = Zulu.ActiveMapDoc

   Set L = Map.Layers.Active
      
   Set R = L.ExecSQL("SELECT Sum(value) WHERE Selected = 1")

   Set DS = R.DataSet

   DS.MoveFirst
         
   MsgBox CStr(Ds.FieldValue(0))
    
End Sub
 
Спасибо, подскажите, а можно ли как-то отследить действие выделения нескольких точек?
Я так понимаю на выделение одного объекта есть ивент:

evMapObjectSelect = 0x10031

Возникает при выделении текущего элемента на карте.

 
Добрый день. Вопрос еще актуален, подскажите пожалуйста ответ на последнее сообщение.
 
Цитата
Артём Карпенко написал:
Добрый день. Вопрос еще актуален, подскажите пожалуйста ответ на последнее сообщение.
Там же:
evMapSelChanged = 0x10042 Возникает при изменении состава выделенных элементов (группы).
 
Не могу понять в чем дело, я отслеживаю два ивента. Двойное нажатие (evMapLButtonDblClk) и изменение состава выделенных элементов evMapSelChanged.
При двойном нажатии ивент ловится в дебаге и я вывожу лог , а когда выделяю несколько точек, то ничего не ловит дебаг и не выводит лог.
Изменено: Артём Карпенко - 23.04.2021 17:30:12
 
https://drive.google.com/file/d/1iB2SJ3BigfGK-ZmaXVWI1Ka58U3BX9xY/view?usp=sharing


try
{
if (EventID == (long)eZuluEvents.evMapLButtonDblClk)
{
sys = MyLayer.AddSymbol(convertX, convertY, 1, 1);
InsertData(sys);
WriteLog("Объект: " + sys + " добавлен на слой");
}
else if (EventID == (long)eZuluEvents.evMapSelChanged)
{
WriteLog("evMapSelChanged");
}
}
 
Цитата
Артём Карпенко написал:
https://drive.google.com/file/d/1iB2SJ3BigfGK-ZmaXVWI1Ka58U3BX9xY/view?usp=sharing


try
{
if (EventID == (long)eZuluEvents.evMapLButtonDblClk)
{
sys = MyLayer.AddSymbol(convertX, convertY, 1, 1);
InsertData(sys);
WriteLog("Объект: " + sys + " добавлен на слой");
}
else if (EventID == (long)eZuluEvents.evMapSelChanged)
{
WriteLog("evMapSelChanged");
}
}
Каким способом выделяете точки?
Пробовал и по одной, и рамкой и по результату запроса. Событие приходит.
А если выводить в лог все события подряд, на выделение что-то придет?
 
Добрый день, не обратил внимание, что в начале метода есть условие:
if (EventID != 0x10012)
return;

Перенес evMapSelChanged в начало метода и все заработало. Спасибо!

Подскажите, а кроме как SQL запросом, можно еще как-то понять какие точки выделены? Может есть какой-то метод который возвращает активные ID?
Изменено: Артём Карпенко - 26.04.2021 17:36:49
 
Цитата
Артём Карпенко написал:
Подскажите, а кроме как SQL запросом, можно еще как-то понять какие точки выделены? Может есть какой-то метод который возвращает активные ID?
SQL запрос в примере был нужен для вычисления суммы по выделенным объектам. А просто коллекцию выделенных объектов можно получить сразу Layer.Selection.ElementKeys
https://www.politerm.com/zuludoc/zuluax/index.html#Layer_Selection.html
https://www.politerm.com/zuludoc/zuluax/index.html#Selection_ElementKeys.html
 
Спасибо, это то, что я искал. Получение ID в массив.
Страницы: 1