Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Layer von Vertex und Seqend ändern

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:  Layer von Vertex und Seqend ändern (1815 mal gelesen)
Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 06. Nov. 2006 07: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

Servus

Eigentlich gibts ja sowas bereits
(http://www.cad-od.de/downloads.html - Nr.24), aber das scannt anscheinend die ganze Zeichnung (und meine hat jetzt 15MB).
Drum hab ich mir selber was geschrieben, wo ich vorher Objekte wählen kann.

Im Prinzip "funktionierts" - (subst) liefert richtige #elist, aber (entmod) schreibt offensichtlich nix zurück (liefert nil)!

Was ist da falsch?

Code:

(defun c:cleanpoly ( / #aws #awslist #ename #elist #layer)
  (setq #aws (ssget "X" '((0 . "Polyline"))))
  (setq #awslist (f#aws>liste #aws))
  (foreach #ename #awslist
    (print #ename)
    (setq #elist (entget #ename))
    (setq #layer (cdr (assoc 8 #elist)))
    (setq #ename (entnext #ename))
    (while #ename
      (setq #elist (entget #ename))
      (cond
        ( (= "VERTEX" (cdr (assoc 0 #elist)))
          (entmod (subst (cons 8 #layer) (assoc 8 #elist) #elist))
          (setq #ename (entnext #ename))
        )
        ( (= "SEQEND" (cdr (assoc 0 #elist)))
          (entmod (subst (cons 8 #layer) (assoc 8 #elist) #elist))
          (setq #ename nil)
        )
      );cond
    );while
  );foreach
);defun
;--------------------------------------------------------------
(defun f#aws>liste (#aws / #index #awsliste) ;einen Auswahlsatz in eine Liste mit E-Names umwandeln
  (if #aws
    (progn
      (if (/= (type #aws) 'PICKSET)
        (exit)
      )
      (setq #awsliste nil
        #index -1
      )
      (repeat (sslength #aws)
        (progn
          (setq #index (1+ #index))
          (setq #awsliste (append #awsliste (list (ssname #aws #index))))
        );progn
      );repeat
    );progn
    nil
  ) ;if
);defun
;--------------------------------------------------------------
(defun c:cleaninsert ( / #aws #awsliste #ename #layer #elist)
  (princ "\nBlockreferenzen auswählen: ")
  (setq #aws (ssget '((0 . "INSERT"))))
  (if #aws
    (progn
      (setq #awsliste (f#aws>liste #aws))
      (foreach #ename #awsliste
        (setq #layer (cdr (assoc 8 (entget #ename))))
        (while (/= "SEQEND" (cdr (assoc 0 (entget #ename))))
          (setq #ename (entnext #ename))
        );while
        (setq #elist (entget #ename))
        (entmod (subst (cons 8 #layer) (assoc 8 #elist) #elist))
      );foreach
    );progn
  );if
);defun

------------------
Schöne Grüße
Ernst

Meine Homepage

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 06. Nov. 2006 08:39    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 Geos 10 Unities + Antwort hilfreich

Ich habe jetzt keinen Datensatz parat, wo die Layer an den Vertexen unterschiedlich sind, deshalb teste ich das Programm jetzt nicht.
Nur ein paaar überlegungen:
Bei Veränderungen an komplexen Objekten (wie z.B. Polyllinien, solltest du am Eende ein (ENTUPD ename) durchführen (für die Bildschirmaktualisierung).

Ich würde den Vertex auch nur ändern, wenn die Layer unterschiedlich sind (vielleicht noch einen Vergleich einbauen).

Alternativ kann man die Polylinien auch mit _CONVERTPOLY in LW-Polylinien umwandeln (erst hin, dann bei Bedarf wieder zurück - vermutlich sind dann die Vertexüberschreibungen auch weg)

------------------
Mit freundlichem Gruß

Udo Hübner

[Diese Nachricht wurde von CAD-Huebner am 06. Nov. 2006 editiert.]

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: 06. Nov. 2006 09:04    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 Geos 10 Unities + Antwort hilfreich

oder nutz statt
(entmod (subst (cons 8 #layer) (assoc 8 #elist) #elist))
die ActivX-Variante .. wirkt manchmal wunder
(not(vl-catch-all-error-p
      (vl-catch-all-apply
        'vla-put-layer
          (list (vlax-ename->vla-object (cdr(assoc -1 #elist))) #lAYER)
      )
    )
)

------------------
  - 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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 06. Nov. 2006 09:06    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 Geos 10 Unities + Antwort hilfreich

Hallo Ernst,
ich hatte genau dasselbe Problem, warum es so ist, weiß ich nicht, aber ich bin mit "vla-put-layer" zum Erfolg gekommen. Ich habe das in Deinen Code eingebaut.

Code:

(defun c:cleanpoly ( / #aws #awslist #ename #elist #layer)
  (vl-load-com)
  (setq #aws (ssget "X" '((0 . "Polyline"))))
  (setq #awslist (f#aws>liste #aws))
  (foreach #ename #awslist
    (print #ename)
    (setq #elist (entget #ename))
    (setq #layer (cdr (assoc 8 #elist)))
    (setq #ename (entnext #ename))
    (while #ename
      (setq #elist (entget #ename))
      (cond
        ( (= "VERTEX" (cdr (assoc 0 #elist)))
(vla-put-layer (vlax-ename->vla-object #ename) #layer)
          (setq #ename (entnext #ename))
        )
        ( (= "SEQEND" (cdr (assoc 0 #elist)))
          (vla-put-layer (vlax-ename->vla-object #ename) #layer)
          (setq #ename nil)
        )
      );cond
    );while
  );foreach
)

------------------
viele Grüße

Jörn

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 06. Nov. 2006 09: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

Danke Euch - mit vla-put-layer gehts.
Hab grad Thomas' Code eingebaut und getestet.

@Udo
entupd hatte ich auch probiert
Auf den Vergleich hab ich verzichtet, weil ich die fehlerhaften Objekte meist schon vorher isoliert habe.
Convert: das sind meist ausgerundete Polylines

Hier noch der korrigierte Code:

Code:

(defun c:cleanpoly ( / #aws #awslist #ename #elist #layer)
  (setq #aws (ssget '((0 . "Polyline"))))
  (setq #awslist (f#aws>liste #aws))
  (foreach #ename #awslist
    (print #ename)
    (setq #elist (entget #ename))
    (setq #layer (cdr (assoc 8 #elist)))
    (setq #ename (entnext #ename))
    (while #ename
      (setq #elist (entget #ename))
      (cond
        ( (= "VERTEX" (cdr (assoc 0 #elist)))
          (not
            (vl-catch-all-error-p
              (vl-catch-all-apply 'vla-put-layer
                (list (vlax-ename->vla-object (cdr(assoc -1 #elist))) #layer)
              )
            )
          )       
          (setq #ename (entnext #ename))
        )
        ( (= "SEQEND" (cdr (assoc 0 #elist)))
          (not
            (vl-catch-all-error-p
              (vl-catch-all-apply 'vla-put-layer
                (list (vlax-ename->vla-object (cdr(assoc -1 #elist))) #layer)
              )
            )
          )       
          (setq #ename nil)
        )
      );cond
    );while
  );foreach
);defun
;--------------------------------------------------------------
(defun f#aws>liste (#aws / #index #awsliste) ;einen Auswahlsatz in eine Liste mit E-Names umwandeln
  (if #aws
    (progn
      (if (/= (type #aws) 'PICKSET)
        (exit)
      )
      (setq #awsliste nil
        #index -1
      )
      (repeat (sslength #aws)
        (progn
          (setq #index (1+ #index))
          (setq #awsliste (append #awsliste (list (ssname #aws #index))))
        );progn
      );repeat
    );progn
    nil
  ) ;if
);defun
;--------------------------------------------------------------
(defun c:cleaninsert ( / #aws #awsliste #ename #layer #elist)
  (princ "\nBlockreferenzen auswählen: ")
  (setq #aws (ssget '((0 . "INSERT"))))
  (if #aws
    (progn
      (setq #awsliste (f#aws>liste #aws))
      (foreach #ename #awsliste
        (setq #layer (cdr (assoc 8 (entget #ename))))
        (while (/= "SEQEND" (cdr (assoc 0 (entget #ename))))
          (setq #ename (entnext #ename))
        );while
        (setq #elist (entget #ename))
        (not
          (vl-catch-all-error-p
            (vl-catch-all-apply 'vla-put-layer
              (list (vlax-ename->vla-object (cdr(assoc -1 #elist))) #layer)
            )
          )
        )       
       
      );foreach
    );progn
  );if
);defun

------------------
Schöne Grüße
Ernst

Meine Homepage

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 20. Dez. 2006 22: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 Geos 10 Unities + Antwort hilfreich

Vielleicht habe ich hier das grundlegende verpasst, aber es geht hier um Polylinien, deren Vertizes verschiedene Layer haben, aber auf einen Layer geändert werden sollen - oder?

Wenn ja,
fallen mir da die R14-Zeiten ein: Da gab es ein Programm, dass auch das SEQEND der Polylinie auf falschen Layer setzte. Das konnte man leicht ändern, indem man die Poly auf irgendeinen Layer (z.B. 0 oder Test oder ..) setzte und dann auf den gewünschten Layer wieder zurück. Damit war die Poly sauber.

Wenn nein,
dann vergesst meinen Beitrag wieder.

Zu Blöcken kann ich nichts beitragen.

Peter

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

[Diese Nachricht wurde von Peter2 am 20. Dez. 2006 editiert.]

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 21. Dez. 2006 07:35    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

Zur Entstehung solcher falscher Layer habe inzwischen auch schon einen Verdacht: Es KÖNNTE ev. bei Polyedit>Punkt einfügen passieren - vielleicht auch nur unter bestimmten Voraussetzungen.

------------------
Schöne Grüße
Ernst

Meine Homepage

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 21. Dez. 2006 08:58    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 Geos 10 Unities + Antwort hilfreich

In meinem Fall (damals bei AC14) war es so, dass eine Applikation Polylinien mit ENTMAKE erstellt hat, aber dem SEQEND keinen Layer mitgab. Damit lag die Polylinie immer auf dem Layer der Applikation, SEQEND am jeweils aktuellen Layer.

Peter

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

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: 21. Dez. 2006 09:13    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 Geos 10 Unities + Antwort hilfreich

@Peter2: das geht immer noch 

------------------
  - 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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 21. Dez. 2006 09:15    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 Geos 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CADmium:
@Peter2: das geht immer noch 


Die Problemlösung oder die Problemverursachung?

Peter

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

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: 21. Dez. 2006 09:17    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 Geos 10 Unities + Antwort hilfreich

bei der Verursachung ... die Beseitigung kann man aber ähnlich (durch neudefinition) angehen

------------------
  - 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

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