Search in sources :

Example 1 with Group

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);
            }
        }
    }
}
Also used : Group(com.willwinder.ugs.nbp.designer.entities.cuttable.Group) NodeList(org.w3c.dom.NodeList) CompositeGraphicsNode(org.apache.batik.gvt.CompositeGraphicsNode) Node(org.w3c.dom.Node) GraphicsNode(org.apache.batik.gvt.GraphicsNode) ShapeNode(org.apache.batik.gvt.ShapeNode) ExtendedGeneralPath(org.apache.batik.ext.awt.geom.ExtendedGeneralPath) AbstractEntity(com.willwinder.ugs.nbp.designer.entities.AbstractEntity) CompositeGraphicsNode(org.apache.batik.gvt.CompositeGraphicsNode) ShapeNode(org.apache.batik.gvt.ShapeNode) CompositeGraphicsNode(org.apache.batik.gvt.CompositeGraphicsNode) GraphicsNode(org.apache.batik.gvt.GraphicsNode)

Example 2 with Group

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;
}
Also used : Group(com.willwinder.ugs.nbp.designer.entities.cuttable.Group) SVGDocument(org.w3c.dom.svg.SVGDocument) SVGRect(org.w3c.dom.svg.SVGRect)

Example 3 with 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;
}
Also used : Group(com.willwinder.ugs.nbp.designer.entities.cuttable.Group) Ellipse(com.willwinder.ugs.nbp.designer.entities.cuttable.Ellipse) Size(com.willwinder.ugs.nbp.designer.model.Size)

Example 4 with Group

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);
}
Also used : Group(com.willwinder.ugs.nbp.designer.entities.cuttable.Group) Entity(com.willwinder.ugs.nbp.designer.entities.Entity) DXFParser(org.kabeja.parser.DXFParser) Parser(org.kabeja.parser.Parser) Design(com.willwinder.ugs.nbp.designer.model.Design) Point2D(java.awt.geom.Point2D) ParseException(org.kabeja.parser.ParseException)

Example 5 with Group

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();
    });
}
Also used : SvgReader(com.willwinder.ugs.nbp.designer.io.svg.SvgReader) Entity(com.willwinder.ugs.nbp.designer.entities.Entity) Group(com.willwinder.ugs.nbp.designer.entities.cuttable.Group) Design(com.willwinder.ugs.nbp.designer.model.Design) ByteArrayInputStream(java.io.ByteArrayInputStream) List(java.util.List)

Aggregations

Group (com.willwinder.ugs.nbp.designer.entities.cuttable.Group)5 Entity (com.willwinder.ugs.nbp.designer.entities.Entity)2 Design (com.willwinder.ugs.nbp.designer.model.Design)2 AbstractEntity (com.willwinder.ugs.nbp.designer.entities.AbstractEntity)1 Ellipse (com.willwinder.ugs.nbp.designer.entities.cuttable.Ellipse)1 SvgReader (com.willwinder.ugs.nbp.designer.io.svg.SvgReader)1 Size (com.willwinder.ugs.nbp.designer.model.Size)1 Point2D (java.awt.geom.Point2D)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 List (java.util.List)1 ExtendedGeneralPath (org.apache.batik.ext.awt.geom.ExtendedGeneralPath)1 CompositeGraphicsNode (org.apache.batik.gvt.CompositeGraphicsNode)1 GraphicsNode (org.apache.batik.gvt.GraphicsNode)1 ShapeNode (org.apache.batik.gvt.ShapeNode)1 DXFParser (org.kabeja.parser.DXFParser)1 ParseException (org.kabeja.parser.ParseException)1 Parser (org.kabeja.parser.Parser)1 Node (org.w3c.dom.Node)1 NodeList (org.w3c.dom.NodeList)1 SVGDocument (org.w3c.dom.svg.SVGDocument)1