明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18385|回复: 32

弧长标注、直线标注、样条曲线长度标注.....

  [复制链接]
发表于 2010-11-13 19:17 | 显示全部楼层 |阅读模式
我使用的AutoCAD2004,09太慢了。
我自己为2004编写了一个标注,在09下也可用

本帖子中包含更多资源

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

x
发表于 2018-5-1 22:35 | 显示全部楼层
学习了,modemacro用法,LT:还不懂
发表于 2018-4-24 17:38 | 显示全部楼层
不错啊!支持一下
发表于 2010-11-13 23:38 | 显示全部楼层

收藏了

享受一下楼主的分享

请问:不知弧长标注时能否做到没有圆心的一个小点?

望指教

谢谢楼主

 楼主| 发表于 2010-11-14 15:43 | 显示全部楼层
本程序只是调用了_dimaligned和 _dimangular,然后计算两点间长度,至于你说的那个小点,可能是存在的
发表于 2010-11-14 19:17 | 显示全部楼层

 

谢谢楼主

感觉还好用

 

发表于 2010-11-16 11:55 | 显示全部楼层
收藏了 感谢分享
发表于 2010-11-16 12:57 | 显示全部楼层
"样条曲线长度标注",太感谢了
发表于 2010-11-18 10:25 | 显示全部楼层
<img alt="" src="http://bbs.mjtd.com/Skins/default/topicface/face1.gif"/>试了一下,提示选择直线、圆弧、圆标注,不能标注样条曲线
 楼主| 发表于 2010-11-19 20:17 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2010-12-9 19:30 编辑

对于样条曲线相交的两条线,如果不平行,则调用 _dimangular,是可以显示两交点之间距离的

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;弧长标注
(defun C:CC ()
  (setvar "modemacro" "自贡运机集团")
  (lt:error-init (list nil 0 nil))
  (HH:cc)
  (lt:error-restore)
  (gc)     ;释放内存
  (princ
    "\n自贡运机集团 黄明儒:We must do the best with what God gave us!"
  )
  (princ)
)

