- (defun c:tbx() (setvar "cmdecho" 0) (setq oldos (getvar "osmode")) (setvar "osmode" 0) (setq e (entsel "\n**选择标注:")) (setq en (car e)) (start_getss) (command "copy" en "" "0,0" "0,0" "explode" (entlast)) (setq ss (getdrawss)) (setq i 0) (repeat (if ss (sslength ss) 0) (setq en0 (ssname ss i)) (setq typ (cdr (assoc 0 (entget en0)))) (if (= "MTEXT" typ) (setq mtext0 en0) (entdel en0) ) (setq i (+ i 1)) ) (setq pt (cdr (assoc 10 (entget mtext0))) hh (cdr (assoc 40 (entget mtext0))) ww (cdr (assoc 42 (entget mtext0))) rot (cdr (assoc 50 (entget mtext0))) ) (setq p0 (polar pt (+ rot (* pi 1.5)) (* hh 0.5))) (setq p1 (polar p0 (+ rot pi) (* ww 0.5))) (setq pt1 (getpoint "\n选择文字插入点:")) (command "move" mtext0 "" p1 pt1) ;(entdel en0) (command "-layer" "m" "dim" "c" 3 "dim" "") (setq pt2 (polar pt1 (+ rot(* pi 0.5)) (* hh 0.2)) pt3 (polar pt2 (+ rot pi) (* hh 0.1)) pt4 (polar pt2 rot (+ ww 0.7)) ) (command "line" pt3 pt4 "") (setq pt5 (polar pt1 (+ rot(* pi 0.5)) (* hh 0.8)) pt6 (polar pt5 (+ rot pi) (* hh 0.1)) pt7 (polar pt5 rot (+ ww 0.7)) ) (command "line" pt6 pt7 "") (command "layer" "s" "0" "") (setvar "osmode" oldos) (setvar "cmdecho" 0) (princ) ) (defun start_getss () (setq StartEnt (entlast)))(defun getdrawss () (if StartEnt (progn (setq Draw_SS (ssadd)) (setq ssss_en StartEnt) (while (setq ssss_en (entnext ssss_en)) (setq Draw_entype (cdr (assoc 0 (entget ssss_en)))) (if (and (/= (strcase Draw_entype) "ATTRIB") (/= (strcase Draw_entype) "SEQEND") ) (setq Draw_SS (ssadd ssss_en Draw_SS)) ) ) ) (setq Draw_SS (ssget "_x")) ) Draw_SS)
这行代码是选择标注 炸开 原点复制 去提取标注文字根据指定点进行移动 并画线
但是碰到圆弧标注的时候 就提取不出来了 应为炸开圆弧标注 有两个 或者4个圆弧
怎样才能把用红圈框起来的圆弧提取出来 并移动到相应的位置
想做出的效果图
烦请各位版主帮帮忙 更改一下代码 感激不敬
|