乐筑天下

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

[编程交流] 块编辑Lisp

[复制链接]

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 10:06:10 | 显示全部楼层 |阅读模式
我工作的95%的图形只包含3个块:“(零件号)-2D”,“(零件号)-3D”,&“Reference”,我正试图想出一种快速方法来使用“编辑块到位”功能,当你右键单击一个选定的块时,对这些块中的每一个块都可用。以下是我目前掌握的信息:
 
  1. (defun c:be ()
  2. (setvar 'cmdecho 0)
  3. (vl-load-com)
  4. (initget "-2d -3d Reference")
  5. (setq opt (nentselp "\nSelect block entity or [-2d/-3d/Ref]: "))
  6. (if (eq (type opt) 'STR)
  7.    (progn
  8.      (setq ss (ssget "_x" (list (cons 0 "INSERT"))))
  9.      (setq i 0)
  10.      (while (or (not ent) (< i (sslength ss)))
  11. (if (vl-string-search (strcase opt) (strcase (cdr (assoc 2 (entget (ssname ss i))))))
  12.   (setq ent (ssname ss i)))
  13. (setq i (+ i 1))))
  14.    (setq ent opt))
  15. (vl-cmdf "_.-refedit" ent "_o" "" "")
  16. (setvar 'cmdecho 1)
  17. (princ))

 
这几乎可以工作,唯一的问题是我认为“-refedit”命令需要一个与选择相关的点以及实体名称(可能是nentselp?),但我不知道如何将其结合起来。
 
任何帮助都将不胜感激。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:11:51 | 显示全部楼层
为什么不使用BEdit命令呢?
 
如果必须使用RefEdit,那么您是正确的,它需要一个((点1)((X1 Y1 Z1)(X2 Y2 Z2)(X3 Y3 Z3)(点2))列表作为您从nentsel获得的结果。我想您可以创建这样的点,但如何从块中生成有意义的点,更不用说如何根据块的插入将块定义中实体上的点转换为WCS,然后计算转换矩阵?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:15:11 | 显示全部楼层
这几乎也奏效了。。
 
  1. (defun c:test  (/ opt)
  2. (setvar 'cmdecho 0)
  3. (vl-load-com)
  4. (initget "DD EE FF Select")
  5. (setq opt (getkword "\nSelect block entity or [DD/EE/FF/Select]: "))
  6. (cond
  7.   ((or (= "DD" opt)
  8.      (= "EE" opt)
  9.      (= "EE" opt))
  10.              (sssetfirst nil (ssget "_x" (list '(0  . "INSERT") (cons 2 opt))))
  11.   (vl-cmdf "_.-refedit")
  12.    (while (> (getvar "CMDACTIVE") 0)
  13.     (command "_o" "" "")
  14.   )
  15. )
  16. ((= "Select" opt)
  17. (sssetfirst nil (ssget ":S" '((0 . "INSERT"))))
  18.   (vl-cmdf "_.-refedit")
  19.    (while (> (getvar "CMDACTIVE") 0)
  20.     (command "_o" "" "")
  21.   )
  22.   )
  23. )
  24. (setvar 'cmdecho 1)
  25. (princ)
  26. )

 
只有当只有一个块实例时,选择选项才能用于任何其他块。
为了爱我,我不记得在代码仍处于活动状态时将其搁置。。我知道我在什么地方读过ir。(可能在这个论坛上)
 
  1. ((or (= "DD" opt)
  2.      (= "EE" opt)
  3.      (= "EE" opt))
  4.         (setq ss (ssget "_x" (list '(0  . "INSERT") (cons 2 opt))))
  5. (setq i -1)
  6.        (while
  7.     (sssetfirst nil (ssget "_x" (list (assoc 10 (entget (ssname ss (setq i (1+ i)))))
  8.     (cons 2 opt))))
  9.   (vl-cmdf "_.-refedit")
  10.    (while (> (getvar "CMDACTIVE") 0)
  11.     (command "_o" "" "")
  12.   )
  13. )
  14. )

失败!!!
第一次计数后失败。。有人能猜出这个吗?
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:17:42 | 显示全部楼层
也许是这样
  1. (command "_.refedit" "_o")
  2. (while (> (getvar "cmdactive") 0) (command ""))
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:22:47 | 显示全部楼层
你知道吗?这实际上给了我一个想法。。。我不知道为什么它不想通过lisp工作。但如果只是一个CUI宏,它似乎可以正常工作:
在自定义项中创建一个项。崔的双击动作组称为块。使用上述宏创建一个名为“Block-双击-RefEdit”的命令,然后将其拖动到已创建的块项上。自定义“应”覆盖ACAD。崔,如果没有,则只需从ACAD中删除块项。CUI(不太理想,但由于没有删除ACAD.CUI中的“块双击”命令,因此将其添加回并不困难)。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:26:11 | 显示全部楼层
或者你是指暂停动作
  1. (command "_.refedit" pause "_o" "" "")
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:26:30 | 显示全部楼层
忘记了,您必须在双击动作组中添加BLOCKREF作为块项的对象名称。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:30:13 | 显示全部楼层
 
嗯。不过我确实用过了
我想要的是搁置Lisp代码。也许是反应堆的问题。。。。hmmmmnnnn(Pound Pound)
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:34:08 | 显示全部楼层
对好这是一件需要处理的“大”事情。关闭参照编辑后,是否要执行某些操作?这可以通过以下两种方式之一实现:
 
[列表=1]
  • 重新定义RefClose命令。确保有相同的提示。执行你想做的任何事情,然后调用。从内部参照关闭。
  • 完成反应堆查看命令-测试refclose。
    [/列表]
    无论如何,你试过宏版本吗?它对我很有效。而且它的代码要少得多。
  • 回复

    使用道具 举报

    pBe

    32

    主题

    2722

    帖子

    2666

    银币

    后起之秀

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

    铜币
    211
    发表于 2022-7-6 10:39:18 | 显示全部楼层
     
    我想你是对的。。再加上使用反应器会消耗大量内存
    此外,这不是我的帖子无论如何,但它将是整洁的,以帮助OP了。
    在while循环中。我能感觉到我几乎得到了它,但我不能完全把我的手指放在它上面。。。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-6 20:56 , Processed in 0.500431 second(s), 72 queries .

    © 2020-2025 乐筑天下

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