From b37743bbf44efda0185245c9ad401b576fda4424 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 3 Mar 2025 23:09:08 +0000 Subject: [PATCH] LazMapViewer: MapViewer's FindObjsAtScreenPt now can filter by TGPSObj class type. Issue #39108. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9655 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/lazmapviewer/source/mvgpsobj.pas | 2 +- components/lazmapviewer/source/mvmapviewer.pas | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/components/lazmapviewer/source/mvgpsobj.pas b/components/lazmapviewer/source/mvgpsobj.pas index 111e3ab6e..56aaa2ea4 100644 --- a/components/lazmapviewer/source/mvgpsobj.pas +++ b/components/lazmapviewer/source/mvgpsobj.pas @@ -230,7 +230,7 @@ type out Notfound: TIdArray); procedure GetArea(out Area: TRealArea); override; procedure Draw({%H-}AView: TObject; {%H-}Area: TRealArea); override; - function GetObjectsInArea(const Area: TRealArea; AClass: TGPSObjClass = Nil): TGPSObjList; + function GetObjectsInArea(const Area: TRealArea; AClass: TGPSObjClass = nil): TGPSObjList; function GetIdsArea(const Ids: TIdArray; AIdOwner: integer): TRealArea; function Add(aItem: TGpsObj; AIdOwner: Integer; AZOrder: Integer = 0): Integer; diff --git a/components/lazmapviewer/source/mvmapviewer.pas b/components/lazmapviewer/source/mvmapviewer.pas index 0c76444cc..a9f26e624 100644 --- a/components/lazmapviewer/source/mvmapviewer.pas +++ b/components/lazmapviewer/source/mvmapviewer.pas @@ -654,7 +654,8 @@ type procedure DoOnResize; override; procedure DoZoomChange(Sender: TObject); procedure DoZoomChanging(Sender: TObject; NewZoom: Integer; var Allow: Boolean); - function FindObjsAtScreenPt(X, Y: Integer; ATolerance: Integer; AVisibleOnly: Boolean): TGPSObjArray; + function FindObjsAtScreenPt(X, Y: Integer; ATolerance: Integer; + AVisibleOnly: Boolean; AClass: TGPSObjClass = nil): TGPSObjArray; function IsActive: Boolean; inline; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; @@ -3922,7 +3923,8 @@ begin Engine.Jobqueue.WaitAllJobTerminated(Engine); end; -function TMapView.FindObjsAtScreenPt(X, Y: Integer; ATolerance: Integer; AVisibleOnly: Boolean): TGPSObjArray; +function TMapView.FindObjsAtScreenPt(X, Y: Integer; ATolerance: Integer; + AVisibleOnly: Boolean; AClass: TGPSObjClass = nil): TGPSObjArray; const BLOCK_SIZE = 32; var @@ -3941,7 +3943,7 @@ begin objsCount := 0; for J := 0 to 9 do begin - gpsList := FGPSItems[J].GetObjectsInArea(rArea); + gpsList := FGPSItems[J].GetObjectsInArea(rArea, AClass); try for i := 0 to gpsList.Count-1 do if gpsList[i] is TGPSPoint then