找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7411|回复: 44

[研讨] Pline节点的OCS和WCS的转换

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-21 21:43:17 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2016-10-21 21:46 编辑

例图是一个空间 lwpolyline,lwpolyline节点的 dxf 是基于 OCS 坐标的,关于OCS 和 WCS 转换的文章 高飞 版主翻译了一个文章
http://bbs.xdcad.net/forum.php?m ... 490&highlight=trans
首先介绍一个最直接方法
游客,如果您要查看本帖隐藏内容请回复


按 高飞 版主帖子介绍,用trans方法

  1. (setq el (entget (car (entsel))))
  2. (setq p (cdr (assoc 10 el))
  3.         z (cdr (assoc 38 el))
  4. )
  5. (setq pz (trans (list (car p) (cadr p) z) e 0))

或者

  1. (setq pz (trans (list (car p) (cadr p) z) (cdr (assoc 210 el)) 0))

继续用 xdapi 分析

  1. (setq ecs (xdrx_entity_getecs (car (entsel))))
  2. (setq mat (xdrx_matrix_aligncoordsystem ecs '((0.0 0.0 0.0) (1.0 0.0 0.0) (0.0 1.0  0.0) (0.0 0.0 1.0))))
  3. (xdrx_point_transfrom (reverse (cons (cdr (assoc 38 el)) (reverse (cdr (assoc 10 el))))) mat))

这两个方法转换的都不是 WCS 坐标,用 list 命令可以对比可以看到
问题:这个转换用 trans 如何写?或者转换矩阵是什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2016-10-21 21:50:52 | 显示全部楼层
怎么传不了附件!
pl.zip

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

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-21 23:28:24 | 显示全部楼层

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

使用道具 举报

已领礼包: 6566个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2016-10-22 01:36:08 | 显示全部楼层
本帖最后由 st788796 于 2016-10-22 01:55 编辑

电脑上,Windows 10 x64 + Edge 或者 IE 都出现错误,手机版没有了标准模式?

  1. AcdbPolyline的GetPointAt有两个:
一个是获取二维点坐标(In OCS),
一个是获取三维点坐标(In WCS)

  1. Acad::ErrorStatus getPointAt(unsigned int index,AcGePoint2d& pt) const;
复制代码

This function sets pt to the 2D location of the vertexindex in thepolyline's own ojbect coordinate system (OCS).

  1. Acad::ErrorStatus getPointAt(unsigned int unnamed,AcGePoint3d& pt) const;
复制代码

This function sets pt to the 3D location of the vertexindexin World Coordinates.

如果AcdbPolyLine不在x/y平面上的话,我们可以看出来,他们是不完全对应的:

例如下面的这个
Point: x-670.8292, y-18.2542
Point: x-670.8292, y-12.0000, z-18.2542

二维、三维之间如何转换呢?借助matrix可以完成转换:我们借助两个函数

AcDbEntity::getEcs Function

  1. virtual void getEcs(AcGeMatrix3d& retVal) const;
复制代码

retVal Output filled in with transformation matrix to go from OCS to WCS
AcDbPolyline::elevationFunction

  1. double elevation() const;
复制代码

This returns the distance from the WCS origin to the plane of the polyline.

第一种方法: 通过getEcs获取其转换矩阵,通过elevation获取PLine线所在面 距 WCS原点的距离
(我们通过GetPointAt获取二维点时,其实他们本身是缺省带有z坐标elevation的---也就是PLine线所在面 距 WCS原点的距离)


  1. AcGeMatrix3d matixToWCS;
  2. pPlineTop->getEcs(matixTransToWCS);
  3. double dElevetion = pPlineTop->elevation();
复制代码

转换的时候:调用transformby,完成转换
注:dElevetion作为了z坐标

  1. AcGePoint3d  pt3dPoint = AcGePoint3d(pt2dTemp.x, pt2dTemp.y, dElevetion).transformBy(matixToWCS);
复制代码

第二种方法: 把dElevetion也放到转换矩阵中来,直接转换

  1. AcGeMatrix3d matixToWCS;
  2. pPlineTop->getEcs(matixTransToWCS);
  3. // 矩阵附加elevation的转换
  4. matixTransToWCS *= AcGeMatrix3d::translation(AcGeVector3d::kZAxis * pPlineTop->elevation());
  5. AcGePoint3d pt3dPoint = AcGePoint3d(pt2dTemp.x, pt2dTemp.y, dElevToWCS).transformBy(matixToWCS);
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2016-10-22 09:53:12 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2016-10-22 11:07:55 | 显示全部楼层
谢谢楼主分享!
题外话:360浏览器彻底进不了http://bbs.xdcad.net了,已经2天了,现是用原始的IE
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 19:28:39 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 19:30:27 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2016-10-22 19:58:06 来自手机 | 显示全部楼层
newer 发表于 2016-10-22 19:28

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2016-10-22 20:52:59 | 显示全部楼层
我的手机,欧朋浏
览器,现能进了,。电脑火狐浏览器。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 10:56 , Processed in 0.198166 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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