X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fsvg%2FCreateSVGElement.java;fp=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fsvg%2FCreateSVGElement.java;h=411f61c6bdd2bc671b508583bf4efe9297e932e7;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/svg/CreateSVGElement.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/svg/CreateSVGElement.java new file mode 100644 index 000000000..411f61c6b --- /dev/null +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/svg/CreateSVGElement.java @@ -0,0 +1,68 @@ +package org.simantics.modeling.svg; + +import java.io.File; +import java.io.IOException; + +import org.simantics.databoard.Bindings; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.utils.OrderedSetUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.diagram.synchronization.graph.AddElement; +import org.simantics.image2.ontology.ImageResource; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.utils.FileUtils; + +public class CreateSVGElement { + + public static void createSVGElement(WriteGraph g, Resource diagram, String suffix, byte[] data, double mposX, double mposY) throws DatabaseException { + + Layer0 L0 = Layer0.getInstance(g); + DiagramResource DIA = DiagramResource.getInstance(g); + ImageResource IMAGE = ImageResource.getInstance(g); + G2DResource G2D = G2DResource.getInstance(g); + + Resource element; + if("svg".equals(suffix)) { + Resource transform = GraphUtils.create(g, L0.InstanceOf, G2D.Transform); + g.claimValue(transform, new double[] {1.0, 0.0, 0.0, 1.0, mposX, mposY}, Bindings.DOUBLE_ARRAY); + element = GraphUtils.create(g, + L0.InstanceOf, DIA.SVGElement, + G2D.HasSVGDocument, new String(data), + DIA.HasTransform, transform); + AddElement.claimFreshElementName(g, diagram, element); + } else if ("png".equals(suffix)) { + Resource transform = GraphUtils.create(g, L0.InstanceOf, G2D.Transform); + g.claimValue(transform, new double[] {1.0, 0.0, 0.0, 1.0, mposX, mposY}, Bindings.DOUBLE_ARRAY); + Resource image = g.newResource(); + g.claim(image, L0.InstanceOf, IMAGE.PngImage); + g.claimValue(image, data, Bindings.BYTE_ARRAY); + element = GraphUtils.create(g, + L0.InstanceOf, DIA.RasterElement, + G2D.HasRasterImage, image, + DIA.HasTransform, transform); + AddElement.claimFreshElementName(g, diagram, element); + } + else + throw new DatabaseException("Unknown image format " + suffix); + OrderedSetUtils.addFirst(g, diagram, element); + g.claim(diagram, L0.ConsistsOf, element); + + } + + public static void importSVGElement(WriteGraph graph, Resource diagram, File file, double posX, double posY) throws DatabaseException, IOException { + + final byte[] data = FileUtils.readFile(file); + createSVGElement(graph, diagram, suffix(file.getName()), data, posX, posY); + } + + private static String suffix(String fileName) { + int len = fileName.length(); + if(len < 3) return null; + else return fileName.substring(len-3,len).toLowerCase(); + } + +}