Search in sources :

Example 1 with Size

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

the class RectangleTest method setSizeWithAnotherWidthShouldOnlyScaleWidth.

@Test
public void setSizeWithAnotherWidthShouldOnlyScaleWidth() {
    Rectangle rectangle = new Rectangle();
    rectangle.setPosition(new Point2D.Double(1, 1));
    rectangle.setWidth(100);
    rectangle.setHeight(100);
    rectangle.setRotation(90);
    assertEquals(100, rectangle.getSize().getWidth(), 0.1);
    assertEquals(100, rectangle.getSize().getHeight(), 0.1);
    assertEquals(1, rectangle.getPosition().getX(), 0.1);
    assertEquals(1, rectangle.getPosition().getY(), 0.1);
    assertEquals(90, rectangle.getRotation(), 0.1);
    rectangle.setSize(new Size(200, 150));
    assertEquals(200, rectangle.getSize().getWidth(), 0.1);
    assertEquals(150, rectangle.getSize().getHeight(), 0.1);
}
Also used : Point2D(java.awt.geom.Point2D) Size(com.willwinder.ugs.nbp.designer.model.Size) Rectangle(com.willwinder.ugs.nbp.designer.entities.cuttable.Rectangle) Test(org.junit.Test)

Example 2 with Size

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

the class UgsDesignReaderTest method readDesignWithRectangle.

@Test
public void readDesignWithRectangle() {
    Rectangle entity = new Rectangle();
    entity.setSize(new Size(10, 10));
    entity.setCenter(new Point2D.Double(10, 10));
    entity.setName("rectangle");
    entity.setRotation(90);
    entity.setStartDepth(1);
    entity.setTargetDepth(12);
    entity.setCutType(CutType.POCKET);
    String data = convertEntityToString(entity);
    UgsDesignReader reader = new UgsDesignReader();
    Design design = reader.read(IOUtils.toInputStream(data)).get();
    assertEquals(1, design.getEntities().size());
    Cuttable readEntity = (Cuttable) design.getEntities().get(0);
    assertTrue(readEntity instanceof Rectangle);
    assertEquals(entity.getPosition(), readEntity.getPosition());
    assertEquals(entity.getName(), readEntity.getName());
    assertEquals(entity.getCutType(), readEntity.getCutType());
    assertEquals(entity.getStartDepth(), readEntity.getStartDepth(), 0.1);
    assertEquals(entity.getTargetDepth(), readEntity.getTargetDepth(), 0.1);
    assertEquals(entity.getRotation(), readEntity.getRotation(), 0.1);
}
Also used : Design(com.willwinder.ugs.nbp.designer.model.Design) Point2D(java.awt.geom.Point2D) Size(com.willwinder.ugs.nbp.designer.model.Size) Test(org.junit.Test)

Example 3 with Size

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

the class SelectionSettingsPanel method changedUpdate.

