Skip to content

Commit d0c514b

Browse files
committed
work on Tuesday : visual, geometry
1 parent 6db1a4a commit d0c514b

File tree

6 files changed

+53
-13
lines changed

6 files changed

+53
-13
lines changed

stlib/core/basePrefab.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
1+
import copy
12
import Sofa.Core
2-
from baseParameters import BaseParameters
3+
from stlib.core.basePrefabParameters import BasePrefabParameters
4+
5+
6+
def addFromTypeName(self : Sofa.Core.Node, typeName, params = BasePrefabParameters, **kwargs):
7+
def findName(cname, node):
8+
"""Compute a working unique name in the node"""
9+
rname = cname
10+
for i in range(0, len(node.children)):
11+
if rname not in node.children:
12+
return rname
13+
rname = cname + str(i+1)
14+
return rname
15+
16+
for k,v in kwargs.items():
17+
if hasattr(params, k):
18+
setattr(params, k, v)
19+
20+
params = copy.copy(params)
21+
if params.name in self.children:
22+
params.name = findName(params.name, self)
23+
24+
return typeName(parent = self, parameters=params)
25+
26+
Sofa.Core.Node.add = addFromTypeName
327

428

529
class BasePrefab(Sofa.Core.Prefab):
@@ -8,4 +32,8 @@ class BasePrefab(Sofa.Core.Prefab):
832
"""
933

1034
def __init__(self, params: BaseParameters):
11-
Sofa.Core.Prefab.__init__(self, name=params.name)
35+
Sofa.Core.Prefab.__init__(self, name=params.name)
36+
37+
def localToGlobalCoordinates(pointCloudInput, pointCloudOutput):
38+
raise NotImplemented("Send an email to Damien, he will help you. Guaranteed :)")
39+

stlib/entities/__entity__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ def __init__(self, parent=None, parameters=EntityParameters(), **kwargs):
4343
self.parameters = parameters
4444

4545
self.addMechanicalModel(**parameters.mechanical)
46+
# ????
4647
self.addSimulation(parameters=parameters.simulation)
4748
self.addVisualModel(parameters=parameters.visual)
4849
self.addCollisionModel()
4950

5051
def addMechanicalModel(self, **kwargs):
5152
self.addObject("MechanicalObject", **kwargs)
5253

54+
# ????
5355
def addSimulation(self, **kwargs):
5456
self.parameters.addSimulation(self, **kwargs)
5557

stlib/entities/deformable/__deformable__.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,15 @@ def __init__(self, params : DeformableParameters, **kwargs):
1818
self.__addConstitutiveLaw__()
1919
self.add(Collision, params.collision)
2020

21+
2122
#@customizable
2223
# Need generic way of defining paramaters (linear/hyper...)
2324
def __addConstitutiveLaw__(self):
2425
self.params.addConstitutiveLaw()
2526

2627

27-
2828
#@customizable
2929
def __addVisual__(self):
30-
#Exctract surface and add indentity mapping
31-
30+
#Extract surface and add identity mapping
3231
self.add(Visual, params.visual)
3332

34-
pass

stlib/geometry/__geometry__.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@
99
class GeometryParameters(BaseParameters):
1010
@dataclasses.dataclass
1111
class Data(object):
12-
elementType : Optional[ElementType]
12+
# Initial positions
1313
positions : Any
14+
15+
# Type of the highest degree element
16+
elementType : Optional[ElementType]
17+
18+
# Topology information
1419
edges : Optional[Any]
1520
triangles : Optional[Any]
21+
quads : Optional[Any]
1622
tetrahedra : Optional[Any]
1723
hexahedra : Optional[Any]
18-
quads : Optional[Any]
24+
1925
dynamicTopology : bool = False
2026
data : Data
2127

@@ -32,6 +38,3 @@ def __init__(self, params: GeometryParameters):
3238
raise ValueError
3339
else:
3440
addStaticTopology(self, **dataclasses.asdict(params.data), **params.kargs)
35-
36-
37-

stlib/geometry/file.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@ def createData(filename) -> GeometryParameters.Data :
2121
data.triangles = node.loader.triangles.value
2222
data.tetrahedra = node.loader.tetras.value
2323

24+
node.cleanUp()
25+
2426
return data
2527

stlib/prefabs/visual.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from stlib.core.basePrefab import BasePrefab
22
from stlib.core.baseParameters import BaseParameters, Callable, Optional, dataclasses, Any
3-
from stlib.geometry import GeometryParameters
3+
from stlib.geometry import Geometry, GeometryParameters
44
from Sofa.Core import Object
55

66
@dataclasses.dataclass
@@ -16,6 +16,13 @@ class Visual(BasePrefab):
1616
container : Object # This should be more specialized into the right SOFA type
1717
modifier : Optional[Object]
1818

19-
def __init__(self, params: GeometryParameters):
19+
def __init__(self, params: VisualParameters):
2020
BasePrefab.__init__(self, params)
2121

22+
geom = self.add(Geometry, params.geometry)
23+
# TODO : handle optional color, texture using DEFAULT_VALUE mechanism (as implemented by Paul)
24+
self.addObject("OglModel", color=params.color, src=geom.container.linkpath)
25+
26+
if params.addMapping is not None:
27+
params.addMapping(self)
28+

0 commit comments

Comments
 (0)