| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Ursprung für alle Layouts (1043 mal gelesen)
|
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 15. Aug. 2004 15:41 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich möchte mit einem Lisp-Tool, das sich über ein Script starten lässt starte, alle Layouts sowie das Modell komplett in den Ursprung zerlegen. Nach dem Abarbeiten soll das Script mit weiteren Befehlen weiterlaufen. Zusätzlich wird ScriptPro verwendet um mehrere Zeichnungen zu bearbeiten. Gibts für eine solche Aktion keine vordefinierte Lösung? Beiliegend ein Lisp, welches in freundlicherweise von Anwendern hier bekommen habe. Dies läuft aber nicht sauber durch. Grüsse CeZet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Aug. 2004 19:45 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
Wo hakt es denn? Klemmt der Schonwaschgang? Oder möchtses du noch andere Elemente "Explodiert" haben ? Oder läufts bei dir nicht über mehrere Layouts? Oder Streikt SriptPro an einer Stelle ? Wie definierst du sauberes durchlaufen? - Durch öfteres Posten unter ständig neuen Threads wird das Problem auch nicht gelöst! - ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 16. Aug. 2004 08:29 <-- editieren / zitieren --> Unities abgeben:
Hi Cadmium Das erwähnte Script lässt sich laden, aber passieren tut nach dem Ausführen nichts. Da beim letzten Beitrag noch vom Burst-Befehl die Rede war ist auch dieser noch halb im Lisp integriert, da ich aber Anfänger bin kann ich es nicht vervollständingen und zum laufen bringen. Ein Explode über Modell und alle Layouts würde genügen. Ich bin nun über das Weekend einen Schritt zurück, habe ein normales Explode-Lisp genommen und wende dies auf Modells und Layouts einzeln an. Nicht die ideale Lösung, obs läuft stellt sich noch heraus...aber ein kleiner Fehler tritt sicherlich noch auf. Bei beiliegendem Plan läufts nicht sauber durch im Model. Woran kann das liegen? Gesperrte Layer,etc. sind auch nicht der Grund. Das Lisp dazu: (defun C:EXPLODE_ALL (/ INDEX AUSWAHLSATZ OBJFILTER ASLENGTH) (command "_.-layer" "_thaw" "*" "_unlock" "*" "_on" "*" "") (setq OBJFILTER (cons 0 "DIM*,INSERT,*POLYLINE,HATCH")) (if (not (setq AUSWAHLSATZ (ssget "_I" (list OBJFILTER (cons 410 (getvar "ctab"))) ) ;_ end of ssget ) ;_ end of setq ) ;_ wenn kein pickset vorh. (progn (initget "Ja Nein") (setq QUEST (getkword "\nAuflösen über die gesamte Zeichnung? [Ja/Nein] <Nein>: " ) ;_ end of getkword ) ;_ end of setq (if (not QUEST) (setq QUEST "Nein") ) ;_ end of if (if (= QUEST "Nein") (princ "\nOk, dann eben nicht...") (progn (setq AUSWAHLSATZ (ssget "_X" (list OBJFILTER (cons 410 (getvar "ctab"))) ) ;_ end of ssget ) ; nimm alle (if AUSWAHLSATZ (progn (setq INDEX -1 ASLENGTH (sslength AUSWAHLSATZ) ) ;_ end of if (repeat ASLENGTH ;_ end of sslength (command "_.explode" (ssname AUSWAHLSATZ (setq INDEX (1+ INDEX))) ) ;_ end of command ) ;_ end of repeat (princ (strcat "\n>> " (itoa ASLENGTH) " << Objekt(e) aufgelöst. " ) ;_ end of strcat ) ;_ end of princ ) ;_ end of progn (princ "\nKeine auflösbaren Objekte gefunden!") ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of progn ) ;_ end of if (princ) )
GRüsse CeZet
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 16. Aug. 2004 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
was ist denn nun hiermit ??? (defun EXPLODE (/ AUSWAHL OBJEKT VLA-OBJEKT LASTOBJ) (vl-load-com) (setq AUSWAHL (ssget "X" )) (while (> (sslength AUSWAHL) 0 ) (setq LASTOBJ (entlast)) (repeat (sslength AUSWAHL) (setq OBJEKT (ssname AUSWAHL 0)) (setq VLA-OBJEKT (vlax-ename->vla-object OBJEKT)) (if (vlax-method-applicable-p VLA-OBJEKT 'explode) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list VLA-OBJEKT 'explode) ) ) ) (ssdel OBJEKT AUSWAHL) ) (setq AUSWAHL(ssadd)) (setq OBJEKT (entnext OBJEKT)) (while OBJEKT (if (member (cdr(assoc 0 (entget OBJEKT))) '("INSERT" "POLYLINE" "LWPOLYLINE" )) (setq AUSWAHL (ssadd OBJEKT AUSWAHL)) ) (setq OBJEKT (entnext OBJEKT)) ) ) ) (defun c:ALL-EXPLODE () (vlax-for ITEM (vla-get-layouts(vla-get-activedocument(vlax-get-acad-object))) (vla-put-ActiveLayout(vla-get-activedocument(vlax-get-acad-object))ITEM) (explode) ) ) aufruf dann all-explode
Im Übrigen: deine Zeichnung enthält XREFS und Volumenkörper .. da kommst du mit _explode nicht weit!!!! ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 16. Aug. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 16. Aug. 2004 09:46 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 16. Aug. 2004 09:52 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
naja, wenn du alle Polys, Blockreferenzen usw gesprengt haben willst... Die Routine kann man aber noch optimieren ... momentan ist's so ,daß die Zeichnungsdatenbank durchlaufen wird, für jedes element geprüft wird, ob die Methode "explode" existiert, wenn ja diese angewendet wird, dasselbe für die nach dem explode entstandenen Objekt usw. .. das dauert halt. ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 16. Aug. 2004 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
Hallo CeZet, mal eine andere Variant, welche auf das Durchlaufen der Zeichnungsdatenbank verzichtet.
Code:
(defun c:ExAll (/ as ssla sslao cmdold) (setq cmdold (getvar "CMDECHO")) (setvar "cmdecho" 0) (foreach LAYOUT (mapcar 'cdr (vl-remove-if-not '(lambda (E) (= (car E) 3) ) (entget (cdr (assoc 350 (member '(3 . "ACAD_LAYOUT") (entget (namedobjdict)) ) ) ) ) ) ) (command "_Layout" "_se" LAYOUT) (setq as (ssget "_X" (list (cons 410 LAYOUT))) sslao 0) (while (and as (/= sslao (setq ssla (sslength as))) ) (command "_explode" as "") (setq sslao ssla as (ssget "_X" (list (cons 410 LAYOUT))) ) ) ) (setvar "cmdecho" cmdold) (princ) )
Würde mich mal interessieren, ob die Variante schneller ist. Bei Fragen ... 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 |
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 16. Aug. 2004 13:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger Das Lisp scheint schneller zu sein, allerdings funktioniert es nur im Einzelbetrieb (nur Lisp ausführen). Starte ich es innerhalb eines Scripts über "ScriptPro" bleibt er im Anschluss an das Lisp stehen mit folgender Meldung:
*error* Unknown Command EXALL LISP Ended
Starte ich das Script hängt er nachdem er das Ansichtsfenster auflösen will und es nicht geht (Was auch gut ist so).
Das Objekt konnte nicht aufgelöst werden. Das Objekt ist das Papierbereich-Ansichtsfenster. Unbekannter Befehl "EXALL". Drücken Sie F1-Taste für Hilfe.
Das *error* taucht nach jedem Layoutwechsel auch bereits auf. Grüsse CeZet [Diese Nachricht wurde von CeZet am 16. Aug. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 16. Aug. 2004 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
Hallo CeZet, das kommt wohl von den Papierbereichs-Ansichtsfenstern, die nicht aufgelöst werden können. Folgende Änderung (die musst du an 2 Stellen machen) schließt die Auswahl selbiger aus.
Code:
(ssget "_X" (list (cons 410 LAYOUT) '(-4 . "<>") '(0 . "VIEWPORT") ))
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 |
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 16. Aug. 2004 13:53 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 16. Aug. 2004 23:19 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
|
CeZet Mitglied
Beiträge: 95 Registriert: 28.08.2003
|
erstellt am: 17. Aug. 2004 15:19 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Aug. 2004 15:32 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
Zitat: und diese ständig ihre ganzen Vorgaben (Layer, Linien, Attribute, etc.) verändern...! Und dies bei x tausend Zeichnungen nicht bezahlen wollen
Dann haben sie entweder kein Anrecht und müßten dafür zahlen oder Ihr habt dafür unterschrieben, aber egal:
Der Mist interessiert eh nicht, nun zum Thema: Selbst wenn das "kostenlos" sein soll, so erklärt das noch lange nicht warum du alles auflöst !? 1. Änderst löst du damit nicht das Problem 2. Würde ich diese Datei nicht annehmen (und somit nicht bezahlen) Also erklär es bitte mal genauer, man hört aufmerksam zu .. ------------------ - Sebastian - [Diese Nachricht wurde von cadffm am 17. Aug. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 17. Aug. 2004 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
Hallo CeZet, aber warum um Himmels willen, zerhaust du dann alles in den Ursprung? Das kann man doch auch anders lösen. Wieviel Nacharbeit hast du denn jetzt noch? Wieviel Zeit verbrätst du denn jetzt mit nun wirklich unproduktiver Arbeit? Wieviele Tage/Wochen/Monate wirst du beschäftigt sein? Meine Meinung in Bezug auf die Situation der Auftragnehmer: Bürointern sollte man die Arbeitsabläufe und auch den CAD-Standard optimieren. Somit kann man alle Projekte mit einer gewissen Routine abarbeiten, sehr viel schneller, als wenn man sich an immer wieder wechselnde Standards gewöhnen müßte. Erst wenn die Pläne zum Auftraggeber gehen, erst dann werden diese mit einem Programm in Verbindung mit einem Script auf den Standard des Auftraggeber umgewandelt. Ebenso werden alle eingegangenen Pläne auf den Standard gemünzt, der bürointern maßgebend ist. Klar ist, dass das Konvertieren und auch die damit verbundene Analyse Zeit beansprucht, aber setzt man diese ins Verhältnis zu der schleichend verloren gegangenen Zeit, die infolge des Arbeitens im Autraggeber-Standard vergeht, dann ist die oben beschriebene Arbeitsweise im Ergebnis schneller bei höherer Qualität. Bei höherer Qualität deshalb, da das Arbeiten mit einem fremden Standard immer zu Fehlern führen wird. Meine Meinung. 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 |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 17. Aug. 2004 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für CeZet
|