Hallo in die Runde ;-)
ich habe mir heute ein Modul gebastelt, welches mir an jedes Segment einer 3D-Polylinie das jeweilige Gefälle schreibt.
Eventuell hilft es ja dem Ein oder Anderen weiter.
Falls noch Jemand Verbesserungen für den Code hat, immer her damit, bin ja schließlich noch Anfänger
'Dieses Modul berechnet das Gefälle einer 3D-polylinie
Sub Gefälle()
Dim obj As AcadEntity
Dim mitte(0 To 2) As Double
textsize = ThisDrawing.Utility.GetString(0, vbCrLf & "Bitte geben Sie eine TEXTGRÖSSE ein: ")
textsize = Replace(textsize, ".", ",")
' Fehlerbehandlung wenn selectionset vorhanden
On Error Resume Next
Set ssetOBJ = ThisDrawing.SelectionSets.Add("TEST_SSET")
If Err.Number <> 0 Then
ThisDrawing.SelectionSets.Item("TEST_SSET").Delete
Set ssetOBJ = ThisDrawing.SelectionSets.Add("TEST_SSET")
End If
On Error GoTo 0
' Zeichnung aktivieren
AppActivate ThisDrawing.Application.Caption
' Add objects to a selection set by prompting user to select on the screen
ssetOBJ.SelectOnScreen
For Each obj In ssetOBJ
If obj.ObjectName = "AcDb3dPolyline" Then
P = 0
nvertices = (UBound(obj.coordinates) + 1) 'Anzahl der Knickpunkte
KooPoly = obj.coordinates
For P = 0 To nvertices Step 3
On Error GoTo ende
If P + 3 >= nvertices Then
GoTo ende
End If
X1 = KooPoly(P)
Y1 = KooPoly(P + 1)
Z1 = KooPoly(P + 2)
X2 = KooPoly(P + 3)
Y2 = KooPoly(P + 4)
Z2 = KooPoly(P + 5)
Länge = Sqr((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
'Debug.Print Länge
difHöhe = Z2 - Z1
Drehwinkel = Atn((Y2 - Y1) / (X2 - X1))
If Z1 < Z2 Then 'Pfeil nach links oder rechts?
If Drehwinkel < 0 Then
Pfeil = ChrW(8594)
Else
Pfeil = ChrW(8592)
End If
Else
If Drehwinkel < 0 Then
Pfeil = ChrW(8592)
Else
Pfeil = ChrW(8594)
End If
End If
Prozent = Format(Abs((difHöhe / Länge) * 100), "#,##0.00") & "%" & " " & Pfeil
mitte(0) = ((X1 + X2) / 2)
mitte(1) = ((Y1 + Y2) / 2) ' Mittelpunkt des Segments
Set TextObj = ThisDrawing.ModelSpace.AddMText(mitte, 0.1, Prozent) 'Text platzieren
TextObj.Height = textsize 'Textgröße
TextObj.Rotation = Drehwinkel 'Drehwinkel berechnen
TextObj.AttachmentPoint = acAttachmentPointMiddleCenter 'Text ausrichtung Zentriert
TextObj.insertionPoint = mitte 'Text an Position verschieben
TextObj.BackgroundFill = True
Next P
End If
ende:
Next
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP