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;
}
}
}
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));
}
}
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);
}
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);
}
}
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();
}
Aggregations