Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Längenermittlung von Polylinien

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von hendersson an!   Senden Sie eine Private Message an hendersson  Schreiben Sie einen Gästebucheintrag für hendersson

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 12. Aug. 2004 16:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 13. Aug. 2004 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hendersson 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

ACAD20XX, defun-tools

erstellt am: 13. Aug. 2004 11:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hendersson 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 13. Aug. 2004 12:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hendersson 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von hendersson an!   Senden Sie eine Private Message an hendersson  Schreiben Sie einen Gästebucheintrag für hendersson

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 13. Aug. 2004 12:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von ollibaer2004 an!   Senden Sie eine Private Message an ollibaer2004  Schreiben Sie einen Gästebucheintrag für ollibaer2004

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hendersson 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

ACAD20XX, defun-tools

erstellt am: 13. Aug. 2004 12:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hendersson 10 Unities + Antwort hilfreich

@Olli

das kann schon sein mit der LWPolyline aber nicht mit der Polyline (3dPolyline).

Habe hier aber kein 2000 zur Hand um das zu checken.

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

hendersson
Mitglied
GeoInformatiker


Sehen Sie sich das Profil von hendersson an!   Senden Sie eine Private Message an hendersson  Schreiben Sie einen Gästebucheintrag für hendersson

Beiträge: 27
Registriert: 12.08.2004

erstellt am: 26. Aug. 2004 15:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz