Skip to content

Commit 73fa41a

Browse files
committed
[SofaPython3] Replace Prefab by RawPrefab and implement Sofa.Prefab
Now it is much better to inherit from Sofa.Prefab. This class will do some boilerplate code.
1 parent 0ffcca5 commit 73fa41a

File tree

3 files changed

+29
-23
lines changed

3 files changed

+29
-23
lines changed

bindings/Sofa/package/__init__.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import functools
3434
import traceback
3535
import Sofa.Helper
36+
import Sofa.Core
3637
import importlib
3738

3839
__all__=["animation"]
@@ -158,12 +159,27 @@ def pyType2sofaType(v):
158159
return "double"
159160
return None
160161

161-
def getPrefabProperties(f):
162-
frameinfo = inspect.getframeinfo(inspect.currentframe().f_back.f_back)
163-
definedloc = (frameinfo.filename, frameinfo.lineno)
164162

165-
print("DEFINED LOC ", definedloc, f.__code__.co_name, f.__doc__)
166-
return (definedloc[0], definedloc[1])
163+
class Prefab(Sofa.Core.RawPrefab):
164+
def __init__(self):
165+
Sofa.Core.RawPrefab.__init__(self)
166+
frame = inspect.currentframe().f_back
167+
frameinfo = inspect.getframeinfo(frame)
168+
definedloc = (frameinfo.filename, frameinfo.lineno)
169+
170+
self.setDefinitionSourceFileName(definedloc[0])
171+
self.setDefinitionSourceFilePos(definedloc[1])
172+
173+
frame = frame.f_back
174+
if frame is not None:
175+
frameinfo = inspect.getframeinfo(frame)
176+
definedloc = (frameinfo.filename, frameinfo.lineno)
177+
self.setInstanciationSourceFileName(definedloc[0])
178+
self.setInstanciationSourceFilePos(definedloc[1])
179+
180+
self.addData("prefabname", value=type(self).__name__, type="string", group="Infos", help="Name of the prefab")
181+
self.addData("docstring", value=self.__doc__, type="string", group="Infos", help="Name of the prefab")
182+
167183

168184
def PrefabBuilder(f):
169185
frameinfo = inspect.getframeinfo(inspect.currentframe().f_back)
@@ -180,9 +196,9 @@ def addChild(self, name):
180196
def __getattr__(self, name):
181197
return getattr(self.node, name)
182198

183-
class InnerSofaPrefab(Sofa.Core.Prefab):
199+
class InnerSofaPrefab(Sofa.Core.RawPrefab):
184200
def __init__(self, name):
185-
Sofa.Core.Prefab.__init__(self, name=name)
201+
Sofa.Core.RawPrefab.__init__(self, name=name)
186202

187203
def doReInit(self):
188204
argnames = inspect.getfullargspec(f).args
@@ -193,7 +209,8 @@ def doReInit(self):
193209
kkwargs[name] = self.__data__[name].value
194210
f(**kkwargs)
195211

196-
selfnode = InnerSofaPrefab(name="InnerSofaP")
212+
213+
selfnode = InnerSofaPrefab(name=f.__code__.co_name)
197214
selfnode.setDefinitionSourceFileName(definedloc[0])
198215
selfnode.setDefinitionSourceFilePos(definedloc[1])
199216

@@ -212,7 +229,8 @@ def doReInit(self):
212229
if argnames[i+n] not in selfnode.__data__:
213230
selfnode.addPrefabParameter(name=argnames[i+n], value=defaults[n], type=pyType2sofaType(defaults[n]), help="Undefined")
214231

215-
selfnode.init()
232+
233+
selfnode.init()
216234
return selfnode
217235
return SofaPrefabF
218236

bindings/Sofa/src/SofaPython3/Sofa/Core/Binding_Prefab.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ namespace sofapython3
105105
py::class_<Prefab,
106106
Prefab_Trampoline,
107107
BasePrefab,
108-
py_shared_ptr<Prefab>> f(m, "Prefab",
108+
py_shared_ptr<Prefab>> f(m, "RawPrefab",
109109
py::dynamic_attr(),
110110
py::multiple_inheritance(),
111111
sofapython3::doc::prefab::Prefab);
@@ -114,18 +114,6 @@ namespace sofapython3
114114
{
115115
auto c = new Prefab_Trampoline();
116116

117-
// py::dict globals = py::module::import("__main__").attr("__dict__");
118-
// py::dict locals {"f"_a=PythonFactory::toPython(c)};
119-
// py::object res = py::eval<py::eval_statements>( // tell eval we're passing multiple statements
120-
// "import Sofa\n"
121-
// "Sofa.getPrefabProperties(f)\n", globals, locals);
122-
123-
// py::print(py::str(res));
124-
125-
// c->addD
126-
// c->setDefinitionSourceFilePos();
127-
// c->setDefinitionSourceFileName();
128-
129117
for(auto kv : kwargs)
130118
{
131119
std::string key = py::cast<std::string>(kv.first);

bindings/Sofa/src/SofaPython3/Sofa/Core/Submodule_Core.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ PYBIND11_MODULE(Core, core)
7373
Sofa.Core.Data
7474
Sofa.Core.Link
7575
Sofa.Core.Node
76-
Sofa.Core.Prefab
76+
Sofa.Core.RawPrefab
7777
Sofa.Core.Object
7878
Sofa.Core.Camera
7979

0 commit comments

Comments
 (0)