Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Alle Layer auf Layer 0

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:  Alle Layer auf Layer 0 (2094 mal gelesen)
matzespens
Mitglied
Elektrotechniker


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

Beiträge: 20
Registriert: 08.04.2009

Windows XP Prof.SP3 und AutoCAD 2010

erstellt am: 23. Feb. 2010 09:54    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


nuke.txt

 
EDIT: Das Thema sollte natürlich heißen alle Objekte auf Layer 0!!

Hallo, erst ein mal ein großes Lob an alle die hier helfen und schreiben. Ich habe hier schon viel Hilfe gefunden.

Nun habe ich allerdings auch mal eine direkte Frage. Ich habe hier im Büro eine Symboldatenbank die die Symbole als einzenlne DWG's speichert. Nun ist bei der Erstellung einiger Symbole schlampig gearbeitet worden, so dass einige nicht auf dem Layer 0 gezeichnet sind.

Um dies zu beheben habe ich mir die folgende Routine geschrieben
(ich weiß, das ist nicht sehr professionell aber ausreichend):

(command "-layer")
(command "SEtzen")
(command "0")
(command "tauen")
(command "*")
(command "ein")
(command "*")
(command "entsperren")
(command "*")
(command "")
(command "LAYMWECHS")
(command "alle")
(command "")
(command "n")
(command "0")
(command "BEREINIG")
(command "alles")
(command "*")
(command "n")
(command "_.qsave")
(command "_.close")

Diese funktioniert so weit auch ganz gut. Wenn jedoch ein Block in der Zeichnung vorhanden ist, geht es nicht (was ja auch logisch ist).

Zum ändern der Layer innerhalb eines Blockes auf den Layer 0 gibt es ja die LISP-Datei nuke. (hatte ich glaube ich mal bei CADwiesel runtergeladen, ist als Anhang in diesem Beitrag)

Meine Frage ist nun wie ich diese Datei mit meiner Routine verknüpfen bzw. kann und wie ich die Abfragen in nuke umgehe bzw. einfach eine Auswahl vorgebe.

ich habe es probiert mit

(load "nuke.lsp")
(c:nuke)

aber das hat nicht funktioniert.

Zum Thema Abfrage umgehen:

(setq CHOICE(getkword (strcat "\n<G>lobal or <S>elect block: <" CHOICE "> ")))
   (if(not CHOICE)(setq CHOICE "S"))
   (if (= (strcase CHOICE) "G")
      ;global nuke
      (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM)))
         (TO-0 (cdr(assoc 2 BLK_NM)))
      );while

Hier müsste es doch reichen wenn ich díesen Teil folgendermaßen abändere:

      ;global nuke
      (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM)))
         (TO-0 (cdr(assoc 2 BLK_NM)))
      );while

oder bin ich da auf dem Holzweg? (ich kann zwar Delphi und ein bißchen C und php aber dieses LISP ist irgendwie ganz anders :-( )

Vielen Dank schon mal für die Hilfe.

------------------
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris...

[Diese Nachricht wurde von matzespens am 23. Feb. 2010 editiert.]

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 23. Feb. 2010 10:20    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 matzespens 10 Unities + Antwort hilfreich

warum hat es nicht funktioniert mit dem Laden?
Lag das Lisp nicht in einem Supportpfad?

ich habe mir das Nuke - teil jetzt nicht angesehen, aber an Änderung kannst du auch vornehmen:

(setq CHOICE "G");(getkword (strcat "\n<G>lobal or <S>elect block: <" CHOICE "> ")))
  (if(not CHOICE)(setq CHOICE "S"))
  (if (= (strcase CHOICE) "G")
      ;global nuke
      (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM)))
        (TO-0 (cdr(assoc 2 BLK_NM)))
      );while

die Variable choice wird sicher noch irgendwo im verlauf gebraucht.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 23. Feb. 2010 10:28    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 matzespens 10 Unities + Antwort hilfreich

ok, ich finde AutoCAD-Befehle so toll - weil es diese schon gibt
und nicht mehr programmiert werden müssen, daher hätte ich die
erste Aufgabe (überarbeitung der Block-DWG´s) mit dieser Zeile erledigt:

