| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Längenermittlung von Polylinien (1589 mal gelesen)
|
hendersson Mitglied GeoInformatiker
Beiträge: 27 Registriert: 12.08.2004
|
erstellt am: 12. Aug. 2004 16:10 <-- editieren / zitieren --> Unities abgeben:
Hallochen zusammen, das hier ist eine ganz alte Sache ... und ich Rindvieh komme nicht dahinter Folgendes: Ich will eine Längenermittlung für viele viele Polylines in VBA durchführen. Die polylines werden bereits automatisch mit Hilfe von Filtern in einen Auswahlsatz übernommen und konnen mit einer FOR-NEXT Schleife über .item einzeln angesprochen werden. Was ich nun machen will/muß: Ich will mit .coordinates für jede Polyline die Stützpunkte (vertex) ermitteln und über diese dann die Teillängen berechnen lassen. Mein Problem ist: wie komme ich an dies vertex ran??? Es ist bestimmt ein ganz ganz alter Hut, deshalb Asche auf mein Haupt, denn irgendjemand weiß es bestimmt. ---------------------------------------------------------------------- If ELTlayer(zaehler) = "ELT_Hausanschlußkabel" Then FilterType1(0) = -4 FilterData1(0) = "<AND" FilterType1(1) = 8 FilterData1(1) = ELTlayer(zaehler) FilterType1(2) = 0 FilterData1(2) = "Polylinie" FilterType1(3) = -4 FilterData1(3) = "AND>" On Error Resume Next If TypeName(ThisDrawing.SelectionSets("Auswahl1")) = "Nothing" Then ThisDrawing.SelectionSets.Add "Auswahl1" End If Set AcSSets = ThisDrawing.SelectionSets("Auswahl1") AcSSets.Clear AcSSets.Select (acSelectionSetAll), , , FilterType, FilterData Objektanzahl = AcSSets.Count '---------------------------------------------- 'hier soll der neue Code hin '---------------------------------------------- TextBox1.Value = Objektanzahl End If ------------------ ---------------------------- .~. /V\ L I N U X /( )\ >Phear the Penguin< ^^-^^ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 13. Aug. 2004 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für hendersson
z.B.: vt = OBJECT.Coordinates das gibt dir dann ein array mit den vertex zurück vt(0)=97.8498 vt(1)=70.8193 vt2)=129.24 vt(3)=216.379 vt(0) und vt(1) = x und y vom startpunkt vt(2) und vt(3) = x und y vom 1. Kontrollpunkt vt(4) und vt(5) = x und y vom 2. Kontrollpunkt usw.. ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 13. Aug. 2004 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für hendersson
Hallo Hendersson, aber warum diesen Aufwandtreiben. Ich habe eben noch einmal im ActiveX-Objektmodell nachgesehen, das Polyline-Object bietet doch die Eigenschaft Lenght an. Brauch also nur noch abgefragt werden, also nix rechnen. (acad 2004) Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 13. Aug. 2004 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für hendersson
Hallo Holger ! ich such mir diese Methoden,Eigenschaften immer in Lisp mit (vl-dump-object) da wirs es anscheinend nicht aufgeführt ; IAcadLWPolyline: AutoCAD Lightweight Polyline-Schnittstelle (optimierte Polylinie) ; Eigenschaftswerte: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00a99b84> ; Area (RO) = 26976.2 ; Closed = 0 ; Color = 256 ; ConstantWidth = 0.0 ; Coordinate = ...Indizierter Inhalt wird nicht angezeigt... ; Coordinates = (97.8498 70.8193 129.24 216.379 240.578 102.676 ... ) ; Document (RO) = #<VLA-OBJECT IAcadDocument 00fa082c> ; Elevation = 0.0 ; Handle (RO) = "2B" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00ffe214> ; Layer = "0" ; Linetype = "ByLayer" ; LinetypeGeneration = 0 ; LinetypeScale = 1.0 ; Lineweight = -1 ; Normal = (0.0 0.0 1.0) ; ObjectID (RO) = 1074171224 ; ObjectName (RO) = "AcDbPolyline" ; OwnerID (RO) = 1074171128 ; PlotStyleName = "ByLayer" ; Thickness = 0.0 ; Visible = -1 ; Unterstützte Methoden: ; AddVertex (2) ; ArrayPolar (3) ; ArrayRectangular (6) ; Copy () ; Delete () ; Explode () ; GetBoundingBox (2) ; GetBulge (1) ; GetExtensionDictionary () ; GetWidth (3) ; GetXData (3) ; Highlight (1) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; Offset (1) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetBulge (2) ; SetWidth (3) ; SetXData (2) ; TransformBy (1) ; Update () und (vlax-get-property pl "LENGHT") gibt folgende Fehlermeldung zurück ; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: LENGHT
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hendersson Mitglied GeoInformatiker
Beiträge: 27 Registriert: 12.08.2004
|
erstellt am: 13. Aug. 2004 12:12 <-- editieren / zitieren --> Unities abgeben:
Hallo fuchsi und holger, danke für die infos. den ersten weg habe ich gestern auch noch ausgeknobelt, trotzdem natürlich danke für die fixe hilfe. die length eigenschaft wäre eine dufte sache, doch leider hat unser kunde map 5, was dummerweise auf acad2k2 basiert. trotzdem auch dir danke für den hinweis, irgendwann kommt ein kunde mit einer 2k4er version. klasse hier, wie schnell das ging !!! hendersson ------------------ ---------------------------- .~. /V\ L I N U X /( )\ >Phear the Penguin< ^^-^^ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik
Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 13. Aug. 2004 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für hendersson
hallo zusammen, ich arbeite auch mit der 2004ér aber ich meine mit 2000 ging folgendes auch schon: ... Set objTemp = ThisDrawing.CurrentSpace.AddLightWeightPolyline(dblVerts) ... objTemp.Update ... Dim Laenge1 As Double .. Laenge1 = objTemp.Length Gruß Olli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 13. Aug. 2004 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für hendersson
|
hendersson Mitglied GeoInformatiker
Beiträge: 27 Registriert: 12.08.2004
|
erstellt am: 26. Aug. 2004 15:27 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle, um diesen Thread hiermit zu schließen: Es war natürlich eine ganz einfache Sache und wenn das alles mal läuft...aber lassen wir das. Folgendes brachte die vertex.Koordinaten und damit den Erfolg: 'Array für Stützpunktkoord. der PL Dim varPunktListe As Variant . . . 'Füllt die Punkteliste mit den Koord. der Stützpunkte varPunktListe = TdITElemente(selPL).Coordinates. Und den folgenden Part zur Längenemrittlung (falls es jemanden interessiert): varPunktListe = TdITElemente(selPL).Coordinates 'Setzt den Laufindex für das Koord.-Array auf 0 intSubZaehler2 = 0 ''Beginne Längenermittlung Do While varPunktListe(intSubZaehler2) 'Setzt Teilstrecke einer PL auf 0 dblTs = 0 On Error Resume Next If varPunktListe(intSubZaehler2 + 2) = "" Then Exit Do 'Pythagoras dblDx = varPunktListe(intSubZaehler2 + 2) - varPunktListe(intSubZaehler2) dblDy = varPunktListe(intSubZaehler2 + 3) - varPunktListe(intSubZaehler2 + 1) dblTs = Sqr(dblDx * dblDx + dblDy * dblDy) 'Ermittlung der Gesamtstrecke des Polygonzuges dblGs = dblGs + dblTs 'Erhöhung des Index um 2, da es sich um Koord.-Paare handelt intSubZaehler2 = intSubZaehler2 + 2 Loop Nochmal vielen Dank an das Forum !!! hendersson ------------------ ---------------------------- .~. /V\ L I N U X /( )\ >Phear the Penguin< ^^-^^ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |