乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 78|回复: 12

[编程交流] 需要此lisp的帮助

[复制链接]

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 08:01:16 | 显示全部楼层 |阅读模式
有时,文件中包含所有项目图形。
一个布局上的所有框架(如附件所示)
 
所以我写了这个简单的lisp
  1. (defun c:Mltiplt ()
  2. (alert "make changes in next window \nthen click on Apply to Layout \nthen click on Canel")
  3. [color="red"](command "_plot")[/color]
  4. (while t
  5.    (setq p1 (getpoint))
  6.    (setq p2 (getpoint))
  7.    (command "-plot" "y" "" "" "" "" "" "" "w"
  8.      p1
  9.      p2
  10.      "" "" "" "" "" "" "" "" "")
  11.    )
  12. (princ)
  13. )

 
我面临两个问题
-如何打开打印窗口
出现此错误消息
  1. Command: (command "_plot")
  2. nil

 
-我可以改变WHILE循环中的布局吗?
 
谢谢你的帮助
090116v1vz581g8vzb18c4.png
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 08:08:20 | 显示全部楼层
你好
 
要打开AutoCAD绘图窗口,请直接在(命令“_plot”)之前添加(initdia)。这允许您通过启动“打印”对话框来替代命令行
 
  1. (initdia)
  2. (command "_plot")

 
为了控制循环,我会改变
 
  1. (while t

 

 
  1.   (while
  2.    (and
  3.    (setq p1 (getpoint))
  4.    (setq p2 (getpoint))
  5.    ...)
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 08:13:08 | 显示全部楼层
工作完美
 
但是,当启动打印对话框并在打印区域中选择窗口时,该功能被取消
  1. Command: MLTIPLT
  2. Invalid window specification.
  3. ; error: Function cancelled
  4. Specify first corner: *Cancel*
  5. *Invalid*

 
没有解决问题
 
谢谢你的帮助
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:16:22 | 显示全部楼层
我从不需要重置我的initdia
我使用“.-plot”,重复和vla getboundingbox进行循环
 
  1. (setq ss (ssget "x" (list '(0 . "INSERT")(cons 2 [color=blue][b]Blkname[/b][/color])(cons 410 (getvar 'CTAB)))))
  2. (repeat (setq i (sslength ss))
  3. (vla-getboundingbox
  4.        (setq blockobject
  5.          (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  6.        )
  7.        'lowerleft 'upperright
  8.      )
  9. (command [color=blue][b]".-plot"[/b][/color] "Y" "" "pltDevice"   "ANSI B (11.00 x 17.00 Inches)"
  10.    "Inches" "Landscape"
  11.    "N" "Window" (trans (vlax-safearray->list lowerleft) 0 1)
  12.    (trans (vlax-safearray->list  upperright) 0 1) "Fit" "Center" "Y" "pltStyles" "Y" "Y" "N" "N"
  13.    "N" "N" "Y")

 
希望这有帮助
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 08:21:25 | 显示全部楼层
好的,我知道发生了什么。起初我认为这可能与dialogFlag有关,您可以将其添加到(initdia)中,但事实并非如此。
 
当启动“打印”对话框并按下“选择窗口”按钮时,实际上是进入循环,而不是根据打印窗口拾取点。如图所示添加双暂停似乎可行,但您可能需要对此进行测试
 
 
  1. (defun c:Mltiplt ()
  2. (alert "make changes in next window \nthen click on Apply to Layout \nthen click on Canel")
  3. (INITDIA)
  4. (command "_plot" pause pause )
  5. (while
  6.    (AND
  7.    (setq p1 (getpoint "\nBottom left"))
  8.    (setq p2 (getpoint "\nUpper right"))
  9.    )
  10.    
  11.        (command "-plot" "y" "" "" "" "" "" "" "w"
  12.      p1
  13.      p2
  14.      "" "" "" "" "" "" "" "" "")
  15.    )
  16.    
  17.    
  18. (princ)
  19. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:29:22 | 显示全部楼层
哦现在我知道OP想要做什么了。启动绘图对话框以设置第一个窗口选择的参数。然后使用“-plot”。
我的错。
 
聪明的家伙。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 08:36:54 | 显示全部楼层
谢谢你的帮助
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 08:43:49 | 显示全部楼层
在选择另一个布局时,有没有办法保持lisp的工作状态?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:46:49 | 显示全部楼层
是的,如果你做了一个外部循环,即布局选项卡,那么它将转到下一个并再次运行。
 
  1. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  2. (vlax-for lay (vla-get-Layouts doc)
  3. (setq plotabs (cons (vla-get-name lay) plotabs))
  4. )
  5. (setq plottablist (acad_strlsort plotabs))
  6. (setq len (length plottablist))
  7. (setq x 0)
  8. (repeat len
  9. (setq name (nth x plottablist))
  10. (princ name)
  11. (if (/= name "Model")
  12.    (progn
  13.      (setvar "ctab" name)
  14. your code
  15. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 21:55 , Processed in 0.492152 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表