From 5ef19be7d017c0033270591bc21247d4cd429e19 Mon Sep 17 00:00:00 2001 From: thyphoonfr Date: Sat, 23 Jul 2016 08:44:52 +0200 Subject: [PATCH 1/2] Vector Drawing Convert all 2D Drawing to Vector Drawing. Add vector pointer Add Load GPX button --- osm.pb | 90 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 33 deletions(-) diff --git a/osm.pb b/osm.pb index 8abffc0..5beb0f7 100644 --- a/osm.pb +++ b/osm.pb @@ -484,15 +484,17 @@ Module OSM LockMutex(OSM\DrawingMutex) If OSM\EmergencyQuit = 0 ;Quit before drawing - StartDrawing(CanvasOutput(OSM\Gadget)) - If IsImage(*Tile\nImage) - DrawImage(ImageID(*Tile\nImage), x, y) - DrawText( x, y, Str(x) + ", " + Str(y)) + StartVectorDrawing(CanvasVectorOutput(OSM\Gadget)) + If IsImage(*Tile\nImage) + MovePathCursor(x,y) + DrawVectorImage(ImageID(*Tile\nImage)) + MovePathCursor(x,y) + DrawVectorText(Str(x) + ", " + Str(y)) Else Debug "Image missing" OSM\Dirty = #True ;Signal that this image is missing so we should have to redraw EndIf - StopDrawing() + StopVectorDrawing() EndIf UnlockMutex(OSM\DrawingMutex) @@ -560,27 +562,42 @@ Module OSM EndProcedure - Procedure DrawTrack() - - Protected Pixel.Pixel - Protected Location.Location - Protected n.i = 0, x.i, y.i - - StartDrawing(CanvasOutput(OSM\Gadget)) - ForEach OSM\track() - n=n+1 - If @OSM\TargetLocation\Latitude<>0 And @OSM\TargetLocation\Longitude<>0 - getPixelCoorfromLocation(@OSM\track(),@Pixel) - x=Pixel\x - y=Pixel\y - If x>0 And y>0 And x0 + + ForEach OSM\track() + If @OSM\TargetLocation\Latitude<>0 And @OSM\TargetLocation\Longitude<>0 + getPixelCoorfromLocation(@OSM\track(),@Pixel) + If ListIndex(OSM\track())=0 + MovePathCursor(Pixel\X,Pixel\Y) + Else + AddPathLine(Pixel\X,Pixel\Y) + EndIf + + EndIf + + Next + VectorSourceColor(RGBA(0, 255, 0, 150)) + StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) + EndIf - Next - StopDrawing() - - EndProcedure + EndProcedure + + Procedure Pointer(x.l,y.l,color.l=#Red) + color=RGBA(255, 0, 0, 255) + VectorSourceColor(color) + MovePathCursor(x, y) + AddPathLine(-8,-16,#PB_Path_Relative) + AddPathCircle(8,0,8,180,0,#PB_Path_Relative) + AddPathLine(-8,16,#PB_Path_Relative) + ;FillPath(#PB_Path_Preserve) + ;ClipPath(#PB_Path_Preserve) + AddPathCircle(0,-16,5,0,360,#PB_Path_Relative) + VectorSourceColor(color) + FillPath(#PB_Path_Preserve):VectorSourceColor(RGBA(0, 0, 0, 255)):StrokePath(1) + EndProcedure Procedure DrawingThread(Null) @@ -595,10 +612,10 @@ Module OSM DrawTiles() LockMutex(OSM\DrawingMutex) - StartDrawing(CanvasOutput(OSM\Gadget)) - ;DrawTrack() - Circle(CenterX, CenterY, 5, #Red) - StopDrawing() + StartVectorDrawing(CanvasVectorOutput(OSM\Gadget)) + DrawTrack() + Pointer(CenterX, CenterY, #Red) + StopVectorDrawing() UnlockMutex(OSM\DrawingMutex) UnlockMutex(OSM\DrawingThreadMutex) @@ -720,6 +737,9 @@ Module OSM EndProcedure EndModule + +;Demonstration +CompilerIf #PB_Compiler_IsMainFile Enumeration #Window_0 #Map @@ -737,6 +757,7 @@ Enumeration #Text_4 #String_0 #String_1 + #Gdt_LoadGpx EndEnumeration ;- Main @@ -760,11 +781,12 @@ If OpenWindow(#Window_0, 260, 225, 700, 571, "OpenStreetMap", #PB_Window_System StringGadget(#String_0, 600, 230, 90, 20, "") TextGadget(#Text_4, 530, 250, 60, 15, "Longitude : ") StringGadget(#String_1, 600, 250, 90, 20, "") + ButtonGadget(#Gdt_LoadGpx, 530, 280, 150, 30, "Load GPX") Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d OSM::SetLocation(49.04599, 2.03347, 17) - ;OSM::SetLocation(49.0361165, 2.0456982) + Repeat Event = WaitWindowEvent() @@ -779,14 +801,16 @@ If OpenWindow(#Window_0, 260, 225, 700, 571, "OpenStreetMap", #PB_Window_System OSM::SetZoom(1) Case #Button_5 OSM::SetZoom( - 1) + Case #Gdt_LoadGpx + OSM::LoadGpxFile(OpenFileRequester("Choisissez un fichier à charger", "", "*.gpx", 0)) EndSelect EndSelect Until Quit = #True EndIf - +CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x86) -; CursorPosition = 250 -; FirstLine = 231 +; CursorPosition = 783 +; FirstLine = 759 ; Folding = ----- ; EnableUnicode ; EnableThread From bdf8b2a66f9b859b738844ad93f50e13a82b6f7e Mon Sep 17 00:00:00 2001 From: thyphoonfr Date: Sat, 23 Jul 2016 20:13:10 +0200 Subject: [PATCH 2/2] Add CallBack when Move Add SetCallBackLocation(CallBackLocation.i) to send Location when you move the map --- osm.pb | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/osm.pb b/osm.pb index 5beb0f7..73539e3 100644 --- a/osm.pb +++ b/osm.pb @@ -26,6 +26,7 @@ DeclareModule OSM Declare SetLocation(latitude.d, longitude.d, zoom = 15) Declare DrawingThread(Null) Declare SetZoom(Zoom.i, mode.i = #PB_Relative) + Declare SetCallBackLocation(*CallBackLocation) Declare LoadGpxFile(file.s); EndDeclareModule @@ -80,6 +81,8 @@ Module OSM TargetLocation.Location ; Latitude and Longitude from focus point TargetTile.Tile ; Focus Tile coord + CallBackLocation.i ; @Procedure(latitude.d,lontitude.d) + Position.Pixel ; Actual focus Point coords in pixels DeltaX.i DeltaY.i @@ -666,6 +669,10 @@ Module OSM EndProcedure + + Procedure SetCallBackLocation(CallBackLocation.i) + OSM\CallBackLocation=CallBackLocation + EndProcedure Procedure Event(Event.l) Protected Gadget.i @@ -715,6 +722,10 @@ Module OSM CreateThread(@DrawingThread(), Null) OSM\MoveStartingPoint\x = GetGadgetAttribute(OSM\Gadget, #PB_Canvas_MouseX) OSM\MoveStartingPoint\y = GetGadgetAttribute(OSM\Gadget, #PB_Canvas_MouseY) + ;If CallBackLocation send Location to function + If OSM\CallBackLocation>0 + CallFunctionFast(OSM\CallBackLocation,@OSM\TargetLocation) + EndIf EndIf Case #PB_EventType_LeftButtonUp OSM\MoveStartingPoint\x = - 1 @@ -760,6 +771,16 @@ Enumeration #Gdt_LoadGpx EndEnumeration + Structure Location + Longitude.d + Latitude.d + EndStructure + +Procedure UpdateLocation(*Location.Location) + SetGadgetText(#String_0,StrD(*Location\Latitude)) + SetGadgetText(#String_1,StrD(*Location\Longitude)) + ProcedureReturn 0 +EndProcedure ;- Main If OpenWindow(#Window_0, 260, 225, 700, 571, "OpenStreetMap", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) @@ -786,7 +807,7 @@ If OpenWindow(#Window_0, 260, 225, 700, 571, "OpenStreetMap", #PB_Window_System Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d OSM::SetLocation(49.04599, 2.03347, 17) - + OSM::SetCallBackLocation(@UpdateLocation()) Repeat Event = WaitWindowEvent() @@ -809,8 +830,8 @@ If OpenWindow(#Window_0, 260, 225, 700, 571, "OpenStreetMap", #PB_Window_System EndIf CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x86) -; CursorPosition = 783 -; FirstLine = 759 +; CursorPosition = 726 +; FirstLine = 683 ; Folding = ----- ; EnableUnicode ; EnableThread