求助:帮修改一下标注角度的程序
<p><font face="Verdana">下面这个程序在网上找的,怎么能修改成标注的角度显示成度分秒然后标注在图上啊</font></p><p><font face="Verdana">;;;=========================================================================<br/>;;; <br/>;;; Program name: cpjlxjj.lsp <br/>;;; <br/>;;; Description: <br/>;;; 在AutoCAD屏幕上测量任意两条直线夹角 <br/>;;; <br/>;;;=========================================================================<br/>(Defun *error* (msg)<br/> (princ "错误:")<br/> (princ msg)<br/> (terpri)<br/>)</font></p>
<p><font face="Verdana">(Defun C:jj (/ cmde ent_1 ent_2 ent_1_name<br/> ent_2_name ang_1 ang_2 ang<br/> ang_yj ang_min ang_max<br/> )<br/> (Defun TQ_ENT_NAME (ent)<br/> (eval '(cdr (assoc '0 (entget (car ent)))))<br/> )<br/> (Defun TQ_ANG (ent)<br/> (setq ang (angle (cdr (assoc 10 (entget (car ent))))<br/> (cdr (assoc 11 (entget (car ent))))<br/> )<br/> )<br/> )</font></p>
<p><font face="Verdana"> (setq cmde (getvar "cmdecho"))<br/> (setvar "cmdecho" 0)<br/> (setq ent_1 (entsel "\n测量两线夹角,选第一条直线:"))<br/> (if ent_1<br/> (progn<br/> (princ "OK!")<br/> (setq ent_1_name (TQ_ENT_NAME ent_1))<br/> (if (= ent_1_name "LINE")<br/> (progn<br/> (setq ang_1 (TQ_ANG ent_1))<br/> (redraw (car ent_1) 3)<br/> )<br/> )<br/> (if ang_1<br/> (progn<br/> (setq ent_2 (entsel "\n选第二条直线:"))<br/> (if ent_2<br/> (progn<br/> (princ "OK!")<br/> (princ)<br/> (setq ent_2_name (TQ_ENT_NAME ent_2))<br/> (if (= ent_2_name "LINE")<br/> (progn<br/> (setq ang_2 (TQ_ANG ent_2))<br/> (redraw (car ent_2) 3)<br/> (princ)<br/> )<br/> )<br/> (if (and ang_1 ang_2)<br/> (progn<br/> (setq ang (abs (- ang_1 ang_2)))<br/> (if (> ang pi)<br/> (setq ang (- ang pi))<br/> )<br/> (setq ang (* ang (/ 180 pi))<br/> ang_yj (- 180 ang)<br/> ang_min (min ang ang_yj)<br/> ang_max (max ang ang_yj)<br/> )<br/> (setq ang_min (rtos ang_min 2 4)<br/> ang_max (rtos ang_max 2 4)<br/> )<br/> (alert<br/> (strcat "\n 夹 角α = " ang_min<br/> "° \n\n 180°- α = "<br/> ang_max "°"<br/> )<br/> )<br/> (princ "\n所求夹角=")<br/> (princ ang_min)<br/> (princ "\° 180°- 夹角=")<br/> (princ ang_max)<br/> (princ "°")<br/> (redraw (car ent_1) 4)<br/> (redraw (car ent_2) 4)<br/> )<br/> )<br/> )<br/> (progn<br/> (princ "\n未选中第二条直线!")<br/> (redraw (car ent_1) 4)<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (princ "\n未选中第一条直线!")<br/> )<br/> (setvar "cmdecho" cmde)<br/> (princ)<br/>)</font></p>
<p><font face="Verdana"></font> </p>
<p><font face="Verdana"><br/></font> </p>
;;;=========================================================================
;;;
;;; Program name: cpjlxjj.lsp
;;;
;;; Description:
;;; 在AutoCAD屏幕上测量任意两条直线夹角
;;;
;;;=========================================================================
(defun *error* (msg)
(princ "错误:")
(princ msg)
(terpri)
)
(defun C:jj (/ cmde ent_1 ent_2 ent_1_name ent_2_name ang_1 ang_2 ang ang_yj ang_min ang_max)
(defun TQ_ENT_NAME (ent) (cdr (assoc 0 (entget (car ent)))))
(defun TQ_ANG (ent)
(angle (cdr (assoc 10 (entget (car ent))))
(cdr (assoc 11 (entget (car ent))))
)
)
(setq cmde (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (and (setq ent_1 (entsel "\n测量两线夹角,选第一条直线:"))
(= (TQ_ENT_NAME ent_1) "LINE")) (progn
(setq ang_1 (TQ_ANG ent_1))
(redraw (car ent_1) 3)
(if (and (setq ent_2 (entsel "\n选第二条直线:"))
(= (TQ_ENT_NAME ent_2) "LINE")) (progn
(setq ang_2 (TQ_ANG ent_2))
(redraw (car ent_2) 3)
(setq ang (abs (- ang_1 ang_2)))
(if (> ang pi) (setq ang (- ang pi)))
(setq ang (/ (* ang 180) pi)
ang_yj (- 180 ang)
ang_min (min ang ang_yj)
ang_max (max ang ang_yj))
(setq ang_min (angtos ang_min 1 4)
ang_max (angtos ang_max 1 4))
(alert (strcat "\n 夹 角α = " ang_min "° \n\n 180°- α = " ang_max "°"))
(princ (strcat "\n所求夹角=" ang_min "\°180°- 夹角=" ang_max "°"))
(redraw (car ent_1) 4)
(redraw (car ent_2) 4)
) (progn
(princ "\n未选中第二条直线!")
(redraw (car ent_1) 4)
))
)
(princ "\n未选中第一条直线!")
)
(setvar "cmdecho" cmde)
(princ)
)
好像标出的角度不对啊,还有能否标注到图上呢? 这个是直接标注角度的。
(defun C:jj (/ cmde ent_1 ent_2 ang_1 ang_2 ang ang_yj ang_min ang_max)
(defun dxf (ent n) (cdr (assoc n (entget (car ent)))))
(setq cmde (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (and (setq ent_1 (entsel "\n选第一条直线:"))
(= (dxf ent_1 0) "LINE")) (progn
(redraw (car ent_1) 3)
(if (and (setq ent_2 (entsel "\n选第二条直线:"))
(= (dxf ent_2 0) "LINE")) (progn
(redraw (car ent_2) 3)
(setvar "DIMTAD" 2)
(setvar "DIMTOH" 1)
(setvar "DIMAUNIT" 1)
(setvar "DIMADEC" 4)
(command "-DIMSTYLE" "S" (strcat (getvar "DIMSTYLE") "$2"))
(command ".DIMANGULAR" ent1 ent2 PAUSE)
(redraw (car ent_1) 4)
(redraw (car ent_2) 4)
) (progn
(princ "\n未选中第二条直线!")
(redraw (car ent_1) 4)
))
)
(princ "\n未选中第一条直线!")
)
(setvar "cmdecho" cmde)
(princ)
)
<p>Z版你好:</p>
<p>可否请你解释一下,下面这一句(红色部分)意思</p>
<p>(command "-DIMSTYLE" "S" (strcat (getvar "DIMSTYLE") <font color="#ff0000">"$2"</font>))</p>
<p> </p>
<p><font color="#ff0000"><font color="#000000">即</font> "$2" </font><font color="#000000">的作用,谢谢!</font></p> <p>加$2就是当前尺寸的下属“角度”尺寸名</p> <p>感谢Z版了解了.</p> ZZXXQQ版主好热情。获益非浅! 新手不会编,参考一下代码,谢谢楼主
页:
[1]