明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1260|回复: 9

[已解答] 请教trim的点坐标用法(都快被折磨死了,求答疑)

[复制链接]
发表于 2013-6-17 15:28 | 显示全部楼层 |阅读模式
程序运行不起来,但是把程序中的trim部分单独拿出来测试又是可以的。活见鬼了。
目标见图。
D:\未命名
原程序:
(defun c:ai()
  
(setq p (getpoint "\n 请输入大圆圆心坐标"))
(setq r1 (getreal "\n 请输入大圆半径<默认为4000>"))
(if (null r1) (setq r1 4000))
(setq r2 (getreal "\n 请输入小圆半径<默认为1500>"))
(if (null r2) (setq r2 1500))
(setq num (getint "\n 请输入小圆个数<默认为8>"))
(if (null num) (setq num 8))
(setq beta (/ (* pi 2) num))
(setq s (* (+ r1 r1 r2) 0.5))
(setq area (sqrt (* s (- s r1) (- s r2) (- s r1))))
(setq h (/ (* 2 area) r2))
(setq alpha1 (atan (/ (/ r2 2) h)))
(setq alpha1 (* 2 alpha1))
(setq alpha2 (- (* pi 2) alpha1))
(command "circle" p r1)
(setq alpha 0)
(repeat num
  (setq p1 (polar p alpha1 r1))
  (setq p2 (polar p alpha2 r1))  
  (setq pp (polar p alpha r1))  
  (setq ppp (polar p alpha (- r1 r2)))
  (command "circle" pp r2)
  (setq enyuan (entlast))
  (command "line" p1 p2 "")
  (setq enzhixian (entlast))
  (command "trim" enyuan ""  pp "")
  (command "trim" enzhixian ""  ppp "")
  (command "erase" enzhixian "")
  (setq alpha (+ alpha beta))
  (setq alpha1 (+ alpha1 beta))
  (setq alpha2 (+ alpha2 beta))
  )
)
测试程序:(setq p1 (getpoint "\n p1"))
(setq p2 (getpoint "\n p2"))
(setq pp (getpoint "\n pp"))
(setq ppp (getpoint "\n ppp"))

(command "circle" pp 15000)
(setq enyuan (entlast))
(command "line" p1 p2 "")
(setq enzhixian (entlast))
(command "trim" enyuan ""  pp "")
(command "trim" enzhixian ""  ppp "")
(command "erase" enzhixian "")
 楼主| 发表于 2013-6-17 15:31 | 显示全部楼层
此附图为目标

本帖子中包含更多资源

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

x
发表于 2013-6-17 16:35 | 显示全部楼层
问题就出在(command "trim"......,后面仅通过指定一点和回车,并不能正确执行函数。
 楼主| 发表于 2013-6-17 16:39 | 显示全部楼层
zyhandw 发表于 2013-6-17 16:35
问题就出在(command "trim"......,后面仅通过指定一点和回车,并不能正确执行函数。

估计是按概率来的,有时候能执行,有时候不行。不靠谱。谢谢哦
发表于 2013-6-17 17:31 | 显示全部楼层
会不会是没有把捕捉关掉
发表于 2013-6-17 18:02 | 显示全部楼层
试过了,跟捕捉没有关系
发表于 2013-6-17 18:09 | 显示全部楼层
  1. (defun c:ai()
  2. (setq olos (getvar "osmode"))
  3. (setvar "osmode" 0)
  4. (setq p (getpoint "\n 请输入大圆圆心坐标<(0, 0)>:"))
  5. (or p (setq p '(0 0)))
  6. (setq r1 (getdist p "\n 请输入大圆半径<默认为4000>:"))
  7. (or r1 (setq r1 4000))
  8. (setq r2 (getreal "\n 请输入小圆半径<默认为1500>:"))
  9. (or r2 (setq r2 1500))
  10. (initget 6)
  11. (setq num (getint "\n 请输入小圆个数<默认为8>:"))
  12. (or num (setq num 8))
  13. (setq beta (/ (* pi 2) num))
  14. (command "circle" p r1)
  15. (setq xx (entlast))
  16. (setq n 0)
  17. (repeat num
  18. (setq alpha (* n beta))
  19.   (setq pp (polar p alpha  r1))  
  20.   (setq ppp (polar p (+ pi alpha) (- r1 r2)))
  21.         (setq ss (ssadd) ss (ssadd xx ss))
  22.   (command "circle" pp r2)
  23.   (setq enyuan (entlast))
  24.   (command "trim" ""  pp (list enyuan ppp) "")
  25. (setq n (1+ n))
  26.   )
  27.         (setvar "osmode" olos)
  28.         (princ)
  29. )

你程序想的太复杂

点评

叮咚大大改得很好,不过好像有点不足之处。(command "circle" pp r2)后面是否要加上 (command "zoom" "e") 这一句,否则会因剪切对象不在视口范围内出现运行错误。 不妥之处,敬请指正。   发表于 2013-7-1 14:55
发表于 2013-6-17 18:50 | 显示全部楼层
trim 时剪切对象要使用双元表来响应: (list ename pt)
 楼主| 发表于 2013-6-17 19:22 | 显示全部楼层
叮咚 发表于 2013-6-17 18:09
你程序想的太复杂

高手,代码得拜读一下
 楼主| 发表于 2013-6-17 19:24 | 显示全部楼层
Gu_xl 发表于 2013-6-17 18:50
trim 时剪切对象要使用双元表来响应: (list ename pt)

恩好像是的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-3 10:03 , Processed in 0.163899 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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