| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Plotten von Modell oder Layout (2185 mal gelesen)
|
Ralf-CAD-Support Mitglied Techniker
Beiträge: 47 Registriert: 09.03.2007 PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016
|
erstellt am: 24. Jul. 2008 10:35 <-- editieren / zitieren --> Unities abgeben:
Hallo, Sein oder Nichtsein, dass ist meine Frage Die Routine soll einen Seitenlayout importieren, geht auch soweit, und anschliessend Plotten. Jedoch zuerst Layout (nur das erste) wenn verwendet, ansonsten den Modell-Bereich. Komme nicht weiter, finde auch nichts im netz Mein Ansatz war: (defun c:layormod (/ THISTAB LAYOUT VLST A) (setq THISTAB (getvar "CTAB")) (setq A 0 n 0 VLST nil) (foreach LAYOUT (layoutlist) (setq VLST (ssget "X" '((0 . "VIEWPORT")))) (if VLST (progn (setq n 0) (repeat (sslength VLST) (if (setq clipent (assoc 340 (entget (ssname VLST n))))... Doch es wird immer etwas gefunden ? Hat jemand einen Tip ? Grüsse Zu Vorständigkeit (setvar "FILEDIA" 0) (command "_.-PSETUPIN" "HO-LAYOUT.dwg" "HODWFPLOT") (while (/= 0 (logand 1 (getvar "CMDACTIVE"))) (command "")) (command "_.-plot" "_n" "modell" "HODWFPLOT" "DWF6 ePlot.pc3" "" "_y" "_y") (setvar "FILEDIA" 1)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Jul. 2008 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
ein Viewport ist in jedem Layout. und ich würde es auch so machen (foreach LAYOUT (layoutlist) (setq VLST (ssget "X" (list '(0 . "VIEWPORT")(cons 410 LAYOUT)))) ) ... damit nur die Objekte des entsprechenden layouts gefunden werden ------------------ - 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 |
Ralf-CAD-Support Mitglied Techniker
Beiträge: 47 Registriert: 09.03.2007 PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016
|
erstellt am: 24. Jul. 2008 12:32 <-- editieren / zitieren --> Unities abgeben:
Hi CADmium, danke für die sehr schnelle Antwort Finde leider kein Unterscheidungskriterium ob Layout verwendet wurde oder nicht !
ob mit (if (assoc 340 (entget (ssname VLST z))) oder (if (> (cdr (assoc 68 (entget (ssname VLST z)))) 0) Hat mir noch jemand einen Tip, wo ich suchen kann ? vg (defun c:layormod2 (/ THISTAB LAYOUT VLST Z) (setq THISTAB (getvar "CTAB")) (setq LAYLIST nil VLST nil z 0 ) (foreach LAYOUT (layoutlist) (if (setq VLST (ssget "X" (list '(0 . "VIEWPORT") (cons 410 LAYOUT)))) (repeat (sslength VLST) (if (assoc 340 (entget (ssname VLST z))) (if (= LAYLIST nil) (setq LAYLIST (list LAYOUT)) ) ) (setq z (+ 1 z)) ) ) ) (setvar "CTAB" THISTAB) (if LAYLIST (nth 0 LAYLIST)) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Jul. 2008 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
Obige Hinweise noch mal für dich gecodet: (mapcar '(lambda(X) (if(and(setq AWS (ssget "_X" (list(cons 410 X)))) (>(sslength AWS)1) ) (list X "Verwendet") (list X "leer") ) ) (layoutlist) ) ------------------ - 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 |
Ralf-CAD-Support Mitglied Techniker
Beiträge: 47 Registriert: 09.03.2007 PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016
|
erstellt am: 24. Jul. 2008 13:11 <-- editieren / zitieren --> Unities abgeben:
|
HansGeorg Mitglied Konstrukteur
Beiträge: 187 Registriert: 26.11.2002 SWX 2009 Pro/E WF 3 XP SP3 4 GB RAM NVIDIA Quadro FX 1800
|
erstellt am: 07. Aug. 2017 22:52 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
Hallo, ich bin jetzt bei der Suche nach einer Problemlösung auf diesen Betrag gestoßen. Es ist der Einstieg in die Lösung meines Problems. Ich bin leider kein geübter Lisp-Anwender. Wie kann ich die Liste prüfen, ob das Layout genutzt wird oder der Modellbereich. (mapcar '(lambda(X) (if(and(setq AWS (ssget "_X" (list(cons 410 X)))) (>(sslength AWS)1) ) (list X "Verwendet") (list X "leer") ) ) (layoutlist) ) Gibt mir folgendes zurück. (("Layout1" "leer") ("Layout2" "leer")) Mit (if (member "Layout1" (layoutlist)) (progn (progn (setq Layout_Name "Layout1") ) (setq Layout_Name lname);name of first layout tab ) prüfe ich, ob Layout1 in der Liste exisitiert, wenn nicht wird das erstaufgeführte verwendet. Aber nach "leer" kann ich so nicht suchen: (if (member "leer" (layoutlist)) Gibt es "leer", dann möchte ich den Modellbereich drucken. Wie kann man nach "leer" in der Liste zum erstaufgeführten Layout suchen? Vielen Dank. [Diese Nachricht wurde von HansGeorg am 07. Aug. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 08. Aug. 2017 07:55 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
Hallo HansGeorg, ich bin mir nicht sicher, ob ich Dich wirklich verstanden habe. Du möchtest aus der Rückgabeliste das erste Layout haben, welches "leer" ist, damit Du dann im Model drucken kannst. Ich habe die Rückgabeliste mit der Funktion vl-remove-if um die Einträge erleichtert, die als zweiten Wert "Verwendet" haben. Von der Liste, sofern sie dann noch gefüllt ist, ist der erste Eintrag Dein "leeres" Layout?!? Vielleicht ist es ja das: Code:
(defun c:test (/ AWS X RETVAL) (if (setq RetVal (car (vl-remove-if '(lambda (X) (= (cadr X) "Verwendet") ) (mapcar '(lambda (X) (if (and (setq AWS (ssget "_X" (list (cons 410 X)))) (> (sslength AWS) 1) ) (list X "Verwendet") (list X "leer") ) ) (layoutlist) ) ) ) ) (alert (strcat "Das Layout \"" (car RetVal) "\" ist leer, drucken im Model" ) ) (alert "Es ist kein Layout leer.") ) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Liniensignaturen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HansGeorg Mitglied Konstrukteur
Beiträge: 187 Registriert: 26.11.2002 SWX 2009 Pro/E WF 3 XP SP3 4 GB RAM NVIDIA Quadro FX 1800
|
erstellt am: 08. Aug. 2017 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
Hallo Jörn, vielen Dank für die schnelle Antwort. Wie gesagt, ich bin kein Lisp Kenner. Ich habe mir nur ein paar kleine Dinge aus dem Forum herausgelesen, um mir Dinge einfacher zu machen. Es muß nur das erste Layout der Liste geprüft werden, ob leer oder verwendet. Wenn leer, dann soll der Modellbereich geplottet werden, ansonsten das erste Layout. Hier mein Laien-Code: (defun c ut() (mapcar '(lambda(X) (if(and(setq AWS (ssget "_X" (list(cons 410 X)))) (>(sslength AWS)1) ) (list X "verwendet") (list X "leer") ) ) (layoutlist) ) (if (member "Layout1" (layoutlist)) (progn (setq Layout_Name "Layout1") ) (setq Layout_Name lname);Name vom ersten Layout ) (if (>(sslength AWS)1) (progn ;; Yes command ".-PLOT" "_Y" Layout_Name .......) ) (progn ;; No (command "_ucs" "_w") (command "_dview" "_all" "" "_po" "0,0,0" "0,0,1" "") (command "_zoom" "_w" (getvar "limmax") (getvar "limmin")) (command ".-PLOT" "_Y" "Model" .....) ) ) ;;if
) Das hat bis jetzt wunderbar funktioniert, aber ich habe jetzt Dateien, da erhalte ich als Fehler "falsch formatierte Liste". Auffälligkeit ist, das bei diesen Zeichnungen nur das Modell benutzt ist und wenn ich dann einmal vom Modell ins Layout gewechselt habe, dann gehts wieder. Ich denke der Fehler liegt hier: (if (>(sslength AWS)1) Vielen Dank im voraus. VG HansGeorg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 08. Aug. 2017 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
Hallo Hans Georg, wenn Dein Layout1 leer ist, dann gibt es auch keinen Wert für die Variable AWS (und wenn Du mehrere Layout's hast, dann wäre es sowieso der falsche Wert) d.h, die Abfrage (if(>(sslength AWS)1) => gibt folgende Fehler ; Fehler: Fehlerhafter Argumenttyp: lselsetp nil Wenn Du den AWS abfragen willst, dann mußt Du erst prüfen, ob die Variable AWS einen Wert hat: (if (and AWS (>(sslength AWS)1) => NIL Das heißt aber auch, das in Deinen Fall der Plot-Befehl nicht ausgeführt wird. Ich weiß nicht was Deine Variable "lname" enhält, aber ich denke dort steht "Model" drin. Du könntest vor dem Plotten eine weiter Prüfung durchführen:
Code:
(if (and(setq AWS (ssget "_X" (list(cons 410 Layout_Name)))) (>(sslength AWS)1)) (progn (command ...
------------------ viele Grüße Jörn http://www.bosse-engineering.com Liniensignaturen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HansGeorg Mitglied Konstrukteur
Beiträge: 187 Registriert: 26.11.2002 SWX 2009 Pro/E WF 3 XP SP3 4 GB RAM NVIDIA Quadro FX 1800
|
erstellt am: 08. Aug. 2017 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
lname enthält den Namen des Layouts, wenn Layout1 nicht in LayoutList enthalten. Manchmal kommt es vor, dass das erste Layout nicht Layout1 heißt, sondern Layout2. Deinen Vorschlag werde ich umsetzen und schauen was passiert. Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HansGeorg Mitglied Konstrukteur
Beiträge: 187 Registriert: 26.11.2002 SWX 2009 Pro/E WF 3 XP SP3 4 GB RAM NVIDIA Quadro FX 1800
|
erstellt am: 08. Aug. 2017 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für Ralf-CAD-Support
|