中国最好的膜结构论坛

 找回密码
 立即注册
中国空间膜结构协会
宁波汇聚膜材卡斯蒂洛膜材耐驰膜材
查看: 312|回复: 0

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

[复制链接]
  • TA的每日心情
    膜结构看台
    2021-11-28 00:48
  • 签到天数: 40 天

    [LV.5]常住居民I

    发表于 2021-1-19 15:07 | 显示全部楼层 |阅读模式
    1. 1. AcdbPolyline的GetPointAt有两个:一个是获取二维点坐标(In OCS),一个是获取三维点坐标(In WCS)
    2. Acad::ErrorStatus

    3. getPointAt(

    4. unsigned int index,

    5. AcGePoint2d& pt) const;

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



    7. Acad::ErrorStatus

    8. getPointAt(

    9. unsigned int unnamed,

    10. AcGePoint3d& pt) const;

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



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

    13. 例如下面的这个

    14. Point: x-670.8292, y-18.2542

    15. Point: x-670.8292, y-12.0000, z-18.2542



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

    18. virtual void

    19. getEcs(

    20. AcGeMatrix3d& retVal) const;

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


    22. AcDbPolyline::elevationFunction

    23. double

    24. elevation() const;

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



    26. 第一种方法: 通过getEcs获取其转换矩阵,通过elevation获取PLine线所在面 距 WCS原点的距离

    27. (我们通过GetPointAt获取二维点时,其实他们本身是缺省带有z坐标elevation的---也就是PLine线所在面 距 WCS原点的距离)

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

    32. 注:dElevetion作为了z坐标

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


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

    35.         AcGeMatrix3d matixToWCS;
    36.         pPlineTop->getEcs(matixTransToWCS);       
    37.         // 矩阵附加elevation的转换       
    38.         matixTransToWCS *= AcGeMatrix3d::translation(AcGeVector3d::kZAxis * pPlineTop->elevation());       
    39.                
    40.         AcGePoint3d pt3dPoint = AcGePoint3d(pt2dTemp.x, pt2dTemp.y, dElevToWCS).transformBy(matixToWCS);
    复制代码
    膜结构,张拉膜,膜结构车棚,膜结构停车棚,膜结构看台,膜结构煤棚,充气膜结构,膜结构价格
    回复

    使用道具 举报

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

    本版积分规则


    诺科膜结构
    中国膜结构网
    中国空间膜结构协会

    QQ|江西膜结构|湖南膜结构|充气膜结构|深圳膜结构|中国膜结构网

    GMT+8, 2021-11-28 08:12 , Processed in 0.082699 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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