点选标注 复制标注 按指定点移动标注并画线 ???→圆弧 符号的提取
(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个圆弧
怎样才能把用红圈框起来的圆弧提取出来并移动到相应的位置
想做出的效果图
烦请各位版主帮帮忙 更改一下代码感激不敬
(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
) 楼历害哦,,,,,
页:
[1]