irneb 发表于 2022-7-6 10:41:56

无论如何。。。下面是:
(vl-load-com)

(defun c:be (/ opt ss n)
(setq *be:selection* nil)
(if *be:reactor*
   (setq *be:reactor* (vlr-remove *be:reactor*))
)
(initget "-2d -3d Reference")
(if (setq opt (nentselp "\nSelect block entity or [-2d/-3d/Ref]: "))
   (cond
   ((= (type opt) 'STR)
      (if (wcmatch opt "-2d,-3d")
      (setq opt (strcat "(Part Number)" opt))
      )
      (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 opt))))
      (progn
          (setq n (sslength ss))
          (while (>= (setq n (1- n)) 0)
            (setq *be:selection* (cons (ssname ss n) *be:selection*))
          )
          (VLR-Reaction-Set (setq *be:reactor* (vlr-editor-reactor "BE")) :vlr-commandEnded 'be:CallBack)
          (setq ss (ssadd (car *be:selection*)))
          (command "._ZOOM" "_Object" ss "")
          (c:BE1)
      )
      )
   )

   ((= (type opt) 'LIST)
      (command ".-RefEdit" opt "_Ok")
      (while (> (getvar "CMDACTIVE") 0) (command ""))
   )
   )
)
(princ)
)

(defun be:CallBack (ro ci / ss)
(if (eq (strcase (car ci)) "REFCLOSE")
   (progn
   (setq ss (ssadd (car *be:selection*)))
   (or *ActiveDoc* (setq *ActiveDoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
   (sssetfirst nil ss)
   (vla-SendCommand *ActiveDoc* "._ZOOM\n_Object\n")
   (vla-SendCommand *ActiveDoc* "BE1\n")
   )
)
(if (and (not *be:selection*) *be:reactor*)
   (setq *be:reactor* (vlr-remove *be:reactor*))
)
(princ)
)

(defun c:BE1 (/ ss)
(setq ss             (ssadd (car *be:selection*))
       *be:selection* (cdr *be:selection*)
)
(sssetfirst nil ss)
(command ".-RefEdit" "_Ok")
(while (> (getvar "CMDACTIVE") 0) (command ""))
)

;; Clear reactors
(setq rlst (vlr-reactors))
(foreach item rlst
(foreach ro (cdr item)
   (if (= "BE" (vlr-data ro))
   (vlr-remove ro)
   ) ;_ end of if
) ;_ end of foreach
) ;_ end of foreach
(setq *be:selection* nil)

pBe 发表于 2022-7-6 10:44:25

哇!
 
你确实为反应堆写了一个。
我稍后再查。。。忙于工作

irneb 发表于 2022-7-6 10:47:57

事实上我不明白你为什么要这么做。您正在编辑块。然后,一旦完成编辑,就可以再次编辑它。冲洗并重复每个块的副本。
 
对不起,也许我只是愚蠢

KRBeckman 发表于 2022-7-6 10:50:27

我不想使用它,因为Bedit不会在适当的位置编辑块。。。它会打开块编辑器,我宁愿在图形中编辑块,因为我使用其他块的参考点。
 
不确定它是否有用,但我所有的图形和块都已标准化,因此每个块都在(0,0,0)处有一个插入点,并且在每个块中(0,0,0)处有一个点实体。这会使这成为可能吗?

KRBeckman 发表于 2022-7-6 10:53:38

 
这是原帖子的问题吗?

irneb 发表于 2022-7-6 10:56:20

不,这是关于我在第11篇文章中写的代码。基本上,它会选择所有名为Reference的块。如果有多个,它将对每个。。。等待用户关闭参照编辑,然后再转到下一个。但如果它是一个块:如果你编辑了一个,你就编辑了所有的块。因此,为什么需要再次编辑第二份? 
顺便说一句,我讨厌使用RefEdit,它会导致出现错误、奇怪的图层/样式名称、带有关联DIM和图案填充的丑陋东西,等等。我更喜欢使用外部参照,然后将一个覆盖到另一个,这样我就可以获得每个点之间的那些参照。但如果你是被迫的,那就顺其自然吧。无论如何,在pBe和我之间,我想我们已经解决了你的请求,不是吗?

KRBeckman 发表于 2022-7-6 11:02:23

 
我不是在寻找编辑多个块的方法。。。我只是想用一种简便的方法来指定我在绝大多数绘图中使用的三个块中的哪一个,我想编辑而不必单击。
 
 
真的,我从来没有遇到过任何问题。。。此外,我认为我没有很好地描述我第一次尝试做的事情,因为我认为这比我需要的要复杂得多,但感谢你在这一点上的帮助。

irneb 发表于 2022-7-6 11:03:39

无论如何欢迎你
 
所以重读你原来的帖子。。。答案是在发出-RefEdit命令之前先使用sssetfirst。

KRBeckman 发表于 2022-7-6 11:09:32

 
啊,打得好,从没想过在激活命令之前选择对象。。。如果其他人感兴趣,我会得到以下信息:
 
7
 
再次感谢大家的帮助!!!
页: 1 [2]
查看完整版本: 块编辑Lisp