明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5813|回复: 15

[源码] 块编辑从在位编辑,切换到块编辑里去

[复制链接]
发表于 2017-12-19 15:30:56 | 显示全部楼层 |阅读模式
块 在位编辑和 块编辑器的自由切换。

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

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

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

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

一个同事帮我写了一个程序,可以在位块编辑的时候切换到块编辑器里去,非常方便,但第二个问题一定没解决,就是重新回到在位块编辑里去,我知道同一个块可能会有很实例,但不特定指定某一个实例,胡乱指定个位置实例在位编辑也好啊。
现在把在位编辑切换到块编辑器的代码贴出来,希望能够抛砖引玉,大家能不能尝试下块编辑器切换到在位块编辑的代码。
——————————
(defun c:be()
  (setq refname(getvar "refeditname"))
  (COMMAND "REFCLOSE" "s")
  (command "-bedit" refname)
)
————————————
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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)
)
 楼主| 发表于 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
发表于 2019-5-15 20:16:39 | 显示全部楼层
panliang9 发表于 2017-12-20 13:31
黄工帮我解决了这个问题,现在把代码发上来和大家分享一下。
需要先进入在位块编辑,后面就可以反复在两个 ...

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

点评

发个例图看一下。  发表于 2019-5-16 08:52
发表于 2017-12-20 14:18:17 来自手机 | 显示全部楼层
说实在,bedit和refedit两个命令都很慢,不喜欢。习惯直接操作块内对象
 楼主| 发表于 2017-12-20 15:23:04 | 显示全部楼层
很慢是因为块生成刷新很慢呢,还是因为需要进入对话框!

改写命令后就不用进对话框了!
发表于 2017-12-21 20:25:45 | 显示全部楼层
好东西,很实用,谢谢分享
 楼主| 发表于 2019-5-16 08:56:01 | 显示全部楼层

n

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

发个例图看下。
发表于 2019-5-16 22:21:01 | 显示全部楼层

样板在这里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2019-5-17 12:27:28 | 显示全部楼层
学习了  这个好用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 21:21 , Processed in 0.180081 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表