(command "_.CHANGE" "_all" "" "_properties" "_layer" "0" "" "_.-PURGE" "_all" "*" "_no" "_.qsave")

- wahlweise auch komplett ohne Lisp - auf das Command kann man verzichten. Einfach als Script.


Die Blöcke aktualisieren natürlich auch mit einem Acad-Befehl -EINFÜGE
das wäre dann so ein Aufbau:

~schleife~ welche die Blöcke der Datei durchläuft..
if (findfile (strcat BLOCKNAME "=" "c:\\meinpfad\\" BLOCKNAME ".DWG"))
(progn
  (command "_.-INSERT" (strcat BLOCKNAME1 "=" "I:\\FAME\\BAU\\USER_KFW\\" BLOCKNAME1 ".DWG"))
  (command)
)
~end~

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

matzespens
Mitglied
Elektrotechniker


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

Beiträge: 20
Registriert: 08.04.2009

Windows XP Prof.SP3 und AutoCAD 2010

erstellt am: 23. Feb. 2010 13:32    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


Steckdosenkombination.txt

 
@cadwiesel:
Danke, Deine Lösung hat funtkioniert. Nuke läuft nun einfach durch und ändert alle Blöcke auf Layer 0.

Der Tipp mit dem Supportpfad war auch goldwert. Das hatte ich nämlich ganz vergessen. Habe nun einen neuen Supportpfad angelegt und schon funktioniert auch das laden von nuke.

Die gesamte Routine läuft also jetzt. Trotzdem habe ich noch nicht ganz das ereicht was ich wollte. Zu meinem Bedauern habe ich nämlich festgestellt, dass die Layer der Attributstexte nicht geändert werden. (ich habe eine Beispieldatei angehängt. Hier sind Steckdosen als Block drin, welche ein Attribut besitzen)
Muss ich dafür auch noch eine extra Routine verwenden? ich dachte das würde mit den beiden Routinen die ich nun verwendet habe auch mit erledigt. :-(

------------------
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris...

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: 23. Feb. 2010 13: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 Nur für matzespens 10 Unities + Antwort hilfreich

vielleicht ein _attsync  ? ansonsten ein besser geproggtes Tool, das auch Attribute und Bemaßungsobjekte kann  
bsp
------------------
      - 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

matzespens
Mitglied
Elektrotechniker


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

Beiträge: 20
Registriert: 08.04.2009

Windows XP Prof.SP3 und AutoCAD 2010

erstellt am: 24. Feb. 2010 08: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

So, habe jetzt noch einmal ein wenig probiert und die LISP Datei nuke angepasst. Ich wechsle nun während der Blockbearbeitung die Layer und siehe da, der Attributstext ist dann auch auf Layer 0.

Aber das bereinigen funktioniert irgendwie doch nicht. Ich finde aber nichts mehr was noch auf den zu bereinigenden Layern  liegt.

Hier mal die komplette LISP:

(defun To-0( BLCK / BNAME BLIST E EDATA SPIN TMP )
 
  ;;; Prints a pinwheel on the command line
  (defun Spin ( )
      (setq SYM
        (cond
            ((= SYM nil) "-")
            ((= SYM "-") "\\")
            ((= SYM "\\") "|")
            ((= SYM "|") "/")
            ((= SYM "/") "-")
        )
      )
      (princ (strcat "\rScanning... " SYM "                                    "))
  );end spin
 
  (if (=(type BLCK)(read "LIST"))(setq TMP(car BLCK) BLIST(cdr BLCK) BLCK TMP TMP nil))
  (setq BLCK(tblsearch "BLOCK" BLCK))
  (if
      (and
        (/=(logand(cdr(assoc 70 BLCK))1)1)  ;skips annomyous blocks
        (/= (logand(cdr(assoc 70 BLCK))4)4) ;skips xrefs
      );and
      (progn
        (setq E (cdr (assoc -2 BLCK)))
        (while E
            (if (=(cdr(assoc 0 (entget E))) "INSERT") ;If the object is a block
              (progn
                  (setq BNAME(cdr(assoc 2(entget E)))) ;save the name to a list
                  (if (not (member BNAME BLIST))
                    (if (not BLIST)(setq BLIST (list BNAME)) ;create the list if it doesn't exist
                        (setq BLIST(append BLIST(list BNAME)))
                    );if
                  );if
              );progn     
            );if
            (setq EDATA (entget E))
            (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't.
              (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA))
            );if
            (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't.
              (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA))
            );if
            (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
            (entmod EDATA);updates entity
            (setq E (entnext E));get next enitiy, nil if end of block
            (Spin)
        );end while E
      );progn
  );if
  BLIST; returns names of any nested blocks
);defun