;;;;;;;;;;;;;;;;;;;弧长标注
(defun HH:cc ( / ANG1 ANG2 BOOL DXF ENT1 NEW OBJ PARAM POINT1 POINT2 VAR1 VAR2)

  (setvar "cmdecho" 0)   ;不显示命令提示
  (setq var1 (getvar "osmode"))
  (setq var2 (getvar "autosnap"))
  (setvar "autosnap" 39)
  (vl-load-com)
  (setq bool T)
  (while bool
    (setq ent1 (entsel "\n>点击欲标注长度的曲线:"))
    (if ent1
      (setq bool nil)
      (princ "\n你点击的不是曲线,请点击曲线:")
    )
  )
  (setq obj (car ent1))
  (setq obj (vlax-ename->vla-object obj))

  (setvar "osmode" 33)   ;交点或者端点
  (setq point1 (getpoint "\n>>取得标注的第1个交点:"))
  (setq param (vlax-curve-getParamAtPoint obj point1))
  (setq ang1
  (angle (setq point1 (vlax-curve-getpointatparam obj param))
  (mapcar '+ point1 (vlax-curve-getFirstDeriv obj param))
  )
  )
  (setq point2 (getpoint "\n>>>取得标注的第2个交点:"))
  (setq param (vlax-curve-getParamAtPoint obj point2))
  (setq ang2
  (angle (setq point2 (vlax-curve-getpointatparam obj param))
  (mapcar '+ point2 (vlax-curve-getFirstDeriv obj param))
  )
  )
  (princ "\n>>>>标注放置点:")
  (setq bool (= ang1 ang2))
  (if bool
    (command "dimaligned"
      point1
      point2
      pause
    )
    (command "dimangular"
      point1
      point2
      pause
    )
  )
  (setq dxf (entget (entlast)))
  (setq new (- (vlax-curve-getDistAtPoint obj point1)
        (vlax-curve-getDistAtPoint obj point2)
     )
  )
  (setq new (abs new))
  (if (<= (abs (- (cdr (assoc 42 dxf)) new)) 0.001)
    (setq bool t)
    (setq bool nil)
  )
  (setq new (rtos new 2 (getvar "dimdec")))
  (if bool
    (setq new (strcat "{\\fSimSun|b0|i0|c134|p2;}" new))
    (setq new (strcat "{\\Fgdt.shx;^}\\P" new))
  )
  (setq dxf (subst (cons 1 new) (assoc 42 dxf) dxf))
  (entmod dxf)

  (setvar "autosnap" var2)
  (setvar "osmode" var1)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;弧长标注

 楼主| 发表于 2010-12-9 19:31 | 显示全部楼层
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;弧长标注
(defun C:CC ()
  (setvar "modemacro" "自贡运机集团")
  (lt:error-init (list nil 0 nil))
  (HH:cc)
  (lt:error-restore)
  (gc)                                        ;释放内存
  (princ
    "\n自贡运机集团 黄明儒:We must do the best with what God gave us!"
  )
  (princ)
)

;;;;;;;;;;;;;;;;;;;弧长标注
(defun HH:cc (/             ANG1   ANG2   BOOL          DXF         E        E1     ENTS
              H             N            NEW           OBJ          P1         P3        PARAM  PAUSE
              POINT1 POINT2 STD1   VAR1          VAR2
             )

  (setvar "cmdecho" 0)                        ;不显示命令提示
  (setq var1 (getvar "osmode"))
  (setq var2 (getvar "autosnap"))
  (setvar "autosnap" 39)
  (setvar "osmode" 33)                        ;交点或者端点
  (vl-load-com)

  (setq std1 (list ()))                        ;空表
  (setq point1 (getpoint "\n>取得标注的第1个交点:"))
  (setq        h (* (/ (getvar "viewsize") (cadr (getvar "screensize")))
             (getvar "pickbox")
          )
  )
  (setq        p1 (mapcar '- point1 (list h h 0.))
        p3 (mapcar '+ point1 (list h h 0.))
  )
  (setq        ents (ssget "C" p1 p3)
        n    0
  )
  (repeat (sslength ents)
    (setq e (ssname ents n))
    (setq e1 (entget e))
    (if        (not (= "DIMENSION" (cdr (assoc 0 e1))))
      (setq std1 (append std1 (list e)))
    )
    (setq n (1+ n))
  )
  (setq point2 (getpoint "\n >>取得标注的第2个交点:"))
  (setq        p1 (mapcar '- point2 (list h h 0.))
        p3 (mapcar '+ point2 (list h h 0.))
  )
  (setq        ents (ssget "C" p1 p3)
        n    0
  )
  (setq bool T)
  (while bool
    (setq obj (ssname ents n))
    (if        (setq new (member obj std1))
      (setq bool nil)
    )
    (setq n (1+ n))
  )
  (setq obj (vlax-ename->vla-object obj))
  (setq param (vlax-curve-getParamAtPoint obj point1))
  (setq        ang1
         (angle        (setq point1 (vlax-curve-getpointatparam obj param))
                (mapcar '+ point1 (vlax-curve-getFirstDeriv obj param))
         )
  )

  (setq param (vlax-curve-getParamAtPoint obj point2))
  (setq        ang2
         (angle        (setq point2 (vlax-curve-getpointatparam obj param))
                (mapcar '+ point2 (vlax-curve-getFirstDeriv obj param))
         )
  )
                                        ;(princ "\n>>>>标注放置点:")
  (setvar "autosnap" var2)
  (setvar "osmode" var1)
  (setq bool (getpoint "\n  >>>>标注尺寸放置点:"))
  (if (= ang1 ang2)
    (command "dimaligned" point1 point2 bool)
    (command "dimangular" point1 point2 bool)
  )
  (setq dxf (entget (entlast)))
  (setq        new (- (vlax-curve-getDistAtPoint obj point1)
               (vlax-curve-getDistAtPoint obj point2)
            )
  )
  (setq new (abs new))
  (if (<= (abs (- (cdr (assoc 42 dxf)) new)) 0.001)
    (setq bool t)
    (setq bool nil)
  )
  (setq new (rtos new 2 (getvar "dimdec")))
  (if bool
    (setq new (strcat "{\\fSimSun|b0|i0|c134|p2;}" new))
    (setq new (strcat "{\\Fgdt.shx;^}\\P" new))
  )
  (setq dxf (subst (cons 1 new) (assoc 42 dxf) dxf))
  (entmod dxf)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;弧长标注
发表于 2010-12-10 17:26 | 显示全部楼层
请问楼主  CC命令可否标注一段整体弧长中的两点间的距离
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 19:55 , Processed in 0.237333 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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