mj520plus 发表于 2012-12-27 22:52:01

一个关于自动标注倒角的程序思路

本帖最后由 mj520plus 于 2012-12-27 23:33 编辑

想编写一个自动标注倒角的程序,类似于PressCAD的CMN命令。
功能:鼠标点选倒角线或多义线,自动标注倒角大小,如下图:

思路:求出鼠标点选处端点P1和P2的坐标,算出倒角的大小。
难点:通过什么函数来求解鼠标点选处端点P1和P2的坐标?

请各位大虾指点,谢谢!

Andyhon 发表于 2012-12-28 09:27:13

模板上倒角框很多个不是吗?

我们的作法是让程序自个儿去我且完成标注...
(一个思路,谨供参考)

mj520plus 发表于 2012-12-28 19:53:01

回复的人这么少,是不是我提出的问题太简单了,不屑回答啊!
大家有没有现成的程序奉献出来,在此先谢谢了!

flyfox1047 发表于 2013-12-4 16:39:40

想法很不错

燃烧 发表于 2013-12-4 22:35:17

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                                                         ;;;
;;;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)

)

flyfox1047 发表于 2013-12-5 10:16:12

燃烧 发表于 2013-12-4 22:35 static/image/common/back.gif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                                 ...

像用距形命令画出的长方形倒角,即多段线命令绘出的倒角标注不了,必须打散,另外倒角尺寸放置不美观,没有达到楼主那样引线标注
页: [1]
查看完整版本: 一个关于自动标注倒角的程序思路