Search in sources :

Example 21 with Size

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

the class PocketToolPathTest 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));
    PocketToolPath simplePocket = new PocketToolPath(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) / 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 22 with Size

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

the class UgsDesignReaderTest method readDesignWithPath.

@Test
public void readDesignWithPath() {
    Path entity = new Path();
    entity.moveTo(0, 0);
    entity.lineTo(0, 0);
    entity.lineTo(10.1, 10.1);
    entity.lineTo(10, 0);
    entity.lineTo(0, 0);
    entity.setSize(new Size(10, 12));
    entity.setPosition(new Point2D.Double(100, 120));
    entity.setName("path");
    entity.setRotation(1);
    entity.setTargetDepth(12);
    entity.setCutType(CutType.POCKET);
    String data = convertEntityToString(entity);
    UgsDesignReader reader = new UgsDesignReader();
    Design design = reader.read(IOUtils.toInputStream(data)).get();
    Cuttable readEntity = (Cuttable) design.getEntities().get(0);
    assertTrue(readEntity instanceof Path);
    assertEquals(entity.getPosition().getX(), readEntity.getPosition().getX(), 0.1);
    assertEquals(entity.getPosition().getY(), readEntity.getPosition().getY(), 0.1);
    assertEquals(entity.getName(), readEntity.getName());
    assertEquals(entity.getCutType(), readEntity.getCutType());
    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 23 with Size

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

the class UgsDesignReaderTest method readDesignWithEllipse.

@Test
public void readDesignWithEllipse() {
    Ellipse entity = new Ellipse();
    entity.setSize(new Size(50, 100));
    entity.setRotation(10);
    entity.setName("ellipse");
    entity.setTargetDepth(12);
    entity.setCutType(CutType.POCKET);
    String data = convertEntityToString(entity);
    UgsDesignReader reader = new UgsDesignReader();
    Design design = reader.read(IOUtils.toInputStream(data)).get();
    Cuttable readEntity = (Cuttable) design.getEntities().get(0);
    assertTrue(readEntity instanceof Ellipse);
    assertEquals(entity.getTransform(), readEntity.getTransform());
    assertEquals(entity.getPosition().getX(), readEntity.getPosition().getX(), 0.1);
    assertEquals(entity.getPosition().getY(), readEntity.getPosition().getY(), 0.1);
    assertEquals(entity.getName(), readEntity.getName());
    assertEquals(entity.getCutType(), readEntity.getCutType());
    assertEquals(entity.getTargetDepth(), readEntity.getTargetDepth(), 0.1);
    assertEquals(entity.getRelativeShape().getBounds().getWidth(), readEntity.getRelativeShape().getBounds().getWidth(), 0.1);
    assertEquals(entity.getRelativeShape().getBounds().getHeight(), readEntity.getRelativeShape().getBounds().getHeight(), 0.1);
    assertEquals(entity.getSize().getWidth(), readEntity.getSize().getWidth(), 0.1);
    assertEquals(entity.getSize().getHeight(), readEntity.getSize().getHeight(), 0.1);
    assertEquals(entity.getRotation(), readEntity.getRotation(), 0.1);
}
Also used : Design(com.willwinder.ugs.nbp.designer.model.Design) Size(com.willwinder.ugs.nbp.designer.model.Size) Test(org.junit.Test)

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