Sofa helper to build scenes
Project description
Easily build complex simulation graphs for SOFA
Install
pip install sofacomponents
Quick start
from sofacomponents import Node, SofaFactory
# build the factory
fa = SofaFactory(debug=False)
# create the root node
root = Node()
# add attributes
root.attrs(dt=0.05, gravity=[0, -1, 0])
# add sofa components from the factory
root.add(
fa.VisualStyle(displayFlags="showVisual"),
fa.DefaultAnimationLoop(),
fa.RequiredPlugin(pluginName="SofaOpenglVisual SofaPython"),
)
# add child node
childNode = root.child("childNode").add(
fa.MeshVTKLoader(filename="mesh.vtk"),
# add components not from the factory
fa.UnknownComponent(data="foo"),
)
# display the scene
print(root)
# Export the scene
root.write_scene_to("scene.py")
# Export the graph
root.write_graph_to("graph.txt")
Output:
root
└ VisualStyle (displayFlags=showVisual)
└ DefaultAnimationLoop ()
└ RequiredPlugin (pluginName=SofaOpenglVisual SofaPython)
└ childNode
└ MeshVTKLoader (filename=mesh.vtk)
└ UnknownComponent (data=foo)
Python generated scene:
import Sofa
class SceneElectroMechanical(Sofa.PythonScriptController):
def __init__(self, node):
self.createGraph(node)
def createGraph(self, root):
# root
root.dt = 0.05
root.gravity = [0, -1, 0]
root.createObject("VisualStyle", displayFlags="showVisual")
root.createObject("DefaultAnimationLoop",)
root.createObject("RequiredPlugin", pluginName="SofaOpenglVisual SofaPython")
# root/childNode
childNode = root.createChild("childNode")
childNode.createObject("MeshVTKLoader", filename="mesh.vtk")
childNode.createObject("UnknownComponent", data="foo")
def createScene(root_node):
SceneElectroMechanical(root_node)
Extend
Create a factory instanciating the SofaFactory
class.
The sofa_component
decorator allows to update the parameters directory with:
- the general default parameters (See
SofaFactory._defaults
) - the
params
you choose for your component - the custom
kwargs
given by the user
from sofacomponents import SofaFactory, sofa_component
class MyFactory(SofaFactory):
def __init__(self, debug=False):
super().__init__(debug)
@sofa_component
def MyComponentNoParams(self, **kwargs):
""" Minimum signature to register the component to the factory """
return "MyComponentName"
@sofa_component
def MyComponent(self, **kwargs):
params = dict(
data="foo",
# ...
)
return "MyComponentName", params
And then
# build the factory
fa = MyFactory()
Embeded documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sofacomponents-0.1.5.tar.gz
(251.8 kB
view details)
Built Distribution
File details
Details for the file sofacomponents-0.1.5.tar.gz
.
File metadata
- Download URL: sofacomponents-0.1.5.tar.gz
- Upload date:
- Size: 251.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200714 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 237ac56fe968832f336756cd1568ecf01ab9b801c5ee7cdf7a7a4a8263479d25 |
|
MD5 | 2e6f371a21fe07f41e734e329b1afab1 |
|
BLAKE2b-256 | 533e9fd856326978458f7b7dc4e0c66ded1faddd2ff41df76efb5b54ab0861a1 |
Provenance
File details
Details for the file sofacomponents-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: sofacomponents-0.1.5-py3-none-any.whl
- Upload date:
- Size: 645.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200714 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84f19bbd7c65c968a4a527c0ac68d28e485c0eb5f937fceb387b761165d14685 |
|
MD5 | 1a3d92cc4ac5c03e8dbf1cfaa10c4fb0 |
|
BLAKE2b-256 | 97eaf4697eebb773e0b259cb9e82672909b76055d2aff72f97f1cb576c2e9cb2 |