Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Kontrollpunkte beliebiger Polylinie in Variable auslesen

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:  Kontrollpunkte beliebiger Polylinie in Variable auslesen (1252 mal gelesen)
straubi
Mitglied


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

Beiträge: 5
Registriert: 10.08.2010

erstellt am: 10. Aug. 2010 16:48    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 Leute,

ich möchte die Kontrollpunkte einer Polylinie, die ich zuvor auswählen kann, in eine Variable auslesen (eine Liste aller Kontrollpunkte der ausgewählten Polylinie) zur späteren Weiterverwendung. Jede Polylinie soll eine separate Liste erzeugen. Mein Ansatz war wie folgt - funktioniert aber nicht:

(defun c:Test2()
(setq Auswahlsatz (ssget '((0 . "LWPOLYLINE"))))
(setq i1 0)
(repeat (sslength Auswahlsatz)
(setq ename (ssname Auswahlsatz i1))
(setq Elementdetails(entget ename))
(print Elementdetails)

(while(not(=(cdr(assoc 0 St-Elementdetails)) "SEQEND"))
(setq Kontrollpunkte (cdr(assoc 10 Elementdetails)))

(setq ename (cdr(assoc -1 Elementdetails)))
(setq Elementdetails(entget(entnext ename)))

)

(setq i1 (1+ i1))
)

(setq Auswahlsatz nil)
)

Könnt ihr mir helfen?

Gruß Straubi

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

.

erstellt am: 10. Aug. 2010 16:59    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 straubi 10 Unities + Antwort hilfreich

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: 10. Aug. 2010 17: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 Nur für straubi 10 Unities + Antwort hilfreich

Man muss dabei zwischen 2 Arten Plines unterscheiden
POLYLINE (alt) und LWPOLYLINE (neu)


Code:

(defun GetPlineVertexPoints ( ename / edate Punktliste)

  (setq edate (entget ename))
  (cond ;neue Polylinie
        ((= (cdr (assoc 0 edate)) "LWPOLYLINE")
         (foreach n1 edate
           (if (= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste)))
         )
        )
        ; alte Polylinie
        ((= (cdr (assoc 0 edate)) "POLYLINE")
         (while (setq ename (entnext ename))
           (setq edate (entget ename))
           (if (assoc 10 edate) (setq Punktliste (cons (cdr (assoc 10 edate)) Punktliste)))
          )
         )
  )
  (if Punktliste (reverse Punktliste) nil)
)


Rauskommen tutu dabei so eine Liste, die Du in der (ssget "_WP" Punktliste) direkt verwenden kannst
(ich nehme mal an, das ist eien Folgefrage deines vorigen Problems)
((1262.83 997.426) (1635.69 1557.75) (2110.84 862.289) (1605.99 535.982) (1602.69 891.953) (1404.71 684.303) (1556.5 1195.19) (1127.54 509.614))


diese Funktion rufst Du einfach in der Auswahlsatz schelife auf


Code:
(setq Auswahlsatz (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
(setq i1 0)
(repeat (sslength Auswahlsatz)
  (setq ename (ssname Auswahlsatz i1))
  (setq PunktListe (GetPlineVertexPoints  ename))
  ; mach irgendwas mit der Punktliste gespeichert in der Variable Punktliste
  (setq i1 (1+ i1))
)

[Diese Nachricht wurde von fuchsi am 10. Aug. 2010 editiert.]

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: 10. Aug. 2010 18:33    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 straubi 10 Unities + Antwort hilfreich

Korrigierte Fassung
Beid er alten Polylinie muss man auf VERTEX abprüfen

Code:
(defun GetPlineVertexPoints ( ename / edate Punktliste)
  (setq edate (entget ename))
  (cond ;neue Polylinie
        ((= (cdr (assoc 0 edate)) "LWPOLYLINE")
          (foreach n1 edate
            (if (= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste)))
          )
        )
        ; alte Polylinie
        ((= (cdr (assoc 0 edate)) "POLYLINE")
         (while (and (setq ename (entnext ename))
                     (setq edate (entget ename))
                     (= (cdr (assoc 0 edate)) "VERTEX")
                )
                (setq Punktliste (cons (cdr (assoc 10 edate)) Punktliste))
         )
        )
  )
  (if Punktliste (reverse Punktliste) nil)
)


Man sollte halt eine Version doch nicht ungeteste, nur so aus dem Stegreif geschrieben hier posten.

[Diese Nachricht wurde von fuchsi am 10. Aug. 2010 editiert.]

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

straubi
Mitglied


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

Beiträge: 5
Registriert: 10.08.2010

erstellt am: 11. Aug. 2010 09: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 ihre beiden,

das Programm funktioniert so  . Vielen Dank.

Gruß.

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