Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
a6ff885
add folder for STLIB
bakpaul Apr 14, 2025
60352a4
Add reusable methods
bakpaul Apr 14, 2025
d024105
Add working files
bakpaul Apr 14, 2025
10082bf
Created example scenes
bakpaul Apr 14, 2025
d167479
Fix example
bakpaul Apr 14, 2025
dd9cc34
orga folders
hugtalbot Apr 14, 2025
7589706
Fix package
bakpaul Apr 14, 2025
2f844d7
bootstrap examples
bakpaul Apr 14, 2025
2c55e7d
start beginner scene
hugtalbot Apr 14, 2025
9b9e057
Move around files
bakpaul Apr 14, 2025
b989159
Move examples into SofaPython3 main example folder
bakpaul Apr 14, 2025
b42833b
Add unsaved modifications
bakpaul Apr 14, 2025
fa0bd74
reoganisation after discussion
EulalieCoevoet Apr 14, 2025
4380356
Add gemetries
bakpaul Apr 14, 2025
ba978ce
WIP FileParameters
bakpaul Apr 14, 2025
fc88100
Add beginner example
bakpaul Apr 14, 2025
7c314c6
Add unsaved changes
bakpaul Apr 14, 2025
b70a52b
Start work on visual and collision
bakpaul Apr 14, 2025
7cedc42
work on Tuesday : visual, geometry
hugtalbot Apr 15, 2025
5f183d5
add basePrefabParameters.py
hugtalbot Apr 15, 2025
97a2381
Add extracted geometry
bakpaul Apr 15, 2025
00fd16b
Fix visual example
bakpaul Apr 15, 2025
423a484
Finished collisions
bakpaul Apr 15, 2025
c97bfa3
[stlib-splib] work on prefabs: cleaning (#501)
EulalieCoevoet Jun 2, 2025
995d1b3
[stlib] adds README
EulalieCoevoet Jun 2, 2025
01531ca
[stlib] minor changes from discussion
EulalieCoevoet Jun 2, 2025
fc1404a
[splib] updates entity
EulalieCoevoet Jun 3, 2025
dd230b9
update README
hugtalbot Jun 3, 2025
57efa1d
add init in prefab
hugtalbot Jun 3, 2025
938f05b
Add first implem of entity
bakpaul Jun 3, 2025
592c13d
before the train 3/3
hugtalbot Jun 3, 2025
ca864d8
very last commit befor train
EulalieCoevoet Jun 3, 2025
1d8cdd3
WIP
bakpaul Jun 3, 2025
bacb258
Retore original. Still crash due to wrong string conversion
bakpaul Jun 3, 2025
09f45c5
[stlib] Deformable Entity (#502)
EulalieCoevoet Jun 13, 2025
d4b6042
Fix linkpath by introducing init method + make addDeformableMaterial …
bakpaul Jun 13, 2025
aad2a5e
[STLIB] Add the unified "add" in Sofa.Core.Node (#503)
damienmarchal Jul 17, 2025
1b15154
Add new tests for prefabs
bakpaul Jul 17, 2025
e2fff56
Revert modification of __genericAdd
bakpaul Jul 17, 2025
9de87d4
update addMass using elementType
hugtalbot Jul 17, 2025
6721f3f
Modify generic add to support object creation passing parameter for p…
bakpaul Oct 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix visual example
  • Loading branch information
bakpaul committed Oct 28, 2025
commit 00fd16b4f22838570e7a18c755efac6315effd9e
2 changes: 0 additions & 2 deletions examples/stlib/PrefabScene_beginner.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ def createScene(root):
rigidParams.geometry = CubeParameters([0, 0, 0], 1, 3)
root.add(Rigid,rigidParams)


deformableParams = Deformable.getParameters()
#Add transformation somewhere here
deformableParams.geometry = FileParameters("SofaScene/Logo.vtk")
root.add(Deformable,deformableParams)


return root
8 changes: 1 addition & 7 deletions examples/stlib/PrefabScene_intermediate.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@


def createScene(root):
Entity.Deformable(Mesh,MechaProperties)

return root


if __name__=="__main__":
root = exportScene()
createScene(root)
pass
return root
2 changes: 1 addition & 1 deletion stlib/core/baseParameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from splib.core.utils import DEFAULT_VALUE

import dataclasses
from types import Callable, Optional
from typing import Callable, Optional, Any

@dataclasses.dataclass
class BaseParameters(object):
Expand Down
11 changes: 6 additions & 5 deletions stlib/core/basePrefab.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import copy
import Sofa.Core
import Sofa
import Sofa.Core
from stlib.core.basePrefabParameters import BasePrefabParameters


Expand All @@ -21,18 +22,18 @@ def findName(cname, node):
if params.name in self.children:
params.name = findName(params.name, self)

return typeName(parent = self, parameters=params)
return self.addChild(typeName(params))

Sofa.Core.Node.add = addFromTypeName


class BasePrefab(Sofa.Core.Prefab):
class BasePrefab(Sofa.Core.Node):
"""
A Prefab is a Sofa.Node that assembles a set of components and nodes
"""

def __init__(self, params: BaseParameters):
Sofa.Core.Prefab.__init__(self, name=params.name)
def __init__(self, params: BasePrefabParameters):
Sofa.Core.Node.__init__(self, name=params.name)

def localToGlobalCoordinates(pointCloudInput, pointCloudOutput):
raise NotImplemented("Send an email to Damien, he will help you. Guaranteed :)")
Expand Down
6 changes: 3 additions & 3 deletions stlib/core/basePrefabParameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ class BasePrefabParameters(object):

# Transformation information
# TODO: these data are going to be added in Node in SOFA (C++ implementation)
translation : list[float] = [0., 0., 0.]
rotation : list[float] = [0., 0., 0.]
scale : list[float] = [1., 1., 1.]
translation : list[float] = dataclasses.field(default_factory = lambda : [0., 0., 0.])
rotation : list[float] = dataclasses.field(default_factory = lambda : [0., 0., 0.])
scale : list[float] = dataclasses.field(default_factory = lambda : [1., 1., 1.])

def toDict(self):
return dataclasses.asdict(self)
4 changes: 2 additions & 2 deletions stlib/entities/deformable/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from __deformable__ import *
from __parameters__ import *
from .__deformable__ import *
from .__parameters__ import *
2 changes: 1 addition & 1 deletion stlib/entities/rigid/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from __rigid__ import *
from .__rigid__ import *
12 changes: 7 additions & 5 deletions stlib/geometry/__geometry__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Geometry(BasePrefab):...

@dataclasses.dataclass
class InternalDataProvider(object):
positions : Any
position : Any = None
# Topology information
edges : Any = DEFAULT_VALUE
triangles : Any = DEFAULT_VALUE
Expand All @@ -27,10 +27,12 @@ def generateAttribute(self, parent : Geometry):
class GeometryParameters(BaseParameters):

# Type of the highest degree element
elementType : Optional[ElementType]
elementType : Optional[ElementType] = None
data : Optional[InternalDataProvider] = None

dynamicTopology : bool = False
data : Optional[InternalDataProvider]





Expand All @@ -47,8 +49,8 @@ def __init__(self, params: GeometryParameters):
params.data.generateAttribute(self)
if(params.dynamicTopology):
if(params.elementType is not None):
addDynamicTopology(self, container = {dataclasses.asdict(params.data)})
addDynamicTopology(self, container = dataclasses.asdict(params.data))
else:
raise ValueError
else:
addStaticTopology(self, container = {dataclasses.asdict(params.data)})
addStaticTopology(self, container = dataclasses.asdict(params.data))
2 changes: 1 addition & 1 deletion stlib/geometry/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from __geometry__ import *
from .__geometry__ import *
4 changes: 2 additions & 2 deletions stlib/geometry/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ def generateAttribute(self, parent : Geometry):
elif self.fromElemType == ElementType.HEXA:
tmn.addObject("Hexa2QuadTopologicalMapping", input=fromLink, output=tmn.container.linkpath)

self.positions = tmn.container.position.linkpath
self.position = tmn.container.position.linkpath
self.edges = tmn.container.edges.linkpath
self.triangles = tmn.container.triangles.linkpath
self.quads = tmn.container.quads.linkpath
self.hexaedra = tmn.container.hexaedra.linkpath
self.hexahedra = tmn.container.hexahedra.linkpath
self.tetrahedra = tmn.container.tetras.linkpath


Expand Down
16 changes: 8 additions & 8 deletions stlib/geometry/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@dataclasses.dataclass
class FileInternalDataProvider(InternalDataProvider):
filename : str
filename : str = "mesh/cube.obj"

def __post_init__(self, **kwargs):
InternalDataProvider.__init__(self,**kwargs)
Expand All @@ -16,16 +16,16 @@ def generateAttribute(self, parent : Geometry):

loadMesh(parent, self.filename)

self.positions = parent.loader.position.linkpath
self.edges = parent.loader.edges.linkpath
self.triangles = parent.loader.triangles.linkpath
self.quads = parent.loader.quads.linkpath
self.hexaedra = parent.loader.hexaedra.linkpath
self.tetrahedra = parent.loader.tetras.linkpath
self.position = str(parent.loader.position.linkpath)
self.edges = str(parent.loader.edges.linkpath)
self.triangles = str(parent.loader.triangles.linkpath)
self.quads = str(parent.loader.quads.linkpath)
self.hexahedra = str(parent.loader.hexahedra.linkpath)
self.tetrahedra = str(parent.loader.tetras.linkpath)



class FileParameters(GeometryParameters):
def __init__(self, filename, dynamicTopology = False, elementType : ElementType = None ):
GeometryParameters.__init__(data = FileInternalDataProvider(filename), dynamicTopology = dynamicTopology, elementType = elementType)
GeometryParameters.__init__(self,data = FileInternalDataProvider(filename), dynamicTopology = dynamicTopology, elementType = elementType)

20 changes: 16 additions & 4 deletions stlib/prefabs/visual.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
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 Sofa.Core import Object

@dataclasses.dataclass
class VisualParameters(BaseParameters):
color : Optional[list[float]]
texture : Optional[str]
color : Optional[list[float]] = None
texture : Optional[str] = None

geometry : GeometryParameters
addMapping : Optional[Callable]
geometry : GeometryParameters = dataclasses.field(default_factory = lambda : GeometryParameters())
addMapping : Optional[Callable] = None


class Visual(BasePrefab):
Expand All @@ -26,3 +27,14 @@ def __init__(self, params: VisualParameters):
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)