Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Segmentlänge eines Objektes bestimmen

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:  Segmentlänge eines Objektes bestimmen (1808 mal gelesen)
Martin Kugler
Mitglied
Dipl.-Ing.


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

Beiträge: 21
Registriert: 05.04.2005

Architecture 2009

erstellt am: 24. Nov. 2005 13:05    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 !

Wir wollen auf einem vorhandenen Objekt ( z.B. einer LWPolyline ) einen Punkt setzen und von diesem Punkt aus die Länge bis zum Ende des Objektes bestimmen.
Funktioniert das in ACAD ? Unsere bisherigen Versuche waren leider erfolglos.

Liebe Grüße
Martin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 24. Nov. 2005 13:09    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 Martin Kugler 10 Unities + Antwort hilfreich

Randbemerkung:
.. in Lisp läßt es sich rel. einfach über die vlax-curve.. Funktionen realisieren.

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin Kugler
Mitglied
Dipl.-Ing.


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

Beiträge: 21
Registriert: 05.04.2005

Architecture 2009

erstellt am: 24. Nov. 2005 13: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 !

Danke für die schnelle Antwort, aber wir benutzen lediglich VBA. Gibt es  da Funktionen um unser Problem zu lösen?

Martin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 24. Nov. 2005 13:29    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 Martin Kugler 10 Unities + Antwort hilfreich

IMHO nicht, aber dafür lassen sich schöne Dialogfenster erstellen 

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 24. Nov. 2005 14:00    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 Martin Kugler 10 Unities + Antwort hilfreich

Hallo Martin,

auf die schnelle gibt's da nichts. Wir verwenden eine eigene VB Klasse die Punkte auf beliebigen Stationen einer Polylinie rechnet und umgekehrt. Das zu programmieren ist aber schon ein riesen Aufwand.

Ein Würgaround könnte so aussehen.
- Polylinie kopieren.  (Object.copy)
- Polylinie an deinem Punkt brechen
- Länge abfragen (object.length)

Müsste man auch in VBA hinkriegen

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin Kugler
Mitglied
Dipl.-Ing.


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

Beiträge: 21
Registriert: 05.04.2005

Architecture 2009

erstellt am: 25. Nov. 2005 11:43    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 Stelli !

Danke für deine Antwort ! Wie breche ich denn ein Objekt an einer bestimmten Stelle? Mit ".Explode" kann ich das Objekt ja nur in seine Subentities zerlegen. Gibt es da noch eine Funktion?

Liebe Grüße
Martin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 25. Nov. 2005 12:25    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 Martin Kugler 10 Unities + Antwort hilfreich

sendcommand und "_break"

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Nov. 2005 12:50    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 Martin Kugler 10 Unities + Antwort hilfreich

Hallo Martin,

wie sehen denn deine Polylinien aus ?
Wenn es nur gerade Segmente sind kannst du dir schnell eine Funktion basteln. Wenn allerdings Krümmungen drin sind wird's schwierig.

Liegt der Punkt genau auf der Linien (mit Fang gesetzt) oder gar auf einem Knickpunkt?

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin Kugler
Mitglied
Dipl.-Ing.


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

Beiträge: 21
Registriert: 05.04.2005

Architecture 2009

erstellt am: 25. Nov. 2005 13:40    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 Stelli !

Wir benutzen eine LWPolyline mit Krümmungen. Der Punkt soll auf der Linie, aber an einer beliebeigen Stelle liegen.

Martin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Nov. 2005 14:19    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 Martin Kugler 10 Unities + Antwort hilfreich

Hallo Martin,

dann bau dir doch selber eine Funktion/Klasse. Ich schreib mal ein Grundgerüst auf.

Diese Daten werden für einen Punkt der Linie gespeichert

Code:

' Modul_Global
' Punkte der Linie/Polylinie
Public Type Kpunkte
    y As Double
    x As Double
    Z As Double
    Richtung As Double
    Station As Double
    Bulge As Double
    ' Entfernung zum ersten Punkt
    EntfP1 As Double
End Type


Rumpf der Klasse mit der Methode die Polyliniepunkte abzufüllen und zu speichern
Code:

' Klasse_Ortho
Option Explicit

Dim lng_AnzPunkte As Long
Dim Punkte() As Kpunkte
Dim Länge As Double

