找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1244|回复: 11

[LISP程序]:弧长标注

[复制链接]
发表于 2002-2-13 23:48:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
;;;AUTOCAD 2000以上
;;;命令:dima
;;;功能:弧长标注
;;;说明:本程序中利用角度标注,将角度改为弧长值
;;;运行前请加载xdrx_api
;;;程序设计:赖云龙;;;
;;;---------------------;;;

  1. (defun C:dima ( / acadent arcl dec)
  2. (vl-load-com)
  3. (setq acadent (xdrx_entsel "\n选择圆弧: " '((0 . "arc"))))
  4. (if (= -1 (getvar "dimadec"))
  5.     (setq DEC (getvar "dimdec"))
  6.     (setq DEC (getvar "dimadec"))
  7.   )
  8. (setq arcl (rtos(vla-get-arclength (vlax-ename->vla-object (car acadent)))2 dec))
  9. (command ".dimangular" (cadr acadent) "T" ARCL PAUSE)
  10. (princ)
  11. )




;;;FOR R14

  1. (defun C:DIMA (/ E ARCL A50 A51 A40 DEC)
  2.   (while (= E NIL)
  3.     (setq E (entsel "\n选择圆弧: "))
  4.     (if        (/= "ARC" (cdr (assoc 0 (entget (car E)))))
  5.       (setq E NIL)
  6.     )
  7.   )
  8.   (setq A50 (cdr (assoc 50 (entget (car E)))))
  9.   (setq A51 (cdr (assoc 51 (entget (car E)))))
  10.   (setq A40 (cdr (assoc 40 (entget (car E)))))
  11.   (if (= -1 (getvar "dimadec"))
  12.     (setq DEC (getvar "dimdec"))
  13.     (setq DEC (getvar "dimadec"))
  14.   )
  15.   (setq        ARCL (rtos (* 2 A40 pi (/ (- 360 (/ (* (abs (- A51 A50)) 180) pi)) 360) ) 2 DEC ) )
  16.   (command ".dimangular" (cadr E) "T" ARCL PAUSE)
  17.   (princ)
  18. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8个

财富等级: 恭喜发财

发表于 2002-2-14 10:25:50 | 显示全部楼层
呵呵,你好,另一个小程序,有些罗嗦,应该适合各种cad的版本

  1. (defun C:Arcdim (/ nu en ent a1 a2 #r #len arcdim1 arcdim2)
  2.   (defun arcdim1 (a1 a2 #r)
  3.     (setq #len (* #r (abs (- a2 a1))))
  4.   )
  5. ;;;_____________________________________
  6.   (defun arcdim2 (a1 a2 #r / a)
  7.     (setq a (- (* 2 pi) a1))
  8.     (setq #len (* #r (abs (+ a2 a))))
  9.   )
  10.   (gc)
  11.   (grtext -1 "____已经进入圆弧长度标注程序 <金戈>_____ ")
  12. ;  (SETLAY "DIM" 1 "CONTINUOUS")
  13. ;;;_________________________________________________________________
  14.   (if (Null
  15.         (SETQ nu (GETint "\n 请输入标注尺寸的小数位数<缺省值=2>"))
  16.       )
  17.     (setq nu 2)
  18.   )
  19.   (while (SETQ en (entsel "\n 选择欲标注弧长的圆弧:.."))
  20.     (setq ent (car en))
  21.     (setq ed (entget ent))
  22.     (setq a1 (cdr (assoc 50 ed))
  23.           a2 (cdr (assoc 51 ed))
  24.           #r (cdr (Assoc 40 ed))
  25.     )
  26.     (if        (< a1 a2)
  27.       (setq #len (arcdim1 a1 a2 #r))
  28.       (setq #len (arcdim2 a1 a2 #r))
  29.     )
  30.     (command "dim1"
  31.              "ang"
  32.              en
  33.              pause
  34.              (STRCAT "弧长" (rtos #len 2 nu))
  35.              pause
  36.     )
  37.   )
  38.   (grtext -1 "____圆弧长度标注程序结束 <金戈>_____ ")
  39.   (PROMPT "\n 尺寸标注完毕 !")
  40.   (PRINC)
  41. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-14 18:01:21 | 显示全部楼层
试了一下,两个程序标注都有问题。公式需修改。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-14 18:34:16 | 显示全部楼层
赖先生程序中关键一句似乎应改为 (setq ARCL (rtos (*  A40 (- A51 A50)) 2 DEC ))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-2-14 18:43:44 | 显示全部楼层
改这样吧!
(setq ARCL (strcat "弧长="(rtos (* A40 (-(* 2 pi)(abs(- A51 A50)))) 2 DEC )))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-15 09:35:24 | 显示全部楼层
不需(* 2 pi),A50、A51本身就是rad格式,弧长=半径*弧度。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-15 09:44:50 | 显示全部楼层
恐怕要分几种情况:“上弦月”和“下弦月”。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-19 11:58:21 | 显示全部楼层
当A51>A50时,角度即是(- A51 A50)。
当A51<A50时,角度是(+ (* 2 pi) (- A51 A50))。
我已验证过。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-19 13:13:32 | 显示全部楼层
当A51<A50时,角度是(+ (* 2 pi)(- A51 A50))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-19 19:09:00 | 显示全部楼层
当A51小于A50时,角度为(+ (* 2 pi) (- A51 A50))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-25 01:55:37 | 显示全部楼层
呵呵,我也试过编弧长标注,开始以为容易,但是分析下去……#¥◎%×※%
到现在还没有写得另自己满意:o
其实弧线标注有两种,一种3点定角,一种两线+点定区位。如果编弧线断开程序,编程时候是要考虑的
还有一个,就是数字的更新问题。
各位慢慢想吧,有结果别忘了告诉我啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-25 02:06:20 | 显示全部楼层
既然是弧长标注,那该有标注对象,弧长数值可从该实体及两定位点获得。
至于数字需要自动实时更新,如果只用lisp那要反应器了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 00:13 , Processed in 0.289658 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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