;;;快速标注角度 (defun c:da () (command "osnap" "endp,mid,int,cen") (SETQ OSD (Getvar "osmode")) (setvar "cmdecho" 0) (SETQ OLA (GETVAR "CLAYER")) ;保存目前使用的色层 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;; 请高手帮忙优化此处,要求使用(ssget)代替(entsel)操作并且 ;;;;;;;;;;;; ;;;;;;;;;;;; 一次框选两条线即可在两线形成的小于180度的夹角中标注角度 ;;;;;;;;;;;; ;;;;;;;;;;;; 而且不再需要画线的两步动作了,本程序已经能实现点选即可完 ;;;;;;;;;;;; ;;;;;;;;;;;; 成标注角度, ;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; (setq en (entsel "请点选一条直线:")) ;;<<<<<<<< ; (setq enn (entsel "请点选另一条直线:")) ;;<<<<<<<< (if (and (setq SS (ssget '((0 . "LINE")))) (= (sslength SS) 2) ) (progn (setq en (ssname SS 0) enn (ssname SS 1)) ) ) ;;;;;;;;;;;;;;;;;;; (SETVAR "OSMODE" 0) (setq en_data (entget en)) (setq p1 (cdr (assoc 10 en_data)) ) ;取得起点p1坐标 (setq p2 (cdr (assoc 11 en_data))) ;取得终点p2坐标 (command "line" p1 p2 "") ;;<<<<<<<< (setq ent1 (entlast)) ;;<<<<<<<< ;;;;;;;;;;;;;;;;;;; (setq en_dat (entget enn)) (setq p3 (cdr (assoc 10 en_dat))) ;取得起点p3坐标 (setq p4 (cdr (assoc 11 en_dat))) ;取得终点p4坐标 (command "line" p4 p3 "") ;;<<<<<<<< (setq ent2 (entlast)) ;;<<<<<<<< (command "_ERASE" en enn "") ;;<<<<<<<< (setq P5 (inters P1 P2 P3 P4 nil));建立第6点 (setq ang (/ (+ (angle p2 p1) (angle p2 p3)) 2));;取得对像1/2角度值 (setq p6 (polar p2 ang 10));建立第6点 (command "dimangular" (list ent1 p5) (list ent2 p5) p6) ;;; (setvar "osmode" 183) ;;; (setvar "cmdecho" 1) (setvar "osmode" OSD ) (SETVAR "CLAYER" OLA) ;恢复原色层 (setvar "cmdecho" 1) (princ) )
|