Private Sub Class_Initialize()
    Dim Punkte(0) As Kpunkte
    lng_AnzPunkte = 0   
End Sub

Public Sub AddPoint(y As Double, x As Double, Bulge As Double)
    Dim dy As Double
    Dim dx As Double
    Dim STrecke As Double
    Dim Raduis As Double
    Dim winkel As Double
    Dim h As Double
    Dim Umfang As Double
    Dim Bogen As Double
    Dim Radius As Double
    Dim EntfS1 As Double
   
    lng_AnzPunkte = lng_AnzPunkte + 1
    ReDim Preserve Punkte(lng_AnzPunkte) As Kpunkte
    Punkte(lng_AnzPunkte).y = y
    Punkte(lng_AnzPunkte).x = x
    Punkte(lng_AnzPunkte).Bulge = Bulge
   
    If lng_AnzPunkte > 1 Then
        ' ...
        dy = Punkte(lng_AnzPunkte).y - Punkte(lng_AnzPunkte - 1).y
        dx = Punkte(lng_AnzPunkte).x - Punkte(lng_AnzPunkte - 1).x
     
        STrecke = Sqr(dy * dy + dx * dx)
        '...
        If Punkte(lng_AnzPunkte - 1).Bulge = 0 Then
            'Gerade
            Länge = Länge + STrecke
            Punkte(lng_AnzPunkte).Station = Länge
        Else
            ' Kreisbogen
            h = Abs((STrecke / 2) * Punkte(lng_AnzPunkte - 1).Bulge)
            Radius = Abs(STrecke * (1 + Punkte(lng_AnzPunkte - 1).Bulge * Punkte(lng_AnzPunkte - 1).Bulge) / (4 * Punkte(lng_AnzPunkte - 1).Bulge))
           
            winkel = Atn((STrecke / 2) / (Radius - h))
            Umfang = 2 * 3.141593 * Radius
            ' ...
            Bogen = Abs(Umfang / 400 * winkel)
            Länge = Länge + Bogen
            Punkte(lng_AnzPunkte).Station = Länge
        End If
    Else
      Punkte(lng_AnzPunkte).Station = 0
      Punkte(lng_AnzPunkte).Bulge = Bulge
    End If
End Sub



Übergabe der Punkte an die Klasse
Code:

    Dim LinieTmp As cls_Ortho
    ...
    Punkte = obj_ACAD_Entity.Coordinates
 
    ' Punkte auf Doublefeld
    ReDim dbl_Punkte(UBound(Punkte))
    For i = 0 To UBound(Punkte)
        dbl_Punkte(i) = Punkte(i)
    Next i

 
    For i = 0 To UBound(dbl_Punkte) Step 2
      LinieTmp.AddPoint dbl_Punkte(i), dbl_Punkte(i + 1), obj_ACAD_Entity.GetBulge(Int(i / 2))
    Next i
    If obj_ACAD_Entity.Closed Then
        ' ersten Punkt hinten anhängen
        LinieTmp.AddPoint dbl_Punkte(0), dbl_Punkte(1), 0
    End If



Jetzt brauchst du dir nur noch die Funktion in die Klasse einbauen
, die den Punkt auf die Liniensegmente umformt. Dafür durchläufst du in einer Schleife alle Linienteile und schaust ob der Punkt innerhalb der Linie liegt. Da in der Klasse an jedem Punkt die Station gespeichert ist hast du so sehr leicht die Länge in jede Richtung.

Stelli

PS: Was ist den aus dem Listindex Problem geworden ?
Rückmeldungen sind immer gut

------------------
Warum lisp'eln wenn's auch anders geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin Kugler
Mitglied
Dipl.-Ing.


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

Beiträge: 21
Registriert: 05.04.2005

Architecture 2009

erstellt am: 25. Nov. 2005 14:34    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 Stelli !

Danke für die ausführliche Antwort !    Ich werde deinen Vorschlag mal ausprobieren.

Das Problem mit dem ListIndex hat sich ganz schnell gelöst, nachdem ich die Zählvariable um eins verringert habe  . Hätte ich ja auch selber drauf kommen können, aber die ListIndex - Funktion erzeugt wohl keine Fehlermeldung der Art "... Out of Index".
Auch dafür nochmal mein ganz herzliches Dankeschön !

Liebe Grüße
Martin

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