本帖最后由 作者 于 2009-5-3 2:05:08 编辑
(defun c:test() ;加载vlisp函数 (vl-load-com) ;获取圆选集 (if (setq Ss (ssget '((0 . "Circle")))) (progn ;初始化标志变量 (setq Flags nil ;索引 i 0 ) ;遍历选集 (repeat (sslength Ss) ;获取圆 (setq ET (ssname Ss i) ;获取圆数据 ER (entget ET) ;圆心坐标 CPt (cdr (assoc 10 ER)) ;圆半径 CR (cdr (assoc 40 ER)) ) ;检索该位置是否已经有标志 (if (setq Flag (assoc CPt Flags)) ;标志存在就比较标志的位置 ;比较半径取最大的 (if (> CR (cadr Flag))(setq Flags (subst (list CPt CR) Flag Flags))) ;标志不存在,添加标志位置 (setq Flags (append Flags (list (list CPt CR)))) ) ;索引递增 (setq i (1+ i)) ) ;添加标记 (if Flags (progn ;CAD (setq Cad (vlax-get-acad-object) ;当前图档 Doc (vla-get-activedocument Cad) ) ;当前空间 (if (= (getvar "TILEMODE") 1) ;模型空间"TILEMODE"变量为1 (setq Spc (vla-get-modelspace Doc)) ;图纸空间"TILEMODE"变量为0 (setq Spc (vla-get-paperspace Doc)) ) ;索引 (setq i 0) ;保存捕捉设置 (setq OsMode (getvar "OSMODE") ;当前字高 TxtH (getvar "TEXTSIZE") ;初始标记 ASC 65 ;半径标记关系 RF nil ) ;关闭捕捉 (setvar "OSMODE" 0) ;遍历表生成标记 (repeat (length Flags) ;读取标志信息 (setq Flag (nth i Flags) ;标志位置 BPt (polar (car Flag) (* pi 1.25) (+ (cadr Flag) (* (sqrt 2) txtH))) ) ;读取标记编号 (if (setq strRF (assoc (cadr FLag) RF)) ;生成标记 (vla-addtext Spc (cdr strRF) (vlax-3d-point BPt) TxtH) (progn (vla-addtext Spc (chr ASC) (vlax-3d-point BPt) TxtH) (setq RF (append RF (list (cons (cadr FLag) (chr ASC)))) ASC (1+ ASC) ) ) ) ;索引递增 (setq i (1+ i)) ) ;恢复捕捉设置 (setvar "OSMODE" OsMode) ) ) ) ) (princ) ) |