asos2000 发表于 2022-7-6 08:01:16

需要此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循环中的布局吗?
 
谢谢你的帮助

jammie 发表于 2022-7-6 08:08:20

你好
 
要打开AutoCAD绘图窗口,请直接在(命令“_plot”)之前添加(initdia)。这允许您通过启动“打印”对话框来替代命令行
 
(initdia)
(command "_plot")
 
为了控制循环,我会改变
 
(while t
 

 
(while
   (and
   (setq p1 (getpoint))
   (setq p2 (getpoint))
   ...)

asos2000 发表于 2022-7-6 08:13:08

工作完美
 
但是,当启动打印对话框并在打印区域中选择窗口时,该功能被取消
Command: MLTIPLT

Invalid window specification.
; error: Function cancelled

Specify first corner: *Cancel*
*Invalid*
 
没有解决问题
 
谢谢你的帮助

pBe 发表于 2022-7-6 08:16:22

我从不需要重置我的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")

 
希望这有帮助

jammie 发表于 2022-7-6 08:21:25

好的,我知道发生了什么。起初我认为这可能与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)
)

pBe 发表于 2022-7-6 08:29:22

哦现在我知道OP想要做什么了。启动绘图对话框以设置第一个窗口选择的参数。然后使用“-plot”。
我的错。
 
聪明的家伙。

BIGAL 发表于 2022-7-6 08:32:29

我更喜欢Pbe自动绘制所有标题栏,或者选择你想要的标题栏,或者选择较小的标题栏,然后全力以赴,或者一个可以是各种组合?
 
如果需要,可以选择1个标题,然后使用选择集而不是“X”更改绘图比例。
 
我只是说全部绘图,我使用标题栏插入点并计算出绘图“窗口”坐标,因为我知道标题栏页的大小,我有4个选项A3 A1 tiff PDF。
 
为什么不一起忽略默认的绘图窗口,只问默认的问题

asos2000 发表于 2022-7-6 08:36:54

谢谢你的帮助

asos2000 发表于 2022-7-6 08:43:49

在选择另一个布局时,有没有办法保持lisp的工作状态?

BIGAL 发表于 2022-7-6 08:46:49

是的,如果你做了一个外部循环,即布局选项卡,那么它将转到下一个并再次运行。
 
(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
查看完整版本: 需要此lisp的帮助