From a903e01036112af8f3b6dfa7d146fe3ed5d91776 Mon Sep 17 00:00:00 2001 From: bakpaul Date: Tue, 15 Apr 2025 16:32:34 +0200 Subject: [PATCH 1/2] Add addObject as reusable method and use it in Collision to enable kwargs --- splib/core/utils.py | 6 ++++++ stlib/prefabs/collision.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/splib/core/utils.py b/splib/core/utils.py index 56b91f53..4a7f47da 100644 --- a/splib/core/utils.py +++ b/splib/core/utils.py @@ -1,5 +1,7 @@ from typing import List, Callable, Tuple, Dict from functools import wraps +from node_wrapper import ReusableMethod + class defaultValueType(): def __init__(self): @@ -32,5 +34,9 @@ def wrapper(*args, **kwargs): return MapArg +@ReusableMethod +def addObject(node,typeName : str, name : str , **kwargs): + node.addObject(typeName, name = name, **kwargs) + diff --git a/stlib/prefabs/collision.py b/stlib/prefabs/collision.py index 28915629..cf56cdfa 100644 --- a/stlib/prefabs/collision.py +++ b/stlib/prefabs/collision.py @@ -3,7 +3,7 @@ from stlib.geometry import Geometry, GeometryParameters from stlib.geometry.file import FileParameters from splib.core.enum_types import CollisionPrimitive -from splib.core.utils import DEFAULT_VALUE +from splib.core.utils import DEFAULT_VALUE, addObject from splib.mechanics.collision_model import addCollisionModels from Sofa.Core import Object @@ -28,7 +28,7 @@ def __init__(self, params: CollisionParameters): geom = self.add(Geometry, params.geometry) - self.addObject("MechanicalObject",template="Vec3", position=f"@{params.geometry.name}/container.position") + addObject(self,"MechanicalObject",name="MechanicalObject",template="Vec3", position=f"@{params.geometry.name}/container.position", **params.kwargs) for primitive in params.primitives: addCollisionModels(self,primitive, topology=f"@{params.geometry.name}/container", From b69dabedcc9e671349fae833eeb299855e5c5da0 Mon Sep 17 00:00:00 2001 From: bakpaul Date: Tue, 15 Apr 2025 16:40:46 +0200 Subject: [PATCH 2/2] Add addObject as reusable method and use it in Collision to enable kwargs --- stlib/geometry/__geometry__.py | 4 ++-- stlib/geometry/cube.py | 2 ++ stlib/geometry/extract.py | 2 +- stlib/geometry/sphere.py | 2 ++ stlib/prefabs/visual.py | 9 +++++---- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/stlib/geometry/__geometry__.py b/stlib/geometry/__geometry__.py index 32ed6b61..92e7069f 100644 --- a/stlib/geometry/__geometry__.py +++ b/stlib/geometry/__geometry__.py @@ -49,8 +49,8 @@ def __init__(self, params: GeometryParameters): params.data.generateAttribute(self) if(params.dynamicTopology): if(params.elementType is not None): - addDynamicTopology(self, container = dataclasses.asdict(params.data)) + addDynamicTopology(self, container = dataclasses.asdict(params.data), **params.kwargs) else: raise ValueError else: - addStaticTopology(self, container = dataclasses.asdict(params.data)) + addStaticTopology(self, container = dataclasses.asdict(params.data),**params.kwargs) diff --git a/stlib/geometry/cube.py b/stlib/geometry/cube.py index 0c8ac761..4a1a3635 100644 --- a/stlib/geometry/cube.py +++ b/stlib/geometry/cube.py @@ -1,5 +1,7 @@ from stlib.geometry import GeometryParameters +#TODO this is outdated an need to be updated with the InternalDataProvider + class CubeParameters(GeometryParameters): def __init__(self, center, edgeLength, pointPerEdge, dynamicTopology = False): diff --git a/stlib/geometry/extract.py b/stlib/geometry/extract.py index 8edba4c6..ea6e260d 100644 --- a/stlib/geometry/extract.py +++ b/stlib/geometry/extract.py @@ -6,7 +6,7 @@ from Sofa.Core import Node - +#TODO enable passing kwargs to this to use addObject instead and again get the benefit from splib class ExtractInternalDataProvider(InternalDataProvider): destElemType : ElementType fromElemType : ElementType diff --git a/stlib/geometry/sphere.py b/stlib/geometry/sphere.py index 2c3a58ce..530af819 100644 --- a/stlib/geometry/sphere.py +++ b/stlib/geometry/sphere.py @@ -1,5 +1,7 @@ from stlib.geometry import GeometryParameters +#TODO this is outdated an need to be updated with the InternalDataProvider + class SphereParameters(GeometryParameters): def __init__(self, center, radius, pointPerRad, dynamicTopology = False): diff --git a/stlib/prefabs/visual.py b/stlib/prefabs/visual.py index 2bf61ed9..bd8ed4c4 100644 --- a/stlib/prefabs/visual.py +++ b/stlib/prefabs/visual.py @@ -2,12 +2,14 @@ from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any from stlib.geometry import Geometry, GeometryParameters from stlib.geometry.file import FileParameters +from splib.core.utils import DEFAULT_VALUE, addObject + from Sofa.Core import Object @dataclasses.dataclass class VisualParameters(BaseParameters): - color : Optional[list[float]] = None - texture : Optional[str] = None + color : Optional[list[float]] = DEFAULT_VALUE + texture : Optional[str] = DEFAULT_VALUE geometry : GeometryParameters = dataclasses.field(default_factory = lambda : GeometryParameters()) addMapping : Optional[Callable] = None @@ -18,8 +20,7 @@ def __init__(self, params: VisualParameters): BasePrefab.__init__(self, params) geom = self.add(Geometry, params.geometry) - # TODO : handle optional color, texture using DEFAULT_VALUE mechanism (as implemented by Paul) - self.addObject("OglModel", color=params.color, src=geom.container.linkpath) + addObject(self,"OglModel", "MechanicalState", color=params.color, src=geom.container.linkpath, **params.kwargs) if params.addMapping is not None: params.addMapping(self)