Sorry, I haven't received any responses from our engineering team. There seems not to have another way to obtain viewportId
of current 2d view, and might have floating precision issue here, this is the issue I mentioned above. I will keep asking for them. So, here is the way I found to do point transformation from DWG coordinate system to the Viewers'.
Obtain current viewport id via VertexBufferReader
, but you have to specify a 2d item(dbId
) in the loaded view to read viewportId
from it.
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());
Project DWG point back to Viewer coordinate system.
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);
Hope it helps.