找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1573|回复: 12

[求助] [求助]:如何让其二维填充solid精确与边界的距离为0?

[复制链接]
发表于 2006-8-1 16:26:26 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. ;;;;2点二维填充
  3. (defun c:so (/ p1 p2 p3 p4 x y)
  4.   (setvar "cmdecho" 0)
  5.   (setvar "fillmode" 1)
  6.   (princ "\n*** <两对角点画二维填充 Solid →置于最后>第一角点 <退出>:")
  7.   (setq p1 (getpoint))
  8.   (if p1 (progn
  9.                 (princ "\n*** <两对角点画二维填充 Solid →置于最后>其对角点 <退出>:")
  10.                 (setq p3 (getpoint))
  11.                 (setq x (- (car p3) (car p1)))
  12.                 (setq y (- (cadr p3) (cadr p1)))
  13.                 (setq p2 (polar p1 0 x))
  14.                 (setq p4 (polar p1 1.570795555555 y))
  15.                 (command "solid" p1 p2 p4 p3 "")
  16.                 (command "draworder" "last" "" "b")
  17.          )
  18.   )
  19.   (princ)
  20. )
  21.   [/FONT]


用上面的代码填充矩形时,如果第一角点选择的是矩形的左上角点,第二角点选择的是矩形的右下角点时。这时表面上看是填充了矩形。但是将矩形的左下角放大到最大时,会发现,solid和矩形的左下角还是有点距离的。这个距离会影响到精度,如果用户以左下角点的端点来捕捉,进行复制的话。就会影响到精度。

我知道是上面的代码中的1.570795555555 y,这个值的问题。但是我不知道怎么调整也调整不到让其精确的为0?请求高手们帮助!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-1 17:27:47 | 显示全部楼层
假如不想和pi打交道的话

可以用 x of P1 和 y of P3来构建P4点啊

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-8-1 17:48:17 | 显示全部楼层

  1. (defun c:so (/ p1 p2 p3 p4)
  2.   (setvar "cmdecho" 0)
  3.   (setvar "fillmode" 1)
  4.   (if (and (setq p1
  5.                   (getpoint
  6.                     "\n*** <两对角点画二维填充 Solid →置于最后>第一角点 <退出>:"
  7.                   )
  8.            )
  9.            (setq p3
  10.                   (getcorner
  11.                     p1
  12.                     "\n*** <两对角点画二维填充 Solid →置于最后>其对角点 <退出>:"
  13.                   )
  14.            )
  15.       )
  16.     (progn
  17.       (setq p2 (list (car p3) (cadr p1))
  18.             p4 (list (car p1) (cadr p3))
  19.       )
  20.       (command ".solid" "_non" p1 "_non" p2 "_non"  p4 "_non" p3 "")
  21.       (command "draworder" "last" "" "b")
  22.     )
  23.   )
  24.   (princ)
  25. )

点评

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

使用道具 举报

 楼主| 发表于 2006-8-1 21:21:01 | 显示全部楼层
谢谢ea!
太感谢EA了!
回2楼:
首先hatch,要有关联的边界才能拉伸,比较不便,还有我们做建筑图的,如果做地下室,要填充墙体,往往图又大,要全部显示在屏幕范围中时才能找到边界填充,而且如果机子慢的话,分析边界又费时。还不如用solid二维填充来得快。
对了,如何用x of P1 和 y of P3来构建P4点呀?
我对lisp不是很了解的?
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-1 22:04:49 | 显示全部楼层
就是eachy版主写的啊

  1. (setq p2 (list (car p3) (cadr p1))
  2.       p4 (list (car p1) (cadr p3))
  3. )

其中car p3代表P3的x座标,cadr=nth 1,代表P1的y座标
car p1代表P1的x座标,cadr p3代表p3的y座标啊
可能也是hatch太慢,不过我们设计院倒经常用hatch-solid来填充侧墙就是
不过这种solid只能绘制水平方向的,似乎有些限制,其实不如直接选两条线,让它自动找端点绘制4点的solid。
觉得在cad中选点(比如getpoint或者entsel)不如框选来的自由,相对速度会慢些一样。比如fillet要选点,就挺烦人的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-2 23:00:11 | 显示全部楼层
最初由 snoopychen 发布
[B]就是eachy版主写的啊

  1. (setq p2 (list (car p3) (cadr p1))
  2.       p4 (list (car p1) (cadr p3))
  3. )

其中car p3代表P3的x座标,cadr=nth 1,代表P1的y座标
car p1代表P1的x座标,cadr p3代表p3的y座?.. [/B]


按照大哥的意思改了点。在CAD2006中可以用,画出的是矩形的solid。但是在CAD2007中却不是矩形的填充?不知是何解?


  1.   [FONT=courier new]
  2. ;;;;2点二维填充
  3. (defun c:soo (/ p1 p2 p3 p4)
  4.   (setvar "cmdecho" 0)
  5.   (setvar "fillmode" 1)
  6.   (princ "\n*** <两对角点画二维填充 Solid →置于最后>第一角点 <退出>:")
  7.   (if (and
  8.            (setq p1 (getpoint))
  9.                 (princ "\n*** <两对角点画二维填充 Solid →置于最后>其对角点 <退出>:")
  10.                 (setq p3 (getpoint))
  11.       )
  12.       (progn
  13.                 (setq p2 (list (car p3) (cadr p1))              ;;;其中car p3代表P3的x座标,cadr=nth 1,代表P1的y座标
  14.                         p4 (list (car p1) (cadr p3))            ;;;car p1代表P1的x座标,cadr p3代表p3的y座标
  15.                 )
  16.                 (command "solid" p1 p2 p4 p3 "")
  17.                 (command "draworder" "last" "" "b")                   ;;;L,last参数,选择最近一次创建的可见对象。
  18.       )
  19.   )
  20.   (princ)
  21. )
  22.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-8-2 23:09:02 | 显示全部楼层
_non 取消捕捉 !!

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

使用道具 举报

 楼主| 发表于 2006-8-5 22:53:50 | 显示全部楼层
ea,急切再次需要你的帮助?
用你3楼的程序,在ucs,w,下画矩形填充是非常的好的。但是如果,有一根斜线的话,我用切换到斜线的ucs,再用你3楼的程序画填充的话,光标开的窗口,不是和ucs平行的?怎么能改成与ucs平行呢?谢谢!具体的可以看看rectange矩形命令。希望能达到那种效果!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-8-6 00:36:23 | 显示全部楼层
这种程序好像 Lkpt 中有的,临时写了一个,命令: Ea:So ,窗口动态绘制Solid。Second Point 使用了 Grread 所以不能输入数值只能点取,而且不支持 Osnap,这是 Lisp 的限制。

程序下载 http://eachy.ys168.com


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

使用道具 举报

 楼主| 发表于 2006-8-6 20:17:19 | 显示全部楼层
ea大哥能否把那个利用rectang画二维填充的程序改一下呀,改成把solid置于最后。因为我们建筑专业在填充混凝土时,是置于最后的。最好可以加上这段代码:将solid置于最后!
(command "draworder" "last" "" "b")
跪求大哥能把源码可以贴出来,好让我解剖研究一下!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-9-28 17:03:41 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:20 , Processed in 0.386162 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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