33from stlib .prefabs .visual import VisualParameters , Visual
44from stlib .prefabs .behavior import Behavior , BehaviorParameters
55from stlib .geometry import Geometry
6+ from stlib .geometry .extract import ExtractParameters
67import dataclasses
78from typing import Callable , Optional , overload , Any
89from stlib .geometry import GeometryParameters
10+ from splib .core .enum_types import StateType
911import Sofa
1012
1113
1214@dataclasses .dataclass
1315class EntityParameters (BaseParameters ):
1416 name = "Entity"
1517
16- # addSimulation : Callable = Simulation
17- #setConstitutiveLaw # : Callable = addBidule
18- #setBoundaryCondition #: Callable = addBidule
18+ template : StateType
1919
20+ ### QUID
2021 addCollision : Optional [Callable ] = lambda x : Collision (CollisionParameters ())
2122 addVisual : Optional [Callable ] = lambda x : Visual (VisualParameters ())
2223
2324 geometry : GeometryParameters
24- # mechanical : dict = dataclasses.field(default_factory=dict)
25+ behavior : BehaviorParameters
2526 collision : Optional [CollisionParameters ] = None
2627 visual : Optional [VisualParameters ] = None
27- # simulation : SimulationParameters = SimulationParameters()
2828
2929
3030
@@ -47,16 +47,29 @@ def __init__(self, parent=None, parameters=EntityParameters(), **kwargs):
4747
4848 self .parameters = parameters
4949
50- self .add (Geometry , self .parameters .geometry )
51- self .addBehavior (parameters = parameters .behavior )
52- self .addVisual (parameters = parameters .visual )
53- self .addCollision (parameters = parameters .collision )
50+ self .geometry = self .add (Geometry , self .parameters .geometry )
5451
55- def addBehavior (self , ** kwargs ):
56- self .parameters .addBehavior (self , ** kwargs )
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
5756
58- def addVisual (self , ** kwargs ):
59- self .parameters .addVisual (self , ** kwargs )
57+ self .behavior = self .add (Behavior ,self .parameters .behavior )
58+
59+ if self .parameters .collision is not None :
60+ self .collision = self .add (Collision ,self .parameters .collision )
61+ self .addMapping (self .parameters .collision , self .collision )
62+
63+
64+ if self .parameters .visual is not None :
65+ self .visual = self .add (Visual ,self .parameters .visual )
66+ self .addMapping (self .parameters .visual , self .visual )
6067
61- def addCollision (self , ** kwargs ):
62- self .parameters .addCollision (self , ** kwargs )
68+ def addMapping (self , destParameter , destPrefab ):
69+ if ( self .parameters .template == StateType .VEC3 ):
70+ if isinstance (destParameter .geometry ,ExtractParameters ):
71+ destPrefab .addObject ("IdentityMapping" , input = "@../behavior/" , output = "@." , template = 'Vec3,Vec3' )
72+ else :
73+ destPrefab .addObject ("BarycentricMapping" , input = "@../behavior/" , output = "@." , template = 'Vec3,Vec3' )
74+ else :
75+ destPrefab .addObject ("RigidMapping" , input = "@../behavior" , output = "@." , template = 'Rigid3,Vec3' )
0 commit comments