|
| 1 | +from stlib.core.parameters import EntityParameters |
| 2 | +import dataclasses |
| 3 | +from typing import Callable, Optional, overload |
| 4 | +import Sofa |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +class Entity(Sofa.Core.BasePrefab): |
| 9 | + |
| 10 | + # A simulated object |
| 11 | + simulation : Simulation |
| 12 | + visual : VisualModel |
| 13 | + collision : CollisionModel |
| 14 | + |
| 15 | + parameters : EntityParameters |
| 16 | + |
| 17 | + @dataclasses.dataclass |
| 18 | + class Parameters(EntityParameters): |
| 19 | + name : str = "Entity" |
| 20 | + |
| 21 | + addSimulation : Callable = Simulation |
| 22 | + addCollisionModel : Callable = CollisionModel |
| 23 | + addVisualModel : Callable = VisualModel |
| 24 | + |
| 25 | + #setConstitutiveLaw # : Callable = addBidule |
| 26 | + #setBoundaryCondition #: Callable = addBidule |
| 27 | + |
| 28 | + mechanical : dict = dataclasses.field(default_factory=dict) |
| 29 | + collision : CollisionModel.Parameters = CollisionModel.Parameters() |
| 30 | + visual : VisualModelParameters = VisualModelParameters() |
| 31 | + simulation : SimulationParameters = SimulationParameters() |
| 32 | + |
| 33 | + |
| 34 | + def __init__(self, parent=None, parameters=EntityParameters(), **kwargs): |
| 35 | + Sofa.Core.Node.__init__(self, name=parameters.name) |
| 36 | + |
| 37 | + if parent is not None: |
| 38 | + parent.addChild(self) |
| 39 | + |
| 40 | + self.parameters = parameters |
| 41 | + |
| 42 | + self.addMechanicalModel(**parameters.mechanical) |
| 43 | + self.addSimulation(parameters=parameters.simulation) |
| 44 | + self.addVisualModel(parameters=parameters.visual) |
| 45 | + self.addCollisionModel() |
| 46 | + |
| 47 | + def addMechanicalModel(self, **kwargs): |
| 48 | + self.addObject("MechanicalObject", **kwargs) |
| 49 | + |
| 50 | + def addSimulation(self, **kwargs): |
| 51 | + self.parameters.addSimulation(self, **kwargs) |
| 52 | + |
| 53 | + def addVisualModel(self, **kwargs): |
| 54 | + self.parameters.addVisualModel(self, **kwargs) |
| 55 | + |
| 56 | + def addCollisionModel(self): |
| 57 | + pass |
0 commit comments