use of net.sf.latexdraw.model.api.shape.ControlPointShape in project latexdraw by arnobl.
the class Pencil method bindMultiClic2AddShape.
/**
* Binds a multi-click interaction to creates multi-point shapes.
*/
private void bindMultiClic2AddShape() {
final Function<PointsData, AddShape> creation = i -> new AddShape(setInitialPtsShape(editing.createShapeInstance(), i.getPointsData().get(0).getSrcLocalPoint()), canvas.getDrawing());
// Binding for polygons
nodeBinder().usingInteraction(() -> new MultiClick(3)).toProduce(creation).on(canvas).then((i, c) -> {
final Point currPoint = getAdaptedPoint(i.getCurrentPosition());
if (c.getShape().getNbPoints() == i.getPointsData().size() && i.getLastButton().orElse(MouseButton.NONE) == MouseButton.PRIMARY) {
c.setShape(ShapeFactory.INST.createPolygonFrom((Polygon) c.getShape(), ShapeFactory.INST.createPoint(currPoint.getX(), currPoint.getY())));
} else {
((ModifiablePointsShape) c.getShape()).setPoint(currPoint.getX(), currPoint.getY(), -1);
}
canvas.setTempView(viewFactory.createView(c.getShape()).orElse(null));
}).strictStart().endOrCancel(i -> canvas.setTempView(null)).when(() -> editing.getCurrentChoice() == EditionChoice.POLYGON).bind();
// Binding for polyline
nodeBinder().usingInteraction(MultiClick::new).toProduce(creation).on(canvas).then((i, c) -> {
final Point currPoint = getAdaptedPoint(i.getCurrentPosition());
if (c.getShape().getNbPoints() == i.getPointsData().size() && i.getLastButton().orElse(MouseButton.NONE) == MouseButton.PRIMARY) {
c.setShape(ShapeFactory.INST.createPolylineFrom((Polyline) c.getShape(), ShapeFactory.INST.createPoint(currPoint.getX(), currPoint.getY())));
} else {
((ModifiablePointsShape) c.getShape()).setPoint(currPoint.getX(), currPoint.getY(), -1);
}
canvas.setTempView(viewFactory.createView(c.getShape()).orElse(null));
}).strictStart().endOrCancel(i -> canvas.setTempView(null)).when(() -> editing.getCurrentChoice() == EditionChoice.LINES).bind();
// Binding for bézier curves
nodeBinder().usingInteraction(MultiClick::new).toProduce(creation).on(canvas).then((i, c) -> {
final Point currPoint = getAdaptedPoint(i.getCurrentPosition());
if (c.getShape().getNbPoints() == i.getPointsData().size() && i.getLastButton().orElse(MouseButton.NONE) == MouseButton.PRIMARY) {
c.setShape(ShapeFactory.INST.createBezierCurveFrom((BezierCurve) c.getShape(), ShapeFactory.INST.createPoint(currPoint.getX(), currPoint.getY())));
} else {
((ModifiablePointsShape) c.getShape()).setPoint(currPoint.getX(), currPoint.getY(), -1);
}
((ControlPointShape) c.getShape()).balance();
canvas.setTempView(viewFactory.createView(c.getShape()).orElse(null));
}).strictStart().endOrCancel(i -> canvas.setTempView(null)).when(() -> editing.getCurrentChoice() == EditionChoice.BEZIER_CURVE).bind();
}
use of net.sf.latexdraw.model.api.shape.ControlPointShape in project latexdraw by arnobl.
the class ViewArrowableTrait method flush.
@Override
public void flush() {
final int nbPts = model.getNbPoints();
model.getPtAt(0).xProperty().removeListener(updateArrow);
model.getPtAt(0).yProperty().removeListener(updateArrow);
model.getPtAt(-1).xProperty().removeListener(updateArrow);
model.getPtAt(-1).yProperty().removeListener(updateArrow);
if (nbPts > 2) {
model.getPtAt(1).xProperty().removeListener(updateArrow);
model.getPtAt(1).yProperty().removeListener(updateArrow);
}
if (nbPts > 3) {
model.getPtAt(nbPts - 2).xProperty().removeListener(updateArrow);
model.getPtAt(nbPts - 2).yProperty().removeListener(updateArrow);
}
model.thicknessProperty().removeListener(updateArrow);
model.fillingProperty().removeListener(updateClip);
model.dbleBordProperty().removeListener(updateArrow);
model.dbleBordSepProperty().removeListener(updateArrow);
model.getArrows().forEach(arr -> arr.onChanges(null));
model.getPoints().forEach(pt -> {
pt.xProperty().removeListener(updateArrow);
pt.yProperty().removeListener(updateArrow);
});
if (model instanceof ControlPointShape) {
((ControlPointShape) model).getFirstCtrlPts().forEach(pt -> {
pt.xProperty().removeListener(updateArrow);
pt.yProperty().removeListener(updateArrow);
});
}
super.flush();
}
use of net.sf.latexdraw.model.api.shape.ControlPointShape in project latexdraw by arnobl.
the class PolymorphCtlPtShapeTest method testCtrlPt2.
@ParameterizedTest
@MethodSource("net.sf.latexdraw.data.ShapeSupplier#createDiversifiedCtrlPtShape")
default void testCtrlPt2(final ControlPointShape sh) {
final ControlPointShape s2 = produceOutputShapeFrom(sh);
assertThat(sh.getSecondCtrlPts()).isEqualTo(s2.getSecondCtrlPts());
}
use of net.sf.latexdraw.model.api.shape.ControlPointShape in project latexdraw by arnobl.
the class PolymorphCtlPtShapeTest method testCtrlPt1.
@ParameterizedTest
@MethodSource("net.sf.latexdraw.data.ShapeSupplier#createDiversifiedCtrlPtShape")
default void testCtrlPt1(final ControlPointShape sh) {
final ControlPointShape s2 = produceOutputShapeFrom(sh);
assertThat(sh.getFirstCtrlPts()).isEqualTo(s2.getFirstCtrlPts());
}
use of net.sf.latexdraw.model.api.shape.ControlPointShape in project latexdraw by arnobl.
the class TestControlPointShapeBase method testDuplicateDoNotShareCtrlPoints.
@Theory
public void testDuplicateDoNotShareCtrlPoints(@CtrlShapeData final ControlPointShape shape) {
final List<Point> ctrlPts = cloneList(shape.getFirstCtrlPts(), pt -> ShapeFactory.INST.createPoint(pt));
final Shape sh = shape.duplicate();
sh.translate(11d, 12d);
assertEquals(ctrlPts, shape.getFirstCtrlPts());
}
Aggregations