关于APS Forge Viewer中2D图纸与3D模型坐标转换的技术咨询
Forge Viewer 2D与3D坐标转换问题解答
问题1:坐标转换的原点基准
Autodesk.AEC.AecModelData.get2DTo3DMatrix和get3DTo2DMatrix的坐标基准是Revit的Internal Origin(内部原点),不管是主模型还是配置了共享坐标的链接模型,转换矩阵均基于各自模型的内部原点计算。
问题2:获取Survey Point与基准原点的偏移量
可以通过两种方式获取偏移值:
- 解析模型的
AECModelData.json:其中origin字段对应Internal Origin坐标,surveyPoint字段对应Survey Point坐标,两者的差值即为所需偏移量。 - 通过Viewer API获取:模型加载完成后,调用
model.getAecModelData()获取AEC数据对象,直接访问aecModelData.surveyPoint和aecModelData.origin计算偏移。
得到偏移量后,只需将转换后的坐标加上该偏移,即可将基准从Internal Origin切换到Survey Point。
问题3:减去globalOffset后的坐标基准
当3D模型加载到GuiViewer3D并减去globalOffset后,坐标基准为:
- 若模型配置了Shared Coordinates(共享坐标),则基准是共享坐标的原点;
- 若未配置共享坐标,则基准仍为模型的Internal Origin。
globalOffset是Viewer为解决大坐标精度问题自动计算的偏移值,其计算基于模型的Internal Origin或共享坐标原点,减去该值后,模型坐标会对齐到共享坐标系统(若存在)或回到Internal Origin的相对坐标体系。
替代转换函数
除了Autodesk.AEC.AecModelData.get2DTo3DMatrix,还可以使用以下方法实现2D与3D坐标转换:
- 手动构建转换矩阵:利用
Autodesk.Viewing.Matrix类,结合2D图纸的视图参数(如旋转、缩放、原点偏移)和3D模型的坐标信息,手动创建自定义转换矩阵,适合需要精细控制转换逻辑的场景。 - 屏幕与世界坐标转换API:使用
model.getScreenToWorldMatrix()和model.getWorldToScreenMatrix(),结合2D图纸的视口信息,间接实现2D到3D的坐标映射,不过需要额外处理图纸的视图配置参数。
内容的提问来源于stack exchange,提问作者y.sayama
相关产品推荐
相关产品推荐

