#autodesk-forge
Вопрос:
Мы должны разработать инструмент с помощью forge со следующими задачами
- Мы должны показать большое облако точек с локального жесткого диска
- Мы должны уметь выбирать точки
- Мы должны иметь возможность разрезать / обрезать облако точек
Пожалуйста, дайте мне знать, если мы выполним вышеуказанные задачи с 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.