Можем ли мы выбрать и разделить облако точек в autodesk forge?

#autodesk-forge

Вопрос:

Мы должны разработать инструмент с помощью forge со следующими задачами

  1. Мы должны показать большое облако точек с локального жесткого диска
  2. Мы должны уметь выбирать точки
  3. Мы должны иметь возможность разрезать / обрезать облако точек

Пожалуйста, дайте мне знать, если мы выполним вышеуказанные задачи с autodesk forge

Заранее спасибо

Комментарии:

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

Ответ №1:

К сожалению, Forge Viewer не имеет встроенной поддержки для визуализации крупномасштабных облаков точек. Вот некоторые из вариантов, которые вы, возможно, захотите рассмотреть, но я не думаю, что есть какое-либо решение, которое проверяет все поля для вас:

Вариант 1

Вставляйте точки в сцену, как THREE.PointCloud с помощью расширения Построителя сцен:

 function generatePointCloud() {
    const GridWidth = 1000;
    const GridHeight = 1000;
    const PointsCount = GridWidth * GridHeight;
    const PointSize = 0.1;
    const positions = new Float32Array(PointsCount * 3);
    const colors = new Float32Array(PointsCount * 3);
    let i = 0;
    for (var x = 0; x < GridWidth; x  ) {
        for (var y = 0; y < GridHeight; y  ) {
            const u = x / GridWidth, v = y / GridHeight;
            positions[3 * i] = (u - 0.5) * 100;
            positions[3 * i   1] = (v - 0.5) * 100;
            positions[3 * i   2] = 0.0;
            colors[3 * i] = u;
            colors[3 * i   1] = v;
            colors[3 * i   2] = 0.0;
            i  ;
        }
    }

    const geometry = new THREE.BufferGeometry();
    geometry.addAttribute('position', new THREE.BufferAttribute(positions, 3));
    geometry.addAttribute('color', new THREE.BufferAttribute(colors, 3));
    geometry.computeBoundingBox();
    geometry.isPoints = true; // This flag is important! It will force Forge Viewer to render the geometry as gl.POINTS

    const material = new THREE.PointCloudMaterial({ size: PointSize, vertexColors: THREE.VertexColors });
    return new THREE.PointCloud(geometry, material);
}

// ...

const sceneBuilder = await viewer.loadExtension('Autodesk.Viewing.SceneBuilder');
const modelBuilder = await sceneBuilder.addNewModel({
    conserveMemory: false,
    modelNameOverride: 'My Point Cloud'
});
const points = generatePointCloud();
points.dbId = 12345;
modelBuilder.addMesh(points);
 

Таким образом, объект облака точек будет вести себя так же, как и любая другая модель Forge — он будет выделен при наведении курсора, выбран при щелчке, а также может быть разделен на разделы. К сожалению, THREE.PointCloud объект хранит все точки в памяти, поэтому такой подход не подходит для крупномасштабных облаков точек.

Вариант 2

Загрузите крупномасштабные облака точек в средство просмотра Forge с помощью Potree: https://github.com/petrbroz/forge-potree-demo.

Таким образом, вы сможете транслировать крупномасштабные облака точек в сцену, но в этом случае выделение и/или разделение будут недоступны. Вам придется самостоятельно реализовать эту функциональность в объекте Potree.