Initial commit
This commit is contained in:
commit
05c65aad4d
155 changed files with 93617 additions and 0 deletions
90
viewer/editor/measurement.js
Normal file
90
viewer/editor/measurement.js
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
import { core } from "../core.js";
|
||||
import { distanceBetweenPointsVector, vectorBetweenPoints, halfwayBetweenPoints, interpolateDistanceBetweenPoints } from "../utils.js";
|
||||
import THREE from "../init.js";
|
||||
|
||||
export function attachMeasurement(Viewer) {
|
||||
Object.assign(Viewer, {
|
||||
buildRuler(_id) {
|
||||
Viewer.rulerObject = new THREE.Object3D();
|
||||
const gridSize = Viewer.gridSize || core.gridSize || 1;
|
||||
const sphereRadius = Math.max(gridSize / 150, 0.001);
|
||||
const textScale = Math.max(gridSize / 100, 0.01);
|
||||
const measureSize = Math.max(gridSize / 200, 0.01);
|
||||
|
||||
var sphere = new THREE.Mesh(
|
||||
new THREE.SphereGeometry(sphereRadius, 7, 7),
|
||||
new THREE.MeshStandardMaterial({
|
||||
color: 0xff0000,
|
||||
transparent: true,
|
||||
opacity: 0.85,
|
||||
side: THREE.DoubleSide,
|
||||
depthTest: false,
|
||||
depthWrite: false,
|
||||
})
|
||||
);
|
||||
var newPoint = new THREE.Vector3(_id.point.x, _id.point.y, _id.point.z);
|
||||
sphere.position.set(newPoint.x, newPoint.y, newPoint.z);
|
||||
Viewer.rulerObject.add(sphere);
|
||||
Viewer.linePoints.push(newPoint);
|
||||
const lineGeometry = new THREE.BufferGeometry().setFromPoints(Viewer.linePoints);
|
||||
const lineMaterial = new THREE.LineBasicMaterial({ color: 0x0000ff });
|
||||
const line = new THREE.Line(lineGeometry, lineMaterial);
|
||||
Viewer.rulerObject.add(line);
|
||||
var lineMtr = new THREE.LineBasicMaterial({
|
||||
color: 0x0000ff,
|
||||
linewidth: 1,
|
||||
opacity: 1,
|
||||
side: THREE.DoubleSide,
|
||||
depthTest: false,
|
||||
depthWrite: false,
|
||||
});
|
||||
if (Viewer.linePoints.length > 1) {
|
||||
var vectorPoints = vectorBetweenPoints(
|
||||
Viewer.linePoints[Viewer.linePoints.length - 2],
|
||||
newPoint
|
||||
);
|
||||
var distancePoints = distanceBetweenPointsVector(vectorPoints);
|
||||
const measuredDistance = Viewer.formatMeasuredDistance(distancePoints);
|
||||
|
||||
//var distancePoints = distanceBetweenPoints(Viewer.linePoints[Viewer.linePoints.length-2], newPoint);
|
||||
var halfwayPoints = halfwayBetweenPoints(
|
||||
Viewer.linePoints[Viewer.linePoints.length - 2],
|
||||
newPoint
|
||||
);
|
||||
Viewer.addTextPoint(measuredDistance.text, textScale, halfwayPoints);
|
||||
var rulerI = 0;
|
||||
// `measureSize` was already precomputed outside, keep same scale
|
||||
while (rulerI <= distancePoints * 100) {
|
||||
const geoSegm = [];
|
||||
var interpolatePoints = interpolateDistanceBetweenPoints(
|
||||
Viewer.linePoints[Viewer.linePoints.length - 2],
|
||||
vectorPoints,
|
||||
distancePoints,
|
||||
rulerI / 100
|
||||
);
|
||||
geoSegm.push(
|
||||
new THREE.Vector3(
|
||||
interpolatePoints.x,
|
||||
interpolatePoints.y,
|
||||
interpolatePoints.z
|
||||
)
|
||||
);
|
||||
geoSegm.push(
|
||||
new THREE.Vector3(
|
||||
interpolatePoints.x + measureSize,
|
||||
interpolatePoints.y + measureSize,
|
||||
interpolatePoints.z + measureSize
|
||||
)
|
||||
);
|
||||
const geometryLine = new THREE.BufferGeometry().setFromPoints(geoSegm);
|
||||
var lineSegm = new THREE.Line(geometryLine, lineMtr);
|
||||
Viewer.rulerObject.add(lineSegm);
|
||||
rulerI += 10;
|
||||
}
|
||||
}
|
||||
Viewer.rulerObject.renderOrder = 10;
|
||||
core.scene.add(Viewer.rulerObject);
|
||||
Viewer.ruler.push(Viewer.rulerObject);
|
||||
},
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue