Search in sources :

Example 16 with Entity

use of com.willwinder.ugs.nbp.designer.entities.Entity in project Universal-G-Code-Sender by winder.

the class RotationControl method onEvent.

@Override
public void onEvent(EntityEvent entityEvent) {
    if (entityEvent instanceof MouseEntityEvent && entityEvent.getTarget() == this) {
        MouseEntityEvent mouseShapeEvent = (MouseEntityEvent) entityEvent;
        Point2D mousePosition = mouseShapeEvent.getCurrentMousePosition();
        Entity target = getSelectionManager();
        if (mouseShapeEvent.getType() == EventType.MOUSE_PRESSED) {
            startPosition = mousePosition;
            startRotation = target.getRotation();
            center = target.getCenter();
        } else if (mouseShapeEvent.getType() == EventType.MOUSE_DRAGGED) {
            int decimals = 0;
            if (mouseShapeEvent.isAltPressed()) {
                decimals = 1;
            }
            double deltaAngle = Utils.calcRotationAngleInDegrees(target.getCenter(), startPosition) - Utils.calcRotationAngleInDegrees(target.getCenter(), mousePosition);
            // Adjust the delta angle to achieve some rounding
            double fractionToRound = deltaAngle + target.getRotation() - Utils.roundToDecimals(deltaAngle + target.getRotation(), decimals);
            deltaAngle = deltaAngle - fractionToRound;
            target.rotate(center, deltaAngle);
            startPosition = mousePosition;
        } else if (mouseShapeEvent.getType() == EventType.MOUSE_RELEASED) {
            double totalRotation = (startRotation + target.getRotation());
            addUndoAction(center, totalRotation, target);
        } else if (mouseShapeEvent.getType() == EventType.MOUSE_IN) {
            isHovered = true;
        } else if (mouseShapeEvent.getType() == EventType.MOUSE_OUT) {
            isHovered = false;
        }
    }
}
Also used : MouseEntityEvent(com.willwinder.ugs.nbp.designer.gui.MouseEntityEvent) Entity(com.willwinder.ugs.nbp.designer.entities.Entity)

Example 17 with Entity

use of com.willwinder.ugs.nbp.designer.entities.Entity in project Universal-G-Code-Sender by winder.

the class RotationControl method addUndoAction.

private void addUndoAction(Point2D center, double rotation, Entity target) {
    UndoManager undoManager = CentralLookup.getDefault().lookup(UndoManager.class);
    if (undoManager != null) {
        List<Entity> entityList = new ArrayList<>();
        if (target instanceof SelectionManager) {
            entityList.addAll(((SelectionManager) target).getSelection());
        } else {
            entityList.add(target);
        }
        undoManager.addAction(new RotateAction(entityList, center, rotation));
    }
}
Also used : Entity(com.willwinder.ugs.nbp.designer.entities.Entity) SelectionManager(com.willwinder.ugs.nbp.designer.entities.selection.SelectionManager) UndoManager(com.willwinder.ugs.nbp.designer.actions.UndoManager) RotateAction(com.willwinder.ugs.nbp.designer.actions.RotateAction) ArrayList(java.util.ArrayList)

Example 18 with Entity

use of com.willwinder.ugs.nbp.designer.entities.Entity in project Universal-G-Code-Sender by winder.

the class EntityTreeModel method fireTreeStructureChanged.

protected void fireTreeStructureChanged(Object object) {
    List<Entity> selection = controller.getSelectionManager().getSelection();
    TreeModelEvent e = new TreeModelEvent(this, new Object[] { object });
    for (TreeModelListener tml : treeModelListeners) {
        tml.treeStructureChanged(e);
    }
    // Restore old selection
    List<Entity> existingEntities = controller.getDrawing().getEntities();
    List<Entity> newSelection = selection.stream().filter(existingEntities::contains).collect(Collectors.toList());
    controller.getSelectionManager().setSelection(newSelection);
}
Also used : Entity(com.willwinder.ugs.nbp.designer.entities.Entity) TreeModelEvent(javax.swing.event.TreeModelEvent) TreeModelListener(javax.swing.event.TreeModelListener)

Example 19 with Entity

use of com.willwinder.ugs.nbp.designer.entities.Entity in project Universal-G-Code-Sender by winder.

the class C2dReader method read.

@Override
public Optional<Design> read(InputStream resourceAsStream) {
    try {
        String designFileContent = IOUtils.toString(resourceAsStream, StandardCharsets.UTF_8);
        designFileContent = StringUtils.substringBefore(designFileContent, "MODELV1");
        if (StringUtils.isEmpty(designFileContent)) {
            return Optional.empty();
        }
        Gson gson = new GsonBuilder().create();
        C2dFile c2dFile = gson.fromJson(designFileContent, C2dFile.class);
        List<Entity> entities = new ArrayList<>();
        entities.addAll(parseCurveObjects(c2dFile));
        entities.addAll(parseCircleObjects(c2dFile));
        entities.addAll(parseRectangleObjects(c2dFile));
        Design design = new Design();
        design.setEntities(entities);
        return Optional.of(design);
    } catch (Exception e) {
        throw new IllegalStateException("Couldn't read from stream", e);
    }
}
Also used : Design(com.willwinder.ugs.nbp.designer.model.Design) Entity(com.willwinder.ugs.nbp.designer.entities.Entity) GsonBuilder(com.google.gson.GsonBuilder) C2dFile(com.willwinder.ugs.nbp.designer.io.c2d.model.C2dFile) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) FileNotFoundException(java.io.FileNotFoundException)

Example 20 with Entity

use of com.willwinder.ugs.nbp.designer.entities.Entity in project Universal-G-Code-Sender by winder.

the class SelectionSettingsPanel method onEvent.

@Override
public void onEvent(EntityEvent entityEvent) {
    if (this.controller.getSelectionManager().getSelection().isEmpty()) {
        setEnabled(false);
        return;
    } else {
        setEnabled(true);
    }
    Entity selectedEntity = controller.getSelectionManager().getSelection().get(0);
    if (selectedEntity instanceof Cuttable) {
        Cuttable cuttable = (Cuttable) selectedEntity;
        setFieldValue(cutTypeComboBox, cuttable.getCutType());
        setFieldValue(startDepthSpinner, cuttable.getStartDepth());
        setFieldValue(targetDepthSpinner, cuttable.getTargetDepth());
        final boolean hasCutTypeSelection = cuttable.getCutType() != CutType.NONE;
        startDepthSpinner.setEnabled(hasCutTypeSelection);
        startDepthLabel.setEnabled(hasCutTypeSelection);
        targetDepthSpinner.setEnabled(hasCutTypeSelection);
        targetDepthLabel.setEnabled(hasCutTypeSelection);
    }
    boolean isTextCuttable = selectedEntity instanceof Text;
    textTextField.setVisible(isTextCuttable);
    textLabel.setVisible(isTextCuttable);
    fontLabel.setVisible(isTextCuttable);
    fontDropDown.setVisible(isTextCuttable);
    fontSeparator.setVisible(isTextCuttable);
    if (isTextCuttable) {
        setFieldValue(textTextField, ((Text) selectedEntity).getText());
        setFieldValue(fontDropDown, ((Text) selectedEntity).getFontFamily());
    }
    Point2D position = controller.getSelectionManager().getPosition(anchor);
    setFieldValue(posXTextField, Utils.toString(position.getX()));
    setFieldValue(posYTextField, Utils.toString(position.getY()));
    setFieldValue(widthTextField, Utils.toString(controller.getSelectionManager().getSize().getWidth()));
    setFieldValue(heightTextField, Utils.toString(controller.getSelectionManager().getSize().getHeight()));
    setFieldValue(rotation, Utils.toString(controller.getSelectionManager().getRotation()));
    controller.getDrawing().repaint();
}
Also used : Entity(com.willwinder.ugs.nbp.designer.entities.Entity) Point2D(java.awt.geom.Point2D) Cuttable(com.willwinder.ugs.nbp.designer.entities.cuttable.Cuttable) Text(com.willwinder.ugs.nbp.designer.entities.cuttable.Text)

Aggregations

Entity (com.willwinder.ugs.nbp.designer.entities.Entity)22 Point2D (java.awt.geom.Point2D)7 SelectionManager (com.willwinder.ugs.nbp.designer.entities.selection.SelectionManager)6 EntityGroup (com.willwinder.ugs.nbp.designer.entities.EntityGroup)4 Design (com.willwinder.ugs.nbp.designer.model.Design)4 ArrayList (java.util.ArrayList)4 Text (com.willwinder.ugs.nbp.designer.entities.cuttable.Text)3 MouseEntityEvent (com.willwinder.ugs.nbp.designer.gui.MouseEntityEvent)3 UndoManager (com.willwinder.ugs.nbp.designer.actions.UndoManager)2 Group (com.willwinder.ugs.nbp.designer.entities.cuttable.Group)2 Size (com.willwinder.ugs.nbp.designer.model.Size)2 Gson (com.google.gson.Gson)1 GsonBuilder (com.google.gson.GsonBuilder)1 JsonSyntaxException (com.google.gson.JsonSyntaxException)1 MoveAction (com.willwinder.ugs.nbp.designer.actions.MoveAction)1 RotateAction (com.willwinder.ugs.nbp.designer.actions.RotateAction)1 Cuttable (com.willwinder.ugs.nbp.designer.entities.cuttable.Cuttable)1 Path (com.willwinder.ugs.nbp.designer.entities.cuttable.Path)1 ImageTracerDialog (com.willwinder.ugs.nbp.designer.gui.imagetracer.ImageTracerDialog)1 C2dFile (com.willwinder.ugs.nbp.designer.io.c2d.model.C2dFile)1