in modules/edit-modes/src/lib/extrude-mode.ts [105:145]
handleStopDragging(event: StopDraggingEvent, props: ModeProps<FeatureCollection>) {
const selectedFeatureIndexes = props.selectedIndexes;
const editHandle = getPickedEditHandle(event.pointerDownPicks);
if (selectedFeatureIndexes.length && editHandle) {
const { featureIndex } = editHandle.properties;
let { positionIndexes } = editHandle.properties;
const size = this.coordinatesSize(positionIndexes, featureIndex, props.data);
positionIndexes = this.isPointAdded
? this.nextPositionIndexes(positionIndexes, size)
: positionIndexes;
// p1 and p1 are end points for edge
const p1 = this.getPointForPositionIndexes(
this.prevPositionIndexes(positionIndexes, size),
featureIndex,
props.data
);
const p2 = this.getPointForPositionIndexes(positionIndexes, featureIndex, props.data);
if (p1 && p2) {
// p3 and p4 are end points for new moved (extruded) edge
const [p3, p4] = generatePointsParallelToLinePoints(p1, p2, event.mapCoords);
const updatedData = new ImmutableFeatureCollection(props.data)
.replacePosition(featureIndex, this.prevPositionIndexes(positionIndexes, size), p4)
.replacePosition(featureIndex, positionIndexes, p3)
.getObject();
props.onEdit({
updatedData,
editType: 'extruded',
editContext: {
featureIndexes: [featureIndex],
positionIndexes,
position: p3,
},
});
}
}
this.isPointAdded = false;
}