X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fsvg%2FCreateSVGElement.java;h=92dbe16a65e9b383c7a923d572d3f9bd6d26d92d;hb=HEAD;hp=411f61c6bdd2bc671b508583bf4efe9297e932e7;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git 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 index 411f61c6b..92dbe16a6 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/svg/CreateSVGElement.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/svg/CreateSVGElement.java @@ -1,68 +1,76 @@ -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(); - } - -} +package org.simantics.modeling.svg; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +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 { + createSVGElement(g, diagram, suffix, data, mposX, mposY); + } + + public static Resource createSVGElementR(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, StandardCharsets.UTF_8), + 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); + return element; + } + + public static void importSVGElement(WriteGraph graph, Resource diagram, File file, double posX, double posY) throws DatabaseException, IOException { + importSVGElementR(graph, diagram, file, posX, posY); + } + + public static Resource importSVGElementR(WriteGraph graph, Resource diagram, File file, double posX, double posY) throws DatabaseException, IOException { + final byte[] data = FileUtils.readFile(file); + return createSVGElementR(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(); + } + +}