X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fparticipants%2FDNTranslateMode.java;h=7bec07dc138507ae14f4b344081e8d5b5c9c4fcf;hb=02ecca5e61d2eb17de40cc058be678b414aaad00;hp=74a464758590f7c91288ed8df749eae454cedc18;hpb=8034693a5c86d690649a70a62709d29c3fa197aa;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java index 74a46475..7bec07dc 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java @@ -1,83 +1,95 @@ -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.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 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 transformed = new ArrayList(); - 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; - if (graph.isInstanceOf(res, DN.Vertex)) { - AffineTransform at = ElementUtils.getLocalTransform(e, new AffineTransform()); - transformed.add( new TransformedObject((Resource) obj, at) ); - - - // write to db - double[] coords = new double[] { at.getTranslateX(), at.getTranslateY() }; - graph.claimLiteral(res, DIA.HasLocation, coords); - } - } - } - - if (!transformed.isEmpty()) { - CommentMetadata cm = graph.getMetadata(CommentMetadata.class); - graph.addMetadata(cm.add("Translated " + transformed.size() + " " - + (transformed.size() == 1 ? "element" : "elements") - + " by (" + dx + "," + dy + ") mm.")); - graph.markUndoPoint(); - } - } - }); - } catch (DatabaseException e) { - e.printStackTrace(); - } - - for (IElement dirty : elementsToDirty) - dirty.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY); - - setDirty(); - remove(); - return false; - } - -} +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 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 transformed = new ArrayList(); + 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; + } + +}