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