一个关于自动标注倒角的程序思路
本帖最后由 mj520plus 于 2012-12-27 23:33 编辑想编写一个自动标注倒角的程序,类似于PressCAD的CMN命令。
功能:鼠标点选倒角线或多义线,自动标注倒角大小,如下图:
思路:求出鼠标点选处端点P1和P2的坐标,算出倒角的大小。
难点:通过什么函数来求解鼠标点选处端点P1和P2的坐标?
请各位大虾指点,谢谢!
模板上倒角框很多个不是吗?
我们的作法是让程序自个儿去我且完成标注...
(一个思路,谨供参考) 回复的人这么少,是不是我提出的问题太简单了,不屑回答啊!
大家有没有现成的程序奉献出来,在此先谢谢了!
想法很不错 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ;;;
;;;ShangHai zhiren Mould Industry Co. Ltd. ;;;
;;; xiangzanyang(aug,2012) ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; lisp程序开头和结尾!by 向赞扬 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(prompt "--dc--倒C角标注**by向赞扬")
(defun c:dc (/ en en_data pt0 endpt1 endpt2 cjsl
endpt1x endpt1y endpt2x endpt2y
dinptcl cl1 cl2 txt pt3 pt4 pt3x
ang1 pt5 pt6 pt6x l pt7 ang2 l1
n l2 th pt8 pt9 pt10 ggg v2 v3
os)
(setq olderr *error*
*error* myerr
)
(vl-load-com)
(setq os (getvar "osmode")) ;获取当前的目标捕捉类型,将其赋给变量V1
(setq v2 (getvar "dimstyle"))
(setq v3 (getvar "blipmode")) ;获取当前的光标痕迹显示状态,将其赋给变量V3
(setvar "osmode" 0) ;关闭目标捕捉状态
(setvar "cmdecho" 0) ;不显示普通命令的提示
(setvar "blipmode" 0) ;不显示光标痕迹
(graphscr) ;显示AutoCAD图形幕
(setq en (entsel "\n选择倒角边!"))
(setq en_data (entget (car en)))
(setq pt0 (list (car (cadr en)) (cadr (cadr en))))
(setq endpt1 (list (car (cdr (assoc 10 en_data)))
(cadr (cdr (assoc 10 en_data)))
)
)
(setq endpt2 (list (car (cdr (assoc 11 en_data)))
(cadr (cdr (assoc 11 en_data)))
)
)
(setq endpt1x (car (cdr (assoc 10 en_data))))
(setq endpt1y (cadr (cdr (assoc 10 en_data))))
(setq endpt2x (car (cdr (assoc 11 en_data))))
(setq endpt2y (cadr (cdr (assoc 11 en_data))))
(setq dinpt (list endpt1x endpt2y))
(setq cl (distance endpt1 dinpt))
(setq cl3 (distance endpt2 dinpt))
(setvar "dimdec" 2)
(setvar "dimzin" 8)
(if (equal cl cl3 0.05)
(progn
(setvar "dimzin" 8)
(setq cjsl (getstring "\n输入倒角个数!"))
(setq cl2 (rtos cl ))
(setq ggg "-")
(if (or (= cjsl "") (= cjsl nil))
(setq ggg "")
)
(setq txt (strcat cjsl ggg "C" cl2))
(setq pt3 (list (car (osnap pt0 "endpoint"))
(cadr (osnap pt0 "endpoint"))
)
) ;选择点那头的端点
(setq pt4 (list (car (osnap pt0 "midpoint"))
(cadr (osnap pt0 "midpoint"))
)
) ;选择点那头的点
(setq pt3x (car pt3))
(setq ang1 (angle pt4 pt3)) ;中点与端点与X轴的夹角
(vl-cmdf "ortho" "off")
(setq pt5 (getpoint pt3 "\n选择放置点")) ;放置点三维
(setq pt6 (list (car pt5) (cadr pt5))) ;放置点二维
(setq pt6x (car pt6)) ;放置点的X座标值
(setq l (distance pt3 pt6)) ;
(setq pt7 (polar pt3 ang1 l))
(setq ang2 (cond ((> pt6x pt3x) 0)
((< pt6x pt3x) pi)
(t 0)
)
)
(setq l1 (strlen txt))
(setq n (getvar 'dimscale))
(setq l2 (* l1 n 2))
(setq th (* 3 n))
(setq pt8 (polar pt7 ang2 l2))
(if (not (tblsearch "LAYER" "dim"))
(vl-cmdf "layer" "m" "dim" "c" "7" "" "l" "continuous" "" "")
)
(setvar "clayer" "dim")
(vl-cmdf "pline" pt3 pt7 pt8 "")
(setq pt9 (osnap pt8 "midpoint"))
(setq pt10 (polar pt9 (/ pi 2) (/ th 2)))
(if (not (tblsearch "style" "gb"))
(vl-cmdf "style" "GB" "gbenor,gbcbig" "" "1" "" "" "")
)
(vl-cmdf "text" "s" "gb" "j" "m" pt10 th 0 txt)
)
(progn
(setvar "dimzin" 8)
(setq cl2 (rtos cl))
(setq cl4(rtos cl3))
(setq ggg "x")
(setq txt (strcat cl2 ggg cl4))
(setq pt3 (list (car (osnap pt0 "endpoint"))
(cadr (osnap pt0 "endpoint"))
)
) ;选择点那头的端点
(setq pt4 (list (car (osnap pt0 "midpoint"))
(cadr (osnap pt0 "midpoint"))
)
) ;选择点那头的点
(setq pt3x (car pt3))
(setq ang1 (angle pt4 pt3)) ;中点与端点与X轴的夹角
(vl-cmdf "ortho" "off")
(setq pt5 (getpoint pt3 "\n选择放置点")) ;放置点三维
(setq pt6 (list (car pt5) (cadr pt5))) ;放置点二维
(setq pt6x (car pt6)) ;放置点的X座标值
(setq l (distance pt3 pt6)) ;
(setq pt7 (polar pt3 ang1 l))
(setq ang2 (cond ((> pt6x pt3x) 0)
((< pt6x pt3x) pi)
(t 0)
)
)
(setq l1 (strlen txt))
(setq n (getvar 'dimscale))
(setq l2 (* l1 n 2))
(setq th (* 3 n))
(setq pt8 (polar pt7 ang2 l2))
(if (not (tblsearch "LAYER" "dim"))
(vl-cmdf "layer" "m" "dim" "c" "7" "" "l" "continuous" "" "")
)
(setvar "clayer" "dim")
(vl-cmdf "pline" pt3 pt7 pt8 "")
(setq pt9 (osnap pt8 "midpoint"))
(setq pt10 (polar pt9 (/ pi 2) (/ th 2)))
(if (not (tblsearch "style" "gb"))
(vl-cmdf "style" "GB" "gbenor,gbcbig" "" "1" "" "" "")
)
(vl-cmdf "text" "s" "gb" "j" "m" pt10 th 0 txt)
)
)
(vl-cmdf "-dimstyle" "r" v2)
(setvar "blipmode" v3);恢复光标痕迹原来的显示状态
(PRINT)
(prompt "**倒C角标注BY向赞扬")
(myerr)
(princ) ;静默出
)
(defun myerr (msg)
(setvar "osmode" os)
(setq *error* olderr)
(princ)
) 燃烧 发表于 2013-12-4 22:35 static/image/common/back.gif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ...
像用距形命令画出的长方形倒角,即多段线命令绘出的倒角标注不了,必须打散,另外倒角尺寸放置不美观,没有达到楼主那样引线标注
页:
[1]