找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 949|回复: 27

[每日一码] 判断一个 WCS 点是否和 LWPOLYLINE 在一个平面上

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-8-4 11:15:59 | 显示全部楼层 |阅读模式

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

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

×

  1. (defun c:tt (/ ss e el z p pt)
  2.   (if (setq ss (ssget "+.:S" '((0 . "lwpolyline"))))
  3.     (progn
  4.       (setq e  (ssname ss 0)
  5.             el (entget e)
  6.             z  (cdr (assoc 38 el))
  7.       )
  8.       (while (setq p (getpoint "\nPosition: "))
  9.         (setq pt (trans (trans  p 1 0) e 0))
  10.         (if (equal (last pt) z 1e-9)
  11.           (princ "\nOk!")
  12.           (princ "\nWrong!")
  13.         )
  14.       )
  15.     )
  16.   )
  17.   (princ)
  18. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-8-4 11:28:08 | 显示全部楼层
大师,只判断一个高程是否相等,是唯一条件吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-4 15:16:10 | 显示全部楼层

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-8-4 15:29:07 | 显示全部楼层
如果没看错的话,(setq pt (trans (trans p 1 0) e 0))应该为(setq pt (trans (trans p 1 0) 0 e))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-4 15:32:30 | 显示全部楼层

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-8-5 13:17:27 | 显示全部楼层

你可以这样测试一下:
打开acad,画一个多段线,另外再画一个任意平面实体,比如point,然后将多段线和这个实体绕x轴旋转(rotate3d)一个角度,再执行程序试试看,这个实体是不是还在多段线的平面上,也可以看看多段线本身的节点是不是在多段线平面上。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-5 16:38:05 | 显示全部楼层

一楼代码是在一个倾斜的 UCS 下(Z/=0) 的情况下绘制一个 pline 和 point ,然后设置不同的 UCS 以及 WCS 下 测试 OK 的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-8-5 17:24:24 | 显示全部楼层

就trans的过程来看,(trans (trans pt 1 0) e 0)就是有问题的,内层的trans是把点从当前坐标系1转变到世界坐标系0,此时的pt是在世界坐标系中,外层的trans再一次把点从多段线的实体坐标系转到世界坐标系就没道理了,正解应该是把第一步转换后的点再转到实体坐标系,这样才能和实体坐标系进行z比较。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-5 17:39:50 | 显示全部楼层

两个写法转换效果是一样的

_$ (setq pl (car (entsel)))
<图元名: 7ffffb05c50>
_$ (setq p (cdr (assoc 10 (entget pl))))
(-1579.94 -2212.42)
_$ (setq z (cdr (assoc 38 (entget pl))))
713.421
_$ (trans (append p (list z)) 0 pl)
(1579.94 2273.41 -485.17)
_$ (vlax-curve-getstartpoint pl)
(1579.94 2273.41 -485.17)
_$ (trans (append p (list z)) pl 0)
(1579.94 2273.41 -485.17)
_$

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

使用道具 举报

已领礼包: 214个

财富等级: 日进斗金

发表于 2017-8-5 17:48:27 | 显示全部楼层
在LWPOLYLINE未进行三维旋转的情况下,210法线是不会变的,应该都是(0,0,1),所以楼主的测试结果都是对的(因为LWPOLYLINE的图元坐标和世界坐标一样,trans放前面和后面无差别),真正的是否同平面明显不能局限于法线不会变,而法线一变(如三维旋转),楼主的出来的结果就是错误的(因为图元坐标和世界坐标不一样了)。
把点转为世界坐标-点转为实体坐标-比较Z轴,结果应该就是(setq pt (trans (trans p 1 0) 0 e))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-5 17:56:01 | 显示全部楼层


help 中如是,测试两者都对,以上测试的 pline

_$ (entget pl)
((-1 . <图元名: 7ffffb05c50>) (0 . "LWPOLYLINE") (330 . <图元名: 7ffffb039f0>) (5 . "23D") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 5) (70 . 1) (43 . 0.0) (38 . 713.421) (39 . 0.0) (10 -1579.94 -2212.42) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -2660.77 -2934.2) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -3607.91 -4658.16) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -2937.66 -4493.95) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -1982.28 -3263.67) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 1.66533e-016 0.49878 0.866729))
_$
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 214个

财富等级: 日进斗金

发表于 2017-8-5 17:58:02 | 显示全部楼层
本帖最后由 danxingpen 于 2017-8-5 18:00 编辑

st788796 发表于 2017-8-5 17:39
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:Drawing1.rar 
下载次数:0  文件大小:9.81 KB 
下载权限: 不限 以上  [免费赚D豆]





trans的参数是图元的情况下,其实真正起作用的还是法向量,也就是210组码,理论上210组码在未设计三维操作的时候都是(0,0,1),因为210组码是用世界坐标显示的,如果未进行三维操作,你的PL线的法向量从开始到最后都是(0,0,1),和世界坐标0代表的(0,0,1)一样,结果只能没有改变
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-5 18:04:28 | 显示全部楼层
本帖最后由 st788796 于 2017-8-5 18:05 编辑

附上测试图,按所有能找到的说明都应该是  (trans p 0 e) 实际上起码这个应用 (trans p e 0) 也没错

BTW:测试的时候情况是记不起来怎么写了,顺手这样写的,发现结果没错!无心之举

Drawing1.rar

32.89 KB, 下载次数: 7, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

已领礼包: 214个

财富等级: 日进斗金

发表于 2017-8-5 18:05:05 | 显示全部楼层

你UCS状态下entget的吧?210组码trans到世界坐标看下,应该还是(0,0,1),,,(trans 210组码 1 0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2017-8-5 18:07:17 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 02:34 , Processed in 0.270586 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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