| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Dokumenten-Reaktor (1434 mal gelesen)
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 29. Sep. 2014 16:43 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich will beim schließen von Autocadzeichnungen von, vorab einige Arbeiten erledigen bevor die ZNG geschlossen wird zB. PDF erstellen Purgen usw. Ich hab folgenden Code gefunden der macht macht aber immer etwas egal ob ich beim speichen ja oder nein klicke. Meine Frage wie kann ich noch das Speichen das ja / Nein abfragen befor ich danach unterschiedliche Routinen aufrufe (defun Create_Close_Reactor() (vl-load-com) (if(not close:reactor) (setq close:reactor (vlr-editor-reactor nil '((:vlr-beginClose . CloseReaction)))) ); end if (princ) ); end of Create_Close_Reactor
(defun CloseReaction(args reac / actDoc) (setq actDoc(vla-get-ActiveDocument (vlax-get-acad-object))) (vla-put-ActiveSpace actDoc 0) (vla-ZoomExtents(vlax-get-acad-object)) (vla-put-ActiveLayer actDoc (vla-Item(vla-get-Layers actDoc)"0")) (repeat 3(vla-PurgeAll actDoc)) (vla-Save actDoc) (princ) ); end of CloseReaction
(Create_Close_Reactor) ZB. Speichern NEIN (nur ZNG schließen) ZB. Speichen JA (Purgeen PDF erstellen und danach ZNG schließen) Vorab schon mal Danke für eure Hilfe. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 29. Sep. 2014 16:51 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
... dann musst du die mehrere Events miteinander verknüpfen. Willst du die Aktion nur machen, wenn die Datei gespeichert wurde, dann hängst du ein Speichern-Reactor in die Zeichnung, der den Close-Reactor aktiviert. (ich würde dann noch einen Document-Changed-Reactor einbauen, der dann den Close-Reactor und sich selbst wieder löscht. Wegen der ReaktorenNamen musst du mal schauen - die können auch anders heißen. Das Prinzip aber sollte klar sein. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 29. Sep. 2014 17:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, ja, ich will nur dann etwas manchen wen der Benutzer die Datei schließt und bei schließen auf "JA" also speichen gecklickt hat. Wenn er auf "Nein" klickt soll die Datei wie bisher einfach ohne speichern geschlossen werden. Dann muss ich auch kein neues PDF von jedem Layout erstellen. Ich will aber auch nicht bei jedem speichern der Zeichnung eine neue PDF-Dateien zu den Layouts erstellen. Dies soll nur beim Schließen der Zeichnung wenn auf JA geklickt wird geschehen. Kannst du mir bitte auch noch helfen wie ich die Events miteinander verknüpfen muss um dieses Ergebnis zu erzielen. Vorab schon mal Danke Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 29. Sep. 2014 17:43 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 06:04 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, aber ich will ja nicht bei jedem speichern der ZNG von allen Layouts PDF's machen, dass soll nur beim Schließen der ZNG geschehen und dann auch nur dann wenn der Benutzer beim schießen "JA" klickt. Kannst du mir dabei helfen den Reaktor so umzubauen, dass nur in diesem Fall die PDF's erstellt werden. Danke Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2014 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 08:02 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, wenn ich eine Zeichnung schließe kommt ja eine Dialogbox mit der Abfrage Änderungen in ZNG zu speichern "JA" oder "NEIN". Wenn auf "JA"geklickt wird, nur dann sollen die PDF's zu den Layouts erstellt werden. Lg. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 30. Sep. 2014 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, dein Vorhaben ist nicht so kompliziert, als dass es nicht zu verstehen ist. Deine Gedanken dazu sind zusammengefasst wie folgt: -> gespeichertes Dokument soll beim Schließen als PDF gespeichert werden. Daraus folgt, und nichts anderes versuchen CADmium und ich hier zu sagen: dass du das Speichern-Event nutzen musst, damit der Close-Reactor 'scharf' geschaltet wird. Du kommst an dieser Stelle nicht mit nur einem Reactor klar! Du aktivierst einen 2. Reactor durch einen ersten Reactor --> genau so, wie du es in der Aufgabenstellung selbst formuliert hast. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 08:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, ok, das habe ich soweit verstanden, aber ich weiß nicht wie ich die beiden Raktoren kombinieren kann. Ich weiß, es ist vermessen aber vielleicht kannst du mir da ja mit einem Code weiterhelfen wie die Reaktoren verknüpft werden müssen. Lg. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 30. Sep. 2014 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, du weißt, wie ein Reactor erstellt wird. Das Erstellen des Close-Reactors erfolgt innerhalb der Callback-Funktion des Save-Reactors. Das ist die Verknüpfung, mehr nicht. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 08:59 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2014 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
ok .... ein paar Codeschnipsel: (defun FUNC:SAVECOMPLETE( REACTOR ARGUMENTS ) (setq *PDFMAKER-SAVED?* "SAVED") ) ;;; - ------------------------------------------------------------------------------ - ; (defun FUNC:BEGINCLOSE( REACTOR ARGUMENTS ) (if(= *PDFMAKER-SAVED?* "SAVED") (alert "PDF erzeugen notwendig!") ) (princ) ) ;;; - ------------------------------------------------------------------------------ - ; (defun C:REMOVE:PDFMAKER(/ RLIST) (if(and(setq RLIST(cdr(car(vlr-reactors :vlr-editor-Reactor)))) (setq RLIST(vl-remove-if 'null (mapcar '(lambda(X / RDATA) (if(and(not(vl-catch-all-error-p (setq RDATA(vl-catch-all-apply'vlr-data (list X))) ) ) (= RDATA "PDFMAKER") ) X ) ) RLIST ) ) ) ) (foreach X RLIST (not(vl-catch-all-error-p(vl-catch-all-apply'vlr-remove (list X)))) ) ) (princ) ) ;;; - ------------------------------------------------------------------------------ - ; (defun INSTALL:PDFMAKER() (setq *PDFMAKER-SAVED?* nil) (if(and(or(C:REMOVE:PDFMAKER)'T) (vlr-editor-reactor "PDFMAKER" '((:vlr-saveComplete . FUNC:SAVECOMPLETE)) ) (vlr-editor-reactor "PDFMAKER" '((:vlr-beginClose . FUNC:BEGINCLOSE)) ) ) (prompt "\nPDFMAKER installiert...\n") ) ) ;;; - ------------------------------------------------------------------------------ - ; (INSTALL:PDFMAKER) ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - 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 |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2014 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 16:25 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, vorab mal DANKE für deine Hilfe, der Code ist genau was ich benötigt habe!!! Supper - Danke!!! Wenn ich mir nun noch eine Frage erlauben darf! In der Lispdatei die über den Reaktor aufgerufen wird habe ich auch zwei VBA-Programme (zB. Erstellen der PDF-Datei je Layout). Wenn der der VBA-Aufruf erfolgt bricht das Programm ab. Wenn ich die Lispdatei nicht über den Reaktor starte läuft das Programm problemlos durch. (defun c:SaveZngJaNeu (/ db dxffrage dxfname) (c:export_felder) (setq db (strcase (cadr (assoc "BEREICH" #-db_felder)))) ;;;;Mit Reaktor -> Ab hier passiert nichts mehr, VBA wird nicht geladen und ausgeführt. ZNG wird geschlossen ;;;;Direkter Aufruf im Autocad -> Programm läuft durch und es werden je Layouts die PDF's erstellt. (command "-VBARUN" (strcat #-vba_pfad "!modPDF.erstellePDFFiles")) .... ) Lg. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2014 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 30. Sep. 2014 17:15 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium das war/ist mir schon klar, dass du mir das nicht auch noch bastelst. Aber in der zwischenzeit hab ich auch ein wenig gegoogelt und hab auch vl-vbarun gefunden. Werde morgen beide aufrufe testen. Wenn es nicht geht, dann muss ich die Plotroutine eben im Lisp machen. Danke nochmals für deine Hilfe. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 01. Okt. 2014 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Okt. 2014 08:46 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Gerne weise ich wieder mal - auch die, die noch keine Ahnung von Reaktoren haben - auf de Tatsache hin, das keine Command Aufrufe innerhalb einer Reaktorfunktion zulässig sind und daher nicht funktionieren! ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |