Skip to content

Commit 83f04ac

Browse files
finetjulfloryst
authored andcommitted
fix(anglewidget): add bounds to AngleWidget
This makes sure the angle widget is considered when computing camera clipping ranges.
1 parent 88e7b2b commit 83f04ac

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Sources/Widgets/Widgets3D/AngleWidget/behavior.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import macro from 'vtk.js/Sources/macros';
22
import { add } from 'vtk.js/Sources/Common/Core/Math';
3+
import vtkBoundingBox from 'vtk.js/Sources/Common/DataModel/BoundingBox';
34
import vtkPointPicker from 'vtk.js/Sources/Rendering/Core/PointPicker';
45

56
const MAX_POINTS = 3;
@@ -11,6 +12,18 @@ export default function widgetBehavior(publicAPI, model) {
1112
const picker = vtkPointPicker.newInstance();
1213
picker.setPickFromList(1);
1314

15+
publicAPI.getBounds = () =>
16+
model.widgetState
17+
.getHandleList()
18+
.reduce(
19+
(bounds, handle) =>
20+
vtkBoundingBox.inflate(
21+
vtkBoundingBox.addPoint(bounds, ...handle.getOrigin()),
22+
publicAPI.getScaleInPixels() ? 0 : handle.getScale1() / 2
23+
),
24+
[...vtkBoundingBox.INIT_BOUNDS]
25+
);
26+
1427
// --------------------------------------------------------------------------
1528
// Display 2D
1629
// --------------------------------------------------------------------------

Sources/Widgets/Widgets3D/AngleWidget/example/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ widgetManager.setRenderer(renderer);
4242
const widget = vtkAngleWidget.newInstance();
4343
// widget.placeWidget(cube.getOutputData().getBounds());
4444

45-
widgetManager.addWidget(widget);
45+
const widgetInView = widgetManager.addWidget(widget);
4646

4747
renderer.resetCamera();
4848
widgetManager.enablePicking();
@@ -54,6 +54,8 @@ fullScreenRenderer.getInteractor().render();
5454

5555
fullScreenRenderer.addController(controlPanel);
5656

57+
widgetInView.onEndInteractionEvent(() => renderer.resetCameraClippingRange());
58+
5759
widget.getWidgetState().onModified(() => {
5860
document.querySelector('#angle').innerText = widget.getAngle();
5961
});

0 commit comments

Comments
 (0)