天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 77|回复: 0

Arx: AcdbPolyline的二维三维转换矩阵

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
1. AcdbPolyline的GetPointAt有两个:一个是获取二维点坐标(In OCS),一个是获取三维点坐标(In WCS)
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).



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

virtual void

getEcs(

AcGeMatrix3d& retVal) const;

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


AcDbPolyline::elevationFunction

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原点的距离)

        AcGeMatrix3d matixToWCS;
        pPlineTop->getEcs(matixTransToWCS);       
        double dElevetion = pPlineTop->elevation();
转换的时候:调用transformby,完成转换

注:dElevetion作为了z坐标

AcGePoint3d  pt3dPoint = AcGePoint3d(pt2dTemp.x, pt2dTemp.y, dElevetion).transformBy(matixToWCS);


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

        AcGeMatrix3d matixToWCS;
        pPlineTop->getEcs(matixTransToWCS);       
        // 矩阵附加elevation的转换       
        matixTransToWCS *= AcGeMatrix3d::translation(AcGeVector3d::kZAxis * pPlineTop->elevation());       
               
        AcGePoint3d pt3dPoint = AcGePoint3d(pt2dTemp.x, pt2dTemp.y, dElevToWCS).transformBy(matixToWCS);

 

 

 

 

Arx: AcdbPolyline的二维三维转换矩阵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 15:29 , Processed in 0.170579 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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