X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscenegraph%2FP3DParentNode.java;h=c37d4627d4107f9a29ebadb11dfa3ea90820d072;hb=c2bc02ab23627234920e89e364c2b4b2e7657249;hp=08c289da72b4d4e6469177e0d6fe75d4bb704eee;hpb=22bb24d2a7e26c70b0dd4c57080f2c25ac3d40a8;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java index 08c289da..c37d4627 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java @@ -1,6 +1,7 @@ package org.simantics.plant3d.scenegraph; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import javax.vecmath.Quat4d; @@ -35,7 +36,7 @@ public abstract class P3DParentNode extends ParentNode im @RelatedSetValue(Layer0.URIs.HasName) @SetPropertyValue(Layer0.URIs.HasName) public void setName(String name) { - if (name == null) + if (name == null || name.equals(this.name)) return; this.name = name; firePropertyChanged(Layer0.URIs.HasName); @@ -80,6 +81,9 @@ public abstract class P3DParentNode extends ParentNode im @SetPropertyValue(G3D.URIs.hasOrientation) public void setOrientation(Quat4d orientation) { assert(orientation != null); + if (Objects.equals(this.orientation, orientation)) + return; + this.orientation = orientation; firePropertyChanged(G3D.URIs.hasOrientation); @@ -89,6 +93,9 @@ public abstract class P3DParentNode extends ParentNode im @SetPropertyValue(G3D.URIs.hasPosition) public void setPosition(Vector3d position) { assert(position != null); + if (Objects.equals(this.position, position)) + return; + this.position = position; firePropertyChanged(G3D.URIs.hasPosition); @@ -167,28 +174,47 @@ public abstract class P3DParentNode extends ParentNode im } @Override - public Object getAdapter(Class adapter) { - if (IG3DNode.class == adapter) - return this; + public C getAdapter(Class adapter) { + if (adapter.isInstance(this)) + return adapter.cast(this); return null; } - public String getUniqueName(String prefix) { - Set names = new HashSet(); + /** + * Get a set of all of the names contained by this node and all its descendants + * @param names A set to which the names are added + */ + public void getComponentNames(Set names) { for (IP3DNode node : getNodes()) { if (!(node instanceof IP3DVisualNode)) continue; IP3DVisualNode n = (IP3DVisualNode)node; names.add(n.getName()); + if (node instanceof P3DParentNode) + ((P3DParentNode) node).getComponentNames(names); } - int i = 1; - while (true) { - String genName = prefix + "_" + i; - if (!names.contains(genName)) - return genName; - i++; + } + + /** + * Get a unique name in the Plant3D model with a given prefix followed by + * an underscore and number. + */ + public String getUniqueName(String prefix) { + ParentNode root = getRootNode(); + if (root instanceof P3DRootNode) { + return ((P3DRootNode) root).getUniqueName(prefix); + } else { + Set names = new HashSet(); + getComponentNames(names); + int i = 1; + while (true) { + String genName = prefix + "_" + i; + if (!names.contains(genName)) + return genName; + i++; + } } } - + }