Funkce na rychlé nastavení papíru ve výkresovém prostoru AutoCADu
Kategorie » téma: AutoCAD | AutoCAD Architecture | AutoCAD Civil 3D
17.01.2014 14.20 | | Komentáře: 7 komentářů | Přečteno: 23416x
Funkce na rychlé nastavení papíru ve výkresovém prostoru AutoCADu:
Pokud často nastavujete ve výkresovém prostoru určité rozměry papírů a nebaví vás neustále vybírat v roletce typ plotru a pak hledat požadovaný rozměr papíru, můžete si zkusit tuto operaci zjednodušit malinkou LISP sekvencí, která požadované nastavení provede za Vás v jednom kroku. Funkce funguje tak, že po jejím zavolání se ve výkresovém prostoru nastaví tiskárna a požadovaný formát papíru a po jejím opětovném zavolání se otočí o 90°. Další zavolání provede opět otočení o 90° atd. V lsp souboru, který si můžete stáhnout na konci tohoto příspěvku, není ovšem tato funkce o které se zmiňuji, ale funkce, která jí teprve vygeneruje.
Samotný zdrojový kód pro funkci, která nastaví plotr na DWG to PDF a papír na formát A4 může vypadat třeba takto:
(defun c:pdfa4 ()
(vl-load-com)
(setq layout (vla-get-layout (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))
plotrotation (vla-get-plotrotation layout)
)
(vla-put-configname layout "DWG To PDF.pc3")
(vla-put-canonicalmedianame layout "UserDefinedMetric (210.00 x 297.00MM)")
(if (= plotrotation 1)
(vla-put-plotrotation layout 0)
(vla-put-plotrotation layout 1)
)
(command "_regen")
)
Ale pozor, kdybyste si tuto funkci zkopírovali do lsp souboru a zkusili ji načíst, nebude Vám s největší pravděpodobností fungovat, protože Váš DWG to PDF plotr se může jmenovat jinak a pravděpodobně se bude jmenovat jinak i papír A4 (u mě je to "UserDefinedMetric (210.00 x 297.00MM)")
V souboru na konci příspěvku je definována funkce, která se volá příkazem getprint. Před jejím spuštěním si ve výkresovém prostoru naposled ručně nastavte typ plotru a papíru, jaký bude nová funkce sama nastavovat. Po zadání příkazu getprint (stále ve výkresovém prostoru) se objeví dialogové okno, kde zadáme název a umístění naší nové funkce.
Funkci lze později pomocí správce souborů přejmenovat i přemístit. Poté se vygeneruje soubor s funkcí a objeví se dialogové okno, které nás o tom informuje. Ve vygenerovaném souboru je třeba provést jen jednu drobnou úpravu. V prvním řádku si slova volani_funkce nahraďte příkazem, kterým budete funkci volat. Příkaz nesmí obsahovat mezery.
Takto může vypadat vygenerovaná funkce po otevření v poznámkovém bloku
V mém případě (na obrázku nahoře) nastavuje funkce plotr na HP a papír na A4 (User1292), takže jsem první řádek změnil na
(defun c:HPa4 ()
Na velikosti písmen nezáleží. Po uložení souboru a jeho načtení můžeme funkci používat.
Načtení lsp souboru s funkcí do aktuálního výkresu AutoCADu lze provést v zásadě dvěma způsoby. Ten nejjednodušší je, že přetáhneme z okna správce souborů (třeba z Průzkumníku) ikonu lsp souboru do okna AutoCADu a funkci spustíme. Druhý způsob je využití příkazu _appload. V dialogovém okně vybereme požadovaný soubor s funkcí a máme-li zaškrtnuto tlačítko Add to History vloží se odkaz na tento soubor do okna Histroy list, takže příště již nebudeme muset soubor vyhledávat. V tomto případě je ale pravděpodobnější, že budeme chtít funkci načítat automaticky při každém spuštění AutoCADu, a proto ji přidáme do Startup Suit. Do tohoto dialogového okna se dostaneme klepnutím na tlačítko Contents v dialogu Load\Unload Application. Pomocí tlačítka Add přidáme soubor s funkcí. Funkce v souborech, které se zobrazují ve Startup Suit se načítají při každém spuštění AutoCADu a při otevření každého výkresu, takže je není třeba zvlášť načítat stačí je spustit stejně jako jakýkoliv jiný příkaz.
Pokud si pomocí funkce getprint vygenerujete více funkcí na více papírů a plotrů není nutné je uchovávat v samostatných souborech. Funkce je možné nakopírovat do jednoho souboru a ten pak načítat.
Ve verzi 2014 si nezapomeňte v options na první kartě files přidat cestu odkud se lsp funkce načítají do položky Trusted Location nebo si lsp soubory nahrajte do složky, které již máte v Trusted Location uvedeny.
Funkci na generování funkcí si můžete stáhnout zde
Jan Panoch
Komentáře:
Dobrý den, bohužel mě nefunguje (CAD 2012)
chyba:
Příkaz: (LOAD "C:/Urban/___CAD/nastav Plotr/A2.lsp") C:A2
Příkaz: A2
; chyba: Automation chyba. Neplatný vstup
Příkaz:
GETPRINT - bez problemů ? asi
****
(defun c:A2 ()
(vl-load-com)
(setq layout (vla-get-layout (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))
plotrotation (vla-get-plotrotation layout))
(vla-put-configname layout "\\czjes03sv\czjesplot01")
(vla-put-canonicalmedianame layout "User1644")
(if (= plotrotation 1)
(vla-put-plotrotation layout 0)
(vla-put-plotrotation layout 1)
)
(command "_regen")
)
třeba Vás něco napadne, jinak super myšlenka
Tak to mě mrzí. Problém bude v nastavování té síťové tiskárny. Když do sekvence, kterou jste poslal doplním svůj plotr a papír, tak program funguje správně.
Zkusil bych vyměnit řádku:
(vla-put-configname layout "\\czjes03sv\czjesplot01")
za
(vla-put-configname layout "\\czjes03sv\\czjesplot01")
nebo za
(vla-put-configname layout "\\czjes03sv/czjesplot01")
Omlouvám, se, že odpovídám až teď, chodím sem občas.
Panoch
S tím časem není potřeba se omlouvat.
Bohužel jsem vyzkoušel kde co, ale s tou síťovou tiskárnou se to nedaří. Přesto díky.
Ondřej
Dobrý den,
když nechci tisknout "rozvržení", ale "max" + přizpůsobit měřítko,
tak na "max" jsem našel
(vla-Put-PlotType alob 2)
;; 012345=DisplayExtentsLimitsViewWindowLayout
ale nefunguje, háže to chybu:
; chyba: nesprávný typ argumentu: VLA-OBJECT nil
ten "max" je kvůli PDF
Mě funguje tato syntaxe:
(vla-put-plottype layout acextents)
Jinak sem pro jistotu dávám i celou funkci:
(defun c:HPA4-2 ()
(vl-load-com)
(setq layout (vla-get-layout
(vla-get-paperspace
(vla-get-activedocument (vlax-get-acad-object))
)
)
plotrotation (vla-get-plotrotation layout)
)
(vla-put-configname layout "HP Designjet 500 24 by HP")
(vla-put-canonicalmedianame layout "User1292")
(vla-put-plottype layout acextents)
(if (= plotrotation 1)
(vla-put-plotrotation layout 0)
(vla-put-plotrotation layout 1)
)
(vla-Regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
)