Arx开发中坐标转换问题
来源:互联网 发布:tensorflow reuse 编辑:程序博客网 时间:2024/05/22 20:29
最近做一个ARX项目,要求在三维空间的不同视角下用鼠标拖动绘制或布置实体
主要用到以下函数或方法:
acedGetCurrentUCS(AcGeMatrixed&) 获取当前UCS转换矩阵,通过这个矩阵可以将UCS转换为WCS
AcGeMatrixed::inverse() 获取逆向转换矩阵。
AcGePoint3d::transformBy(AcGeMatrixed&) 根据矩阵,转换点坐标。
AcDbEntity::transformBy(AcGeMatrixed&) 对实体进行矩阵转换。
AcDbExtents::transformBy(AcGeMatrixed&) 对范围进行矩阵转换。
绘制时视角为当前UCS的XY轴平面。用鼠标拖动点选的坐标肯定为UCS坐标,直接用这个坐标绘制,不用进行转换,绘制好后转换一次就好。代码如下:
AcGeMatrix3d mat;
acedGetCurrentUCS(mat);
pEnt->transformBy(mat); //pEnt为绘制好的实体指针。
如果要用鼠标拖动实体:
AcGePoint3d oldPt; //原来所在位置 如果是WCS要转换为UCS
AcGePoint3d newPt; //现在所在位置 当前鼠标所在位置,肯定是UCS
oldPt.transformBy(mat);
newPt.transformBy(mat);
AcGeMatrix3d offset_mat;
offset_mat.setToIdentity();
offset_mat(0,3) = newPt.x - oldPt.x;
offset_mat(1,3) = newPt.y - oldPt.y;
offset_mat(2,3) = newPt.z - oldPt.z;
pEnt->transformBy(mat); //pEnt为要移动的实体指针。
如果要判断当前点在某个实体XY轴平面范围内:
AcGePoint3d inserPt; //要判断的点
AcGeMatrix3d mat;
acedGetCurrentUCS(mat);
AcDbExtents extents;
pEnt->getGeomExtents(extents); //pEnt为实体指针。
extents.transformBy(mat.inverse()); //获取的范围为WCS,要转换为UCS。注意 mat.inverse()只返回值,不改变mat本身。
if(insertPt[X]>=extents.minPoint().x && insertPt[X]<=extents.maxPoint().x &&insertPt[Y]>=extents.minPoint().y && insertPt[Y]<=extents.maxPoint().y) {.....}
主要用到以下函数或方法:
acedGetCurrentUCS(AcGeMatrixed&) 获取当前UCS转换矩阵,通过这个矩阵可以将UCS转换为WCS
AcGeMatrixed::inverse() 获取逆向转换矩阵。
AcGePoint3d::transformBy(AcGeMatrixed&) 根据矩阵,转换点坐标。
AcDbEntity::transformBy(AcGeMatrixed&) 对实体进行矩阵转换。
AcDbExtents::transformBy(AcGeMatrixed&) 对范围进行矩阵转换。
绘制时视角为当前UCS的XY轴平面。用鼠标拖动点选的坐标肯定为UCS坐标,直接用这个坐标绘制,不用进行转换,绘制好后转换一次就好。代码如下:
AcGeMatrix3d mat;
acedGetCurrentUCS(mat);
pEnt->transformBy(mat); //pEnt为绘制好的实体指针。
如果要用鼠标拖动实体:
AcGePoint3d oldPt; //原来所在位置 如果是WCS要转换为UCS
AcGePoint3d newPt; //现在所在位置 当前鼠标所在位置,肯定是UCS
oldPt.transformBy(mat);
newPt.transformBy(mat);
AcGeMatrix3d offset_mat;
offset_mat.setToIdentity();
offset_mat(0,3) = newPt.x - oldPt.x;
offset_mat(1,3) = newPt.y - oldPt.y;
offset_mat(2,3) = newPt.z - oldPt.z;
pEnt->transformBy(mat); //pEnt为要移动的实体指针。
如果要判断当前点在某个实体XY轴平面范围内:
AcGePoint3d inserPt; //要判断的点
AcGeMatrix3d mat;
acedGetCurrentUCS(mat);
AcDbExtents extents;
pEnt->getGeomExtents(extents); //pEnt为实体指针。
extents.transformBy(mat.inverse()); //获取的范围为WCS,要转换为UCS。注意 mat.inverse()只返回值,不改变mat本身。
if(insertPt[X]>=extents.minPoint().x && insertPt[X]<=extents.maxPoint().x &&insertPt[Y]>=extents.minPoint().y && insertPt[Y]<=extents.maxPoint().y) {.....}
- Arx开发中坐标转换问题
- arx 。net二次开发中DBObject类型转换的问题。
- Arx开发AcDbLine转换为AcDbPolyline的方法研究
- 坐标转换问题-转载
- unity坐标转换问题
- Unity坐标转换问题
- 游戏中坐标转换
- 百度地图坐标转换中遇到的问题
- MFC中画线,坐标转换等问题小结
- 如何解决坐标转换、坐标偏移问题
- arx 中对话框无法获得输入焦点的问题
- opengl坐标转换的问题
- 百度导航坐标转换问题
- arx的问题集
- UIView中坐标的转换
- iOS UIView中坐标转换
- opencv编程珠玑——Opencv中模版匹配后得到的坐标与原图像坐标的转换问题
- 关于新手开发出来的地图偏差太大的问题,进行坐标转换
- 图像傅里叶变换
- 三十分钟掌握STL
- 同步/异步与阻塞/非阻塞的区别
- Struts1和Struts2的区别和对比
- java studyd 003 --object clone
- Arx开发中坐标转换问题
- Android常用单位
- 求100内的奇数的和
- JUnit的jar包和hamcrest的jar包关系
- asp显示图片信息
- 不使用中间变量交换两个数
- Problem with BAPI_PO_CREATE1: Delivery Date and PEINH
- 什么是QS认证?
- linux截图工具的使用