Skip to content

Commit 6db1a4a

Browse files
committed
Start work on visual and collision
1 parent d1cad66 commit 6db1a4a

File tree

6 files changed

+69
-31
lines changed

6 files changed

+69
-31
lines changed
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,34 @@
11
from stlib.entities import Entity
22
from stlib.entities.deformable.__parameters__ import DeformableParameters
3-
3+
from stlib.geometry import Geometry
4+
from stlib.prefabs.visual import Visual
5+
from stlib.prefabs.collision import Collision
46

57
class Deformable(Entity):
6-
8+
params : DeformableParameters
9+
710
@staticmethod
811
def getParameters(**kwargs) -> DeformableParameters:
912
return DeformableParameters(**kwargs)
1013

1114

1215
def __init__(self, params : DeformableParameters, **kwargs):
13-
Entity.__init__(self, **kwargs)
16+
Entity.__init__(self, **kwargs)
17+
self.add(Geometry, params.geometry)
18+
self.__addConstitutiveLaw__()
19+
self.add(Collision, params.collision)
20+
21+
#@customizable
22+
# Need generic way of defining paramaters (linear/hyper...)
23+
def __addConstitutiveLaw__(self):
24+
self.params.addConstitutiveLaw()
25+
26+
27+
28+
#@customizable
29+
def __addVisual__(self):
30+
#Exctract surface and add indentity mapping
31+
32+
self.add(Visual, params.visual)
1433

34+
pass
Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses
2+
from stlib.geometry import GeometryParameters
3+
from stlib.prefabs.visual import VisualParameters
4+
from stlib.prefabs.collision import CollisionParameters
25

36
@dataclasses.dataclass
47
class DeformableParameters(BaseParameters):
5-
addConstitutiveLaw : Callable = lambda x: x
68

7-
mass : Optional[float] = None
9+
geometry : GeometryParameters
10+
# Add default value
11+
visual : VisualParameters
12+
collision : CollisionParameters
13+
mass : float = float
14+
15+
addConstitutiveLaw : Callable = lambda x: x
816

917
def toDict(self):
1018
return dataclasses.asdict(self)

stlib/entities/rigid/__parameters__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses
2+
from stlib.geometry import GeometryParameters
23

34
@dataclasses.dataclass
45
class RigidParameters(BaseParameters):
56

7+
geometry : GeometryParameters
68
mass : Optional[float] = None
79

810
def toDict(self):

stlib/geometry/file.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def __init__(self, filename, dynamicTopology = False):
1111
@staticmethod
1212
def createData(filename) -> GeometryParameters.Data :
1313
data = GeometryParameters.Data()
14+
1415
node = Sofa.Core.Node()
1516
loadMesh(node, filename)
1617
node.init()

stlib/prefabs/collision.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from stlib.core.basePrefab import BasePrefab
2+
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any
3+
from stlib.geometry import GeometryParameters
4+
from Sofa.Core import Object
5+
6+
@dataclasses.dataclass
7+
class CollisionParameters(BaseParameters):
8+
primitives : list[Any] #TODO: add enum type in splib
9+
10+
geometry : GeometryParameters
11+
addMapping : Callable
12+
13+
14+
class Collision(BasePrefab):
15+
16+
def __init__(self, params: GeometryParameters):
17+
BasePrefab.__init__(self, params)
18+

stlib/prefabs/visual.py

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,21 @@
1-
from stlib.core.parameters import EntityParameters
2-
import dataclasses
3-
import Sofa
1+
from stlib.core.basePrefab import BasePrefab
2+
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any
3+
from stlib.geometry import GeometryParameters
4+
from Sofa.Core import Object
45

5-
class VisualModel(Sofa.Core.BasePrefab):
6-
@dataclasses.dataclass
7-
class Parameters(EntityParameters):
8-
name : str = "VisualModel"
6+
@dataclasses.dataclass
7+
class VisualParameters(BaseParameters):
8+
color : Optional[list[float]]
9+
texture : Optional[str]
910

10-
filename : str = "mesh/sphere_02.obj"
11-
12-
renderer : dict = dataclasses.field(default_factory=dict)
13-
mapping : dict = dataclasses.field(default_factory=dict)
11+
geometry : GeometryParameters
12+
addMapping : Optional[Callable]
1413

1514

15+
class Visual(BasePrefab):
16+
container : Object # This should be more specialized into the right SOFA type
17+
modifier : Optional[Object]
1618

17-
def __init__(self, parent=None, parameters : VisualModelParameters = VisualModelParameters()):
18-
Sofa.Core.Node.__init__(self, name=parameters.name)
19+
def __init__(self, params: GeometryParameters):
20+
BasePrefab.__init__(self, params)
1921

20-
if parent != None:
21-
parent.addChild(self)
22-
23-
self.addObject("MeshOBJLoader", name="loader", filename=parameters.filename)
24-
self.addRenderer(**to_dict(parameters.renderer) | {"src" : "@loader"} )
25-
self.addMapping(**to_dict(parameters.mapping) )
26-
27-
def addRenderer(self, **kwargs):
28-
self.addObject("OglModel", name="renderer", **kwargs)
29-
30-
def addMapping(self, **kwargs):
31-
self.addObject("RigidMapping", name="mapping", **kwargs)
32-

0 commit comments

Comments
 (0)