simbamat Opublikowano 9 Września Zgłoś Opublikowano 9 Września Czy jest jakiś odpowiednik komendy AutoCAD'a AUTOPUBLISH? - drukowanie wszystkich layoutów do wielostronicowego .pdf - w folderze gdzie znajduje się .dwg Cytuj
simbamat Opublikowano 10 Września Autor Zgłoś Opublikowano 10 Września PUBLISH to nie jest to czego szukam, dlatego że: - trzeba za każdym razem wybierać katalog - usuwać z listy plików niepotrzebne layouty, model AUTOPUBLISH działa jakby "automatycznie". Cytuj
Adam Klaczek Opublikowano 11 Września Zgłoś Opublikowano 11 Września Można po zdefiniowaniu publikacji zapisać listy arkuszy w plikach .DSD i kiedy to będzie potrzebne, otwierać wskazany, uprzednio zdefiniowany zestaw: Zgłoszę do producenta Pana wniosek o rozwiązanie analogiczne do wspomnianego AUTOPUBLISH Cytuj
simbamat Opublikowano 11 Września Autor Zgłoś Opublikowano 11 Września Dziękuję. Zapisywanie jest dobra jak ma się duże projekty. Ja pracuję na wielu bardzo małych - AUTOPUBLISH jest wygodne i szybkie. Cytuj
simbamat Opublikowano Środa o 09:32 Autor Zgłoś Opublikowano Środa o 09:32 (edytowane) Za pomocą ChatGPT zrobiłem LISP, który działa tak jak chciałem. Czy mam go tutaj udostępnić (czy nie akceptujecie kodu AI)? Edytowane Środa o 09:35 przez simbamat Cytuj
dmatusz3 Opublikowano Czwartek o 12:47 Zgłoś Opublikowano Czwartek o 12:47 Tak, jak najbardziej proszę wstawić. Cytuj
Martin_S Opublikowano Czwartek o 15:32 Zgłoś Opublikowano Czwartek o 15:32 w czym tzn. jaki ai ci pomagał? kiedys uzyłem KIMI3 Cytuj
simbamat Opublikowano Piątek o 19:34 Autor Zgłoś Opublikowano Piątek o 19:34 (edytowane) ;;; ============================================================ ;;; AUTOPUBLISH.LSP - ZWCAD 2026 STABLE VERSION ;;; ============================================================ (vl-load-com) (defun AP:ErrorHandler (msg) (if (and (boundp '*AP-oldFileDia*) *AP-oldFileDia*) (setvar "FILEDIA" *AP-oldFileDia*)) (if (and (boundp '*AP-oldBackgroundPlot*) *AP-oldBackgroundPlot*) (setvar "BACKGROUNDPLOT" *AP-oldBackgroundPlot*)) (if (and (boundp '*AP-oldCmdEcho*) *AP-oldCmdEcho*) (setvar "CMDECHO" *AP-oldCmdEcho*)) (if (and (boundp '*AP-dsdFile*) *AP-dsdFile* (findfile *AP-dsdFile*)) (vl-file-delete *AP-dsdFile*)) (if (and msg (/= msg "Function cancelled") (/= msg "quit / exit abort")) (princ (strcat "\nBLAD: " msg)) ) (princ) ) (defun AP:GetLayouts (/ doc layouts lay tmp) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq layouts (vla-get-Layouts doc)) (setq tmp '()) (vlax-for lay layouts (if (/= (strcase (vla-get-Name lay)) "MODEL") (setq tmp (cons (list (vla-get-TabOrder lay) (vla-get-Name lay)) tmp)) ) ) (setq tmp (vl-sort tmp '(lambda (a b) (< (car a) (car b))))) (mapcar 'cadr tmp) ) (defun AP:MakeDSD (dsd dwg pdf layouts / f lay i sheetname outdir) (setq f (open dsd "w")) (write-line "[DWF6Version]" f) (write-line "Ver=1" f) (write-line "[DWF6MinorVersion]" f) (write-line "MinorVer=1" f) (setq i 1) (foreach lay layouts (setq sheetname (strcat (vl-filename-base dwg) "-" lay)) (write-line (strcat "[DWF6Sheet:" sheetname "]") f) (write-line (strcat "DWG=" dwg) f) (write-line (strcat "Layout=" lay) f) (write-line "Setup=" f) (write-line (strcat "OriginalSheetPath=" dwg) f) (write-line "Has Plot Port=0" f) (write-line "Has3DDWF=0" f) (setq i (1+ i)) ) (write-line "[Target]" f) (write-line "Type=6" f) (write-line (strcat "DWF=" pdf) f) (setq outdir (vl-filename-directory pdf)) (write-line (strcat "OUT=" outdir "/") f) (write-line "PWD=" f) (write-line "[AutoCAD Block Data]" f) (write-line "IncludeBlockInfo=0" f) (write-line "BlockTmplFilePath=" f) (write-line "[SheetSet Properties]" f) (write-line "IsSheetSet=FALSE" f) (write-line "IsHomogeneous=FALSE" f) (write-line "SheetSet Name=" f) (write-line "NoOfCopies=1" f) (write-line "PlotStampOn=FALSE" f) (write-line "ViewFile=FALSE" f) (write-line "JobID=0" f) (write-line "SelectionSetName=" f) (write-line "AcadProfile=" f) (write-line "CategoryName=" f) (write-line (strcat "LogFilePath=" outdir "/AUTOPUBLISH.log") f) (write-line "IncludeLayer=TRUE" f) (write-line "LineMerge=FALSE" f) (write-line "CurrentPrecision=" f) (write-line "PromptForDwfName=FALSE" f) (write-line "PwdProtectPublishedDWF=FALSE" f) (write-line "PromptForPwd=FALSE" f) (write-line "RepublishingMarkups=FALSE" f) (write-line "PublishSheetSetMetadata=FALSE" f) (write-line "PublishSheetMetadata=FALSE" f) (write-line "3DDWFOptions=0 0" f) (close f) T ) (defun AP:PDFValid (file / f line size) ;; Sprawdza, czy plik istnieje, ma rozmiar > 0 i naglowek PDF. (setq size (vl-file-size file)) (if (and size (> size 0) (setq f (open file "r"))) (progn (setq line (read-line f)) (close f) (and line (wcmatch line "%PDF-*")) ) nil ) ) (defun AP:RunPublish (dwgFile pdfFile layouts /) (if (findfile *AP-dsdFile*) (vl-file-delete *AP-dsdFile*) ) (if (not (AP:MakeDSD *AP-dsdFile* dwgFile pdfFile layouts)) (princ "\nBLAD: Nie udalo sie przygotowac pliku DSD.") (progn (setvar "FILEDIA" 0) (setvar "BACKGROUNDPLOT" 0) (setvar "CMDECHO" 0) (princ "\nPublikowanie PDF... Prosze czekac...") (command "_.-PUBLISH" *AP-dsdFile* "") ;; Przywracanie ustawien po publikacji (setvar "FILEDIA" *AP-oldFileDia*) (setvar "BACKGROUNDPLOT" *AP-oldBackgroundPlot*) (setvar "CMDECHO" *AP-oldCmdEcho*) (vl-cmdf "_.DELAY" 2000) ;; PDF jest nowy (stary usunieto) i musi miec poprawny naglowek. (if (AP:PDFValid pdfFile) (progn (princ "\n====================================") (princ (strcat "\nSciezka: " pdfFile)) (princ "\n=== PDF UTWORZONY POMYSLNIE! ===") ) (progn (princ "\n====================================") (princ "\n=== PDF NIE ZOSTAL UTWORZONY LUB JEST USZKODZONY. ===") ) ) ) ) ) (defun c:AUTOPUBLISH (/ old-err dwgPrefix dwgName dwgFile pdfFile layouts) (setq old-err *error* *error* AP:ErrorHandler) (setq *AP-oldFileDia* (getvar "FILEDIA") *AP-oldBackgroundPlot* (getvar "BACKGROUNDPLOT") *AP-oldCmdEcho* (getvar "CMDECHO")) (setq dwgPrefix (getvar "DWGPREFIX") dwgName (getvar "DWGNAME")) (if (or (= dwgPrefix "") (= dwgName "")) (princ "\nRysunek nie jest zapisany. Najpierw zapisz DWG.") (progn (setq dwgFile (strcat dwgPrefix dwgName)) (setq pdfFile (strcat dwgPrefix (vl-filename-base dwgName) ".pdf")) (setq *AP-dsdFile* (strcat dwgPrefix "~AUTOPUBLISH.dsd")) (setq layouts (AP:GetLayouts)) (if (= layouts nil) (princ "\nBrak Layoutow.") (progn (princ "\n====================================") (princ "\n=== AUTOPUBLISH ZWCAD 2026 ===") (princ "\n====================================") ;; Najpierw usun stary PDF. Jesli nadal istnieje, BEZWZGLEDNIE przerwij. (if (findfile pdfFile) (vl-file-delete pdfFile) ) (if (findfile pdfFile) (progn (princ "\n====================================") (princ "\nBLAD: Nie mozna usunac istniejącego PDF.") (princ "\nPlik jest prawdopodobnie otwarty lub zablokowany.") (princ "\nZamknij PDF w Adobe Reader i uruchom AUTOPUBLISH ponownie.") (princ "\n=== ERROR === PDF NIE ZOSTAL UTWORZONY LUB JEST USZKODZONY. ===") ) ;; Publikacja i komunikat wyniku tylko w AP:RunPublish. (AP:RunPublish dwgFile pdfFile layouts) ) (if (findfile *AP-dsdFile*) (vl-file-delete *AP-dsdFile*) ) ) ) ) ) (setq *error* old-err) (princ) ) ;; Pusta linia ponizej chroni plik przed bledem EOF na koncu strumienia danych LISP AUTOPUBLISH.lsp Edytowane Piątek o 19:34 przez simbamat Martin_S 1 Cytuj
kojacek Opublikowano 13 godzin temu Zgłoś Opublikowano 13 godzin temu Nie ładowałem tego, i nie sprawdzałem czy działa dobrze... pobieżnie przeglądając kod, jedna uwaga: dlaczego AI się tak tutaj "zmóźdża"? : czy nie wystarczy wywołać: (layoutlist) ? Cytuj
dmatusz3 Opublikowano 13 godzin temu Zgłoś Opublikowano 13 godzin temu Polecenie (layoutlist) generuje listę arkuszy w kolejności tworzenia, jeśli dobrze rozumiem. Jeśli zmienimy kolejność, to (layoutlist) nie będzie o tym wiedział. Natomiast powyższa funkcja AP:GetLayouts chyba wyświetla listę arkuszy w rzeczywistej kolejności. Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.