我制作了一个AutoHotkey脚本,可以将图形打印为PDF;但是,我在AutoCAD的绘图对话框中使用特定的组合框时遇到问题。此组合框使您可以选择已安装的打印机或打印机配置文件之一。我要选择的打印机是内置打印机之一,称为“ DWG To PDF.pc3” 。这是我不起作用的代码段(它似乎无能为力):
Control , ChooseString , DWG , ComboBox1 , Plot - Model
此外,我尝试使用带引号和不带引号(这总是很难告诉我何时需要引述文字文本)和全名-无效。我的解决方法(我希望是暂时的)是使用Control , Choose , N
。这是不希望的,因为不同的用户可能安装了更多或更少的打印机,这将影响所需打印机在列表中的放置位置。这是该代码的片段:
Control , Choose , 20 , ComboBox1 , Plot - Model
作为参考,我已经安装了AutoHotkey版本1.1.30.01-2018年11月11日。
我想念什么?或有任何建议或创意解决方案(甚至来自其他编程语言)?谢谢!
编辑:
TL; DR-主要用于LT。
整个上下文-我拥有完整的AutoCAD(机械),并使用LISP来完成许多任务。实际上,几年前,我已经在许多论坛上使用了您的(Lee Mac's)教程和有用的帖子来开始使用它。在我的公司,我们有27个LT(11个席位)席位,在那里我建立了带有SCR文件的公司功能区,用于一些事情,包括打印。这种情况有些不同,因为某些用户需要能够选择一些不同的预配置打印选项。
当然,我可以为此目的制作更多的SCR文件,但是它们缺少AHK可以提供的防止用户错误的功能。的确,我在AHK上有一个工作程序,但是这与我的标准还差得很远,因为只有一个特定的组合框似乎有些不可思议。因此,如果有人可以引导我解决这个问题,我将不胜感激。
答案 0 :(得分:0)
首先,如果您可以确定宿主应用程序是AutoCAD的完整版本还是AutoCAD LT的精简版本,这将很有帮助,因为前者支持完全自定义使用AutoLISP,.NET或ObjectARX API(因此此任务很简单),而后者不不支持自定义,这意味着必须使用第三方工具(例如AutoHotKey)
如果您可以访问完整版AutoCAD ,则可以使用以下AutoLISP程序来完成打印为PDF的任务:
(defun c:pdfall ( / *error* cmd ctb )
(defun *error* ( msg )
(if ctb (setvar 'ctab ctb))
(if cmd (setvar 'cmdecho cmd))
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(setq ctb (getvar 'ctab)
cmd (getvar 'cmdecho)
)
(setvar 'cmdecho 0)
(foreach lay (layoutlist)
(setvar 'ctab lay)
(command
"_.-plot"
"_Y" ;; Detailed plot configuration? [Yes/No]:
"" ;; Enter a layout name <Current-Layout>:
"DWG To PDF.pc3" ;; Enter an output device name:
"ISO full bleed A4 (297.00 x 210.00 MM)" ;; Enter paper size:
"_M" ;; Enter paper units [Inches/Millimeters]:
"_L" ;; Enter drawing orientation [Portrait/Landscape]:
"_N" ;; Plot upside down? [Yes/No]:
"_E" ;; Enter plot area [Display/Extents/Limits/View/Window]:
"_F" ;; Enter plot scale (Plotted Inches=Drawing Units) or [Fit] <1=1>:
"_C" ;; Enter plot offset (x,y) or [Center]:
"_Y" ;; Plot with plot styles? [Yes/No]:
"monochrome.ctb" ;; Enter plot style table name (enter . for none):
"_Y" ;; Plot with lineweights? [Yes/No]:
"_N" ;; Scale lineweights with plot scale? [Yes/No]:
"_N" ;; Plot paper space first? [Yes/No]:
"_N" ;; Hide paperspace objects? [Yes/No]:
(LM:uniquefilename (strcat (getvar 'dwgprefix) lay ".pdf"))
"_N" ;; Save changes to page setup [Yes/No]:
"_Y" ;; Proceed with plot [Yes/No]:
)
)
(setvar 'ctab ctb)
(setvar 'cmdecho cmd)
(princ)
)
;; Unique Filename - Lee Mac
;; Returns a filename suffixed with the smallest integer required for uniqueness
(defun LM:uniquefilename ( fnm )
(if (findfile fnm)
(apply
'(lambda ( pth bse ext / tmp )
(setq tmp 1)
(while (findfile (setq fnm (strcat pth bse "(" (itoa (setq tmp (1+ tmp))) ")" ext))))
)
(fnsplitl fnm)
)
)
fnm
)
(princ)
但是,假设您只能访问基本的 AutoCAD LT 平台,我建议使用PLOT
命令的命令行版本:-PLOT
,以便您只需要按可预测的提示顺序提供键盘输入,而不用与对话框界面进行交互,该对话框根据上次使用的设置而有所不同。
在使用-PLOT
命令时,Paperspace Layout的提示顺序将如上面发布的AutoLISP程序中所示,即:
"_.-plot"
"_Y" ;; Detailed plot configuration? [Yes/No]:
"" ;; Enter a layout name <Current-Layout>:
"DWG To PDF.pc3" ;; Enter an output device name:
"ISO full bleed A4 (297.00 x 210.00 MM)" ;; Enter paper size:
"_M" ;; Enter paper units [Inches/Millimeters]:
"_L" ;; Enter drawing orientation [Portrait/Landscape]:
"_N" ;; Plot upside down? [Yes/No]:
"_E" ;; Enter plot area [Display/Extents/Limits/View/Window]:
"_F" ;; Enter plot scale (Plotted Inches=Drawing Units) or [Fit] <1=1>:
"_C" ;; Enter plot offset (x,y) or [Center]:
"_Y" ;; Plot with plot styles? [Yes/No]:
"monochrome.ctb" ;; Enter plot style table name (enter . for none):
"_Y" ;; Plot with lineweights? [Yes/No]:
"_N" ;; Scale lineweights with plot scale? [Yes/No]:
"_N" ;; Plot paper space first? [Yes/No]:
"_N" ;; Hide paperspace objects? [Yes/No]:
<Your PDF Filename Here>
"_N" ;; Save changes to page setup [Yes/No]:
"_Y" ;; Proceed with plot [Yes/No]: