mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 17:22:09 +10:00
improve snap to grid when multiple joint points are selected
This commit is contained in:
@@ -279,7 +279,7 @@ public class Presenter implements IPlugInPort {
|
|||||||
if (!isComponentLocked(component) && isComponentVisible(component)
|
if (!isComponentLocked(component) && isComponentVisible(component)
|
||||||
&& !configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false)) {
|
&& !configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false)) {
|
||||||
ComponentArea area = drawingManager.getComponentArea(component);
|
ComponentArea area = drawingManager.getComponentArea(component);
|
||||||
if (area != null && area.getOutlineArea() != null && area.getOutlineArea().contains(scaledPoint)) {
|
if (area != null && area.getOutlineArea() != null && scaledPoint != null && area.getOutlineArea().contains(scaledPoint)) {
|
||||||
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
|
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1321,19 +1321,29 @@ public class Presenter implements IPlugInPort {
|
|||||||
Dimension d = drawingManager.getCanvasDimensions(currentProject, 1d, useExtraSpace);
|
Dimension d = drawingManager.getCanvasDimensions(currentProject, 1d, useExtraSpace);
|
||||||
double extraSpace = useExtraSpace ? drawingManager.getExtraSpace(currentProject) : 0;
|
double extraSpace = useExtraSpace ? drawingManager.getExtraSpace(currentProject) : 0;
|
||||||
|
|
||||||
if (controlPointMap.size() == 1) {
|
List<Point2D> points = new ArrayList<Point2D>();
|
||||||
Map.Entry<IDIYComponent<?>, Set<Integer>> entry = controlPointMap.entrySet().iterator().next();
|
for (Map.Entry<IDIYComponent<?>, Set<Integer>> entry : controlPointMap.entrySet()) {
|
||||||
|
for (Integer i : entry.getValue())
|
||||||
Point2D firstPoint = entry.getKey().getControlPoint(entry.getValue().toArray(new Integer[] {})[0]);
|
{
|
||||||
Point2D testPoint = new Point2D.Double(firstPoint.getX() + dx, firstPoint.getY() + dy);
|
Point2D p = entry.getKey().getControlPoint(i);
|
||||||
if (snapToGrid) {
|
points.add(p);
|
||||||
CalcUtils.snapPointToGrid(testPoint, currentProject.getGridSpacing());
|
}
|
||||||
} else if (snapToObjects) {
|
|
||||||
CalcUtils.snapPointToObjects(testPoint, currentProject.getGridSpacing(), entry.getKey(), currentProject.getComponents());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
actualDx = testPoint.getX() - firstPoint.getX();
|
Point2D firstPoint = points.iterator().next();
|
||||||
actualDy = testPoint.getY() - firstPoint.getY();
|
if (points.size() == 1 || points.stream().allMatch((x) -> x.equals(firstPoint))) {
|
||||||
|
double avgX = points.stream().mapToDouble((x) -> x.getX()).average().getAsDouble();
|
||||||
|
double avgY = points.stream().mapToDouble((x) -> x.getY()).average().getAsDouble();
|
||||||
|
|
||||||
|
Point2D testPoint = new Point2D.Double(avgX + dx, avgY + dy);
|
||||||
|
if (snapToGrid) {
|
||||||
|
CalcUtils.snapPointToGrid(testPoint, currentProject.getGridSpacing());
|
||||||
|
} else if (snapToObjects && controlPointMap.size() == 1) {
|
||||||
|
CalcUtils.snapPointToObjects(testPoint, currentProject.getGridSpacing(), controlPointMap.entrySet().iterator().next().getKey(), currentProject.getComponents());
|
||||||
|
}
|
||||||
|
|
||||||
|
actualDx = testPoint.getX() - avgX;
|
||||||
|
actualDy = testPoint.getY() - avgY;
|
||||||
} else if (snapToGrid) {
|
} else if (snapToGrid) {
|
||||||
actualDx = CalcUtils.roundToGrid(dx, currentProject.getGridSpacing());
|
actualDx = CalcUtils.roundToGrid(dx, currentProject.getGridSpacing());
|
||||||
actualDy = CalcUtils.roundToGrid(dy, currentProject.getGridSpacing());
|
actualDy = CalcUtils.roundToGrid(dy, currentProject.getGridSpacing());
|
||||||
|
|||||||
Reference in New Issue
Block a user