- UID
- 167413
- 积分
- 172
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-8-19
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
原作为小妹丁的,我对程序改了一下,希望大家多提意见
[php]
;;;一个新的粗糙度标注方式
;;;2004.10.06
;;;2004.11.16更改,更改人:hyx_lyn
(defun c:cud ()
(defun myerror (msg)
(setvar "osmode" os) ;恢复捕捉
(setq *error* olderr) ;恢复原来的出错函数
(princ)
)
(setq olderr *error* ;保存旧的
*error* myerror ;设置新的
)
(princ "可在空白处标注")
(setq osm (getvar "osmode"))
(setq cmd (getvar "cmdecho"))
(setq dims (getvar "dimscale"))
(setq h (getvar "dimtxt"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(vl-cmdf ".undo" "be") ;设置后退的起始点
(setq en (nentsel))
(if en
(progn
(setq pt (osnap (cadr en) "nea"))
(setq endata (entget (car en)))
(setq xxob (cdr (assoc 0 endata)))
(cond ((= xxob "LINE") ;实体为LINE
(culine pt endata)
)
((or (= xxob "ARC") (= xxob "CIRCLE")) ;实体为ARC or CIRCLE
(cuarc pt endata)
)
((= xxob "LWPOLYLINE") ;实体为LWPOLYLINE
(vl-cmdf "explode" en)
(setq enn (ssname (ssget pt) 0))
(setq endata (entget enn))
(culine pt endata)
)
(t (alert "对不起,暂未支持该实体类型。"))
)
)
(progn ;未选取实体时,在空白处标注
(setq pt (getpoint "在空白处确认标注位置:"))
(setq pt-0 (polar pt (/ pi 2) 10))
(SETQ ang (ANGLE pt pt-0))
(setq bx (getreal "\n粗糙度(非加工 0)<12.5>:"))
(IF (= bx NIL)
(SETQ bx 12.5)
)
(if (= bx 0) ;非加工标注
(progn
(SETQ cud_pt1 (POLAR pt (- ang (cud_dtr 30)) (* 3.0 h)))
(SETQ cud_pt2 (POLAR pt ang (* 1.0 h)))
(SETQ cud_pt3 (POLAR pt (+ ang (cud_dtr 30)) (* 1.5 h)))
(vl-cmdf "PLINE" cud_pt3 "w" 0 "" pt cud_pt1 "")
(vl-cmdf "circle" cud_pt2 (* 0.5 h))
)
(progn
(cud_fuhao pt ang h)
(setq bX (rtos bX 2 1))
(setq px0 (polar pt (* pi 0.5) (* 2.0 h)))
(setq angle_text 0)
(vl-cmdf "text" "m" px0 (* h 1.0) angle_text bx "")
)
)
(setq pxt (polar cud_pt3 pi (* 2.5 h)))
(setq bxqu "其余")
(vl-cmdf "text" "m" pxt (* h 2.5) 0 bxqu "")
)
)
(setvar "cmdecho" cmd)
(setvar "osmode" osm)
(vl-cmdf ".undo" "e") ;设置结束
(setq *error* olderr) ;恢复原来的出错函数
)
(princ "\n***CUD.小妹丁,2004.10.23***")
(princ "\n***CUD.hyx_lyn,2004.11.20***")
(princ)
;;;-------------------------------------------------------------
;;;实体为ARC or CIRCL
;;;-------------------------------------------------------------
(defun cuarc (pt engata)
(setq arc_r (cdr (assoc 40 endata))) ;取得半径
(setq arc_p0 (cdr (assoc 10 endata))) ;取得圆心
(setq ptf (getpoint pt "\n指向:"))
(setq angle_ptf (angle arc_p0 pt))
(setq dis_ptf (distance arc_p0 ptf))
(if (> dis_ptf arc_r)
(progn
(cud_fuhao pt angle_ptf h)
(setq px0 (polar pt angle_ptf (* 2.0 h)))
(setq angle_text (cud_rtd (+ (/ pi 2) angle_ptf)))
(if (and (>= angle_ptf 0) (<= angle_ptf pi))
(setq angle_text (+ 180 angle_text))
)
(setq bx (getREAL "\n粗糙度<3.2>:"))
(IF (= bx NIL)
(SETQ bx 3.2)
)
(setq bX (rtos bX 2 1))
(vl-cmdf "text" "m" px0 (* h 1.0) angle_text bx "")
)
(progn
(cud_fuhao pt (+ angle_ptf pi) h)
(setq px0 (polar pt (+ angle_ptf pi) (* 2.0 h)))
(setq angle_text (cud_rtd (+ (/ pi 2) angle_ptf)))
(if (and (>= angle_ptf 0) (<= angle_ptf pi))
(setq angle_text (+ 180 angle_text))
)
(setq bx (getREAL "\n粗糙度<3.2>:"))
(IF (= bx NIL)
(SETQ bx 3.2)
)
(setq bX (rtos bX 2 1))
(vl-cmdf "text" "m" px0 (* h 1.0) angle_text bx "")
)
)
)
;;;-------------------------------------------------------------
;;;实体为LINE LWPOLYLINE
;;;-------------------------------------------------------------
(defun culine (pt endata)
(setq ptf (getpoint pt "\n指向:"))
(setq pl1 (cdr (assoc 10 endata)))
(setq pl2 (cdr (assoc 11 endata)))
(setq langle12 (angle pl1 pl2))
(setq langle21 (angle pl2 pl1))
(if (> langle12 langle21)
(setq angle_line
langle21
pl1 pl2
)
(setq angle_line langle12)
)
(setq angle_text (cud_rtd angle_line))
(if (> angle_text 90)
(setq angle_text (- angle_text 180))
)
(setq angle_ptf (angle pl1 ptf))
(if (and (> angle_ptf angle_line)
(< angle_ptf (+ angle_line pi))
)
(progn
(cud_fuhao pt (+ (/ pi 2) angle_line) h)
(setq px0 (polar pt (+ angle_line (/ pi 2)) (* 2.0 h)))
(setq bx (getREAL "\n粗糙度<3.2>:"))
(IF (= bx NIL)
(SETQ bx 3.2)
)
(setq bX (rtos bX 2 1))
(vl-cmdf "text" "m" px0 (* h 1.0) angle_text bx "")
)
(progn
(cud_fuhao pt (- angle_line (/ pi 2)) h)
(setq px0 (polar pt (- angle_line (/ pi 2)) (* 2.0 h)))
(setq bx (getREAL "\n粗糙度<3.2>:"))
(IF (= bx NIL)
(SETQ bx 3.2)
)
(setq bX (rtos bX 2 1))
(vl-cmdf "text" "m" px0 (* h 1.0) angle_text bx "")
)
)
)
;;;-------------------------------------------------------------
(defun cud_fuhao (IP IRA cud_k)
(SETQ cud_pt1 (POLAR IP (- IRA (cud_dtr 30)) (* 3.0 cud_k)))
(SETQ cud_pt2 (POLAR IP (- IRA (cud_dtr 30)) (* 1.5 cud_k)))
(SETQ cud_pt3 (POLAR IP (+ IRA (cud_dtr 30)) (* 1.5 cud_k)))
(vl-cmdf "PLINE" cud_pt2 "w" 0 "" cud_pt3 IP cud_pt1 "")
)
;;;-------------------------------------------------------------
(DEFUN cud_dtr (A)
(* PI (/ A 180.0))
)
;;;-------------------------------------------------------------
(DEFUN cud_rtd (A)
(* 180.0 (/ A pi))
)
[/php] |
|