明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4052|回复: 5

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

[复制链接]
发表于 2012-12-27 22:52:01 | 显示全部楼层 |阅读模式
本帖最后由 mj520plus 于 2012-12-27 23:33 编辑

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

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

请各位大虾指点,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-12-28 09:27:13 | 显示全部楼层
模板上倒角框很多个不是吗?

我们的作法是让程序自个儿去我且完成标注...
(一个思路,谨供参考)
 楼主| 发表于 2012-12-28 19:53:01 | 显示全部楼层
回复的人这么少,是不是我提出的问题太简单了,不屑回答啊!
大家有没有现成的程序奉献出来,在此先谢谢了!
发表于 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
             dinpt  cl           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-5 10:16:12 | 显示全部楼层
燃烧 发表于 2013-12-4 22:35
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                                 ...

像用距形命令画出的长方形倒角,即多段线命令绘出的倒角标注不了,必须打散,另外倒角尺寸放置不美观,没有达到楼主那样引线标注
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 03:16 , Processed in 0.217591 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表