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=d7f6749e53fcb4dacbdd1dc50da03a0f47b40125;hpb=a8e2da6aed4e09c8f1a336aac903b9a5acee2d53;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 d7f6749e..c37d4627 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java @@ -180,20 +180,39 @@ public abstract class P3DParentNode extends ParentNode im 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++; + } } }