- 积分
- 22406
- 明经币
- 个
- 注册时间
- 2008-3-8
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2012-9-14 08:17:42
|
显示全部楼层
本帖最后由 smartstar 于 2012-9-14 08:22 编辑
楼主有几个可以改进的地方
1、增加对转角标注的处理,修改如下:
①选集改成:
(setq ss (ssget ":S" '((0 . "*TEXT,DIMENSION,TCH_DRAWINGNAME,TCH_ELEVATION,INSERT,ATTDEF,ATTRIB"))))
②点选选改成:
(if (= (caar (setq ss_data (ssnamex ss 0))) 1)
(progn ; 点选时
(setq ent (ssname ss 0))
(if (= "DIMENSION" (setq entype (cdr (assoc 0 (entget ent)))))
(setq en1 ent
ob (vlax-ename->vla-object en1)
)
(setq pt (trans (cadr (last (car ss_data))) 0 1)
en1 (car (nentselp pt))
en1_data (entget en1)
entype (cdr (assoc 0 en1_data))
ob (vlax-ename->vla-object en1)
)
)
(wenzishua entype ob source_text en1 ent)
(princ)
)
③wenzishua 函数 增加处理:
(if (= "DIMENSION" (cdr (assoc 0 (entget ent))))
(progn
(vla-put-Textoverride ob source_text)
(entupd en1)
(entupd ent)
)
)
2,楼主可以添加对多行位子和标注文字提取后字符串的处理(tsrdel '(\P \A1";") source_text)))
(defun tsrdel (lst w_tsr)
(foreach n lst
(while (vl-string-search n w_tsr)
(setq w_tsr (vl-string-subst "" n w_tsr))
)
)
w_tsr
)
3,可能ark-nentsel 函数代替nentsel函数
(defun ark-nentsel (msg)
(while
(progn
(setvar 'ERRNO 0)
(setq sel (nentsel msg))
(cond
((= 7 (getvar 'ERRNO))
(princ "\n没有选中,请重新尝试!")
)
((not sel)
nil
)
((listp sel)
(setq en_data (entget (car sel))
source_text (cdr (assoc 1 en_data))
)
(if (null source_text)
(princ "\n对象类型错误,请重新选择!")
)
)
)
)
)
sel
)
4,未能解决的问题:
把块中转角标注刷文字后,当炸开块后,标注会变回原来的数值。希望楼主能够解决。
以上是个人愚见,若有不对的地方,请楼主包涵和指教。谢谢楼主这么好的程序。
|
|