| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Mit PlotToFile PDF erzeugen (1300 / mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Jun. 2016 06:42 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Hab einige Versuche unternommen, um einen Ausschnitt mit PlotToFile in eine PDF auszugeben, leider ohne Erfolg. Alles im Programm scheint reibungslos zu funktionieren. Nur wird als Ergebnis keine PDF erzeugt, liegt das an der pc3?! Die erzeugte PDF scheint keine zu sein ?! Code: ; http://adndevblog.typepad.com/autocad/2013/01/plotting-a-window-to-dwf-using-objectarx-com-and-lisp.html(defun c:xPlotWindow ( / acadObject acadDocument activeLayoutObject plt p1 point1 pPt1 pPt1sa pt1 p2 point2 pPt2 pPt2sa pt2 ) (vl-load-com) (setq acadObject (vlax-get-Acad-object)) (setq acadDocument (vla-get-ActiveDocument acadObject)) (setq activeLayoutObject (vla-Get-ActiveLayout acadDocument)) (setq plt (vla-get-plot acadDocument)) (vla-put-configname activeLayoutObject "PDFCreator.pc3") (vla-put-canonicalmedianame activeLayoutObject "User121" ) ; A1Format (vla-put-paperunits activeLayoutObject acMillimeters) (vla-put-plotrotation activeLayoutObject ac0degrees) (vla-put-StyleSheet activeLayoutObject "A1.ctb") (setq p1 (getpoint "\nSelect Window Point No 1 (Lower Left): ")) (setq point1 (list (car p1) (cadr p1))) (setq pPt1 (vlax-make-safearray vlax-vbDouble '(0 . 1))) (setq pPt1sa (vlax-safearray-fill pPt1 point1)) (setq pt1 (vlax-make-variant pPt1sa (logior vlax-vbarray vlax-vbDouble))) (setq p2 (getpoint "\nSelect Window Point No 2 (Upper Right): ")) (setq point2 (list (car p2) (cadr p2))) (setq pPt2 (vlax-make-safearray vlax-vbDouble '(0 . 1))) (setq pPt2sa (vlax-safearray-fill pPt2 point2)) (setq pt2 (vlax-make-variant pPt2sa (logior vlax-vbarray vlax-vbDouble))) (vla-SetWindowToPlot activeLayoutObject pt1 pt2) (vla-put-plottype activeLayoutObject acWindow) (if (vla-plottofile plt "c:\\temp\\test.pdf" "PDFCreator.pc3") (princ "\nPrint saved c:\\temp\\test.pdf") (princ "\nError!") ) (princ) )
------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Jun. 2016 07:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
"In Datei drucken" ok, aber damit erstellt man PLT-Dateien und du redest von PC3, was willst du denn jetzt?Auch Interessiert sich AutoCAD wohl kaum für deine Eigenbrödler-PDF-Treiber, mit dem darfst du schön selbst ausmachen wo du etwas speicherst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Jun. 2016 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Editiert: Bei dem 'vla-pltotofile' war ich noch nicht wach, daher gestrichen, ist freilich auch für dwf/pdf zuständig - aber halt nur für die "internen" Treiber, für alles andere nimmst du ganz normal vla-plottodevice. Teste den kopierten Code mit DWG to PDF oder Jpeg oder DWG, whatever, AutoCAD wird deinem Vorhaben dann wohlgesonnener sein, nehme ich an. Wie oben bereits angesprochen ist das deine Sache mit dem Dateinamen/Ablage bei anderen Treibern, da interessiert sich Acad nicht sonderlich dafür (es ist ja nur ein stinknormaler Drucker für Acad, also gibt nur Daten, keinen Dateinamen). ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Jun. 2016 09:20 <-- editieren / zitieren --> Unities abgeben:
Danke, das funktioniert schon mal. Ich habe lediglich noch ein Problem mit der Plotorientierung "Landscape" bzw. "Portrait" ! Code: ;** Plotrotation (vla-get-PlotRotation activeLayoutObject) ;** Plot rotation Landscape 1 / ac90degrees (vla-put-plotrotation activeLayoutObject 1) ;;; (vla-put-plotrotation activeLayoutObject ac90degrees) ;** Plot rotation Portrait 0 / ac0degrees ;;; (vla-put-plotrotation activeLayoutObject 0) ;;; (vla-put-plotrotation activeLayoutObject ac0degrees)
Wenn ich mal mein ActiveLayout mit (vla-get-PlotRotation activeLayoutObject) abfrage, erhalte ich 1 - also Landscape Jedoch der Plot wird bei Ausführung in Portrait orientierung ausgegeben. Hab ich was vergessen ? ------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Jun. 2016 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Jun. 2016 11:29 <-- editieren / zitieren --> Unities abgeben:
Mit Extend-paperspace funktioniert es jetzt auch. Vielleicht kann mir ja ein eifriger Tüftler noch die Progress-Anzeige verbessern. Man sieht den Prozess zwar am blinkenden Drucksymbol in der Menuleiste unten. Mir würde es jedoch mehr gefallen, wenn der Prozess vorgang in Prozent oder dergleichen angezeigt werden würde. Damit man sieht, dass tatsächlich etwas passiert und nicht Autocad einfach "stillsteht". Die Expresstools variante ist nur eine Krücke... Code: (defun c:xPlotExtents ( / acadObject acadDocument activeLayoutObject plt p1 point1 pPt1 pPt1sa pt1 p2 point2 pPt2 pPt2sa pt2 ) (vl-load-com) ;;; (princ "\n*** Progressing ... please wait!") (setq acadObject (vlax-get-Acad-object)) (setq acadDocument (vla-get-ActiveDocument acadObject)) (setq activeLayoutObject (vla-Get-ActiveLayout acadDocument)) (setq plt (vla-get-plot acadDocument)) ; (vla-get-ConfigName activeLayoutObject) (vla-put-configname activeLayoutObject "DWG To PDF.pc3") ; (vla-get-canonicalmedianame activeLayoutObject) (vla-put-canonicalmedianame activeLayoutObject "ISO_A1_(594.00_x_841.00_MM)" ) ; A1Format. ;** Plotrotation (vla-get-PlotRotation activeLayoutObject) ;** Plot rotation Landscape 1 / ac90degrees (vla-put-plotrotation activeLayoutObject 1)
;** Paperunits (vla-get-paperunits activeLayoutObject) (vla-put-paperunits activeLayoutObject acMillimeters) (vla-put-StyleSheet activeLayoutObject "A1.ctb") (vla-put-plottype activeLayoutObject acExtents) (acet-ui-progress-init (strcat "\nPlotting to: C:\\temp\\" (VL-FILENAME-BASE (getvar 'dwgname)) ".pdf") 0) (setq incr 0) (if (null (vla-plottofile plt (strcat "c:\\temp\\" (VL-FILENAME-BASE (getvar 'dwgname)) ".pdf") "DWG To PDF.pc3")) (princ "\n Error, couldn´t print!") (progn (while (< incr 1000) (acet-ui-progress-safe (setq incr (+ 0.0015 incr))) ) ) ) (acet-ui-progress-done) (princ) )
------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Jun. 2016 11:43 <-- editieren / zitieren --> Unities abgeben:
dazu nochmal gefragt, vielleicht blöd Wie oben bereits angesprochen ist das deine Sache mit dem Dateinamen/Ablage bei anderen Treibern, da interessiert sich Acad nicht sonderlich dafür (es ist ja nur ein stinknormaler Drucker für Acad, also gibt nur Daten, keinen Dateinamen). wieso kann ich nicht auf andere Treiber, als die Autocad-internen zugreifen. Manuell ist es doch auch möglich ?! käme da vielleicht object.PlotToDevice infrage?!
Schnell getestet ja, mit der Methode lassen sich "externe" pc3-Dateien aufrufen, beispielsweise der PDFCreator.pc3 ------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
[Diese Nachricht wurde von cadplayer am 20. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Jun. 2016 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Über Device kannst du aber keinen Dateinamen mitgeben (weil ja eigentlich keine Datei erstellt werden soll - sondern ein Ploterzeugnis). Sagt man das so? hmm Handisch geht das? Ja, in dem du im Treiber sagst wo die Datei abgelegt werden soll oder du dies manuell angibst, aber eben nicht über deine Lispelei innerhalb von Acad. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |