Skip to content

Commit 270d867

Browse files
committed
Restore checks on name and add check on the presence of parameters
1 parent ebdade2 commit 270d867

1 file changed

Lines changed: 33 additions & 20 deletions

File tree

stlib/__init__.py

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
__all__ = ["core","entities","geometries","materials","collision","visual"]
22

33
import Sofa.Core
4+
from stlib.core.basePrefab import BasePrefab
45

56
def __genericAdd(self : Sofa.Core.Node, typeName, **kwargs):
67
def findName(cname, names):
@@ -12,30 +13,42 @@ def findName(cname, names):
1213
rname = cname + str(i+1)
1314
return rname
1415

16+
17+
def checkName(context : Sofa.Core.Node, name):
18+
# Check if the name already exists, if this happens, create a new one.
19+
if name in context.children or name in context.objects:
20+
names = {node.name.value for node in context.children}
21+
names = names.union({object.name.value for object in context.objects})
22+
name = findName(name, names)
23+
return name
24+
25+
1526
# Check if a name is provided, if not, use the one of the class
1627
params = kwargs.copy()
17-
# if "name" not in params:
18-
# if isinstance(typeName, str):
19-
# params["name"] = typeName
20-
# elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.Node):
21-
# params["name"] = typeName.__name__
22-
# elif isinstance(typeName, Sofa.Core.Node):
23-
# params["name"] = "Node"
24-
# elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.Object):
25-
# params["name"] = typeName.name.value
26-
# elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.ObjectDeclaration):
27-
# params["name"] = typeName.__name__
28-
# else:
29-
# raise RuntimeError("Invalid argument ", typeName)
30-
31-
# # Check if the name already exists, if this happens, create a new one.
32-
# if params["name"] in self.children or params["name"] in self.objects:
33-
# names = {node.name.value for node in self.children}
34-
# names = names.union({object.name.value for object in self.objects})
35-
# params["name"] = findName(params["name"], names)
28+
if isinstance(typeName, type) and issubclass(typeName, BasePrefab): #Only for prefabs
29+
if "parameters" not in params or len(params.keys()) > 1:
30+
raise RuntimeError("Invalid argument, a prefab takes only the \"parameters\" kwargs as input")
31+
elif "name" not in params : #This doesn't apply to prefab
32+
if isinstance(typeName, str):
33+
params["name"] = typeName
34+
elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.Node):
35+
params["name"] = typeName.__name__
36+
elif isinstance(typeName, Sofa.Core.Node):
37+
params["name"] = "Node"
38+
elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.Object):
39+
params["name"] = typeName.name.value
40+
elif isinstance(typeName, type) and issubclass(typeName, Sofa.Core.ObjectDeclaration):
41+
params["name"] = typeName.__name__
42+
else:
43+
raise RuntimeError("Invalid argument ", typeName)
44+
45+
if isinstance(typeName, type) and issubclass(typeName, BasePrefab):
46+
params["parameters"].name = checkName(self, params["parameters"].name)
47+
else:
48+
params["name"] = checkName(self, params["name"])
3649

3750
# Dispatch the creation to either addObject or addChild
38-
if isinstance(typeName, type) and issubclass(typeName, core.basePrefab.BasePrefab):
51+
if isinstance(typeName, type) and issubclass(typeName, BasePrefab):
3952
pref = self.addChild(typeName(**params))
4053
pref.init()
4154
elif isinstance(typeName, Sofa.Core.Node):

0 commit comments

Comments
 (0)