找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3141|回复: 25

[实体] (XD::Entity:GetEcsCoordSystem)获得实体的ECS局部坐标系

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-7 16:56:59 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Entity:GetEcsCoordSystem
调用格式: (XD::Entity:GetEcsCoordSystem ent)
参数说明: e -- 实体名
返回值: (原点 X轴向量 Y轴向量 Z轴向量)
函数简介: 获得实体的ECS局部坐标系
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2013-08-07
备注: -
演示图片: -

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

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

×
本帖最后由 Lispboy 于 2013-8-7 16:58 编辑

  1. ;|
  2. 获得实体的ECS局部坐标系
  3. 参数:
  4.    e -- 实体名
  5. 返回值:
  6.    (原点 X轴向量 Y轴向量 Z轴向量)
  7. |;
  8. (defun XD::Entity:GetEcsCoordSystem(e / m_w2u)
  9.   (xdrx_sysvar_push '("cmdecho" 0))
  10.   (command "ucs" "Object" e)
  11.   (setq m_w2u (xdrx_matrix_ucs2wcs))
  12.   (command "ucs" "p")
  13.   (xdrx_sysvar_pop)
  14.   (xdrx_matrix_getCoordsystem m_w2u)
  15. )


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

点评

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-7 17:38:42 | 显示全部楼层
Free-Lancer 发表于 2013-8-7 17:14
有实体的 210 不能获得这个?

什么实体? 只要UCS OB能设置的,就能获得。

点评

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

使用道具 举报

发表于 2013-8-7 17:47:22 | 显示全部楼层
Lispboy 发表于 2013-8-7 17:38
什么实体? 只要UCS OB能设置的,就能获得。

我的意思是直接用 210 计算,不用 command ucs

点评

不行,210只是一个法线向量,就是Z轴,同一个Z轴, X,Y可以任意。 也就是实体平面内不同旋转,Z轴都是固定的。  详情 回复 发表于 2013-8-7 17:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-7 17:56:08 | 显示全部楼层
Free-Lancer 发表于 2013-8-7 17:47
我的意思是直接用 210 计算,不用 command ucs

不行,210只是一个法线向量,就是Z轴,同一个Z轴, X,Y可以任意。 也就是实体平面内不同旋转,Z轴都是固定的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-7 18:33:05 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-7 18:59 编辑

哪些实体有ECS坐标系??

文字 块 不是根据10 与50组码来确定吗?line就用10 11来获得。


而对于PL线或圆command获得的ecs都不知道平行于哪两个顶点。。。


为何用command 来确定ECS?


楼主最近神出鬼没的。。



点评

葛老,看下这个帖子,理解我我写这个函数的初衷。 http://bbs.xdcad.net/thread-670023-1-1.html  详情 回复 发表于 2013-8-7 19:51
这个程序里面说的ECS和ACAD里面定义的ECS还不同,ACAD里面定义的ESC原点是WCS点,X,Y轴是根据实体的210(法线向量)根据任意轴算法得到的,对于201是 (0 0 1.0)的,X轴是(1.0 0.0 0.0) Y轴是(0.0 1.0 0.0),并没有夹  详情 回复 发表于 2013-8-7 18:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-7 18:55:59 | 显示全部楼层
wowan1314 发表于 2013-8-7 18:33
哪些实体有ECS坐标系??  文字 块 不是根据10 与50组码来确定吗?

为何用command 来确定ECS?

这个程序里面说的ECS和ACAD里面定义的ECS还不同,ACAD里面定义的ESC原点是WCS点,X,Y轴是根据实体的210(法线向量)根据任意轴算法得到的,对于210是 (0 0 1.0)的,X轴是(1.0 0.0 0.0) Y轴是(0.0 1.0 0.0),并没有夹角等信息,夹角等信息额外存储在实体数据定义里面的。

楼主这个代码的好处是,直接通过UCS OB,获得实体的UCS,然后通过UCS->WCS的变换矩阵,得到实体的实际的局部坐标系,有了这个坐标系后,可以做很多事情,很多实体里面保存的信息都可以用这个坐标系得到了。

是实体都可以UCS OB,只是返回的坐标系根据实体不同而不同。

象文字,尺寸,线等二维平面实体,可以直接把转角等信息保存在坐标系里面了。

有了坐标系,也就有了变换矩阵,有了矩阵,就可以任意对实体进行变换。

点评

嗯! 介绍的很详细。谢谢。 其实这个坐标系主要的用途应该是 用矩阵包含对象的 转角 与 位置。。 然后通过这个包含位置与转角的矩阵 可以对其他对象 进行 平移 与 旋转的组合 变换!  详情 回复 发表于 2013-8-7 19:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-7 19:03:35 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-7 19:06 编辑
XDSoft 发表于 2013-8-7 18:55
这个程序里面说的ECS和ACAD里面定义的ECS还不同,ACAD里面定义的ESC原点是WCS点,X,Y轴是根据实体的210( ...

嗯! 介绍的很详细。谢谢。

其实这个坐标系主要的用途应该是 用矩阵包含对象的 转角 与 位置。。

然后通过这个包含位置与转角的矩阵 可以对其他对象 进行 平移 与 旋转的组合 变换!

H版说用command 无法提高效率。。而我看XD教学中的坐标系变换跟这个很类似。用途应该一样吧!

我想还是用三点确定坐标系来 建立类似的矩阵好些。 对吗?

点评

COMMAND降低效率要看用到什么地方,像这种地方,也就几毫米的差别。 更主要是对UCS操作,现有的函数还没法做UCS OB,当然用XDRX_UCS_SET等函数可以做出,不过要考虑各种实体的情况,不如UCS OB来的直接。 其实  详情 回复 发表于 2013-8-7 19:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-7 19:43:57 | 显示全部楼层
wowan1314 发表于 2013-8-7 19:03
嗯! 介绍的很详细。谢谢。

其实这个坐标系主要的用途应该是 用矩阵包含对象的 转角 与 位置。。

COMMAND降低效率要看用到什么地方,像这种地方,也就几毫米的差别。

更主要是对UCS操作,现有的函数还没法做UCS OB,当然用XDRX_UCS_SET等函数可以做出,不过要考虑各种实体的情况,不如UCS OB来的直接。

其实,矩阵用熟练后,不管平移,转角什么的,最终都可以归为一个坐标系到另一个坐标系的变换,这些你看看我以前写过的一些教学能感觉到。

自己根据需要创建局部坐标系,然后用xdrx_matrix_alignCoorSystem 就可以得到从一个坐标系到另外一个坐标系的变换矩阵,然后用xdrx_entity_transform或者xdrx_entity_transformedCopy 变换实体就行了,这个是ARX的思维,面向对象的思维。 不必扣实体数据的细节,任何CAD图形软件,底层都是基于图形学的算法,矩阵进行操作的。LISP的一些如组吗,修改组吗然后修改实体,其实最终都是通过图形变换,矩阵来实现的。

理解和运用好矩阵,就得到了一个“通用”的解决问题的钥匙,代码简洁高效,可以把心思放到算法考虑的层次上,不必拘泥在实体内部数据时怎么存储上。

希望大家在写LISP程序的时候,多掌握些图形变换的方法和思维,坐标系,平面,点等的平移、旋转、投影、缩放等变换,摸索总结出各种变换操作需要的变换矩阵的写法。对开发LISP程序来说事半功倍。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-7 19:51:53 | 显示全部楼层
wowan1314 发表于 2013-8-7 18:33
哪些实体有ECS坐标系??

文字 块 不是根据10 与50组码来确定吗?line就用10 11来获得。

葛老,看下这个帖子,理解我我写这个函数的初衷。

http://bbs.xdcad.net/thread-670023-1-1.html

点评

这个函数是很有用的。 这个从老大的 坐标系转换的帖子中已经了解到了。。问题是对这个坐标系建立的方法。。 记的老大在那个帖子出现两种建立坐标系的方法。 一种是你这个。另一种是三点建坐标系的。 为什么不用  详情 回复 发表于 2013-8-7 20:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-7 20:19:22 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-7 20:20 编辑
Lispboy 发表于 2013-8-7 19:51
葛老,看下这个帖子,理解我我写这个函数的初衷。

http://bbs.xdcad.net/thread-670023-1-1.html

这个函数是很有用的。 这个从老大的 坐标系转换的帖子中已经了解到了。。问题是对这个坐标系建立的方法。。
记的老大在那个帖子出现两种建立坐标系的方法。
一种是你这个。另一种是三点建坐标系的。
为什么不用三点建坐标系的?三点建坐标系感觉更方便些。

点评

你这么说提醒我了,如果要三点建立,从实体对齐UCS的包围盒可以得到,从盒子的四个交点,自己算X轴向量,Y轴向量就行。 可视,去看了XD::Entity:Box 的代码,里面就是用了UCS OB,又回到起点了,所以还不如直接就  详情 回复 发表于 2013-8-7 20:34
坐标系无外乎就是知道原点,X轴,Y轴就行了。 用了UCS OB,就是得到的X轴,Y轴。 三点建立当然也行,只是需要做工作,确定实体的3个点。实体很多,都考虑到有些麻烦。  详情 回复 发表于 2013-8-7 20:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-7 20:31:03 | 显示全部楼层
wowan1314 发表于 2013-8-7 20:19
这个函数是很有用的。 这个从老大的 坐标系转换的帖子中已经了解到了。。问题是对这个坐标系建立的方法。 ...

坐标系无外乎就是知道原点,X轴,Y轴就行了。

用了UCS OB,就是得到的X轴,Y轴。

三点建立当然也行,只是需要做工作,确定实体的3个点。实体很多,都考虑到有些麻烦。

点评

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-7 20:34:33 | 显示全部楼层
wowan1314 发表于 2013-8-7 20:19
这个函数是很有用的。 这个从老大的 坐标系转换的帖子中已经了解到了。。问题是对这个坐标系建立的方法。 ...

你这么说提醒我了,如果要三点建立,从实体对齐UCS的包围盒可以得到,从盒子的四个交点,自己算X轴向量,Y轴向量就行。

可视,去看了XD::Entity:Box 的代码,里面就是用了UCS OB,又回到起点了,所以还不如直接就用UCS OB得到X轴,Y轴了。

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-7 20:35:52 | 显示全部楼层
总结下,如果有实体,就用UCS OB,如果没实体,只有几何点,那么就根据点的关系,用三点建立坐标系。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 19:25 , Processed in 0.431939 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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