(defun C:NUKE( / BLK_NM CHOICE E EDATA IDX PK_BLK SS)
(command "-layer")
(command "SEtzen")
(command "0")
(command "tauen")
(command "*")
(command "ein")
(command "*")
(command "entsperren")
(command "*")
(command "")
  (setq CHOICE "G")
  (initget "G S")
  (setq CHOICE "G");(getkword (strcat "\n<G>lobal or <S>elect block: <" CHOICE "> ")))
  (if(not CHOICE)(setq CHOICE "G"))
  (if (= (strcase CHOICE) "G")
      ;global nuke
      (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM)))
        (TO-0 (cdr(assoc 2 BLK_NM)))
      );while
      ;nuke selected block
      (progn
        (prompt "\nSelect Block(s) to Nuke: ")
        (setq SS(ssget '((0 . "INSERT"))))
        (setq IDX 0)
        (repeat (sslength SS)
            (setq BLK(cdr(assoc 2 (entget(ssname SS IDX)))))
            (cond
              (PK_BLK (setq PK_BLK(append PK_BLK (list BLK))))
              (T (setq PK_BLK(list BLK)))
            );cond
            (setq IDX(1+ IDX))
        );repeat
        (while PK_BLK
            (setq PK_BLK(To-0 PK_BLK))
    (command "LAYMWECHS")
    (command "alle")
    (command "")
    (command "n")
    (command "0")
    (command "BEREINIG")
            (command "layer")
            (command "*")
            (command "n")
        );while
      );progn
  );if
    (command "LAYMWECHS")
    (command "alle")
    (command "")
    (command "n")
    (command "0")
    (command "BEREINIG")
    (command "layer")
    (command "*")
  (command "n")
  (princ "\rFinished                  ")
  (princ)
);defun
(prompt"\nNUKE zum Starten.")(princ)

------------------
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris...

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 24. Feb. 2010 09:07    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 matzespens 10 Unities + Antwort hilfreich

Layer hängen schließlich nicht nur in Blöcken oder Blockreferenzen - zumal du
ja garnicht alle Blocke bearbeitest mit dem Code oben.

& Du wirst doch nachsehen können wo der Layer hängt? Poste eine DWG in der du den
Layer nicht findest, irgendwer wird es dir schon sagen wo du nicht geschaut hast.
(wenn du so garkeine Ahnung hast speicher es halt als DXF und schau mit einem Texteditor nach)

PS: Command kann mehr wie eine Anweisung an die Commandline senden..

statts:
    (command "LAYMWECHS")
    (command "alle")
    (command "")
    (command "n")
    (command "0")
einfach:
    (command "LAYMWECHS" "alle" "" "n" "0")
Ist doch viel übersichtlicher oder ?

dann meldet sich evtl. auch jemand dem vorher nur die Augen schmerzten davon.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

matzespens
Mitglied
Elektrotechniker


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

Beiträge: 20
Registriert: 08.04.2009

Windows XP Prof.SP3 und AutoCAD 2010

erstellt am: 24. Feb. 2010 10:21    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 und erst mal danke für die Info mit dem Command. Das werde ich dann auch gleich ändern.

Ich stehe halt sehr am Anfang was die ganze Sache angeht, darum ist vieles noch holprig oder mir einfach nicht so ersichtlich.

Denn Layer habe ich übrigens mittlerweile gefunden. Er ist doch immer noch mit dem Attribut verknüpft. Also brauche ich doch eine Routine die mir die Layer der Attribute anpasst. Mal schauen ob ich was hinbekomme.

------------------
Neun von zehn Stimmen in meinen Kopf sagen ich bin nicht verrückt. Die andere summt die Melodie von Tetris...

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