@Override
public void changedUpdate(DocumentEvent e) {
    controller.getSelectionManager().removeListener(this);
    if (StringUtils.isNotEmpty(rotation.getText()) && e.getDocument() == rotation.getDocument()) {
        try {
            double angle = Utils.parseDouble(rotation.getText());
            controller.getSelectionManager().setRotation(angle);
            controller.getDrawing().repaint();
        } catch (NumberFormatException ex) {
        // never mind
        }
    }
    if (StringUtils.isNotEmpty(posXTextField.getText()) && StringUtils.isNotEmpty(posYTextField.getText()) && (e.getDocument() == posXTextField.getDocument() || e.getDocument() == posYTextField.getDocument())) {
        double x = Utils.parseDouble(posXTextField.getText());
        double y = Utils.parseDouble(posYTextField.getText());
        Point2D position = controller.getSelectionManager().getPosition(anchor);
        position.setLocation(x - position.getX(), y - position.getY());
        controller.getSelectionManager().move(position);
        controller.getDrawing().repaint();
    }
    if (StringUtils.isNotEmpty(widthTextField.getText()) && StringUtils.isNotEmpty(heightTextField.getText()) && (e.getDocument() == widthTextField.getDocument() || e.getDocument() == heightTextField.getDocument())) {
        try {
            double width = Utils.parseDouble(widthTextField.getText());
            double height = Utils.parseDouble(heightTextField.getText());
            if (width <= 0 || height <= 0) {
                return;
            }
            if (!lockRatioButton.isSelected()) {
                double ratio = controller.getSelectionManager().getSize().getRatio();
                if (e.getDocument() == widthTextField.getDocument()) {
                    height = width / ratio;
                    setFieldValue(heightTextField, Utils.toString(height));
                } else {
                    width = height * ratio;
                    setFieldValue(widthTextField, Utils.toString(width));
                }
            }
            controller.getSelectionManager().setSize(new Size(width, height));
            controller.getDrawing().repaint();
        } catch (NumberFormatException ex) {
        // never mind
        }
    }
    if (!controller.getSelectionManager().isEmpty()) {
        Entity entity = controller.getSelectionManager().getSelection().get(0);
        if (entity instanceof Text) {
            ((Text) entity).setText(textTextField.getText());
            ((Text) entity).setFontFamily((String) fontDropDown.getSelectedItem());
        }
        controller.getDrawing().repaint();
    }
    controller.getSelectionManager().addListener(this);
}
Also used : Entity(com.willwinder.ugs.nbp.designer.entities.Entity) Point2D(java.awt.geom.Point2D) Size(com.willwinder.ugs.nbp.designer.model.Size) Text(com.willwinder.ugs.nbp.designer.entities.cuttable.Text)

Example 4 with Size

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

the class SimplePocketTest method pocketShouldNotExceedTheGeometry.

