Skip to content

Commit 7b62fb2

Browse files
hugtalbotbakpaul
authored andcommitted
before the train 3/3
1 parent 879b59d commit 7b62fb2

7 files changed

Lines changed: 105 additions & 71 deletions

File tree

splib/core/enum_types.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,12 @@ class ElementType(Enum):
3939
class StateType(Enum):
4040
VEC3 = 3
4141
VEC1 = 1
42-
RIGID = 7
42+
RIGID = 7
43+
44+
def __str__(self):
45+
if self == StateType.VEC3:
46+
return "Vec3"
47+
if self == StateType.VEC1:
48+
return "Vec1"
49+
if self == StateType.RIGID:
50+
return "Rigid3"

splib/mechanics/mass.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from splib.core.enum_types import ElementType
44

55

6+
# TODO : use the massDensity only and deduce totalMass if necessary from it + volume
67
@ReusableMethod
78
def addMass(node,template,totalMass=DEFAULT_VALUE,massDensity=DEFAULT_VALUE,lumping=DEFAULT_VALUE,**kwargs):
89
if (not isDefault(totalMass)) and (not isDefault(massDensity)) :

stlib/entities/__entity__.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from stlib.core.baseParameters import BaseParameters
22
from stlib.prefabs.collision import CollisionParameters, Collision
33
from stlib.prefabs.visual import VisualParameters, Visual
4-
from stlib.prefabs.behavior import Behavior, BehaviorParameters
4+
from stlib.prefabs.material import Material, MaterialParameters
55
from stlib.geometry import Geometry
66
from stlib.geometry.extract import ExtractParameters
77
import dataclasses
@@ -22,7 +22,7 @@ class EntityParameters(BaseParameters):
2222
addVisual : Optional[Callable] = lambda x : Visual(VisualParameters())
2323

2424
geometry : GeometryParameters
25-
behavior : BehaviorParameters
25+
material : MaterialParameters
2626
collision : Optional[CollisionParameters] = None
2727
visual : Optional[VisualParameters] = None
2828

@@ -31,7 +31,7 @@ class EntityParameters(BaseParameters):
3131
class Entity(Sofa.Core.BaseEntity):
3232

3333
# A simulated object
34-
behavior : Behavior
34+
material : Material
3535
visual : Visual
3636
collision : Collision
3737
geometry : Geometry
@@ -49,12 +49,12 @@ def __init__(self, parent=None, parameters=EntityParameters(), **kwargs):
4949

5050
self.geometry = self.add(Geometry, self.parameters.geometry)
5151

52-
### Check compatilibility of Behavior
53-
if self.parameters.behavior.stateType != self.parameters.template:
54-
print("WARNING: imcompatibility between templates of entity and behavior")
55-
self.parameters.behavior.stateType = self.parameters.template
52+
### Check compatilibility of Material
53+
if self.parameters.material.stateType != self.parameters.template:
54+
print("WARNING: imcompatibility between templates of both the entity and the material")
55+
self.parameters.material.stateType = self.parameters.template
5656

57-
self.behavior = self.add(Behavior,self.parameters.behavior)
57+
self.material = self.add(Material,self.parameters.material)
5858

5959
if self.parameters.collision is not None:
6060
self.collision = self.add(Collision,self.parameters.collision)
@@ -65,11 +65,15 @@ def __init__(self, parent=None, parameters=EntityParameters(), **kwargs):
6565
self.visual = self.add(Visual,self.parameters.visual)
6666
self.addMapping(self.parameters.visual, self.visual)
6767

68+
6869
def addMapping(self, destParameter, destPrefab):
70+
71+
templateString = f'{self.parameters.template},{destParameter.template}'
72+
6973
if( self.parameters.template == StateType.VEC3):
7074
if isinstance(destParameter.geometry,ExtractParameters):
71-
destPrefab.addObject("IdentityMapping", input="@../behavior/", output="@.", template='Vec3,Vec3')
75+
destPrefab.addObject("IdentityMapping", input="@../material/", output="@.", template=templateString)
7276
else :
73-
destPrefab.addObject("BarycentricMapping", input="@../behavior/", output="@.", template='Vec3,Vec3')
77+
destPrefab.addObject("BarycentricMapping", input="@../material/", output="@.", template=templateString)
7478
else:
75-
destPrefab.addObject("RigidMapping", input="@../behavior", output="@.", template='Rigid3,Vec3')
79+
destPrefab.addObject("RigidMapping", input="@../material", output="@.", template=templateString)
Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,69 @@
11
from stlib.entities import Entity, EntityParameters
2-
from stlib.entities.deformable.__parameters__ import DeformableParameters
2+
from stlib.prefabs.material import Material, MaterialParameters
33
from stlib.prefabs.visual import Visual
4-
from stlib.mixins.collision import CollisionMixin
5-
from splib.core.enum_types import ConstitutiveLaw
4+
from splib.core.enum_types import ConstitutiveLaw, ElementType
5+
from splib.mechanics.linear_elasticity import *
6+
from splib.mechanics.hyperelasticity import *
7+
from splib.mechanics.mass import addMass
68

