Skip to content

Commit a5cba09

Browse files
committed
Add beginner example
1 parent 97eda89 commit a5cba09

19 files changed

Lines changed: 146 additions & 87 deletions
Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,32 @@
1+
from stlib.entities.rigid import Rigid
12
from stlib.entities.deformable import Deformable
3+
from stlib.geometry.cube import CubeParameters
4+
from stlib.geometry.file import FileParameters
5+
from splib.simulation.headers import setupLagrangianCollision
6+
from splib.simulation.linear_solvers import addLinearSolver
7+
from splib.simulation.ode_solvers import addImplicitODE
8+
9+
#To be added in splib
10+
def addSolvers(root):
11+
addLinearSolver(root)
12+
addImplicitODE(root)
13+
root.addObject("LinearSolverConstraintCorrection", linearsolver="@LinearSolver")
214

315
def createScene(root):
4-
params = Deformable.getParameters()
5-
params.name = "Logo"
6-
params.topology.filename="share/mesh/SOFA-logo.obj"
7-
root.add(Deformable, params=params)
16+
root.gravity = [0, 0, -9.81]
17+
18+
setupLagrangianCollision(root)
19+
addSolvers(root)
20+
21+
rigidParams = Rigid.getParameters()
22+
rigidParams.geometry = CubeParameters([0, 0, 0], 1, 3)
23+
root.add(Rigid,rigidParams)
24+
25+
26+
deformableParams = Deformable.getParameters()
27+
#Add transformation somewhere here
28+
deformableParams.geometry = FileParameters("SofaScene/Logo.vtk")
29+
root.add(Deformable,deformableParams)
30+
31+
832
return root

splib/topology/loader.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ def loadMesh(node,filename,**kwargs):
99

1010
if splitedName[-1] in ['vtk', 'obj', 'stl', 'msh', 'sph']:
1111
if splitedName[-1] == "msh":
12-
return node.addObject("MeshGmshLoader", name="meshLoader",filename=filename, **kwargs)
12+
return node.addObject("MeshGmshLoader", name="loader",filename=filename, **kwargs)
1313
elif splitedName[-1] == "sph":
14-
return node.addObject("SphereLoader", name="meshLoader",filename=filename, **kwargs)
14+
return node.addObject("SphereLoader", name="loader",filename=filename, **kwargs)
1515
else:
16-
return node.addObject("Mesh"+splitedName[-1].upper()+"Loader", name="meshLoader",filename=filename, **kwargs)
16+
return node.addObject("Mesh"+splitedName[-1].upper()+"Loader", name="loader",filename=filename, **kwargs)
1717
else:
1818
print('[Error] : File extension ' + splitedName[-1] + ' not recognised.')
1919

stlib/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__all__ = ["core","simulated"]
1+
__all__ = ["core","entities","prefabs","shapes"]

stlib/core/baseEntity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Sofa.Core
2-
from base_parameters import BaseParameters
2+
from baseParameters import BaseParameters
33

44
class BaseEntity(Sofa.Core.Prefab):
55

stlib/core/baseParameters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@dataclasses.dataclass
88
class BaseParameters(object):
9-
name : str = "Entity"
9+
name : str = "object"
1010
kwargs : dict = dataclasses.field(default_factory=dict)
1111

1212
def toDict(self):

stlib/entities/__entity__.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
from stlib.core.baseParameters import BaseParameters
22
import dataclasses
3-
from typing import Callable, Optional, overload
3+
from typing import Callable, Optional, overload, Any
4+
from stlib.geometry import GeometryParameters
45
import Sofa
56

67
@dataclasses.dataclass
78
class EntityParameters(BaseParameters):
8-
name : str = "Entity"
9+
name = "Entity"
10+
11+
# addSimulation : Callable = Simulation
12+
# addCollisionModel : Callable = CollisionModel
13+
# addVisualModel : Callable = VisualModel
14+
915

10-
addSimulation : Callable = Simulation
11-
addCollisionModel : Callable = CollisionModel
12-
addVisualModel : Callable = VisualModel
1316

1417
#setConstitutiveLaw # : Callable = addBidule
1518
#setBoundaryCondition #: Callable = addBidule
16-
17-
mechanical : dict = dataclasses.field(default_factory=dict)
18-
collision : CollisionModel.Parameters = CollisionModel.Parameters()
19-
visual : VisualModelParameters = VisualModelParameters()
20-
simulation : SimulationParameters = SimulationParameters()
19+
geometry : GeometryParameters
20+
# mechanical : dict = dataclasses.field(default_factory=dict)
21+
# collision : CollisionModel.Parameters = CollisionModel.Parameters()
22+
# visual : VisualModelParameters = VisualModelParameters()
23+
# simulation : SimulationParameters = SimulationParameters()
2124

2225

2326

stlib/entities/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from __entity__ import *

stlib/entities/deformable/__deformable__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
class Deformable(Entity):
66

77
@staticmethod
8-
def getParameters() -> DeformableParameters:
9-
return DeformableParameters()
8+
def getParameters(**kwargs) -> DeformableParameters:
9+
return DeformableParameters(**kwargs)
1010

1111

1212
def __init__(self, params : DeformableParameters, **kwargs):
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from __deformable__ import *
2+
from __parameters__ import *
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
2-
import dataclasses
3-
from stlib.core.base_parameters import BaseParameters
1+
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses
42

53
@dataclasses.dataclass
64
class DeformableParameters(BaseParameters):
75
addConstitutiveLaw : Callable = lambda x: x
86

97
mass : Optional[float] = None
108

11-
def to_dict(self):
9+
def toDict(self):
1210
return dataclasses.asdict(self)

0 commit comments

Comments
 (0)