@Test
public void pocketShouldNotExceedTheGeometry() {
    double toolRadius = 2.5;
    double geometrySize = 10d;
    double safeHeight = 1;
    double targetDepth = -10;
    int depthPerPass = 1;
    Rectangle rectangle = new Rectangle();
    rectangle.setSize(new Size(geometrySize, geometrySize));
    SimplePocket simplePocket = new SimplePocket(rectangle);
    simplePocket.setTargetDepth(targetDepth);
    simplePocket.setDepthPerPass(depthPerPass);
    simplePocket.setToolDiameter(toolRadius * 2);
    simplePocket.setStepOver(1);
    simplePocket.setSafeHeight(safeHeight);
    List<Segment> segmentList = simplePocket.toGcodePath().getSegments();
    Segment firstSegment = segmentList.get(0);
    assertEquals("The first segment should move to safe height", safeHeight, firstSegment.point.getAxis(Axis.Z), 0.1);
    assertFalse("The first segment should not move X", firstSegment.point.hasAxis(Axis.X));
    assertFalse("The first segment should not move Y", firstSegment.point.hasAxis(Axis.Y));
    Segment secondSegment = segmentList.get(1);
    assertEquals("The second segment should move to safe height", safeHeight, firstSegment.point.getAxis(Axis.Z), 0.1);
    assertEquals("The second segment should move to first X position", safeHeight, secondSegment.point.getAxis(Axis.X), toolRadius);
    assertEquals("The second segment should move to first Y position", safeHeight, secondSegment.point.getAxis(Axis.Y), toolRadius);
    // Make sure that we don't move outside the boundary of the geometry
    segmentList.stream().filter(segment -> segment.type == SegmentType.LINE || segment.type == SegmentType.POINT).forEach(segment -> {
        assertTrue("Point was outside boundary of 10x10 shape: X=" + segment.getPoint().getAxis(Axis.X), segment.getPoint().getAxis(Axis.X) >= toolRadius);
        assertTrue("Point was outside boundary of 10x10 shape: Y=" + segment.getPoint().getAxis(Axis.Y), segment.getPoint().getAxis(Axis.Y) >= toolRadius);
        assertTrue("Point was outside boundary of 10x10 shape: X=" + segment.getPoint().getAxis(Axis.X), segment.getPoint().getAxis(Axis.X) <= geometrySize - toolRadius);
        assertTrue("Point was outside boundary of 10x10 shape: Y=" + segment.getPoint().getAxis(Axis.Y), segment.getPoint().getAxis(Axis.Y) <= geometrySize - toolRadius);
        assertTrue("Point was outside boundary of 10x10 shape: Z=" + segment.getPoint().getAxis(Axis.Z), segment.getPoint().getAxis(Axis.Z) < 0);
        assertTrue("Point was outside boundary of 10x10 shape: Z=" + segment.getPoint().getAxis(Axis.Z), segment.getPoint().getAxis(Axis.Z) >= targetDepth);
    });
    List<Segment> drillOperations = segmentList.stream().filter(segment -> segment.type == SegmentType.POINT).collect(Collectors.toList());
    assertEquals("There should be a number of drill operations when making a pocket", Math.abs(targetDepth / depthPerPass), drillOperations.size(), 0.1);
    PartialPosition point = drillOperations.get(drillOperations.size() - 1).getPoint();
    assertEquals("Last operation should reach the target depth", targetDepth, point.getAxis(Axis.Z), 0.1);
}
Also used : Size(com.willwinder.ugs.nbp.designer.model.Size) Segment(com.willwinder.ugs.nbp.designer.io.gcode.path.Segment) Axis(com.willwinder.universalgcodesender.model.Axis) List(java.util.List) Rectangle(com.willwinder.ugs.nbp.designer.entities.cuttable.Rectangle) SegmentType(com.willwinder.ugs.nbp.designer.io.gcode.path.SegmentType) Test(org.junit.Test) Assert(org.junit.Assert) Collectors(java.util.stream.Collectors) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) Size(com.willwinder.ugs.nbp.designer.model.Size) Rectangle(com.willwinder.ugs.nbp.designer.entities.cuttable.Rectangle) Segment(com.willwinder.ugs.nbp.designer.io.gcode.path.Segment) Test(org.junit.Test)

Example 5 with Size

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

the class EntityGroup method setSize.

@Override
public void setSize(Size size) {
    Size originalSize = getSize();
    scale(size.getWidth() / originalSize.getWidth(), size.getHeight() / originalSize.getHeight());
}
Also used : Size(com.willwinder.ugs.nbp.designer.model.Size)

Aggregations

Size (com.willwinder.ugs.nbp.designer.model.Size)23 Point2D (java.awt.geom.Point2D)10 Test (org.junit.Test)10 Rectangle (com.willwinder.ugs.nbp.designer.entities.cuttable.Rectangle)8 Ellipse (com.willwinder.ugs.nbp.designer.entities.cuttable.Ellipse)4 Design (com.willwinder.ugs.nbp.designer.model.Design)3 Entity (com.willwinder.ugs.nbp.designer.entities.Entity)2 Segment (com.willwinder.ugs.nbp.designer.io.gcode.path.Segment)2 SegmentType (com.willwinder.ugs.nbp.designer.io.gcode.path.SegmentType)2 Axis (com.willwinder.universalgcodesender.model.Axis)2 PartialPosition (com.willwinder.universalgcodesender.model.PartialPosition)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Assert (org.junit.Assert)2 AddAction (com.willwinder.ugs.nbp.designer.actions.AddAction)1 Cuttable (com.willwinder.ugs.nbp.designer.entities.cuttable.Cuttable)1 Group (com.willwinder.ugs.nbp.designer.entities.cuttable.Group)1 Text (com.willwinder.ugs.nbp.designer.entities.cuttable.Text)1 GcodePath (com.willwinder.ugs.nbp.designer.io.gcode.path.GcodePath)1 ActionEvent (java.awt.event.ActionEvent)1