Merci G-Rom et Mindphazer. Un peu de code pour voir le résultat dans lequel je trace deux segment et du texte qui va suivre ces deux segments.
Code : Tout sélectionner
Enumeration
#Mainform
EndEnumeration
Define.l Event
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Structure vector2f
x.f
y.f
EndStructure
Procedure.i NewVector2f(x.f = 0 ,y.f = 0)
*v.vector2f = AllocateMemory(SizeOf(vector2f))
If *v
*v\x = x
*v\y = y
ProcedureReturn *v
Else
ProcedureReturn #Null
EndIf
EndProcedure
Procedure FreeVector2f(*v.vector2f)
If *v <> #Null
FreeMemory(*v)
EndIf
EndProcedure
Procedure.i midPoint(*a.vector2f, *b.vector2f)
*v.vector2f = AllocateMemory(SizeOf(vector2f))
If *v
*v\x = ( *a\x + *b\x ) * 0.5
*v\y = ( *a\y + *b\y ) * 0.5
ProcedureReturn *v
Else
ProcedureReturn #Null
EndIf
EndProcedure
; vive les macros...
Macro position(v)
v\x,v\y
EndMacro
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 300, "Texte", WindowStyle)
StartDrawing(WindowOutput(#Mainform))
;1er segment
*A.vector2f = NewVector2f(100 , 100)
*B.vector2f = NewVector2f(200 , 250)
*MidPoint.vector2f = MidPoint(*A, *B)
Circle(position(*A),2,0)
Circle(position(*B),2,0)
Circle(position(*MidPoint), 4, $FF)
LineXY(position(*A), Position(*B), RGB(105, 105, 105))
AngleCalcul.f = (ATan2(*a\x-*b\x, *a\y-*b\y) * 180 / #PI)+180
DrawRotatedText(Position(*A), "Lorem ipsum dolor amet", AngleCalcul*-1, RGB(255, 0, 0))
;2eme segment
*C.vector2f = NewVector2f(450 , 20)
*MidPoint.vector2f = MidPoint(*B, *C)
Circle(position(*C),2,0)
Circle(position(*MidPoint), 4, $FF)
LineXY(position(*B), Position(*C), RGB(105, 105, 105))
AngleCalcul.f = (ATan2(*B\x-*C\x, *B\y-*C\y) * 180 / #PI)+180
DrawRotatedText(Position(*B), "Lorem ipsum dolor amet consectetur adipiscing", AngleCalcul*-1, RGB(255, 0, 0))
StopDrawing()
FreeVector2f(*A)
FreeVector2f(*B)
FreeVector2f(*C)
EndProcedure
Open_MainForm()
Repeat
Event = WaitWindowEvent(10)
Select Event
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
End
EndSelect
ForEver