use of com.willwinder.ugs.nbp.designer.entities.cuttable.Group in project Universal-G-Code-Sender by winder.
the class SvgReader method walk.
private void walk(Node node, Group group, AffineTransform transform, int level) {
GraphicsNode graphicsNode = svgCanvas.getUpdateManager().getBridgeContext().getGraphicsNode(node);
if (graphicsNode != null) {
LOGGER.finest(StringUtils.leftPad("", level, "\t") + graphicsNode);
AffineTransform groupTransform = new AffineTransform(transform);
if (graphicsNode.getTransform() != null) {
if (!graphicsNode.getTransform().isIdentity()) {
groupTransform.concatenate(graphicsNode.getTransform());
} else {
}
}
if (graphicsNode instanceof CompositeGraphicsNode) {
NodeList childNodes = node.getChildNodes();
Group childGroup = group;
if (((CompositeGraphicsNode) graphicsNode).getChildren().size() > 1) {
childGroup = new Group();
if (node.getAttributes() != null && node.getAttributes().getNamedItem("id") != null) {
Node id = node.getAttributes().getNamedItem("id");
childGroup.setName(childGroup.getName() + " (" + id.getFirstChild().getNodeValue() + ")");
}
group.addChild(childGroup);
}
for (int i = 0; i < childNodes.getLength(); i++) {
walk(childNodes.item(i), childGroup, groupTransform, level + 1);
}
} else if (graphicsNode instanceof ShapeNode) {
ShapeNode shapeNode = (ShapeNode) graphicsNode;
Shape shape = shapeNode.getShape();
AbstractEntity createdShape = null;
if (shape instanceof ExtendedGeneralPath) {
createdShape = parsePath((ExtendedGeneralPath) shape);
} else if (shape instanceof Rectangle2D) {
createdShape = parseRectangle((Rectangle2D) shape);
} else if (shape instanceof Ellipse2D) {
createdShape = parseEllipse((Ellipse2D) shape);
} else {
LOGGER.finest(shape.toString());
}
if (createdShape != null) {
Node id = node.getAttributes().getNamedItem("id");
if (id != null) {
createdShape.setName(createdShape.getName() + " (" + id.getFirstChild().getNodeValue() + ")");
}
Node desc = node.getAttributes().getNamedItem("desc");
if (desc != null) {
createdShape.setDescription(desc.getFirstChild().getNodeValue());
}
createdShape.setTransform(groupTransform);
group.addChild(createdShape);
}
}
}
}
use of com.willwinder.ugs.nbp.designer.entities.cuttable.Group in project Universal-G-Code-Sender by winder.
the class SvgReader method gvtBuildCompleted.
@Override
public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
Group group = new Group();
Dimension2D svgDocumentSize = svgCanvas.getSVGDocumentSize();
// If the width and height attributes are missing, try to fetch them from the viewport
SVGDocument svgDocument = svgCanvas.getSVGDocument();
if (svgDocumentSize.getWidth() == 0 || svgDocumentSize.getHeight() == 0) {
SVGRect baseVal = svgDocument.getRootElement().getViewBox().getBaseVal();
svgDocument.getRootElement().setAttributeNS(null, "width", Utils.formatter.format(baseVal.getWidth()));
svgDocument.getRootElement().setAttributeNS(null, "height", Utils.formatter.format(baseVal.getHeight()));
}
walk(svgDocument, group, new AffineTransform(), 0);
// We need to invert the Y coordinate
AffineTransform transform = new AffineTransform();
transform.translate(0, group.getSize().getHeight());
transform.scale(1, -1);
group.applyTransform(transform);
this.result = group;
}
use of com.willwinder.ugs.nbp.designer.entities.cuttable.Group in project Universal-G-Code-Sender by winder.
the class DxfReader method parseCircles.
private Group parseCircles(DXFLayer layer) {
Group circlesGroup = new Group();
List<DXFCircle> circles = layer.getDXFEntities(DXFConstants.ENTITY_TYPE_CIRCLE);
if (circles != null) {
for (DXFCircle circle : circles) {
double radius = circle.getRadius() * MILLIMETERS_PER_INCH;
Ellipse ellipse = new Ellipse((circle.getCenterPoint().getX() * MILLIMETERS_PER_INCH) - radius, (circle.getCenterPoint().getY() * MILLIMETERS_PER_INCH) - radius);
ellipse.setSize(new Size(radius * 2, radius * 2));
circlesGroup.addChild(ellipse);
}
}
return circlesGroup;
}
use of com.willwinder.ugs.nbp.designer.entities.cuttable.Group in project Universal-G-Code-Sender by winder.
the class DxfReader method read.
@Override
public Optional<Design> read(InputStream resourceAsStream) {
Parser parser = ParserBuilder.createDefaultParser();
try {
parser.parse(resourceAsStream, DXFParser.DEFAULT_ENCODING);
} catch (ParseException e) {
throw new RuntimeException("Could not parse file", e);
}
DXFDocument doc = parser.getDocument();
Group group = new Group();
Iterator layerIterator = doc.getDXFLayerIterator();
while (layerIterator.hasNext()) {
DXFLayer layer = (DXFLayer) layerIterator.next();
Group layerGroup = new Group();
layerGroup.setName(layer.getName());
Group circlesGroup = parseCircles(layer);
circlesGroup.setName("Circles");
if (!circlesGroup.getChildren().isEmpty()) {
layerGroup.addChild(circlesGroup);
}
Group linesGroup = new Group();
linesGroup.setName("Lines");
parseLines(layer, linesGroup);
if (!linesGroup.getChildren().isEmpty()) {
layerGroup.addChild(linesGroup);
}
if (!layerGroup.getChildren().isEmpty()) {
group.addChild(layerGroup);
}
}
group.setPosition(new Point2D.Double(0, 0));
Design design = new Design();
List<Entity> entities = new ArrayList<>();
if (!group.getChildren().isEmpty()) {
entities.add(group);
}
design.setEntities(entities);
return Optional.of(design);
}
use of com.willwinder.ugs.nbp.designer.entities.cuttable.Group in project Universal-G-Code-Sender by winder.
the class ImageTracerDialog method generateEntities.
private void generateEntities() {
SvgReader svgReader = new SvgReader();
Optional<Design> designOptional = svgReader.read(new ByteArrayInputStream(generatedSvgData.getBytes(Charset.defaultCharset())));
designOptional.ifPresent(design -> {
Map<String, List<Entity>> entityLayersMap = new HashMap<>();
((Group) design.getEntities().get(0)).getAllChildren().forEach(entity -> {
String layerId = StringUtils.substringBetween(entity.getDescription(), "l ", " ");
List<Entity> layerEntities = entityLayersMap.getOrDefault(layerId, new ArrayList<>());
layerEntities.add(entity);
entityLayersMap.put(layerId, layerEntities);
});
List<String> layerIds = new ArrayList<>(entityLayersMap.keySet());
Collections.reverse(layerIds);
entities = new ArrayList<>();
layerIds.forEach(layerId -> {
Group layerGroup = new Group();
layerGroup.setName(layerId);
layerGroup.addAll(entityLayersMap.get(layerId));
entities.add(layerGroup);
});
dispose();
});
}
Aggregations