German Wie Maßpfeile drehen ? (DrawLine)

Watchkido1

Active Member
Licensed User
Longtime User
Hi

Ich brauch für meine Schlosser-App viele Maßpfeile.
Ich will aber immer nur die Anfangskoordinaten und Endkoordinaten angeben und dann da einen Maßpfeil haben.
Mal diagonal,
mal waagerecht,
mal senkrecht nach rechts oder links
mal im 23° Winkel...
Ich finde aber keinen Ansatzpunkt wie ich es hinbekomme das sich das, ohne viel Aufwand, ordentlich drehen lässt.

Wo/wie fängt man da an?
Winkelfunktionen usw kenn ich schon... aber das hier sind ja je 2 x und y Koordinaten....

Kann mir da jemand nen Tipp geben?


lg Frank


B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
   
   Dim Unterlage As Panel
   Dim Zeichenblatt As Canvas
'   Dim Rechteck As Rect
   Dim x1,x0,y0, y1, a(4) As Float   
   
End Sub


Sub Activity_Create(FirstTime As Boolean)

   Unterlage.Initialize("Unterlage")
'   Unterlage.Color = Colors.Cyan
   Activity.AddView(Unterlage, 0, 0, 100%x, 100%y)
   
   Zeichenblatt.Initialize(Unterlage)
'   Rechteck.Initialize(100, 100, 200, 200)
   
   ' Daten die aus MAIN. kommen:
'   x(0) = 100dip'100
'   y(0) = 100dip'100
'   x(1) = 200dip'200
'   y(1) = 200dip'200
   
   
   
   a(0) = 1dip'1
   a(1) = 2dip'2
   a(2) = 3dip'3
   
   Zeichenblatt.DrawLine(Main.x(0),Main.y(0),Main.x(1),Main.y(1),Colors.Blue,a(0))
   Zeichenblatt.DrawLine(Main.x(0)+6,Main.y(0)+6,Main.x(0)+3,Main.y(0)+3,Colors.Blue,a(1))
   Zeichenblatt.DrawLine(Main.x(0)+9,Main.y(0)+9,Main.x(0)+6,Main.y(0)+6,Colors.Blue,a(2))
   Zeichenblatt.DrawLine(Main.x(1)-3,Main.y(1)-3,Main.x(1)-6,Main.y(1)-6,Colors.Blue,a(1))
   Zeichenblatt.DrawLine(Main.x(1)-6,Main.y(1)-6,Main.x(1)-9,Main.y(1)-9,Colors.Blue,a(2))
   Zeichenblatt.DrawTextRotated("Strecke A",155dip,145dip,Typeface.DEFAULT,15,Colors.Blue,"CENTER",45)
   
   
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub
 

Attachments

  • DrawLine.zip
    6.3 KB · Views: 164

klaus

Expert
Licensed User
Longtime User
Das kannst Du mit diesem Code machen:
B4X:
Sub DrawArrow(can As Canvas, x As Float, y As Float, l As Float, b As Float, w As Float, col As Int)
    Dim w1, x1, y1 As Float
    Dim path1 As Path
    
    w1 = w + 180 Mod 360
    path1.Initialize(x, y)
    x1 = x + l * CosD(w) + b / 2 * SinD(w1)
    y1 = x + l * CosD(w) - b / 2 * SinD(w1)
    path1.LineTo(x1, y1)
    x1 = x + l * CosD(w) - b / 2 * SinD(w1)
    y1 = x + l * CosD(w) + b / 2 * SinD(w1)
    path1.LineTo(x1, y1)
    can.DrawPath(path1, col, True, 1)
End Sub
can = Canvas zum zeichnen
x = X Koordinate der Spitze des Pfeils
y = Y Koordinate der Spitze des Pfeils
l = Länge des Pfeils
b = Breite des Pfeils
w = Winkel von der Spitze zum anderen Punkt
col = Farbe des Pfeils

Du kannst natürlich die Routine an Deine Bedingungen anpassen.
Es währe möglich eine Routine zu schreiben die ein Linie mit einem oder zwei Pfeilen zeichnet.

Länge und Breite der Pfeile könnten auch generell definiert werden und nicht jedes mal in die Routine übergeben werden.

Beiliegend Dein Projekt mit der Pfeilroutine.

Beste Grüsse.
 

Attachments

  • DrawLineNew.zip
    6.4 KB · Views: 195
Top