我有一堵墙,将坐标从该墙放入“ Edge”类。 边具有开始和结束属性,它们表示墙的一条边的开始和结束点。由于这是伪造的坐标,所以我不知道我的墙到底有多长。有一个测量工具可以做到这一点,但是我如何以编程方式使用它来确定边缘的长度。
实际结果:伪造坐标中的边
预期结果:边缘在m
const vertexbuffer = new Autodesk.Viewing.Private.VertexBufferReader(geometry);
let event = new VertexBufferEvent();
vertexbuffer.enumGeomsForObject(dbid, event);
parts.push(new Part(event.getCollection(), dbid));
/**
* This event is called when Autodesk.VertexBufferReader finds a line.
* Line coordinates are saved as an Edge
* @param x0
* @param y0
* @param x1
* @param y1
* @param viewport_id
*/
handle(x0, y0, x1, y1) {
let start = new Point(x0, y0, 0);
let end = new Point(x1, y1, 0)
let edge = new Edge(start, end)
this.edgeCollection.push(edge);
}
onLineSegment(x0, y0, x1, y1, viewport_id) {
this.handle(x0, y0, x1, y1)
}
getCollection() {
return this.edgeCollection
}
注意:我不希望在propertydb中获取length属性
答案 0 :(得分:0)
您可能需要将viewer.model.getUnitScale()
应用于模型上的长度信息。
编辑
getUnitScale
将模型的距离单位的比例因子返回到米。
对于边界框,应该使用model.getInstanceTree().getNodeBox()
,如果您通过dbId 1
,则应返回整个模型的边界框。当您在mm
中建模时,然后将bu .getUnitScale
乘以转换为m
。
var f = new Float32Array(6)
viewer.model.getInstanceTree().getNodeBox(1, f)
编辑2
对于2D图纸,您需要进行额外的转换。对于onLineSegment
,您可以使用类似以下内容的
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);
var dist = pt1.distanceTo(pt2) * this.viewer.model.getUnitScale();
console.log(dist); // this should be in meters
};