找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 567|回复: 8

[编程申请]:绘制长圆孔的程序

[复制链接]
发表于 2003-5-16 11:21:11 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-17 18:18:22 | 显示全部楼层

  1. (defun c:test (/ pcen ra len p1 p2 p3 p4 p5 p6 pmid)
  2.   (xdrx_begin)
  3.   (xdrx_ucson)
  4.   (xdrx_sysvar_push "osmode")
  5.   (setq        pcen (getpoint "\n中心点: ")
  6.         ra   (getdist pcen "\n圆半径: ")
  7.         len  (getdist pcen "\n长  度: ")
  8.   )
  9.   (if (and pcen ra len )
  10.     (progn
  11.       (setq pmid (polar pcen (- (/ pi 2)) ra)
  12.             p1         (polar pmid pi (/ len 2))
  13.             p2         (polar p1 0. len)
  14.             p3         (polar pcen 0 (+ ra (/ len 2)))
  15.             p4         (polar p2 (/ pi 2) (* 2 ra))
  16.             p5         (polar p1 (/ pi 2) (* 2 ra))
  17.             p6         (polar pcen pi (+ ra (/ len 2)))
  18.       )
  19.       (if (> len (* 2 ra))
  20.         (progn
  21.         (command ".pline"        pmid p2        "a" "s"        p3 p4 "l" p5 "a" "s" p6        p1 "l"
  22.                "c")
  23.         (command ".rotate" (entlast) "" pcen pause)))
  24.     )
  25.   )
  26.   (xdrx_sysvar_pop)
  27.   (xdrx_ucsoff)
  28.   (xdrx_end)
  29.   (princ)
  30. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-18 08:42:02 | 显示全部楼层
最初由 aeo 发布
[B]还要len>2*ra [/B]

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

使用道具 举报

发表于 2003-5-18 12:12:18 | 显示全部楼层
用的mirror的程序:

  1. (defun c:test ()
  2.   (setq        pc (getpoint "\nCenter Point:")
  3.          r (getdist pc "\nInput Raiuds:")
  4.          l (getdist pc "\nInput Length:"))
  5. (if (<= l (* 2 r))
  6.   (prompt "the Length is too short!")
  7.   (progn
  8.     (setq p1 (polar pc (/ pi 2) r)
  9.              p2 (polar p1 pi (- (/ l 2.0) r))
  10.              p3 (polar p2 (* 1.5 pi)(* 2 r))
  11.              p4 (list (car p1)(cadr p3)))
  12.       (vl-cmdf "pline" p1 p2 "a" "r" r p3 "l" p4 "" "mirror" "l" "" p1 p4 "")
  13.     );p
  14.   );if
  15. );defun

虽然是临时写的程序,还是将各变量作为局部变量好,另外用Command ,会受Osnap影响,第一个也没有考虑,需改进
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-25 16:06:30 | 显示全部楼层
建议:程序功能中能否加入在绘出长圆孔后再加画出孔心线来?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-27 00:54:03 | 显示全部楼层
排除了绘制时的一些干扰因素,选角度时候自动打开极轴捕捉

  1. ;;
  2. ;| frec = 画药丸形实体-----------lxx.2005.4
  3. [url]http://www.xdcad.net/forum/showthread.php?s=&postid=1852356#post1852356[/url]
  4. |;
  5. (defun c:frec (/ os as cen rad l d pt1 pt2 pt3 pt4 )
  6.   (setq os (getvar "osmode")
  7.         as (getvar "autosnap"))
  8.   (while (and (setq cen (getpoint "\n中心:"))
  9.               (setq rad (getdist cen "\n圆半径:"))
  10.               (setq l   (getdist cen "\n半长:"))
  11.          )
  12.     (if        (>= l rad)
  13.       (progn
  14.         (setq d   (- l rad)
  15.               pt1 (mapcar '- cen (list d rad 0))
  16.               pt2 (mapcar '- cen (list d (- rad) 0))
  17.               pt3 (mapcar '+ cen (list d rad 0))
  18.               pt4 (mapcar '+ cen (list d (- rad) 0))
  19.         )
  20.         (setvar "osmode" 0)
  21.         (if (= 0 (logand as 8))
  22.           (setvar "autosnap" (+ as 8))
  23.         )
  24.         (vl-cmdf ".pline" pt1 "a" "d" 180 pt2 "l" pt3 "a" pt4 "l" "cl")
  25.         (vl-cmdf ".rotate" "l" "" cen)
  26.         (while (/= 0 (getvar "cmdactive"))
  27.           (vl-cmdf pause)
  28.         )
  29.         (setvar "osmode" os)
  30.         (setvar "autosnap" as)
  31.       )
  32.       (princ "\n半长小于半径!无法创建,再来一次...:")
  33.     )
  34.   )
  35.   (princ)
  36. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-27 15:21:27 | 显示全部楼层
我也有一个啊,现在共享,代码如下:
(defun c:888 (/ cen len ang pt1 pt2 pt3 pt4 pt5 pt6 temp1 temp2)
  (if (not #dia1)
      (setq temp1 0. #dia1 0.)
      (setq temp1 #dia1))
  (if (not #len)
      (setq temp2 0. #len 0.)
      (setq temp2 #len)
);end if
      (setq cen (getpoint "Select the hole center point"))
      (initget 6)
      (setq #dia1 (getreal (strcat "\nInput the hole diameter <" (rtos #dia1 2 2) ">:")))
      (if (not #dia1) (setq #dia1 temp1))
      (setq #len (getreal (strcat "\nInput the hole length <" (rtos #len 2 2) ">:")))
      (if (not #len) (setq #len temp2))
      (setq ang (getangle cen "Input the angle of axis <0>"))
      (if (not ang) (setq ang 0.0))
      (setq pt1 (polar cen (+ ang (/ pi 2.)) (* #dia1 0.5)))
      (setq pt2 (polar pt1 ang (- (* #dia1 0.5) (* #len 0.5))))
      (setq pt3 (polar pt2 (- ang (/ pi 2.)) (* #dia1 1.0)))
      (setq pt4 (polar pt3 (- ang (/ pi 1.)) (- (* #dia1 0.5) (* #len 0.5))))
      (setq pt5 (polar pt4 (- ang (/ pi 1.)) (- (* #dia1 0.5) (* #len 0.5))))
      (setq pt6 (polar pt5 (+ ang (/ pi 2.)) (* #dia1 1.0)))
      (command "line" "non" (polar cen ang (* #len 1.))
                      "non" (polar cen ang (* #len -1.)) ""
               "change" "l" "" "P" "la" "axis" ""
               "line" "non" (polar cen (+ ang (/ pi 2.)) (* #dia1 1.))
                      "non" (polar cen (+ ang (/ pi 2.)) (* #dia1 -1.)) ""
               "change" "l" "" "P" "la" "axis" ""
               "pline" "non" pt1 "w" "0" "" ""
               "pline" "non" pt1 "non" pt2 "arc" "non" pt3 "line" "non" pt4 "non" pt5 "arc" "non" pt6 "line" "close"
               "change" "l" "" "P" "la" "axis" ""
)
);;;end defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 22:15 , Processed in 0.552296 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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