我正在尝试将查看器(场景)坐标转换回原始CAD坐标。我见过人们提到全局偏移量,但每当我尝试检索它时,我都会被定义。我认为这意味着没有偏移。但是,当我比较观察者中的两个坐标和CAD中的一个坐标时,它们绝对不相等。我遇到了函数var selectedPreset : ExercisePreset?;
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedPreset = presets[indexPath.row]
performSegue(withIdentifier: "displayPreset", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "displayPreset") {
var nextScene = segue.destination as! Display_ExercisePreset_ViewController
nextScene.preset = selectedPreset;
}
}
;但是,当将它应用于坐标时,这个数字似乎没有任何意义。
话虽如此,如何从观察者坐标转换回CAD坐标?
答案 0 :(得分:1)
根据我的经验,globalOffset
适用于3D模型,您可以将PageToModelTransform
应用于查看器点以将其转换回CAD。以下代码段是从我们的同事编写的名为viewer-dwgoffset的演示中提取的。
它的关键概念是使用VertexBufferReader
读取Forge Viewer 2D模型的顶点,并获取相应的变换矩阵,将Viewer的点投影回DWG坐标系。
function GeometryCallback(viewer) {
this.viewer = viewer;
}
GeometryCallback.prototype.onLineSegment = function(x1, y1, x2, y2, vpId) {
var vpXform = this.viewer.model.getPageToModelTransform(vpId);
var pt1 = new THREE.Vector3().set(x1, y1, 0).applyMatrix4(vpXform);
var pt2 = new THREE.Vector3().set(x2, y2, 0).applyMatrix4(vpXform);
console.log('Line segment vertices in CAD coordinate system', {
pointX1: pt1.x,
pointY1: pt1.y,
pointX2: pt2.x,
pointY2: pt2.y
});
}
GeometryCallback.prototype.onCircularArc = function(cx, cy, start, end, radius, vpId) {
};
GeometryCallback.prototype.onEllipticalArc = function(cx, cy, start, end, major, minor, tilt, vpId) {
};
var it = viewer.model.getData().instanceTree;
it.enumNodeFragments( dbId, function( fragId ) {
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());
});
希望它有所帮助。