]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/scenegraph/G3DNode.java
Remove listener calls when property values not updated.
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / G3DNode.java
index 714e7a5bc4d2a6fdbf33e4826bab47e7f9fceac5..7b890b39b8ae16cdd85ad19f331fffb846b6c46e 100644 (file)
@@ -1,5 +1,18 @@
+/*******************************************************************************\r
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
 package org.simantics.g3d.scenegraph;\r
 \r
+import java.util.Objects;\r
+\r
 import javax.vecmath.Quat4d;\r
 import javax.vecmath.Vector3d;\r
 \r
@@ -7,7 +20,6 @@ import org.simantics.g3d.ontology.G3D;
 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
 import org.simantics.g3d.property.annotations.PropertyContributor;\r
 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
-import org.simantics.g3d.scenegraph.base.INode;\r
 import org.simantics.g3d.scenegraph.base.Node;\r
 import org.simantics.g3d.tools.NodeTools;\r
 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
@@ -51,8 +63,11 @@ public class G3DNode extends Node implements IG3DNode {
        @SetPropertyValue(G3D.URIs.hasOrientation)\r
        public void setOrientation(Quat4d orientation) {\r
                assert(orientation != null);\r
+               if (Objects.equals(this.orientation, orientation))\r
+                       return;\r
+\r
                this.orientation = orientation;\r
-               \r
+                       \r
                firePropertyChanged(G3D.URIs.hasOrientation);\r
        }\r
        \r
@@ -67,6 +82,9 @@ public class G3DNode extends Node implements IG3DNode {
        @SetPropertyValue(G3D.URIs.hasPosition)\r
        public void setPosition(Vector3d position) {\r
                assert(position != null);\r
+               if (Objects.equals(this.position, position))\r
+                       return;\r
+               \r
                this.position = position;\r
                \r
                firePropertyChanged(G3D.URIs.hasPosition);\r
@@ -79,6 +97,11 @@ public class G3DNode extends Node implements IG3DNode {
                setPosition(new Vector3d(arr));\r
        }\r
        \r
+       public void _setPosition(Vector3d position) {\r
+               assert(position != null);\r
+               this.position = position;\r
+       }\r
+       \r
        @Override\r
        @GetPropertyValue(value = G3D.URIs.hasWorldPosition, tabId = "Transform", name = "World Position")\r
        public Vector3d getWorldPosition() {\r
@@ -138,11 +161,9 @@ public class G3DNode extends Node implements IG3DNode {
        }\r
        \r
        @Override\r
-       public Object getAdapter(Class adapter) {\r
-               if (INode.class == adapter)\r
-                       return this;\r
-               if (IG3DNode.class == adapter)\r
-                       return this;\r
+       public <C> C getAdapter(Class<C> adapter) {\r
+               if (adapter.isInstance(this))\r
+                       return adapter.cast(this);\r
                return null;\r
        }\r
 \r