广告:把块内标注_dimlinear _dimaligned移出块
同一块,如果有多个,每个块标注太麻烦。但如果是镜向的,标注看起来是倒过来的,确实不爽。根据老迈建议,把标注移出块
下面是主程序(只有主程序)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;[功能]将块内标注在块外重新生成
;;只重生块内_dimlinear _dimaligned,其余标注删除
;;将块内(0 0)转到世界坐标系(MAT:TransNested '(0 0) (list e) 2 0)
;;第1步,找到块内标注,假如只有一个,并删除(vla-delete (vlax-ename->vla-object (car (nentsel))))
;;第2步,所有同名块列表
;;第3步,找到标注的三个点
;;第4步,分别把三个对各块转换,重新生成标注
(defun C:RD (/ E EN NAME SS)
(vl-cmdf "._ucs" "");以简化程序
(while (setq ss (LM:ssget "\n >选择块<移出块内标注>:" '(((0 . "INSERT")))))
(setq e (ssname ss 0))
(setq en (entget e))
(setq name (cdr (assoc 2 en)))
(setq ss (ssget "X" (list '(0 . "INSERT") (cons 2 name))))
(_HH:RD ss name)
)
(princ"\n 重生块内_dimlinear _dimaligned,其余标注删除")
(princ)
)
(princ"\n 命令:RD,重生块内_dimlinear _dimaligned,其余标注删除")
(princ)
(defun _HH:RD (ss name / B1 B1DEL EN FLAG L P1 P2 P3 str1)
(setq b1 (TBLOBJNAME "block" name))
;;第1步,找到块内标注,假如只有一个,并删除(vla-delete (vlax-ename->vla-object (car (nentsel))))
(setq Flag T)
(while (and Flag (setq b1 (entnext b1)))
(setq en (entget b1))
(setq name (cdr (assoc 0 en)))
(if(wcmatch name "*DIMENSION")
(progn
(setq Flag nil)
(setq b1Del b1)
)
)
)
(if (not (wcmatch name "*DIMENSION"))
(alert "块内没有标注")
(progn
(setq name (cdr (assoc 2 en)));块名
(setq b1 (TBLOBJNAME "block" name))
;;第3步,找到标注的三个点
(setq Flag T)
(while (and Flag (setq b1 (entnext b1)))
(setq en (entget b1))
(if (= (cdr (assoc 0 en)) "MTEXT")
(progn
;;非等比块要改为假尺寸
(setq str1 (cdr (assoc 1 en)))
(setq p1 (cdr (assoc 10 en)))
(setq b1 (entnext b1))
(setq en (entget b1));第1个"POINT"
(setq p2 (cdr (assoc 10 en)))
(setq b1 (entnext b1))
(setq en (entget b1));第2个"POINT"
(setq p3 (cdr (assoc 10 en)))
(setq Flag nil)
)
)
)
)
)
(if (and (vl-consp p1) (vl-consp p2) (vl-consp p3))
(progn
;;选择集转为vla列表
(setq L (LM:ss->vla ss))
(vla-delete (vlax-ename->vla-object b1Del));删除块内对象
(mapcar (function (lambda(x) (vla-update x))) L )
(_HH:RD:do p1 p2 p3 L str1)
)
(prompt "\n ......标注异常,没找到标注的3个定位点")
)
)
本帖最后由 你有种再说一遍 于 2024-5-30 16:14 编辑
建议不要做块,而是制作索引和选择集事件,通过事件获取索引,这样就能不修改显示驱动下实现这个功能.
简而言之自己实现了"组块"
那么怎么保存索引呢?制作一个bson,把索引保存进去,把dwg保存在末尾...
你有种再说一遍 发表于 2024-5-30 16:10
建议不要做块,而是制作索引和选择集事件,通过事件获取索引,这样就能不修改显示驱动下实现这个功能.
简而言 ...
这种高级方法只有靠您了 感谢黄大师的分享! 这个程序非常的实用,可否麻烦黄大师整一个完整的Lsp或fas呢,让我们这些普通的不懂lsp也能用上,谢谢黄大师了 黄工,下面这个删所有标主的程序能不能改成把所有标注移出块
http://bbs.mjtd.com/thread-188717-1-1.html panliang9 发表于 2024-5-31 12:09
黄工,下面这个删所有标主的程序能不能改成把所有标注移出块
http://bbs.mjtd.com/thread-188717-1-1.ht ...
删除容易,遍历块,再遍历块成员,发现是标注,删除就行了。 我现在把所有标注移出块,都是先用下面这个程序把所有标注移到一个层上,然后锁死该层,再将所有块炸开,标注因为是在锁死层上,就移到外面了。
找到一个工具只能一个一个的选,黄大师的能一次一道块外面,真的是非常厉害
页:
[1]