找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3222|回复: 16

[LISP函数]:好用的弧长标注程序(免费)

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-5-9 03:15:13 | 显示全部楼层 |阅读模式

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

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

×
;;;;;
;;因使用本论坛的关于圆弧标注的程序《直击-弧长标注》后
;;;发现有严重缺点
;;; 无法判断所标圆弧是优弧还是劣弧,特别是180°左右的圆弧
;;;起始点不同,标出来的弧长就有可能不同。
;;优弧还是劣其实也不用判断,DXF 码中有现成的,不信请看。
;;;
;;;
(defun c:dimarc(/ n ent entL rad ptcen roop pts pte ans ane ang arcL)
(princ "\ndimarc  圆弧连续标注")
(setq n (getint "\n标注文字小数点后位数<2>:"))
(if (not n) (setq n 2))
(setq ent (car(entsel "\n选择圆弧:"))
      entL (entget ent)
      rad (cdr (assoc 40 entL))
      ptcen (cdr (assoc 10 entL))
      roop "true"     
)
(getarcL)
(command "dim" "an" "" ptcen pts pte pause "" "")
(ang2len)
(while roop
(getarcL)
(if (not pte)
     (setq roop nil)
     (progn
      (command "co" pte)
      (ang2len)     
     );end progn
)
);;end while
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun getarcL()
  (if (not pts) (setq pts (getpoint "\n标注起点:")) )
  (if pte (setq pts pte))
  (setq  pte (getpoint "\n标注终点:  <右键结束圆弧标注>") )
  (if (= pte nil) (command "dim" "e"))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ang2len()
(setq entL (entget(entLast))            
            ang (cdr (assoc 42 entL))
            arcL (rtos (* rad ang) 2 n)
            arcL (strcat "%%o" arcL)
            entL (subst (cons 1 arcL) (assoc 1 entL) entL)
      )
      (entmod entL)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-10 11:53:02 | 显示全部楼层
怎么用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2003-5-13 11:21:02 | 显示全部楼层
骗爱心比啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1488个

财富等级: 财源广进

发表于 2004-5-11 20:39:53 | 显示全部楼层
不好用,标注不会和弧平行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-12 19:48:50 | 显示全部楼层
关于弧长的标注可以看这个帖子
http://www.xdcad.net/forum/showt ... d=933969#post933969
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-12 20:11:54 | 显示全部楼层
(defun c:yh()
  (setq en (entsel "对象: "))
  (setq pt (getpoint "选点: "))
  (command "dimangular" en pt)
  (setq len_data (entget (entlast)))
  (setq old_hc (assoc 1 len_data))
  (command "lengthen" (car en) "")
  (setq l (getvar "perimeter"))  
  (setq new_hc (cons 1 (rtos l 2 2)))
  (setq len_data (subst new_hc old_hc len_data))
  (entmod len_data)
  )
试试这个很好用的我在以前发表过。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 13:58:56 | 显示全部楼层
呵呵,感谢楼上的了,到处宣传我的这个lsp
不过看了我推荐的帖子里就知道
这个是一个不符合机械制图的要求
没有弧长标记。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 17:17:48 | 显示全部楼层
阿 Mr cool 的代碼精簡. 呵呵,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-23 15:41:33 | 显示全部楼层
看了很多弧长标注程序,好像没有符合标准的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-24 16:12:39 | 显示全部楼层
同意楼上的,我不是学机械的
所以以前没有想到这一点,
其实就是那个弧长符号没有办法标
如果字体中可以写出也就好了,直接在标注中用/P分开就会上下叠着了。
可惜我没有找到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-25 18:56:17 | 显示全部楼层
没有弧长符号,楼主只是一个上划线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-12 23:43:45 | 显示全部楼层
是LISP的的吗?可直接加载吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-20 23:14:02 | 显示全部楼层
(assoc 42 entL)只能在2000以上版本中应用,在14下没有组码42!
不知道list命令显示出的弧长是怎么计算的?!

弧长是根据弧的半径和角度计算出来的,试着判断了优弧劣弧问题,可以在14下运行!没有用(assoc 42 entL)!





  1. (defun set_ini ()
  2.   (setq cmdsave (getvar "cmdecho"))
  3.   (setq os (getvar "OSMODE"))
  4.   (setvar "cmdecho" 0)
  5.   (setvar "OSMODE" 0)
  6. ) ;_ end of defun

  7. (defun err_new (msg) (princ msg) (set_close)) ;_ end of defun

  8. (defun set_close ()
  9.   (setvar "OSMODE" os)
  10.   (setvar "cmdecho" cmdsave)
  11.   (setq *error* err_old)
  12. ) ;_ end of defun


  13. (defun c:dimarc        (/ n key os cmdsave err_old)
  14.   (setq        err_old        *error*
  15.         *error*        err_new
  16.   ) ;_ end of setq

  17.   (set_ini)
  18.   (initget 128 "S C")
  19.   (setq key (getkword "\n[单段圆弧标注(S)/圆弧连续标注(C)]< S >: "))   (if (/= key nil)
  20.     (setq key (strcase key))
  21.   ) ;_ end of if
  22.   (if (or (= key "S") (= key nil))
  23.     (dimarc_s)
  24.     (if        (= key "C")
  25.       (dimarc_C)
  26.     )
  27.   )
  28.   (set_close)
  29.   (gc)
  30.   (princ)
  31. )

  32. (defun dimarc_s        (/ ent entl rad ans ane ptcen pts pte)
  33.   (setq n (getint "\n标注文字小数点后位数<2>:"))
  34.   (if (not n)
  35.     (setq n 2)
  36.   )
  37.   (setq        ent   (car (entsel "\n选择圆弧:"))
  38.         entl  (entget ent)
  39.         rad   (cdr (assoc 40 entl))
  40.         ans   (cdr (assoc 50 entl))
  41.         ane   (cdr (assoc 51 entl))
  42.         ptcen (cdr (assoc 10 entl))
  43.         pts   (polar ptcen ans rad)
  44.         pte   (polar ptcen ane rad)
  45.   )
  46.   (command "dim" "an" "" ptcen pts pte pause "" "" "e")
  47.   (ang2len)
  48.   (princ)
  49. )
  50. ;;=============================================================

  51. (defun dimarc_c        (/ ent entL rad ptcen roop pts pte)
  52.   (setq n (getint "\n标注文字小数点后位数<2>:"))
  53.   (if (not n)
  54.     (setq n 2)
  55.   )
  56.   (setq        ent   (car (entsel "\n选择圆弧:"))
  57.         entL  (entget ent)
  58.         rad   (cdr (assoc 40 entL))
  59.         ptcen (cdr (assoc 10 entL))
  60.         roop  "true"
  61.   )
  62.   (getarcL)
  63.   (command "dim" "an" "" ptcen pts pte pause "" "")
  64.   (ang2len)
  65.   (while roop
  66.     (getarcL)
  67.     (if        (not pte)
  68.       (setq roop nil)
  69.       (progn (command "co" pte) (ang2len)) ;end progn
  70.     )
  71.   )
  72.   ;;end while
  73.   (princ)
  74. )
  75. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  76. (defun getarcL ()
  77.   (setvar "OSMODE" 33)
  78.   (if (not pts)
  79.     (setq pts (getpoint "\n标注起点:"))
  80.   )
  81.   (if pte
  82.     (setq pts pte)
  83.   )
  84.   (setq pte (getpoint "\n标注终点: <右键结束圆弧标注>"))
  85.   (if (= pte nil)
  86.     (command "dim" "e")
  87.   )
  88. )
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. (defun ang2len (/ entL ang arcL        ptcen pts pte ptp ang01        ang02 ang03
  91.                 ang21 ang31)
  92.   (setq        entL  (entget (entLast))
  93.         ptcen (cdr (assoc 15 entL))
  94.         pts   (cdr (assoc 13 entL))
  95.         pte   (cdr (assoc 14 entL))
  96.         ptp   (cdr (assoc 10 entL))
  97.         ang01 (angle ptcen pts)
  98.         ang02 (angle ptcen pte)
  99.         ang03 (angle ptcen ptp)
  100.         ang21 (- ang02 ang01)
  101.         ang31 (- ang03 ang01)
  102.   )
  103.   (if (<= ang21 0)
  104.     (if        (< ang31 ang21)
  105.       (setq ang (+ (* pi 2) ang21))
  106.       (if (> ang31 0)
  107.         (setq ang (+ (* pi 2) ang21))
  108.         (setq ang (- ang21))
  109.       )
  110.     )
  111.     (if        (< ang31 ang21)
  112.       (if (< ang31 0)
  113.         (setq ang (- (* pi 2) ang21))
  114.         (setq ang ang21)
  115.       )
  116.       (setq ang (- (* pi 2) ang21))
  117.     )
  118.   )
  119.   (setq        arcL (rtos (* rad ang) 2 n)
  120.         arcL (strcat "%%o" arcL)
  121.         entL (subst (cons 1 arcL) (assoc 1 entL) entL)
  122.   )
  123.   (entmod entL)
  124. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2014-3-20 23:09:59 | 显示全部楼层
源码是好东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:07 , Processed in 0.507124 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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