Autodesk forge 将点从DWG模型坐标转换为autodesk forge viewer坐标
我尝试在Autodesk forge viewer中显示的模型上显示点。但是,我无法理解如何转换该点 答案不适用于我,因为Autodesk forge 将点从DWG模型坐标转换为autodesk forge viewer坐标,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我尝试在Autodesk forge viewer中显示的模型上显示点。但是,我无法理解如何转换该点 答案不适用于我,因为viewer.model.getData()没有globalOffset属性 我在这里上传了一些示例代码以及原始dwg文件对不起,我没有收到我们工程团队的任何回复。似乎没有其他方法可以获取当前2d视图的viewportId,这里可能存在浮点精度问题,这就是我上面提到的问题。我会继续要求他们。下面是我发现的从DWG坐标系到查看器坐标系进行点转换的方法 通过VertexBuffe
viewer.model.getData()
没有globalOffset
属性
我在这里上传了一些示例代码以及原始dwg文件对不起,我没有收到我们工程团队的任何回复。似乎没有其他方法可以获取当前2d视图的
viewportId
,这里可能存在浮点精度问题,这就是我上面提到的问题。我会继续要求他们。下面是我发现的从DWG坐标系到查看器坐标系进行点转换的方法
VertexBufferReader
获取当前视口id,但必须在加载的视图中指定一个2d项(dbId
),才能从中读取viewportId
var viewportId = null;
function GeometryCallback(viewer) {
this.viewer = viewer;
}
GeometryCallback.prototype.onLineSegment = function(x1, y1, x2, y2, vpId) {
viewportId = vpId;
}
var fragId = 0;
var m = viewer.impl.getRenderProxy(viewer.model, fragId);
var vbr = new Autodesk.Viewing.Private.VertexBufferReader(m.geometry, viewer.impl.use2dInstancing);
vbr.enumGeomsForObject(dbId, new GeometryCallback());
var vpXform = viewer.model.getPageToModelTransform(viewportId).clone();
var invVpXform = new WGS.LmvMatrix4(true);
invVpXform.getInverse(vpXform, true);
var ptInCadX = ...;
var ptInCadY = ...;
var verticesInViewer = new THREE.Vector3().set(ptInCadX, ptInCadY, 0).applyMatrix4(invVpXform);
希望能有所帮助。请接受我们对迟到的真诚道歉,我们目前的资源不足。我正在研究,这将需要我很多次才能找到解决方案,请容忍我!我找到了一种方法,可以根据您的需要进行点转换,但这种方法似乎还有另一个问题,所以我正在与我们的工程团队进行核实,并将尽快为您回复。谢谢@伊森康感谢您调查此事。有进一步的更新吗?我不确定如何获取dbId和fragId。在我的示例中,正确的dbId是
viewer.model.getData().instanceTree.nodeAccess.rootId
?如何从dbId中获取fragId?在查看器的2D视图中选择一个项目,然后调用Viewer.getSelection()
获取dbId
。之后,var it=viewer.model.getData().instanceTree;it.enumNodeFragments(dbId,function(fragId){console.log(fragId)})
还有另一种方法可以访问InstancerEE,viewer.getObjectTree(function(it){console.log(it)},functio(code,msg){console.error(code,msg)})
在Autodesk中获取dbId和fragId。查看。选择\u更改\u事件处理程序工作正常。但是,我需要在加载模型时执行转换。我这样做的方式是在Autodesk.Viewing.OBJECT\u TREE\u CREATED\u事件中调用viewer.select(dbId,Autodesk.Viewing.SelectionMode.REGULAR)
。我已经更新了github存储库中的代码来演示这一点。然而,这是一种非常复杂的方法。加载模型时,是否有更简单的转换方法?最好是不需要先选择项的选项。如果要在加载时转换模型,可以尝试将此选项传递给Viewer3D#loadModel
:constmodelopts={placementTransform:new THREE.Matrix4()。makeTranslation(x1,y1,z1),globalOffset:{x:0,y:0,z:0}代码>