池塘花香 发表于 2011-3-17 23:25:53

如何实现对块中图元的标注?

最近遇到一个难题,就是对块中圆的标注。

(setq en (nentsel "\n选择圆: "))
(command "DIMDIAMETER" en pause)

想获取块中图元的名称不难,可是想对其标注就难了,因为块中的图元名是在当前模型中没有的,所以标注时自然也无法标注。



池塘花香 发表于 2011-3-18 13:38:51

本帖最后由 池塘花香 于 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:30:49

本帖最后由 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)
)

yoyoho 发表于 2011-3-18 17:32:57

感谢楼主分享学习!

池塘花香 发表于 2011-3-22 00:38:27

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 ...

一个新的思路,谢谢,准备试试。

artken 发表于 2011-10-6 13:49:54

如何实现对块中图元的标注?

xyp1964 发表于 2011-10-6 14:24:53

(command"dim1""rad" pause "" "")

10410024 发表于 2011-10-27 13:59:17

houncle 发表于 2011-11-12 19:08:41

学习了.
页: [1]
查看完整版本: 如何实现对块中图元的标注?