7-
class DeformableParameters(EntityParameters):
89

9-
constitutiveLaw : ConstitutiveLaw = ConstitutiveLaw.ELASTIC
10+
class DeformableBehaviorParameters(MaterialParameters):
1011

11-
class Deformable(CollisionMixin, Entity):
12+
constitutiveLawType : ConstitutiveLaw
13+
elementType : ElementType
14+
parameters : list[float]
1215

13-
params : DeformableParameters
16+
def addMaterial(self, node):
1417

15-
@staticmethod
16-
def getParameters(**kwargs) -> DeformableParameters:
17-
return DeformableParameters(**kwargs)
18+
addMass(node, node.stateType, massDensity=node.massDensity, lumping=node.massLumping)
19+
20+
# TODO : change this with inheritance
21+
if(self.constitutiveLawType == ConstitutiveLaw.HYPERELASTIC):
22+
addHyperelasticity(node,self.elementType, self.parameters)
23+
else:
24+
addLinearElasticity(node,self.elementType, self.parameters[0], self.parameters[1])
25+
26+
27+
# class Deformable(Entity):
28+
29+
# params : DeformableParameters
30+
31+
# @staticmethod
32+
# def getParameters(**kwargs) -> DeformableParameters:
33+
# return DeformableParameters(**kwargs)
1834

1935

20-
def __init__(self, params : DeformableParameters, **kwargs):
21-
Entity.__init__(self, **kwargs)
36+
# def __init__(self, params : DeformableParameters, **kwargs):
37+
# Entity.__init__(self, **kwargs)
2238

23-
self.__addConstitutiveLaw__()
24-
self.addCollision(params.collision)
39+
# self.__addConstitutiveLaw__()
40+
# self.addCollision(params.collision)
2541

2642

27-
#@customizable
28-
# Need generic way of defining paramaters (linear/hyper...)
29-
def __addConstitutiveLaw__(self):
30-
self.params.addConstitutiveLaw()
43+
# #@customizable
44+
# # Need generic way of defining paramaters (linear/hyper...)
45+
# def __addConstitutiveLaw__(self):
46+
# self.params.addConstitutiveLaw()
3147

3248

33-
#@customizable
34-
def __addVisual__(self):
35-
#Extract surface and add identity mapping
36-
self.add(Visual, self.params.visual)
49+
# #@customizable
50+
# def __addVisual__(self):
51+
# #Extract surface and add identity mapping
52+
# self.add(Visual, self.params.visual)
53+
54+
55+
56+
57+
58+
def createScene(root) :
59+
60+
from stlib.geometry.file import FileParameters
61+
from stlib.geometry.extract import ExtractParameters
3762

63+
liverParameters = EntityParameters()
64+
liverParameters.behavior = DeformableBehaviorParameters()
65+
liverParameters.behavior.constitutiveLawType = ConstitutiveLaw.ELASTIC
66+
liverParameters.behavior.parameters = [1000, 0.45]
67+
liverParameters.geometry = FileParameters("liver.vtk")
68+
liverParameters.visual = ExtractParameters()
69+
myDeformableObject = root.add(Entity, liverParameters)

stlib/entities/deformable/__parameters__.py

Lines changed: 0 additions & 18 deletions
This file was deleted.

stlib/prefabs/behavior.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

stlib/prefabs/material.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any
2+
from splib.core.enum_types import StateType
3+
from stlib.core.basePrefab import BasePrefab
4+
from splib.mechanics.mass import addMass
5+
6+
@dataclasses.dataclass
7+
class MaterialParameters(BaseParameters):
8+
name: str = "Material"
9+
10+
stateType: StateType = StateType.VEC3
11+
massDensity: float
12+
massLumping: bool
13+
14+
addMaterial : Optional[Callable] = lambda node : addMass(node, node.stateType, massDensity=node.massDensity, lumping=node.massLumping)
15+
16+
17+
# TODO : previously called Behavior
18+
class Material(BasePrefab):
19+
def __init__(self, params: MaterialParameters):
20+
BasePrefab.__init__(self, params)
21+
22+
self.params = params
23+
self.addObject("MechanicalObject", name="States", template=str(self.params.stateType))
24+
25+
if(params.addMaterial is not None):
26+
params.addMaterial(self)

0 commit comments

Comments
 (0)