mirror of
https://github.com/yeicor-3d/yet-another-cad-viewer.git
synced 2025-12-19 22:24:17 +01:00
avoid all bounding box flickering
This commit is contained in:
@@ -168,12 +168,8 @@ function toggleHighlightNextSelection() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let boundingBoxLineIds: Array<number> = []
|
|
||||||
|
|
||||||
function toggleShowBoundingBox() {
|
function toggleShowBoundingBox() {
|
||||||
showBoundingBox.value = !showBoundingBox.value;
|
showBoundingBox.value = !showBoundingBox.value;
|
||||||
updateBoundingBox();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let viewerFound = false
|
let viewerFound = false
|
||||||
@@ -223,11 +219,19 @@ watch(() => props.viewer, (viewer) => {
|
|||||||
|
|
||||||
let document: ShallowRef<Document> = inject('document');
|
let document: ShallowRef<Document> = inject('document');
|
||||||
|
|
||||||
|
|
||||||
|
let boundingBoxLines: { [points: string]: number } = {}
|
||||||
|
|
||||||
function updateBoundingBox() {
|
function updateBoundingBox() {
|
||||||
boundingBoxLineIds.forEach((id) => props.viewer?.removeLine3D(id));
|
if (!showBoundingBox.value) {
|
||||||
boundingBoxLineIds = [];
|
for (let lineId of Object.values(boundingBoxLines)) {
|
||||||
if (!showBoundingBox.value) return;
|
props.viewer?.removeLine3D(lineId);
|
||||||
|
}
|
||||||
|
boundingBoxLines = {};
|
||||||
|
return;
|
||||||
|
}
|
||||||
let bb: Box3
|
let bb: Box3
|
||||||
|
let boundingBoxLinesToRemove = Object.keys(boundingBoxLines);
|
||||||
if (selected.value.length > 0) {
|
if (selected.value.length > 0) {
|
||||||
bb = new Box3();
|
bb = new Box3();
|
||||||
for (let hit of selected.value) {
|
for (let hit of selected.value) {
|
||||||
@@ -276,13 +280,24 @@ function updateBoundingBox() {
|
|||||||
let from = new Vector3(...corners[edge[0]]);
|
let from = new Vector3(...corners[edge[0]]);
|
||||||
let to = new Vector3(...corners[edge[1]]);
|
let to = new Vector3(...corners[edge[1]]);
|
||||||
let color = [AxesColors.x, AxesColors.y, AxesColors.z][edgeI][1]; // Secondary colors
|
let color = [AxesColors.x, AxesColors.y, AxesColors.z][edgeI][1]; // Secondary colors
|
||||||
let lineHandle = props.viewer?.addLine3D(from, to, to.clone().sub(from).length().toFixed(1) + "mm", {
|
let lineCacheKey = JSON.stringify([from, to]);
|
||||||
|
let matchingLine = boundingBoxLines[lineCacheKey];
|
||||||
|
console.log('Edge', edge, 'Matching line', matchingLine, 'key')
|
||||||
|
if (matchingLine) {
|
||||||
|
boundingBoxLinesToRemove = boundingBoxLinesToRemove.filter((l) => l !== lineCacheKey);
|
||||||
|
} else {
|
||||||
|
boundingBoxLines[lineCacheKey] = props.viewer?.addLine3D(from, to,
|
||||||
|
to.clone().sub(from).length().toFixed(1) + "mm", {
|
||||||
"stroke": "rgb(" + color.join(',') + ")",
|
"stroke": "rgb(" + color.join(',') + ")",
|
||||||
"stroke-width": "2"
|
"stroke-width": "2"
|
||||||
});
|
});
|
||||||
boundingBoxLineIds.push(lineHandle);
|
|
||||||
}
|
}
|
||||||
props.viewer?.scene?.queueRender() // Force rerender of model-viewer
|
}
|
||||||
|
// Remove the lines that are no longer needed
|
||||||
|
for (let lineLocator of boundingBoxLinesToRemove) {
|
||||||
|
props.viewer?.removeLine3D(boundingBoxLines[lineLocator]);
|
||||||
|
delete boundingBoxLines[lineLocator];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user