Skip to content

Commit 6c1ab00

Browse files
tomsuchelfinetjul
authored andcommitted
fix(polylinerepresentation): do not ignore last point of PolyLineRepresentation
When rendering a PolyLineRepresentation, the last point was ignored if not visible. On a LineWidget, this was causing the line to disappear if the second point was hidden. Fix this by setting the origin of the moveHandle is set to null once the widget is placed.
1 parent da89b8c commit 6c1ab00

File tree

6 files changed

+30
-25
lines changed

6 files changed

+30
-25
lines changed

Sources/Widgets/Representations/PolyLineRepresentation/index.js

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -104,22 +104,7 @@ function vtkPolyLineRepresentation(publicAPI, model) {
104104
subStates.push(subState);
105105
return subStates;
106106
}, []);
107-
let size = list.length;
108-
109-
// Do not render last point if not visible or too close from previous point.
110-
if (size > 1) {
111-
const lastState = list[list.length - 1];
112-
const last = lastState.getOrigin();
113-
const prevLast = list[list.length - 2].getOrigin();
114-
let delta =
115-
vtkMath.distance2BetweenPoints(last, prevLast) > model.threshold
116-
? 0
117-
: 1;
118-
if (!delta && lastState.isVisible && !lastState.isVisible()) {
119-
delta++;
120-
}
121-
size -= delta;
122-
}
107+
const size = list.length;
123108

124109
const points = allocateSize(size, model.closePolyLine && size > 2);
125110

Sources/Widgets/Widgets3D/AngleWidget/behavior.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ export default function widgetBehavior(publicAPI, model) {
176176
model.widgetState.deactivate();
177177
model.widgetState.getMoveHandle().deactivate();
178178
model.widgetState.getMoveHandle().setVisible(false);
179+
model.widgetState.getMoveHandle().setOrigin(null);
179180
model.activeState = null;
180181
model.hasFocus = false;
181182
model._widgetManager.enablePicking();

Sources/Widgets/Widgets3D/DistanceWidget/behavior.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ export default function widgetBehavior(publicAPI, model) {
167167
model.widgetState.deactivate();
168168
model.widgetState.getMoveHandle().deactivate();
169169
model.widgetState.getMoveHandle().setVisible(false);
170+
model.widgetState.getMoveHandle().setOrigin(null);
170171
model.activeState = null;
171172
model.hasFocus = false;
172173
model._widgetManager.enablePicking();

Sources/Widgets/Widgets3D/LineWidget/behavior.js

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,23 @@ export default function widgetBehavior(publicAPI, model) {
2626
publicAPI.getHandle = (handleIndex) =>
2727
model.widgetState[handleGetters[handleIndex]]();
2828

29+
/**
30+
* Return the index in the of tbe handle in `representations` array,
31+
* or -1 if the handle is not present in the widget state.
32+
*/
33+
publicAPI.getHandleIndex = (handle) => {
34+
switch (handle) {
35+
case model.widgetState.getHandle1():
36+
return 0;
37+
case model.widgetState.getHandle2():
38+
return 1;
39+
case model.widgetState.getMoveHandle():
40+
return 2;
41+
default:
42+
return -1;
43+
}
44+
};
45+
2946
publicAPI.isPlaced = () =>
3047
getNumberOfPlacedHandles(model.widgetState) === MAX_POINTS;
3148

@@ -159,12 +176,6 @@ export default function widgetBehavior(publicAPI, model) {
159176

160177
// Handles visibility ---------------------------------------------------------
161178

162-
publicAPI.setMoveHandleVisibility = (visibility) => {
163-
model.representations[2].setVisibilityFlagArray([visibility, visibility]);
164-
model.widgetState.getMoveHandle().setVisible(visibility);
165-
model.representations[2].updateActorVisibility();
166-
};
167-
168179
/**
169180
* Set actor visibility to true unless it is a NONE handle
170181
* and uses state visibility variable for the displayActor visibility to
@@ -212,7 +223,7 @@ export default function widgetBehavior(publicAPI, model) {
212223
}
213224
if (handleIndex === 1) {
214225
publicAPI.placeText();
215-
publicAPI.setMoveHandleVisibility(false);
226+
publicAPI.loseFocus();
216227
}
217228
};
218229

@@ -278,7 +289,9 @@ export default function widgetBehavior(publicAPI, model) {
278289
) {
279290
if (model.activeState.setOrigin) {
280291
model.activeState.setOrigin(worldCoords);
281-
publicAPI.setMoveHandleVisibility(!publicAPI.isPlaced());
292+
publicAPI.updateHandleVisibility(
293+
publicAPI.getHandleIndex(model.activeState)
294+
);
282295
} else {
283296
// Dragging line
284297
publicAPI
@@ -356,7 +369,6 @@ export default function widgetBehavior(publicAPI, model) {
356369
if (!model.hasFocus && !publicAPI.isPlaced()) {
357370
model.activeState = model.widgetState.getMoveHandle();
358371
model.activeState.setShape(publicAPI.getHandle(0).getShape());
359-
publicAPI.setMoveHandleVisibility(true);
360372
model.activeState.activate();
361373
model._interactor.requestAnimation(publicAPI);
362374
publicAPI.invokeStartInteractionEvent();
@@ -373,6 +385,7 @@ export default function widgetBehavior(publicAPI, model) {
373385
}
374386
model.widgetState.deactivate();
375387
model.widgetState.getMoveHandle().deactivate();
388+
model.widgetState.getMoveHandle().setOrigin(null);
376389
model.activeState = null;
377390
model.hasFocus = false;
378391
model._widgetManager.enablePicking();

Sources/Widgets/Widgets3D/LineWidget/helpers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export function updateTextPosition(model) {
2323
}
2424

2525
export function isHandlePlaced(handleIndex, widgetState) {
26+
if (handleIndex === 2) {
27+
return widgetState.getMoveHandle().getOrigin() != null;
28+
}
29+
2630
const handle1Origin = widgetState.getHandle1().getOrigin();
2731
if (handleIndex === 0) {
2832
return handle1Origin != null;

Sources/Widgets/Widgets3D/PolyLineWidget/behavior.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ export default function widgetBehavior(publicAPI, model) {
199199
model.widgetState.deactivate();
200200
model.widgetState.getMoveHandle().deactivate();
201201
model.widgetState.getMoveHandle().setVisible(false);
202+
model.widgetState.getMoveHandle().setOrigin(null);
202203
model.activeState = null;
203204
model.hasFocus = false;
204205
model._widgetManager.enablePicking();

0 commit comments

Comments
 (0)