3333import functools
3434import traceback
3535import Sofa .Helper
36+ import Sofa .Core
3637import 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
168184def 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
0 commit comments