Habe mal die relevanten Zeilen herausgezogen, da der gesamte Code zu umfangreich ist. Die Werte ziehe ich aus einer AccessDB, von der aus ich auf ACAD zugreife.
Private Sub TextDrehen()
Dim Punkt(0 To 2) As Double
' Microsoft DAO 3.51 .... unter Verweisen einbinden !!!
Dim rs As DAO.Recordset
' AutoCAD Verweis muss angegeben sein !!
Dim AcadPunkt As AcadPoint
Dim AcadTxt As AcadText
Dim LineObj As AcadLine
Dim pktH(0 To 2) As Double
Dim ya As Double, ye As Double, xa As Double, xe As Double, hl As Double, rw As Double
Dim xb As Double, o As Double, a As Double, ym As Double, xm As Double,
Dim Y1 As Double, X1 As Double, t As Double, t1 As Double, ta As Double,
Dim hb As String, v As String
' Recordset aus dem Formular holen
Set rs = Me.RecordsetClone
' Gibts was in der Tabelle/Ansicht
If rs.RecordCount > 0 Then
' Geh auf ersten
rs.MoveFirst
' Durchlaufe alle Datensätze
While Not rs.EOF
' Hole die Koordinate
ya = rs.Fields("VY")
ye = rs.Fields("NY")
xa = rs.Fields("VX")
xe = rs.Fields("NX")
hl = rs.Fields("Haltungslänge")
rw = rs.Fields("RiWinkel")
hb = rs.Fields("_Protokolle_.neu")
v = rs.Fields("Entwässerungsart")
xb = hl * 0.75
O = (ye - ya) / hl
a = (xe - xa) / hl
ym = ya + O * xb
xm = xa + a * xb
pktH(0) = ym
pktH(1) = xm
pktH(2) = 0
Y1 = ye - ya
X1 = xe - xa
pi = 3.14159265358979
If X1 <> 0 Then
ta = Y1 / X1
t = Atn(ta) * 200 / pi
If t < 0 Then
t1 = t + 200
End If
If Y1 < 0 Then
t1 = t + 200
End If
If t = 0 And X1 < 0 Then
t1 = 200
End If
Else
If Y1 >= 0 Then
t1 = 100
Else
t1 = 300
End If
End If
If v = "Regen" Then
Set AcadTxt = Thisdrawing.ModelSpace.AddText(hb, pktH, 1)
AcadTxt.Color = acWhite
AcadTxt.Layer = "850ABWASSER_BEZ"
AcadTxt.Rotate pktH, t1
rs.MoveNext
End If
Wend
End If
' Alles Klar
' Kopie des Recordsets vernischten
Set rs = Nothing
' Auf Grenzen zoomen
Thisdrawing.Application.ZoomExtents
' ist gleich mit
AcadApp.ZoomAll
' Normal
Screen.MousePointer = 0
End Sub
MfG,geodata
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP