使用序列文件名打印
我用下面的lisp做批量绘图,并在这里寻求帮助。上述代码打印的pdf文件名与模型空间中的dwg名称相同。
我正在寻找pdf文件名,例如
DWG_文件名-1。pdf,
DWG_文件名-2。pdf
以此类推,而不是DWG_文件名。pdf 试试这个,否则你需要保存一个全局变量,检查它是否存在,并向其中添加1。这只对当前会话有效。当你关闭dwg时,值将消失,但这可能没问题,因为你知道要打印的图纸编号
(if (= sheetnum nil)(setq sheetnum 1)(setq sheetnum (+ sheetnum 1)))
(setq sheetnum (Getint "\nEnter sheet number"))
(setq pdfname(strcat (getvar 'DWGPREFIX)(vl-filename-base (getvar 'DWGNAME)) "-" sheetnum)) 嗨,比格尔,
我使用你的代码得到错误
(_> )
C:TESTPRINT
Command: TESTPRINT
Enter sheet number:1
; error: bad argument type: stringp 1
也可以从1开始硬编码页码,这样用户就不必每次都输入页码。它将从第1页开始按顺序运行,直到用户取消该命令。
也许是这样。
(defun c:Testprint (/ CM FD P1 P2 PDFNAME)
(setq cm (getvar 'CMDECHO))
(setvar 'CMDECHO 0)
(setq fd (getvar 'filedia))
(setvar 'filedia 0)
(if (= sheetnum nil)
(setq sheetnum 1)
(setq sheetnum (+ sheetnum 1))
)
(while (and (setq p1 (getpoint "\nSpecify first corner <exit> : "))
(setq p2 (getcorner p1 "\nSpecify opposite corner <exit> : "))
)
(progn
(setq pdfname (strcat (getvar 'DWGPREFIX)
(vl-filename-base (getvar 'DWGNAME))
"-"
(itoa sheetnum)
)
)
(command "-plot" "Y" "model"
"DWG To PDF.pc3" "ISO A4 (210.00 x 297.00 MM)"
"Millimeters" "Landscape" "Y"
"Window" p1 p2
"Fit" "0.00, 0.00" "Y"
"monochrome.ctb" "Y"
"Wireframe" pdfname "N"
"Y"
)
(setq sheetnum (+ sheetnum 1))
)
)
(setvar 'CMDECHO cm)
(setvar 'filedia fd)
(princ)
)
HTH
亨里克 谢谢亨里克的努力。
您提供的代码按顺序打印pdf文件名,但当我们取消并重新启动或在绘图中进行几次修改后的某个时间后打印时,该命令只需从它开始打印,直到之前结束。
例如,我们从一个文件中画出5个不同的页面,它以“file-name-5.pdf”结尾,当我们开始打印这些页面时,它以“file-name-6.pdf”开头。
我认为在scipt结束时,函数必须将sheetnum值置零。这可能会奏效。
另外,我尝试在下面的代码中匹配此代码,但未能成功。你能这样做吗?提前谢谢。
; Batch plot using object in landscape mode a4 sheet
(defun prl ( mnp mxp /)
(setq cm (getvar 'CMDECHO))
(setvar 'CMDECHO 0)
(setq fd (getvar 'filedia))
(setvar 'filedia 0)
(setq pdfname(strcat (getvar 'DWGPREFIX)(vl-filename-base (getvar 'DWGNAME))))
(command "-plot" "Y" "model" "DWG To PDF.pc3" "ISO A4 (210.00 x 297.00 MM)" "Millimeters" "Landscape" "Y" "Window" mnp mxp "Fit"
"0.00, 0.00" "Y" "monochrome.ctb" "Y" "Wireframe" pdfname "N" "Y")
(setvar 'CMDECHO cm)
(setvar 'filedia fd)
)
; Batch plot using object in portrait mode a4 sheet
(defun prp ( mnp mxp /)
(setq cm (getvar 'CMDECHO))
(setvar 'CMDECHO 0)
(setq fd (getvar 'filedia))
(setvar 'filedia 0)
(setq pdfname(strcat (getvar 'DWGPREFIX)(vl-filename-base (getvar 'DWGNAME))))
(command "-plot" "Y" "model" "DWG To PDF.pc3" "ISO A4 (210.00 x 297.00 MM)" "Millimeters" "Portrait" "N" "Window" mnp mxp "Fit"
"0.00, 0.00" "Y" "monochrome.ctb" "Y" "Wireframe" pdfname "N" "Y")
(setvar 'CMDECHO cm)
(setvar 'filedia fd)
)
(defun c:pblock (/ ob ss bn mn mx)
(vl-load-com)
(if (and (progn
(initget "B")
(setq ob (entsel "\nSelect rectangular Block/B for blockname: "))
(cond
((eq ob "B")
(setq bn (getstring "\nEnter rectangular block name: "))
)
((and (eq (type ob) 'LIST)
(vlax-method-applicable-p (vlax-ename->vla-object (car ob)) 'getboundingbox))
(setq bn (cdr (assoc 2 (entget (car ob))))))))
(tblsearch "BLOCK" bn)
bn
(setq ss(ssget "_X" (list '(0 . "INSERT")'(410 . "Model")(cons 2 bn))))
)
(progn
(vla-zoomextents (vlax-get-acad-object))
(repeat (setq i (sslength ss))
(vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'mn'mx)
(setq mnp (trans (vlax-safearray->list mn) 0 1))
(setq mxp (trans (vlax-safearray->list mx) 0 1))
(if (< (car (mapcar '- mxp mnp)) (cadr (mapcar '- mxp mnp)))
(prp mnp mxp)
(prl mnp mxp)
)
)
)
(princ "\nNo Blocks Selected: ")
)(princ)
) 您好nura235,
像这样的?
7
HTH公司
亨里克 下面是通过自动查找标题“块”在模型空间中绘制所有标题块的另一个示例。您可以做的额外事情之一是从标题块中提取图纸编号,并将其添加到文件名中。将需要标题栏dwg或块名称和属性标记名称来更改代码。我添加了一个更高版本的plot all,如plot by range,第4-7页,这可以添加,也可以在这里发布,但会找到布局,但方法相同。
8 @hmsilva:谢谢你的时间和努力,你的代码按我的意愿为我工作。
@比格尔:感谢您和cadtutor论坛帮助我们这些不具备vlisp知识的人。 不客气,nura235
很高兴我能帮忙
亨里克
页:
[1]