Skip to content

Commit 9f2ec70

Browse files
authored
Merge pull request #2475 from tomsuchel/fix-line-widget-move-handle-not-visible
fix(linewidget): moveHandle not visible and last point of polyline is ignored
2 parents 298c01b + 6c1ab00 commit 9f2ec70

File tree

6 files changed

+30
-24
lines changed

6 files changed

+30
-24
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 & 8 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,6 +289,9 @@ export default function widgetBehavior(publicAPI, model) {
278289
) {
279290
if (model.activeState.setOrigin) {
280291
model.activeState.setOrigin(worldCoords);
292+
publicAPI.updateHandleVisibility(
293+
publicAPI.getHandleIndex(model.activeState)
294+
);
281295
} else {
282296
// Dragging line
283297
publicAPI
@@ -355,7 +369,6 @@ export default function widgetBehavior(publicAPI, model) {
355369
if (!model.hasFocus && !publicAPI.isPlaced()) {
356370
model.activeState = model.widgetState.getMoveHandle();
357371
model.activeState.setShape(publicAPI.getHandle(0).getShape());
358-
publicAPI.setMoveHandleVisibility(true);
359372
model.activeState.activate();
360373
model._interactor.requestAnimation(publicAPI);
361374
publicAPI.invokeStartInteractionEvent();
@@ -372,6 +385,7 @@ export default function widgetBehavior(publicAPI, model) {
372385
}
373386
model.widgetState.deactivate();
374387
model.widgetState.getMoveHandle().deactivate();
388+
model.widgetState.getMoveHandle().setOrigin(null);
375389
model.activeState = null;
376390
model.hasFocus = false;
377391
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)