如何在伪造查看器中获取真实的测量结果[2D计划] [英] How to acquire real world measurements in forge viewer [2D plan]

查看:123
本文介绍了如何在伪造查看器中获取真实的测量结果[2D计划]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一堵墙,将坐标从该墙放入"Edge"类. 边具有起点和终点的属性,代表壁的一条边的起点和终点.由于这是伪造的坐标,所以我不知道我的墙到底有多长.有一个测量工具可以执行此操作,但是如何以编程方式使用它来确定边缘的长度.

I have a wall from which I put the coordinates into "Edge" classes. Edge has the properties start and end which represent start and end point of one edge of the wall. Due to this being in forge coordinates, I do not know how long my wall really is. There is a measurement tool which can do this but how do I use it programatically to determine the length of my edges.

实际结果:伪造坐标中的边
预期结果:边缘在m

Actual Result: Edges in Forge coordinates
Expected Result: Edges in 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属性

Note: I am not looking to acquire the length property in the propertydb

推荐答案

您可能需要将viewer.model.getUnitScale()应用于模型上的长度信息.

You probably need to apply the viewer.model.getUnitScale() to the length information on the model.

编辑

getUnitScale将模型的距离单位的比例因子返回为米.

getUnitScale returns the scale factor of model's distance unit to meters.

对于边界框,应该使用model.getInstanceTree().getNodeBox(),如果您通过dbId,则1应该返回整个模型的边界框.当您在mm中进行建模时,然后将bu .getUnitScale乘以转换为m.

And you should be using model.getInstanceTree().getNodeBox() for the bounding box, in your case, if you pass dbId 1 should return the bounding box of the entire model. As you model is in mm, then you multiply bu .getUnitScale to convert to m.

var f = new Float32Array(6)
viewer.model.getInstanceTree().getNodeBox(1, f)

编辑2

对于2D图纸,您需要进行额外的转换.对于onLineSegment,您可以使用类似以下内容的

For 2D sheets you need an extra transformation. For the onLineSegment you can use something like:

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
};

这篇关于如何在伪造查看器中获取真实的测量结果[2D计划]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