1 package org.simantics.modeling.svg;
\r
4 import java.io.IOException;
\r
6 import org.simantics.databoard.Bindings;
\r
7 import org.simantics.db.Resource;
\r
8 import org.simantics.db.WriteGraph;
\r
9 import org.simantics.db.common.utils.OrderedSetUtils;
\r
10 import org.simantics.db.exception.DatabaseException;
\r
11 import org.simantics.diagram.stubs.DiagramResource;
\r
12 import org.simantics.diagram.stubs.G2DResource;
\r
13 import org.simantics.diagram.synchronization.graph.AddElement;
\r
14 import org.simantics.image2.ontology.ImageResource;
\r
15 import org.simantics.layer0.Layer0;
\r
16 import org.simantics.layer0.utils.direct.GraphUtils;
\r
17 import org.simantics.utils.FileUtils;
\r
19 public class CreateSVGElement {
\r
21 public static void createSVGElement(WriteGraph g, Resource diagram, String suffix, byte[] data, double mposX, double mposY) throws DatabaseException {
\r
23 Layer0 L0 = Layer0.getInstance(g);
\r
24 DiagramResource DIA = DiagramResource.getInstance(g);
\r
25 ImageResource IMAGE = ImageResource.getInstance(g);
\r
26 G2DResource G2D = G2DResource.getInstance(g);
\r
29 if("svg".equals(suffix)) {
\r
30 Resource transform = GraphUtils.create(g, L0.InstanceOf, G2D.Transform);
\r
31 g.claimValue(transform, new double[] {1.0, 0.0, 0.0, 1.0, mposX, mposY}, Bindings.DOUBLE_ARRAY);
\r
32 element = GraphUtils.create(g,
\r
33 L0.InstanceOf, DIA.SVGElement,
\r
34 G2D.HasSVGDocument, new String(data),
\r
35 DIA.HasTransform, transform);
\r
36 AddElement.claimFreshElementName(g, diagram, element);
\r
37 } else if ("png".equals(suffix)) {
\r
38 Resource transform = GraphUtils.create(g, L0.InstanceOf, G2D.Transform);
\r
39 g.claimValue(transform, new double[] {1.0, 0.0, 0.0, 1.0, mposX, mposY}, Bindings.DOUBLE_ARRAY);
\r
40 Resource image = g.newResource();
\r
41 g.claim(image, L0.InstanceOf, IMAGE.PngImage);
\r
42 g.claimValue(image, data, Bindings.BYTE_ARRAY);
\r
43 element = GraphUtils.create(g,
\r
44 L0.InstanceOf, DIA.RasterElement,
\r
45 G2D.HasRasterImage, image,
\r
46 DIA.HasTransform, transform);
\r
47 AddElement.claimFreshElementName(g, diagram, element);
\r
50 throw new DatabaseException("Unknown image format " + suffix);
\r
51 OrderedSetUtils.addFirst(g, diagram, element);
\r
52 g.claim(diagram, L0.ConsistsOf, element);
\r
56 public static void importSVGElement(WriteGraph graph, Resource diagram, File file, double posX, double posY) throws DatabaseException, IOException {
\r
58 final byte[] data = FileUtils.readFile(file);
\r
59 createSVGElement(graph, diagram, suffix(file.getName()), data, posX, posY);
\r
62 private static String suffix(String fileName) {
\r
63 int len = fileName.length();
\r
64 if(len < 3) return null;
\r
65 else return fileName.substring(len-3,len).toLowerCase();
\r