CAD Grundgerüst

    • VB.NET

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Loopy.

      CAD Grundgerüst

      hallo,

      ich hab mich mal hingesetzt und versucht ein cad grundgerüst (ein anderer name fällt mir nicht ein) gebastelt.
      den anstoss dazu hat mir loopy
      gegeben.
      zumindest habe ich das so verstanden.

      hier also der code - ihr braucht dazu zwei button

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private mypos As New List(Of Rectangle) 'alle positionen als client koordinaten
      3. Private drawpic As Boolean
      4. Private drawline As Boolean
      5. Private findpic As Boolean
      6. Private lastpos As Point
      7. Private startline As Point
      8. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      9. Me.Button1.Text = "Bilder positionieren"
      10. Me.Button2.Text = "Linien zeichnen"
      11. End Sub
      12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      13. drawpic = True
      14. Me.Text = "Bild positionieren"
      15. End Sub
      16. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      17. findpic = True
      18. Me.Text = "Legen Sie jetzt fest bei welchem Bild die Linie beginnen soll."
      19. End Sub
      20. Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
      21. 'hier das gewählte bild zeichnen
      22. If drawpic = True Then
      23. drawpic = False
      24. 'position speichern
      25. mypos.Add(New Rectangle(e.Location, New Size(30, 30)))
      26. 'alten frame löschen
      27. DrawRFrame(Me.RectangleToScreen(New Rectangle(e.Location, New Size(30, 30))), True)
      28. 'frame fest zeichnen
      29. Graphics.FromHwnd(Me.Handle).DrawRectangle(New Pen(Color.Black, 2), mypos(mypos.Count - 1))
      30. End If
      31. 'hier die linie zeichnen beenden
      32. If drawline = True Then
      33. drawline = False
      34. 'linie wieder entfernen
      35. DrawRLine(Me.PointToScreen(startline), Me.PointToScreen(lastpos))
      36. 'prüfen ob sich die maus wirklich über einem bild befindet
      37. find_pos_arg = e.Location
      38. Dim p As Integer = mypos.FindIndex(AddressOf find_pos)
      39. 'linie zeichnen anstossen
      40. If p <> -1 Then
      41. 'linie fest zeichnen
      42. Graphics.FromHwnd(Me.Handle).DrawLine(New Pen(Color.Black, 2), startline, lastpos)
      43. Me.Text = "Weiter so !"
      44. Else
      45. MessageBox.Show("Sie haben nicht über einem Bild geklickt !")
      46. End If
      47. End If
      48. 'hier prüfen, ob die maus sich über einem gezeichneten rectangle befindet
      49. If findpic = True Then
      50. find_pos_arg = e.Location
      51. Dim p As Integer = mypos.FindIndex(AddressOf find_pos)
      52. 'linie zeichnen anstossen
      53. If p <> -1 Then
      54. drawline = True
      55. startline = mypos(p).Location
      56. lastpos = mypos(p).Location
      57. DrawRLine(Me.PointToScreen(startline), Me.PointToScreen(lastpos))
      58. Me.Text = "Legen Sie jetzt das Bild fest, an welchem die Linie enden soll."
      59. End If
      60. End If
      61. findpic = False
      62. End Sub
      63. Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
      64. If drawpic = True Then
      65. 'reversible frame zeichnen - bildschirmkoordinaten
      66. DrawRFrame(Me.RectangleToScreen(New Rectangle(e.X, e.Y, 30, 30)))
      67. End If
      68. If drawline = True Then
      69. lastpos = e.Location
      70. 'reversible line zeichnen - bildschirmkoordinaten
      71. DrawRLine(Me.PointToScreen(startline), Me.PointToScreen(lastpos))
      72. End If
      73. End Sub
      74. #Region "Draw Reversible Frame and Line"
      75. Private Sub DrawRFrame(ByVal newR As Rectangle, Optional ByVal cl As Boolean = False)
      76. 'die werte hier müssen in bildschrimkoordinaten angegeben werden
      77. Static oldR As Rectangle
      78. 'alten frame löschen
      79. ControlPaint.DrawReversibleFrame(oldR, Color.Black, FrameStyle.Dashed)
      80. 'neuen frame zeichnen - wenn nicht übermalt werden soll
      81. If cl = False Then
      82. ControlPaint.DrawReversibleFrame(newR, Color.Black, FrameStyle.Dashed)
      83. 'zum übermalen merken
      84. oldR = newR
      85. End If
      86. End Sub
      87. Private Sub DrawRLine(ByVal startL As Point, ByVal endL As Point)
      88. 'die werte hier müssen in bildschrimkoordinaten angegeben werden
      89. Static oldL As Point
      90. 'alte linie löschen - wenn nicht beide punkte gleich sind
      91. If startL <> endL Then
      92. ControlPaint.DrawReversibleLine(startL, oldL, Color.Black)
      93. End If
      94. 'neue linie zeichnen
      95. ControlPaint.DrawReversibleLine(startL, endL, Color.Black)
      96. 'zum übermalen merken
      97. oldL = endL
      98. End Sub
      99. #End Region
      100. #Region "suchen und finden"
      101. Private find_pos_arg As Point
      102. Private Function find_pos(ByVal r As Rectangle) As Boolean
      103. If r.X < find_pos_arg.X And r.Right > find_pos_arg.X And _
      104. r.Y < find_pos_arg.Y And r.Bottom > find_pos_arg.Y Then
      105. Return True
      106. Else
      107. Return False
      108. End If
      109. End Function
      110. #End Region
      111. End Class

      kommentare erwünscht

      gruss

      mikeb69