找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1688|回复: 11

[LISP程序]:直击-弧长标注

[复制链接]
发表于 2002-2-28 15:43:33 | 显示全部楼层 |阅读模式

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

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

×
beta0.1测试版本
简介:
本程序不是标角度,而是用于标弧长的。
1.dmarc,单段圆弧标注
2.dimarc,圆弧连续标注;对圆分段标注也有效果
  1. [font=courier new]
  2. (princ "\ndmarc=====dim arc 单段圆弧标注--------lxx.2001.5")
  3. (princ "\ndimarc=====dim arc 圆弧连续标注--------lxx.2001.5")
  4. ;;=============================================================
  5. (defun c:dmarc (/ n ent entl rad ans ane ptcen pts pte ang arcl)
  6. (princ "\ndim arc 单段圆弧标注--------lxx.2001.5")
  7. (setq n (getint "\n标注文字小数点后位数<2>:"))
  8. (if (not n) (setq n 2))
  9. (setq ent (car(entsel "\n选择圆弧:"))
  10.       entl (entget ent)
  11.       rad (cdr (assoc 40 entl))
  12.       ans (cdr (assoc 50 entl))
  13.       ane (cdr (assoc 51 entl))
  14.       ptcen (cdr (assoc 10 entl))
  15.       pts (polar ptcen ans rad)
  16.       pte (polar ptcen ane rad)
  17. )
  18. (if (> ane ans)
  19.     (setq ang (- ane ans))
  20.     (setq ang (+ ane (- (* 2 PI) ans)))
  21. )
  22. (setq arcl (rtos (* rad ang) 2 n))
  23. (command "dim" "an" "" ptcen pts pte pause arcl "" "e")
  24. (princ)
  25. )
  26. ;;=============================================================
  27. (defun c:dimarc (/ n ent entl rad ptcen roop ptoff pts pte ans ane roff ang arcl)
  28. (princ "\ndim arc 圆弧连续标注--------lxx.2001.5")
  29. (setq n (getint "\n标注文字小数点后位数<2>:"))
  30. (if (not n) (setq n 2))
  31. (setq ent (car(entsel "\n选择圆弧:"))
  32.       entl (entget ent)
  33.       rad (cdr (assoc 40 entl))
  34.       ptcen (cdr (assoc 10 entl))
  35.       roop "true"
  36.       ptoff (getpoint "\n标注延伸线偏移点:")
  37. )
  38. (getarcl)
  39. (command "dim" "an" "" ptcen pts pte pause arcl "")
  40. (while roop
  41. (getarcl)
  42. (if (not pte)
  43.      (setq roop nil)
  44.      (progn
  45.       (command "co" pte)
  46.       (setq entl (entget(entlast))
  47.             entl (subst (cons 1 arcl) (assoc 1 entl) entl)
  48.       )
  49.       (entmod entl)
  50.      );end progn
  51. )
  52. );;end while
  53. (command)
  54. (princ)
  55. )
  56. ;;getarcl
  57. (defun getarcl ()
  58. (if (not pts) (setq pts (getpoint "\n标注起点:")) )
  59. (if pte (setq pts pte))
  60. (setq pte (getpoint "\n标注终点:")
  61.       ans (angle ptcen pts)
  62.       ane (angle ptcen pte)
  63. )
  64. (if ptoff (setq roff (distance ptcen ptoff);;;;;;;标注美化
  65.                 pts (polar ptcen ans roff)
  66.                 pte (polar ptcen ane roff)
  67.           )
  68. )
  69. (if (> ane ans)
  70.     (setq ang (- ane ans))
  71.     (setq ang (+ ane (- (* 2 PI) ans)))
  72. )
  73. (setq arcl (rtos (* rad ang) 2 n))
  74. )
  75. [/font]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-3-1 07:56:36 | 显示全部楼层
请问代码是如何贴上去的,有一条灰色的分隔线。
而且格式保持很好。
程序没有细看,能作个针对弧线的break吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-3-1 11:26:56 | 显示全部楼层
最初由 goodsheep 发布
[B]请问代码是如何贴上去的,有一条灰色的分隔线。
而且格式保持很好。
程序没有细看,能作个针对弧线的break吗? [/B]


返回论坛,看置顶的帖子“论坛上贴代码保持格式缩进的方法”

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-5-8 23:35:29 | 显示全部楼层
此程序不能判断是优弧还是劣弧,是严重的缺陷,请各位引用者注意。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-30 06:44:09 | 显示全部楼层
有一个更简捷的小程序, 见AutoLisp/Vlisp技术开发专栏.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2004-8-21 22:38:48 | 显示全部楼层
试着判断了优弧劣弧问题,可以在14下运行!





  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豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2005-3-21 19:01:21 | 显示全部楼层
梦断江南:
谢谢您的好程序,解决了分段标注的问题,但如果能随层标注就更好了.但分段标注标注的尺寸好象不对,也许就是优弧与劣弧的问题吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 23:20 , Processed in 0.628601 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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