-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathvisual.py
38 lines (27 loc) · 1.28 KB
/
visual.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from stlib.core.basePrefab import BasePrefab
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any
from stlib.geometry import Geometry, GeometryParameters
from stlib.geometry.file import FileParameters
from splib.core.utils import DEFAULT_VALUE, addObject
from Sofa.Core import Object
@dataclasses.dataclass
class VisualParameters(BaseParameters):
color : Optional[list[float]] = DEFAULT_VALUE
texture : Optional[str] = DEFAULT_VALUE
geometry : GeometryParameters = dataclasses.field(default_factory = lambda : GeometryParameters())
addMapping : Optional[Callable] = None
class Visual(BasePrefab):
def __init__(self, params: VisualParameters):
BasePrefab.__init__(self, params)
geom = self.add(Geometry, params.geometry)
addObject(self,"OglModel", "MechanicalState", color=params.color, src=geom.container.linkpath, **params.kwargs)
if params.addMapping is not None:
params.addMapping(self)
@staticmethod
def getParameters(**kwargs) -> VisualParameters:
return VisualParameters(**kwargs)
def createScene(root):
# Create a visual from a mesh file
params = Visual.getParameters()
params.geometry = FileParameters(filename="mesh/cube.obj")
root.add(Visual, params)