| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Polylinielänge in 2002 mittels VBA (797 mal gelesen)
|
tomww Mitglied

 Beiträge: 37 Registriert: 27.10.2006
|
erstellt am: 13. Feb. 2007 13:54 <-- editieren / zitieren --> Unities abgeben:         
Guten Tag leider gibt es wohl nicht in ACAD 2002 .perimeter für ACADLWPlylinie ich habe mal eine Berechnungsfunktion gefunden, aber die rechnet leider auch falsch. Gibt es keine Möglichkeit per VBA die Länge der Polylinie zu ermitteln? In ACAD selbst kann ich ja mit List, wie macht das ACAD? Gruß T Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 13. Feb. 2007 14:45 <-- editieren / zitieren --> Unities abgeben:          Nur für tomww
|
tomww Mitglied

 Beiträge: 37 Registriert: 27.10.2006
|
erstellt am: 13. Feb. 2007 15:18 <-- editieren / zitieren --> Unities abgeben:         
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 13. Feb. 2007 15:27 <-- editieren / zitieren --> Unities abgeben:          Nur für tomww
|
tomww Mitglied

 Beiträge: 37 Registriert: 27.10.2006
|
erstellt am: 13. Feb. 2007 15:47 <-- editieren / zitieren --> Unities abgeben:         
Die vorgefunden Funktionen scheinen einen Fehler bei geschlossenem Polylinien zu haben. ich hatte zuerst diese Funktion verwendet, bis mir auffiel, dass es einen Fehler bei geschl. Polylinie produzierte. Die Länge stimmt dann nicht mehr. Gibt es da keine Lösung für geschl. und da am besten, eine Prüfroutine, wenn offen, die eine Fkt, wenn geschl. die andere Fkt. ist das ein Murrks Code:
Public Function PlineLenEX(objPline As _ AcadLWPolyline) As Double Dim intVCnt As Integer Dim varCords As Variant Dim varVert As Variant Dim varCord As Variant Dim varNext As Variant Dim intCrdCnt As Integer Dim dblTemp As Double Dim dblArc As Double Dim dblAng As Double Dim dblChord As Double Dim dblInclAng As Double Dim dblRad As Double Dim intDiv As Integer On Error GoTo Err_Control intDiv = 2 varCords = objPline.Coordinates For Each varVert In varCords intVCnt = intVCnt + 1 Next For intCrdCnt = 0 To intVCnt / intDiv - 1 If intCrdCnt < intVCnt / intDiv - 1 Then varCord = objPline.Coordinate(intCrdCnt) varNext = objPline.Coordinate(intCrdCnt + 1) ElseIf objPline.Closed Then varCord = objPline.Coordinate(intCrdCnt) varNext = objPline.Coordinate(0) Else Exit For End If If objPline.GetBulge(intCrdCnt) = 0 Then 'computes a simple Pythagorean length dblTemp = dblTemp + Sqr((Sqr(((varCord(0) - _ varNext(0)) ^ 2) + ((varCord(1) - varNext(1)) ^ 2)) ^ 2)) Else 'If there is a bulge we need to get an arc length dblChord = Sqr((Sqr(((varCord(0) - varNext(0)) ^ 2) _ + ((varCord(1) - varNext(1)) ^ 2)) ^ 2)) 'Bulge is the tangent of 1/4 of the included angle between 'vertices. So we reverse the process... dblInclAng = Atn(Abs(objPline.GetBulge(intCrdCnt))) * 4 dblAng = (dblInclAng / 2) - ((Atn(1) * 4) / 2) dblRad = (dblChord / 2) / (Cos(dblAng)) dblArc = dblInclAng * dblRad dblTemp = dblTemp + dblArc End If 'End If Next PlineLenEX = dblTemp Exit_Here: Exit Function Err_Control: Select Case Err.Number Case Else MsgBox Err.Description Err.Clear Resume Exit_Here End Select End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 13. Feb. 2007 20:30 <-- editieren / zitieren --> Unities abgeben:          Nur für tomww
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 13. Feb. 2007 20:45 <-- editieren / zitieren --> Unities abgeben:          Nur für tomww
|
tomww Mitglied

 Beiträge: 37 Registriert: 27.10.2006
|
erstellt am: 13. Feb. 2007 21:09 <-- editieren / zitieren --> Unities abgeben:         
Guten Abend klingt alles so einfach .. aber da ich so selten damit arbeite: a) wie erkenne ich per VBA, dass die LWPolylinie geschlossen ist, damit automatisch der erste Punkt wieder dran gehangen wird. b) wenn ich einen sendcommand los schicke, wie erhalte ich den Wert in VBA zurück? ich brauche die Länge um weitere Berechnungen durchführen zu können. hoffe, ihr schüttelt nicht so arg den Kopf LG Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 13. Feb. 2007 21:19 <-- editieren / zitieren --> Unities abgeben:          Nur für tomww
Hallo Tom, du musst einfach nur genau lesen tip doch mal lw. und schau was es da für Eigenschaften gibt. Dim lw As AcadLWPolyline if lw.Closed then Nach Udo's Methode schickst du dein Kommando per Sendkommand ab. Der letzte ermittelte Wert steht da in der erwähnten Systemvariable. Thisdrawing.GetVariable ("Perimeter") Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
tomww Mitglied

 Beiträge: 37 Registriert: 27.10.2006
|
erstellt am: 14. Feb. 2007 09:26 <-- editieren / zitieren --> Unities abgeben:         
|