Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions stlib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ def checkName(context : Sofa.Core.Node, name):
name = findName(name, names)
return name

def is_prefab(typeSpecifier):
return isinstance(typeSpecifier, type) and issubclass(typeSpecifier, BasePrefab)

# Check if a name is provided, if not, use the one of the class
params = kwargs.copy()
if isinstance(typeName, type) and issubclass(typeName, BasePrefab): #Only for prefabs
if is_prefab(typeName): #Only for prefabs
if len(params.keys()) > 1 or (len(params.keys()) == 1 and "parameters" not in params):
raise RuntimeError("Invalid argument, a prefab takes only the \"parameters\" kwargs as input")

Expand All @@ -43,13 +45,13 @@ def checkName(context : Sofa.Core.Node, name):
else:
raise RuntimeError("Invalid argument ", typeName)

if isinstance(typeName, type) and issubclass(typeName, BasePrefab) and len(params.keys()) == 1:
if is_prefab(typeName) and len(params.keys()) == 1:
params["parameters"].name = checkName(self, params["parameters"].name)
else:
params["name"] = checkName(self, params["name"])

# Dispatch the creation to either addObject or addChild
if isinstance(typeName, type) and issubclass(typeName, BasePrefab):
if is_prefab(typeName):
pref = self.addChild(typeName(**params))
pref.init()
elif isinstance(typeName, Sofa.Core.Node):
Expand Down
4 changes: 2 additions & 2 deletions stlib/collision.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def __init__(self, parameters: CollisionParameters):

def init(self):

geom = self.add(Geometry, self.parameters.geometry)
geom = self.add(Geometry, parameters=self.parameters.geometry)

self.addObject("MechanicalObject", template="Vec3", position=f"@{self.parameters.geometry.name}/container.position")
for primitive in self.parameters.primitives:
Expand Down Expand Up @@ -55,7 +55,7 @@ def createScene(root):
# parameters.kwargs = {
# "TriangleCollisionModel":{"contactStiffness": 100.0, "contactFriction": 0.5}
# }
collision = root.add(Collision, parameters)
collision = root.add(Collision, parameters=parameters)

# OR set the parameters post creation
# collision.TriangleCollisionModel.contactStiffness = 100.0
Expand Down
2 changes: 1 addition & 1 deletion stlib/geometries/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def generateAttribute(self, parent : Geometry):
elif self.sourceType == ElementType.HEXAHEDRA:
node.addObject("Hexa2QuadTopologicalMapping", input=fromLink, output=node.container.linkpath)
else:
Sofa.msg_error("[stlib/geometry/exctrat.py]", "Element type: " + str(self.sourceType) + " not supported.")
Sofa.msg_error(self, "Element type: " + str(self.sourceType) + " not supported.")

self.position = node.container.position.linkpath
if node.container.findData("edges") is not None:
Expand Down
2 changes: 1 addition & 1 deletion stlib/visual.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ def createScene(root):
parameters = Visual.getParameters()
parameters.name = "LiverVisual"
parameters.geometry = FileParameters(filename="mesh/liver.obj")
root.add(Visual, parameters)
root.add(Visual, parameters=parameters)
Loading