RUS  ENG 

Выбор на карте типового немасштабир объекта при большом масштабе

Страницы: 1
RSS
Выбор на карте типового немасштабир объекта при большом масштабе
 
Добрый день, не подскажите как можно решить следующую проблему: на карте есть типовой объект (квадрат размером AxB) в его свойствах стоит галка "Не увеличивать больше указанного размера", при больших масштабах карты для того чтобы выбрать объект данного типа необходимо точно попасть в центр квадрата, в противном случае, выбираются примитивы находящиеся по ним. Возможно ли как нить расширить диапазон для MouseClick? Спасибо!
 
Объекты, размеры которых на экране не меняется при изменении масштаба, индексируются только по точке привязки. Если кликнули далеко от точки привязки, то он не заморгает. Расширять диапазон поиска в этом случае - это заниматься перебором объектов. У нас этого нет. Вы можете это сделать, если необходимо.
 
Спасибо за ответ!
 
Попробовал расширить диапазон следующим способом:
Событие MouseLeftUp

iIdMap: integer;
EK: ElementKeys;
L: Layer;
........
L:=oZM.Map.Layers[1];
EK:=L.SelectByType(0,TypeObjectVisible); //ElementKeys типовых объектов режим которых "Видно"
L.Selection.Clear;
for i:=1 to EK.Count do L.Selection.AddElem(EK[i]); //Добавляю их в Selection слоя
iIdBanner:=L.GetClosestElementByXY(RealX,RealY,0,true,nil); //Нахожу ID объекта самого близкого к координатам курсора мыши

Когда объекты расположены примерно в одном месте карты то работает быстро, а вот если разбросаны по всей карте, то ощутимо медленно... Может есть какой нить более оптимальный вариант? Спасибо!
 
Попробуй брать окрестность вокруг мышки и IntersectByContour, а там уже проверять.
 
для того чтобы задать окресность мне необходимо определить текущий размер объекта на карте, данный размер это начальный размер немасштабируемого объекта умноженный на масштаб, я правильно рассуждаю? Как можно поределить размеры объекта AxB при масштабе 1:1? Спасибо.
 
Нужно брать окрестность вокруг мышки, например 5 пикселей. Строить контур, например, круг с радиусом 5 пикселей на масштаб. Потом IntersectByContour. Он проверяет попадание в контур на размеров символа, а точки привязки. Размеры объекта не нужны.
А если все-таки нужн размер 1:1, надо взять у объекта id символа, ElemStyle.SymbolID, потом у символа Symbol.GetBoundsRectangle и в метрах это будет габарит*ElemStyle.SymbolSize
 
Размер 1:1 был нужен для построения контура ввиде квадрата (символьные объекты у меня ето квадраты) при помощи метода contour.fill(4,a[1],b[1]). Если честно, то я не нашел как построить контур ввиде круга, подскажите пожалуйста как ето сделать. Спасибо.
 
Что-то типа.

dim C as Countour
set C = new Contour

for i=0 to 72
C.AddPoint Xc+R*cos(i*5), Yc+R*sin(i*5)
next i
 
Здорово, о таком варианте я даже и не подумал :) Спасибо!
Страницы: 1