如何实现对块中图元的标注?
最近遇到一个难题,就是对块中圆的标注。(setq en (nentsel "\n选择圆: "))
(command "DIMDIAMETER" en pause)
想获取块中图元的名称不难,可是想对其标注就难了,因为块中的图元名是在当前模型中没有的,所以标注时自然也无法标注。
本帖最后由 池塘花香 于 2011-3-18 13:39 编辑
找了一个折中的方法,绘制一个圆,然后标这个圆,再把这个圆删除
不知道大家有没有更好的方法
(setq en (nentsel "\n选择块的外圆: "))
(setq cen (nth 3 (nth 2 en))
entab (entget (car en))
cir (cdr (assoc 40 entab))
clay(cdr (assoc 8 entab))
la (getvar "clayer")
) ;end of setq
(scale)
(setvar "clayer" clay)
(command "circle" cen cir)
(setvar "clayer" la)
(command "DIMDIAMETER" (list (setq csel (entlast)) cen) pause)
(command "erase" csel "") 本帖最后由 langjs 于 2011-3-18 15:39 编辑
用了一个笨方法:
(defun C:kbz (/ cen ent ent1 i kming name name1 pt pt1 pt2 ss tt)
(setq $orr *error*)
(setq *error* #err1) ; 当程序出错时就会执行#err函数
(setvar "cmdecho" 0) ; 关闭命令响应
(command ".UNDO" "BE") ; 设置UNDO起点
(setq tt 1)
(while (= tt 1)
(setq name (car (entsel "\n选择一个块:")))
(setq ent (entget name))
(if (= (cdr (assoc 0 ent)) "INSERT")
(setq tt 2)
)
)
(if (= tt 2)
(progn
(setq PT1 (cdr (assoc 10 ent))); 取得块的插入点
(setq kming (cdr (assoc 2 ent))) ; 取得块的名称
(command ".explode" name) ; 打散图块
(setq ss (ssget "p")) ; 获取打散图块图元选择集
(setq i 0)
(while (< i (sslength ss))
(setq name1 (ssname ss i))
(setq ent1 (entget name1))
(if (= (cdr (assoc 0 ent1)) "CIRCLE")
(progn
(setq PT2 (cdr (assoc 10 ent1)))
(command "DIMDIAMETER" (list name1 PT2) pause)
)
(princ)
) ; end_if
(setq i (+ i 1))
)
(command "erase" SS "")
(command "INSERT" kming PT1 1 1 0) ; 插入块,将刚刚删除的块显示出来。
(command ".UNDO" "E") ; 设置UNDO终点
(setq *error* $orr)
)
)
(princ)
)
;;; 出错处理函数
(defun #err1 (s)
(command ".UNDO" "E") ; 设置UNDO终点
(command ".UNDO" "") ; 后退一步
(princ)
(setq *error* $orr)
)
感谢楼主分享学习! langjs 发表于 2011-3-18 15:30 static/image/common/back.gif
用了一个笨方法:
(defun C:kbz (/ cen ent ent1 i kming name name1 pt pt1 pt2 ss tt)
(setq $orr *e ...
一个新的思路,谢谢,准备试试。 如何实现对块中图元的标注? (command"dim1""rad" pause "" "") 学习了.
页:
[1]