需要此lisp的帮助
有时,文件中包含所有项目图形。一个布局上的所有框架(如附件所示)
所以我写了这个简单的lisp
(defun c:Mltiplt ()
(alert "make changes in next window \nthen click on Apply to Layout \nthen click on Canel")
(command "_plot")
(while t
(setq p1 (getpoint))
(setq p2 (getpoint))
(command "-plot" "y" "" "" "" "" "" "" "w"
p1
p2
"" "" "" "" "" "" "" "" "")
)
(princ)
)
我面临两个问题
-如何打开打印窗口
出现此错误消息
Command: (command "_plot")
nil
-我可以改变WHILE循环中的布局吗?
谢谢你的帮助
你好
要打开AutoCAD绘图窗口,请直接在(命令“_plot”)之前添加(initdia)。这允许您通过启动“打印”对话框来替代命令行
(initdia)
(command "_plot")
为了控制循环,我会改变
(while t
到
(while
(and
(setq p1 (getpoint))
(setq p2 (getpoint))
...)
工作完美
但是,当启动打印对话框并在打印区域中选择窗口时,该功能被取消
Command: MLTIPLT
Invalid window specification.
; error: Function cancelled
Specify first corner: *Cancel*
*Invalid*
没有解决问题
谢谢你的帮助 我从不需要重置我的initdia
我使用“.-plot”,重复和vla getboundingbox进行循环
(setq ss (ssget "x" (list '(0 . "INSERT")(cons 2 Blkname)(cons 410 (getvar 'CTAB)))))
(repeat (setq i (sslength ss))
(vla-getboundingbox
(setq blockobject
(vlax-ename->vla-object (ssname ss (setq i (1- i))))
)
'lowerleft 'upperright
)
(command ".-plot" "Y" "" "pltDevice" "ANSI B (11.00 x 17.00 Inches)"
"Inches" "Landscape"
"N" "Window" (trans (vlax-safearray->list lowerleft) 0 1)
(trans (vlax-safearray->listupperright) 0 1) "Fit" "Center" "Y" "pltStyles" "Y" "Y" "N" "N"
"N" "N" "Y")
希望这有帮助 好的,我知道发生了什么。起初我认为这可能与dialogFlag有关,您可以将其添加到(initdia)中,但事实并非如此。
当启动“打印”对话框并按下“选择窗口”按钮时,实际上是进入循环,而不是根据打印窗口拾取点。如图所示添加双暂停似乎可行,但您可能需要对此进行测试
(defun c:Mltiplt ()
(alert "make changes in next window \nthen click on Apply to Layout \nthen click on Canel")
(INITDIA)
(command "_plot" pause pause )
(while
(AND
(setq p1 (getpoint "\nBottom left"))
(setq p2 (getpoint "\nUpper right"))
)
(command "-plot" "y" "" "" "" "" "" "" "w"
p1
p2
"" "" "" "" "" "" "" "" "")
)
(princ)
) 哦现在我知道OP想要做什么了。启动绘图对话框以设置第一个窗口选择的参数。然后使用“-plot”。
我的错。
聪明的家伙。 我更喜欢Pbe自动绘制所有标题栏,或者选择你想要的标题栏,或者选择较小的标题栏,然后全力以赴,或者一个可以是各种组合?
如果需要,可以选择1个标题,然后使用选择集而不是“X”更改绘图比例。
我只是说全部绘图,我使用标题栏插入点并计算出绘图“窗口”坐标,因为我知道标题栏页的大小,我有4个选项A3 A1 tiff PDF。
为什么不一起忽略默认的绘图窗口,只问默认的问题 谢谢你的帮助 在选择另一个布局时,有没有办法保持lisp的工作状态? 是的,如果你做了一个外部循环,即布局选项卡,那么它将转到下一个并再次运行。
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for lay (vla-get-Layouts doc)
(setq plotabs (cons (vla-get-name lay) plotabs))
)
(setq plottablist (acad_strlsort plotabs))
(setq len (length plottablist))
(setq x 0)
(repeat len
(setq name (nth x plottablist))
(princ name)
(if (/= name "Model")
(progn
(setvar "ctab" name)
your code
)
页:
[1]
2