]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java
Enhancements to district functionalities and code
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / participants / DNTranslateMode.java
index 74a464758590f7c91288ed8df749eae454cedc18..7bec07dc138507ae14f4b344081e8d5b5c9c4fcf 100644 (file)
@@ -1,83 +1,95 @@
-package org.simantics.district.network.ui.participants;\r
-\r
-import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Point2D;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-import org.simantics.Simantics;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.CommentMetadata;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.diagram.elements.ElementTransforms;\r
-import org.simantics.diagram.elements.ElementTransforms.TransformedObject;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.district.network.ontology.DistrictNetworkResource;\r
-import org.simantics.g2d.canvas.Hints;\r
-import org.simantics.g2d.diagram.participant.pointertool.TranslateMode;\r
-import org.simantics.g2d.element.ElementUtils;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.g2d.element.handler.Move;\r
-\r
-public class DNTranslateMode extends TranslateMode {\r
-\r
-    public DNTranslateMode(Point2D startingPoint, Point2D currentPoint, int mouseId, Collection<IElement> elements) {\r
-        super(startingPoint, currentPoint, mouseId, elements);\r
-    }\r
-    \r
-    @Override\r
-    protected boolean commit() {\r
-        for (IElement el : elementsToReallyTranslate) {\r
-            Move move = el.getElementClass().getAtMostOneItemOfClass(Move.class);\r
-            if (move != null) {\r
-                Point2D oldPos = move.getPosition(el);\r
-                move.moveTo(el, oldPos.getX() + dx, oldPos.getY() + dy);\r
-            }\r
-        }\r
-        try {\r
-            Simantics.getSession().syncRequest(new WriteRequest() {\r
-                @Override\r
-                public void perform(WriteGraph graph) throws DatabaseException {\r
-                    Collection<TransformedObject> transformed = new ArrayList<TransformedObject>();\r
-                    DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
-                    DiagramResource DIA = DiagramResource.getInstance(graph);\r
-                    for (IElement e : elementsToReallyTranslate) {\r
-                        Object obj = ElementUtils.getObject(e);\r
-                        if (obj instanceof Resource) {\r
-                            Resource res = (Resource) obj;\r
-                            if (graph.isInstanceOf(res, DN.Vertex)) {\r
-                                AffineTransform at = ElementUtils.getLocalTransform(e, new AffineTransform());\r
-                                transformed.add( new TransformedObject((Resource) obj, at) );\r
-                                \r
-                                \r
-                                // write to db\r
-                                double[] coords = new double[] { at.getTranslateX(), at.getTranslateY() };\r
-                                graph.claimLiteral(res, DIA.HasLocation, coords);\r
-                            }\r
-                        }\r
-                    }\r
-                    \r
-                    if (!transformed.isEmpty()) {\r
-                        CommentMetadata cm = graph.getMetadata(CommentMetadata.class);\r
-                        graph.addMetadata(cm.add("Translated " + transformed.size() + " "\r
-                                + (transformed.size() == 1 ? "element" : "elements")\r
-                                + " by (" + dx + "," + dy + ") mm."));\r
-                        graph.markUndoPoint();\r
-                    }\r
-                }\r
-            });\r
-        } catch (DatabaseException e) {\r
-            e.printStackTrace();\r
-        }\r
-        \r
-        for (IElement dirty : elementsToDirty)\r
-            dirty.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY);\r
-\r
-        setDirty();\r
-        remove();\r
-        return false;\r
-    }\r
-\r
-}\r
+package org.simantics.district.network.ui.participants;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.simantics.Simantics;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.CommentMetadata;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.diagram.elements.ElementTransforms;
+import org.simantics.diagram.elements.ElementTransforms.TransformedObject;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.district.network.ModelledCRS;
+import org.simantics.district.network.ontology.DistrictNetworkResource;
+import org.simantics.g2d.canvas.Hints;
+import org.simantics.g2d.diagram.participant.pointertool.TranslateMode;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.handler.Move;
+
+public class DNTranslateMode extends TranslateMode {
+
+    public DNTranslateMode(Point2D startingPoint, Point2D currentPoint, int mouseId, Collection<IElement> elements) {
+        super(startingPoint, currentPoint, mouseId, elements);
+    }
+    
+    @Override
+    protected boolean commit() {
+        for (IElement el : elementsToReallyTranslate) {
+            Move move = el.getElementClass().getAtMostOneItemOfClass(Move.class);
+            if (move != null) {
+                Point2D oldPos = move.getPosition(el);
+                move.moveTo(el, oldPos.getX() + dx, oldPos.getY() + dy);
+            }
+        }
+        try {
+            Simantics.getSession().syncRequest(new WriteRequest() {
+                @Override
+                public void perform(WriteGraph graph) throws DatabaseException {
+                    Collection<TransformedObject> transformed = new ArrayList<TransformedObject>();
+                    DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+                    DiagramResource DIA = DiagramResource.getInstance(graph);
+                    for (IElement e : elementsToReallyTranslate) {
+                        Object obj = ElementUtils.getObject(e);
+                        if (obj instanceof Resource) {
+                            Resource res = (Resource) obj;
+                            AffineTransform at = ElementUtils.getLocalTransform(e, new AffineTransform());
+                            if (graph.isInstanceOf(res, DN.Vertex)) {
+                                
+                                double x = at.getTranslateX();
+                                double y = at.getTranslateY();
+                                // TODO: Fix scale!
+                                double scale = 100000;
+//                                double scale = 1;
+                                double lat = ModelledCRS.yToLatitude(y / scale);
+                                double lon = ModelledCRS.xToLongitude(x / scale);
+                                
+                                // write to db
+                                double[] coords = new double[] { lon, lat };
+                                graph.claimLiteral(res, DIA.HasLocation, coords);
+                            } else {
+                                // fallback to normal HasTransforms
+                                transformed.add( new TransformedObject((Resource) obj, at) );
+                            }
+                        }
+                    }
+                    if (!transformed.isEmpty()) {
+                        graph.markUndoPoint();
+                        // Normal transforms
+                        ElementTransforms.setTransformRequest(transformed).perform(graph);
+                        
+                        CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
+                        graph.addMetadata(cm.add("Translated " + transformed.size() + " "
+                                + (transformed.size() == 1 ? "element" : "elements")
+                                + " by (" + dx + "," + dy + ") mm."));
+                    }
+                }
+            });
+        } catch (DatabaseException e) {
+            e.printStackTrace();
+        }
+        
+        for (IElement dirty : elementsToDirty)
+            dirty.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY);
+
+        setDirty();
+        remove();
+        return false;
+    }
+
+}