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

Сергей Викторович (Все сообщения пользователя)

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 73 След.
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Все понятно, Денис.
Спасибо за подробный и развернутый ответ.
Будем из этого исходить.
Да, в следующих версиях ждем,
что в процессе нанесения объекта хотелось бы прилипание к чужой точке,
это вроде есть в ГИС Панорама, понятно что там не простая реализация.
И все же пользователи это ждут.
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Понял так.
Вначале нанес объект на карту, как получиться.
Затем выбрал нужную точку на объекте и изменил ее.
Правильно я понял?

Если понял правильно,
вопрос: можно ли автоматически переместить указатель мыши во время нанесения очередного отрезка площадного объекта,
в точку на карте, соответствующую другим заданным координатам в метрах без автоматической фиксации?
Фиксация будет затем выполнена как обычно по нажатию левой клавиши мыши.
Изменено: Сергей Викторович - 01.10.2020 17:07:59
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
В процессе нанесения нового объекта с помощью объекта TMapEditMetric
очередная точка фиксируется нажатием левой клавиши мыши.
Как получить это событие, чтобы изменить координату зафиксированной точки.

Можно конечно обработать событие по клику мыши на карте

procedure Tform_main.mvMapClick(Sender: TObject);
begin
If EditMode = true then
begin
// Но тогда как прочитать координату последней нанесенной точки? чтобы ее изменить и как изменить?
end;
end;
Изменено: Сергей Викторович - 01.10.2020 16:41:09
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Да, вроде все работает. Спасибо.
Ниже привожу код, может кому понадобиться.

Var
MapTopLeft : TDOUBLEPOINT;
QFrame     : array[1..5] of TDOUBLEPOINT;
QData      : TPLACEDATA;
PointCount : Integer;

procedure PaintQuadrate;
begin
MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
QFrame[1].X := Point3.X+10;
QFrame[1].Y := Point3.Y-10;
QFrame[2].X := Point3.X+10;
QFrame[2].Y := Point3.Y+10;
QFrame[3].X := Point3.X-10;
QFrame[3].Y := Point3.Y+10;
QFrame[4].X := Point3.X-10;
QFrame[4].Y := Point3.Y-10;
QFrame[5].X := Point3.X+10;
QFrame[5].Y := Point3.Y-10;
PointCount := 5;
QData.Points      := @QFrame[1];
QData.PolyCounts  := @PointCount;  // адрес количества точек
QData.Count       := 1; // счетчик контуров

mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle,MapTopLeft,Form,QData,integer(PP_MAP));
end;
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Сделал так:

Image.Color := $00F0F0F0; // black
Image.Thick := 250;       // mkm
Image.Dash  := 1250;      // stroke length
Image.Blank := 500;       // gap length

// Для рисования пунктира
Form.Image := IMG_DOT;  // пунктир
Form.Parm  := @Image;
Form.Mode  := R2_NOT;

Var
MapTopLeft : TDOUBLEPOINT;
Form       : TPAINTPARM;
QFrame     : array[1..5] of TDOUBLEPOINT;

procedure PaintQuadrate;
begin
MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
QFrame[1].X := Point3.X+10;
QFrame[1].Y := Point3.Y-10;
QFrame[2].X := Point3.X+10;
QFrame[2].Y := Point3.Y+10;
QFrame[3].X := Point3.X-10;
QFrame[3].X := Point3.X+10;
QFrame[4].X := Point3.X-10;
QFrame[4].X := Point3.X-10;
QFrame[5].X := Point3.X+10;
QFrame[5].X := Point3.X-10;
mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle,@MapTopLeft,@Form,@QFrame,integer(PP_MAP)); // Компилятор ругается на @MapTopLeft и пишет: Type actual and formal var parametrs must be identical
end;
Изменено: Сергей Викторович - 01.10.2020 10:30:57
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
После того, как мы нашли номер нужной нам физической точки и соответственно ее координаты,
есть ли функция,
которая нарисует вокруг найденной точки квадрат,
чтобы привлечь внимание пользователя,
какая именно найдена ближайшая точка?

Если такой стандартной функции нет,
то просьба подсказать, как написать такую функцию.
Изменено: Сергей Викторович - 30.09.2020 15:18:44
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Да, теперь все работает.
Спасибо большое.
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Сделал так:
Var
Point1                   : TDoublePoint;
Point2                   : TDoublePoint;
Point3                   : TDoublePoint;


procedure Tform_main.mvMapMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
Var
NumPoint : integer;
begin
form_main.mvMap.SetFocus;

If (MouseX = X) and ( MouseY = Y)
then exit;

MapPoint1.PlaceInp := PP_PICTURE;
MapPoint1.SetPoint(X + mvMap.MapLeft, Y + mvMap.MapTop);

If EditMode = true then
begin
Point1.X := MapPoint1.Point.X;
Point1.Y := MapPoint1.Point.Y;
mapSeekSelectNearestObject(mvMap.MapHandle,MapObj2.ObjHandle, @Point1, @Point2,0,0);
MapObj2.Style := OS_SELECT;
MapObj2.Repaint;
form_main.Repaint;
NumPoint := mapSeekNearPoint(MapObj2.ObjHandle,Point2,0);
mapGetPlanePoint(mvMap.MapHandle, @Point3, NumPoint, 0);
sbStatus2.Panels.Items[3].Text := 'NumPoint = '+IntToStr(NumPoint); // Здесь номер точки возвращается хорошо и правильно
sbStatus2.Panels.Items[4].Text := 'X = '+FloatToStr(Point3.X)+'    Y = '+FloatToStr(Point3.Y); // Здесь координаты возвращаются X = 0   Y = 0
end;

Пробовал:
mapGetMapPlanePoint(mvMap.MapHandle, @Point3, NumPoint, 0); // Результат тоже X = 0   Y = 0

Что-то я не так делаю?
Изменено: Сергей Викторович - 25.09.2020 14:37:34
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Понятно.
Как затем определить координаты ближайшей физической точки к этой виртуальной точки контура этого объекта?
Как найти ближайшей к указателю мыши объект, mapSeekSelectNearestObject
 
Все хорошо работает!

procedure Tform_main.mvMapMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
Var
resObj : integer;
Point1 : TDoublePoint;
Point2 : TDoublePoint;
begin
form_main.mvMap.SetFocus;

If (MouseX = X) and ( MouseY = Y)
then exit;

MapPoint1.PlaceInp := PP_PICTURE;
MapPoint1.SetPoint(X + mvMap.MapLeft, Y + mvMap.MapTop);

Point1.X := MapPoint1.Point.X;
Point1.Y := MapPoint1.Point.Y;
resObj := mapSeekSelectNearestObject(mvMap.MapHandle,MapObj2.ObjHandle, @Point1, @Point2,0,0);

Point1, понятно текущие координаты указателя мыши.

Я правильно понимаю, что Point2, это координаты ближайшей, к текущим координатам указателя мыши, точки любого объекта?

Вопрос:

Как присвоить указателю мыши при клике мышью на карте во время нанесения объекта координаты?

Указатель мыши.Координаты := Point2;
Изменено: Сергей Викторович - 25.09.2020 12:59:26
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 73 След.



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

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