乐筑天下

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

[编程交流] 超级清除lisp只能这样工作

[复制链接]

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:15:54 | 显示全部楼层 |阅读模式
因此,我在编写lisp例程以清除绘图中的所有内容时遇到了问题。这个问题必须处理wblock命令。它似乎有一半的时间可以工作,而另一半的时间它在代码的Y部分出错,这让我感到困惑。我的代码如下
  1. (defun c:superpurge (/ file path pathfile *error* oldecho olddia)
  2. (vl-load-com)
  3. (defun *error* (msg)   ;This defines the error function so that if something goes wrong, it exits quietly and resets the variables
  4.    (if oldecho
  5.      (setvar 'cmdecho oldecho)
  6.    )
  7.    (if olddia
  8.      (setvar 'CMDDIA olddia)
  9.    )
  10.    (if (not
  11.   (member msg '("Function cancelled" "quit / exit abort"))
  12. )
  13.      (princ (strcat "\nError: " msg))
  14.    )
  15.    (princ)
  16. )
  17. (setq oldecho (getvar 'CMDECHO)) ;I am setting the variable oldecho equal to the variable cmdecho
  18. (setvar "CMDECHO" 0)
  19. (setq olddia (getvar 'CMDDIA))
  20. (setvar "CMDDIA" 0)
  21. (cond
  22.    ((or (= (getvar 'writestat) 0) ;If the drawing is read only or hasn't ever been saved ie Drawing1, then it won't run
  23. (= (getvar 'DWGTITLED) 0)
  24.     )
  25.     (alert
  26.       "\n Superpurge cannot be used in files that haven't been named or are read only."
  27.     )
  28.    )
  29.    (t     ;This is the "else" portion of the cond statement
  30.     (setq file (getvar "DWGNAME")) ;This gets the drawing name
  31.     (setq path (getvar "DWGPREFIX")) ;This gets the drawing's path
  32.     (setq pathfile (strcat path file)) ;This combines the two variables into one
  33.     (repeat 3
  34.       (vl-cmdf "._AECCPURGESTYLES")
  35.       (while (eq (logand (getvar "cmdactive") 1) 1)
  36. (command "_Y")
  37.       )
  38.     )
  39.     (command "._PURGE" "_A" "*" "_N")
  40.     (command "._PURGE" "_R" "*" "_N")
  41.     (command-s "-WBLOCK" pathfile "_Y" "*" "_Y")
  42.     ;Here I am running wblock and saving over the current drawing
  43.     (princ "\nYour drawing is now squeaky clean")
  44.    )
  45. )
  46. (setvar "CMDECHO" oldecho)  ;Resetting the variable cmdecho to its original value
  47. (setvar "CMDDIA" olddia)
  48. (princ)    ;Exit quietly
  49. )
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:26:06 | 显示全部楼层
所以我一直在搞乱它,并阅读了代码无数次,我没有发现任何错误。似乎没有任何押韵或理由说明它何时起作用,何时不起作用,只是wblock命令不想总是起作用。我能想到的代码的唯一其他改进是将清除样式的重复函数更改为while not语句,当清除样式给出“没有未使用的样式”时停止有没有一种方法可以纠正while语句来实现这一点?我选择重复3次,只是因为我从未见过需要运行3次以上的场景,但如果没有必要,最好不要再次运行Aeccpurgestyles,因为这是代码中最慢的部分。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:40:52 | 显示全部楼层
不知道代码的其余部分,但我一直讨厌所有的命令echo,所以现在我使用
 
 
  1. (defun LG_Purge () (vla-purgeall (vla-get-activeDocument (vlax-get-acad-object))))

 
 
你可以随时调用这个函数。
 
 
Gr.Rlx
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:55:21 | 显示全部楼层
请注意,此方法将忽略冗余的多重引线样式。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 19:05:13 | 显示全部楼层
RLX,谢谢你的代码,这是绕过命令echo的一种有用方法(我觉得它们很讨厌)。Lee,那么代码是否遗漏了所有类型的样式,比如所有AECC样式(曲面样式、直线和曲线等),或者仅遗漏了多重引线样式?Lee,我试图为清除样式部分编写一个循环,但直到每个样式都像我希望的那样被清除,它才继续运行
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:09:19 | 显示全部楼层
 
我以前用过
  1. 3

 
你可以搜索purger。lsp开启http://jtbworld.com/autocad-purger-lsp
 
gr.Rlx
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:18:59 | 显示全部楼层
 
恐怕我不能说——我没有使用垂直应用程序的经验。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:42 , Processed in 0.391510 second(s), 66 queries .

© 2020-2025 乐筑天下

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