panliang9 发表于 2017-12-19 15:30:56

块编辑从在位编辑,切换到块编辑里去

块 在位编辑和 块编辑器的自由切换。

块的编辑有两种方式 ,一种是在位编辑器(REFEDIT),另一种是块独立编辑器编辑(BEDIT),两种编辑方式都有各自的特点。

1、块的在位编辑可以实时的看到插入块的位置的其它元素,而且这些元素可以调整退色度,可以锁定块以外的对象,但是在这个编辑器中不能带基点复制对象,也不能粘粘为块,而且周围的对象虽然退色了,但还是容易干扰块的编辑。

2、块编辑里编辑块,是一个独立的环境,同围没有其它元素干扰,可以带基点复制,还可以粘贴为块。但是在这里编辑镶套块的时候只能一层一层的进去。

我经常在这两种不同的环境下编辑块,基于不同的需要,想在两个环境中切来切去,在进行在位编辑的时候可以切到块编辑器中去,因为想要带基点复制和粘贴为块。

一个同事帮我写了一个程序,可以在位块编辑的时候切换到块编辑器里去,非常方便,但第二个问题一定没解决,就是重新回到在位块编辑里去,我知道同一个块可能会有很实例,但不特定指定某一个实例,胡乱指定个位置实例在位编辑也好啊。
现在把在位编辑切换到块编辑器的代码贴出来,希望能够抛砖引玉,大家能不能尝试下块编辑器切换到在位块编辑的代码。
——————————
(defun c:be()
(setq refname(getvar "refeditname"))
(COMMAND "REFCLOSE" "s")
(command "-bedit" refname)
)
————————————

taoyi0727 发表于 2019-5-17 12:28:25

改了下个人觉得这样好用点
;在位编辑块
(defun c:tt (/ e)
        (if (/= (getvar "refeditname") "");获取正在编辑块的名称
                (COMMAND "_.REFCLOSE" "s");保存在位编辑块
                (progn
                        (while (not (if (setq e (entsel "\n选择块"))
                                                                                (if (= (cdr (assoc 0 (entget (car e)))) "INSERT")
                                                                                        t
                                                                                )
                                                                        )
                                               )
                        )
                        (if e
                                (command "-refedit" (cadr e) "O" "A" "Y");在位编辑块
                        )
                )
        )
(princ)
)

panliang9 发表于 2017-12-20 13:31:38

本帖最后由 panliang9 于 2017-12-20 13:34 编辑

黄工帮我解决了这个问题,现在把代码发上来和大家分享一下。
需要先进入在位块编辑,后面就可以反复在两个状态之间切换了。
代码:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;位编辑与块编辑器切换 命令r
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BY黄明儒
;;*BEPOINT*全局变量
;;首先必须选择进入块,后来再次输入r则是操作的这个块
(defun c:r (/ E EN NAME)
(if (setq e
             (entsel
               "\n [选择块,进入在位编辑/在位编辑与块编辑器切换]<在位编辑与块编辑器 切换>"
             )
      )
    (progn
      (setq *BePoint* (cadr e))
      (setq e (car e))
      (setq en (entget e))
      (setq Name (cdr (assoc 2 en)))
      (command "-refedit" *BePoint* "O" "A" "Y")
    )
    (cond ((and (/= (setq NAME (getvar "refeditname")) "") *BePoint*)
                                        ;处于在位编辑状态
         (COMMAND "_.REFCLOSE" "s")
         (command "_.bedit" NAME)
          )
          (*BePoint*                        ;这里无法判断是否处理块编辑器
         (COMMAND "_.BCLOSE" "s")
         (command "-refedit" *BePoint* "O" "A" "Y")
          )
    )
)
(princ "\n 在位编辑与块编辑器切换 命令r")
(princ)
)
(princ "\n 在位编辑与块编辑器切换 命令r")
(princ)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;位编辑与块编辑器切换 命令r

wudechao 发表于 2019-5-15 20:16:39

panliang9 发表于 2017-12-20 13:31
黄工帮我解决了这个问题,现在把代码发上来和大家分享一下。
需要先进入在位块编辑,后面就可以反复在两个 ...

不支持嵌套块最外面一层的块。能否改进?

xinxirong 发表于 2017-12-20 14:18:17

说实在,bedit和refedit两个命令都很慢,不喜欢。习惯直接操作块内对象

panliang9 发表于 2017-12-20 15:23:04

很慢是因为块生成刷新很慢呢,还是因为需要进入对话框!

改写命令后就不用进对话框了!

yanchao316 发表于 2017-12-21 20:25:45

好东西,很实用,谢谢分享

panliang9 发表于 2019-5-16 08:56:01

n

本帖最后由 panliang9 于 2019-5-16 08:57 编辑

发个例图看下。

wudechao 发表于 2019-5-16 22:21:01

panliang9 发表于 2019-5-16 08:56
发个例图看下。

样板在这里。

taoyi0727 发表于 2019-5-17 12:27:28

学习了这个好用
页: [1] 2
查看完整版本: 块编辑从在位编辑,切换到块编辑里去