KCC, je suis désolé mais je pense que je ne pourais pas finir ce que je voulais faire avant que tu n'ai fini toi même ton logiciel
(je me suis engager à faire un logiciel de gestion devis / factures / clients pour mon patron).
Mais je t'ai tout de même fait une proc pour dessiner des fleches "directes" et "coudée", j'essaierais de te faire les "arrondies" aussi :
Code : Tout sélectionner
Enumeration
#ArrowType_Direct
#ArrowType_Kneed
#ArrowType_Rounded
EndEnumeration
Enumeration
#Way_WestToSouth
#Way_EastToSouth
#Way_WestToNorth
#Way_EastToNorth
#Way_SouthToEast
#Way_SouthToWest
#Way_NorthToEast
#Way_NorthToWest
EndEnumeration
Declare.l DrawArrow(width.l, height.l, ax1.l, ay1.l, ax2.l, ay2.l, size.l, type.b, way.b = #Null)
Declare.f GetAngle(x1, y1, x2, y2)
OpenWindow(0, 0, 0, 800, 600, "DrawArrow", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; Fleche directe
CreateImage(0, 200, 200, 32)
StartDrawing(ImageOutput(0))
DrawArrow(200, 200, 20, 20, 180, 180, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(1, 200, 200, 32)
StartDrawing(ImageOutput(1))
DrawArrow(200, 200, 160, 20, 40, 100, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(2, 200, 200, 32)
StartDrawing(ImageOutput(2))
DrawArrow(200, 200, 100, 180, 120, 30, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(3, 200, 200, 32)
StartDrawing(ImageOutput(3))
DrawArrow(200, 200, 180, 180, 80, 80, 20, #ArrowType_Direct)
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
ImageGadget(1, 200, 0, 200, 200, ImageID(1))
ImageGadget(2, 400, 0, 200, 200, ImageID(2))
ImageGadget(3, 600, 0, 200, 200, ImageID(3))
; Fleche coudee
CreateImage(4, 100, 100, 32)
StartDrawing(ImageOutput(4))
DrawArrow(100, 100, 20, 20, 80, 80, 20, #ArrowType_Kneed, #Way_WestToSouth)
StopDrawing()
CreateImage(5, 100, 100, 32)
StartDrawing(ImageOutput(5))
DrawArrow(100, 100, 80, 20, 20, 80, 20, #ArrowType_Kneed, #Way_EastToSouth)
StopDrawing()
CreateImage(6, 100, 100, 32)
StartDrawing(ImageOutput(6))
DrawArrow(100, 100, 80, 80, 20, 20, 20, #ArrowType_Kneed, #Way_EastToNorth)
StopDrawing()
CreateImage(7, 100, 100, 32)
StartDrawing(ImageOutput(7))
DrawArrow(100, 100, 20, 80, 80, 20, 20, #ArrowType_Kneed, #Way_WestToNorth)
StopDrawing()
CreateImage(8, 100, 100, 32)
StartDrawing(ImageOutput(8))
DrawArrow(100, 100, 20, 80, 80, 20, 20, #ArrowType_Kneed, #Way_SouthToEast)
StopDrawing()
CreateImage(9, 100, 100, 32)
StartDrawing(ImageOutput(9))
DrawArrow(100, 100, 80, 80, 20, 20, 20, #ArrowType_Kneed, #Way_SouthToWest)
StopDrawing()
CreateImage(10, 100, 100, 32)
StartDrawing(ImageOutput(10))
DrawArrow(100, 100, 20, 20, 80, 80, 20, #ArrowType_Kneed, #Way_NorthToEast)
StopDrawing()
CreateImage(11, 100, 100, 32)
StartDrawing(ImageOutput(11))
DrawArrow(100, 100, 80, 20, 20, 80, 20, #ArrowType_Kneed, #Way_NorthToWest)
StopDrawing()
ImageGadget(4, 0, 200, 100, 100, ImageID(4))
ImageGadget(5, 100, 200, 100, 100, ImageID(5))
ImageGadget(6, 200, 200, 100, 100, ImageID(6))
ImageGadget(7, 300, 200, 100, 100, ImageID(7))
ImageGadget(8, 400, 200, 100, 100, ImageID(8))
ImageGadget(9, 500, 200, 100, 100, ImageID(9))
ImageGadget(10, 600, 200, 100, 100, ImageID(10))
ImageGadget(11, 700, 200, 100, 100, ImageID(11))
Repeat
Select WaitWindowEvent(2)
Case #WM_CLOSE
Quit = #True
EndSelect
Until Quit = #True
End
Procedure.l DrawArrow(width.l, height.l, ax1.l, ay1.l, ax2.l, ay2.l, size.l, type.b, way.b = #Null)
BorderColor = RGBA(32, 32, 32, 255)
GradientColor1 = RGB(230, 230, 250)
GradientColor2 = RGB(128, 140, 128)
GradientColor3 = RGB(75, 64, 64)
Select type
Case #ArrowType_Kneed
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, width, height, 0)
Select Way
Case #Way_WestToSouth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax1, ay1, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax1, ay1, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
Case #Way_EastToSouth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
Case #Way_WestToNorth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
Case #Way_EastToNorth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
Case #Way_SouthToEast
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
Case #Way_SouthToWest
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
Case #Way_NorthToEast
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
Case #Way_NorthToWest
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
EndSelect
Case #ArrowType_Direct
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, width, height, 0)
a.f = GetAngle(ax1, ay1, ax2, ay2)
x1 = ax1 + Cos(a - #PI / 2) * size / 2
y1 = ay1 + Sin(a - #PI / 2) * size / 2
x2 = ax2 + Cos(a - #PI / 2) * size / 4
y2 = ay2 + Sin(a - #PI / 2) * size / 4
x3 = ax1 + Cos(a + #PI / 2) * size / 2
y3 = ay1 + Sin(a + #PI / 2) * size / 2
x4 = ax2 + Cos(a + #PI / 2) * size / 4
y4 = ay2 + Sin(a + #PI / 2) * size / 4
x5 = ax2 + Cos(a - #PI / 2) * size / 2
y5 = ay2 + Sin(a - #PI / 2) * size / 2
x6 = ax2 + Cos(a + #PI / 2) * size / 2
y6 = ay2 + Sin(a + #PI / 2) * size / 2
If ay1 > ay2
x7 = ax2 + Cos(a + #PI) * size / 2
y7 = ay2 + Sin(a + #PI) * size / 2
Else
x7 = ax2 + Cos(a) * size / 2
y7 = ay2 + Sin(a) * size / 2
EndIf
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
EndSelect
EndProcedure
Procedure.f GetAngle(x1, y1, x2, y2)
If y1 > y2
tmp = y1
y1 = y2
y2 = tmp
tmp = x1
x1 = x2
x2 = tmp
EndIf
x.f = x2 - x1
y.f = y2 - y1
n.f = Sqr(x * x + y * y)
If n : x / n : EndIf
ProcedureReturn ACos(x)
EndProcedure