Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Plotten von Modell oder Layout

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
Autor Thema:   Plotten von Modell oder Layout (834 mal gelesen)
Ralf-CAD-Support
Mitglied
Techniker


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 24. Jul. 2008 10: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

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




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: 13244
Registriert: 30.11.2003

.

erstellt am: 24. Jul. 2008 10: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 Nur für Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 24. Jul. 2008 12: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

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




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: 13244
Registriert: 30.11.2003

.

erstellt am: 24. Jul. 2008 12:41    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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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

Beiträge: 47
Registriert: 09.03.2007

PrDSU/FDSU 2016 und PSP 2011, Vault Prof. 2016

erstellt am: 24. Jul. 2008 13:11    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


funkt super 

Vielen Dank !

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

HansGeorg
Mitglied
Konstrukteur


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

Beiträge: 185
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 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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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: 1591
Registriert: 11.10.2004

Window 8.1
ACAD 2005-2016
CIVIL 2010 - 2016
BricsCAD V13-V15
Intel(R) Core(TM)i7-4700HQ CPU @ 2.40GHz 2.40 GHz
16.0GB RAM
NVIDIA GeForce GTX 850M

erstellt am: 08. Aug. 2017 07:55    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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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

Beiträge: 185
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 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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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: 1591
Registriert: 11.10.2004

Window 8.1
ACAD 2005-2016
CIVIL 2010 - 2016
BricsCAD V13-V15
Intel(R) Core(TM)i7-4700HQ CPU @ 2.40GHz 2.40 GHz
16.0GB RAM
NVIDIA GeForce GTX 850M

erstellt am: 08. Aug. 2017 09: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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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

Beiträge: 185
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 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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

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


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

Beiträge: 185
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 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 Ralf-CAD-Support 10 Unities + Antwort hilfreich

Hallo Jörn,

das ist ja Spitze. Vielen Dank, es funktioniert super, so wie es soll.
Und wieder was gelernt.

Vielen Dank.

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)2017 CAD.de