From 02193829ce2d4a773da82ec5f6ea462a0c37ee9f Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Mon, 2 Mar 2026 11:23:44 +0100 Subject: [PATCH 1/2] Fix non working examples. --- stlib/__init__.py | 8 +++++--- stlib/collision.py | 4 ++-- stlib/visual.py | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/stlib/__init__.py b/stlib/__init__.py index 0ad659858..6a8c88eff 100644 --- a/stlib/__init__.py +++ b/stlib/__init__.py @@ -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") @@ -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): diff --git a/stlib/collision.py b/stlib/collision.py index ebffd7b75..9862ef19e 100644 --- a/stlib/collision.py +++ b/stlib/collision.py @@ -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: @@ -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 diff --git a/stlib/visual.py b/stlib/visual.py index a0f377f7d..6721101f9 100644 --- a/stlib/visual.py +++ b/stlib/visual.py @@ -36,4 +36,4 @@ def createScene(root): parameters = Visual.getParameters() parameters.name = "LiverVisual" parameters.geometry = FileParameters(filename="mesh/liver.obj") - root.add(Visual, parameters) \ No newline at end of file + root.add(Visual, parameters=parameters) \ No newline at end of file From 3c5d2bd5f3502d677cde5ba25d833cdf46260f0f Mon Sep 17 00:00:00 2001 From: Damien Marchal Date: Mon, 2 Mar 2026 11:50:24 +0100 Subject: [PATCH 2/2] TYPO --- stlib/geometries/extract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stlib/geometries/extract.py b/stlib/geometries/extract.py index 7143fb07d..8df68645c 100644 --- a/stlib/geometries/extract.py +++ b/stlib/geometries/extract.py @@ -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: