P
pgarrone
Hi,
I have a data tree. A node in the tree "assembles" itself when called
upon to do so by the level-of-detail algorithm.
It creates and adds its children to itself using a base class method
called "add". However in the pseudo-constructor called "setup", the
child node needs to be already linked into the tree in order to obtain
configuration information. So the "add" method creates the child,
optionally positions it within the parents frame of reference, then
invokes the child's setup method which has variable length arguments.
Here is an example of code in an assemble method.
self.add("Reservoir", (Reservoir, r, r +
self.inner_tank_thickness))
self.add("End_tank", (End_tank, r,
self.outer_tank_radius),
0.5*self.payload_length +
0.5*self.outer_tank_thickness)
self.add("Inner_end_tank", (End_tank, r,
self.outer_tank_radius),
-0.5*self.payload_length
-0.5*self.outer_tank_thickness)
self.add("Zero_G_port", Zero_G_port,
0.5*self.payload_length
-0.5*self.zg_length)
self.add("Hangar-floor", Hangar)
self.add("herc", Hercules_shuttle,
(0.5*self.payload_length - 25,
R3d(180.0,V3d(0,1,0))))
self.add("herc1", Hercules_shuttle,
(V3d(0,-12.5,0.5*self.payload_length - 25), R3d(180.0,V3d(0,1,0))))
The add method takes the parameters "name", child-information, and
optional location-information.
The child information is either a class, or a tuple whose first member
is a class. The remaining members of the tuple are parameters to the
class setup method.
The problem is this: Sometimes the setup method parameters are quite
numerous, leading to problems when the order is misjudged. If invoked
directly, then naming parameters minimises the problems with missed
parameters. However the indirect creation via the "add" method means
the parameters are passed in a tuple, so the parameters cannot be
named.
How can I "pre-construct" the children with parent id and optional
location information, and also implement the advantages of named
function parameters?
Looking for all suggestions.
I have a data tree. A node in the tree "assembles" itself when called
upon to do so by the level-of-detail algorithm.
It creates and adds its children to itself using a base class method
called "add". However in the pseudo-constructor called "setup", the
child node needs to be already linked into the tree in order to obtain
configuration information. So the "add" method creates the child,
optionally positions it within the parents frame of reference, then
invokes the child's setup method which has variable length arguments.
Here is an example of code in an assemble method.
self.add("Reservoir", (Reservoir, r, r +
self.inner_tank_thickness))
self.add("End_tank", (End_tank, r,
self.outer_tank_radius),
0.5*self.payload_length +
0.5*self.outer_tank_thickness)
self.add("Inner_end_tank", (End_tank, r,
self.outer_tank_radius),
-0.5*self.payload_length
-0.5*self.outer_tank_thickness)
self.add("Zero_G_port", Zero_G_port,
0.5*self.payload_length
-0.5*self.zg_length)
self.add("Hangar-floor", Hangar)
self.add("herc", Hercules_shuttle,
(0.5*self.payload_length - 25,
R3d(180.0,V3d(0,1,0))))
self.add("herc1", Hercules_shuttle,
(V3d(0,-12.5,0.5*self.payload_length - 25), R3d(180.0,V3d(0,1,0))))
The add method takes the parameters "name", child-information, and
optional location-information.
The child information is either a class, or a tuple whose first member
is a class. The remaining members of the tuple are parameters to the
class setup method.
The problem is this: Sometimes the setup method parameters are quite
numerous, leading to problems when the order is misjudged. If invoked
directly, then naming parameters minimises the problems with missed
parameters. However the indirect creation via the "add" method means
the parameters are passed in a tuple, so the parameters cannot be
named.
How can I "pre-construct" the children with parent id and optional
location information, and also implement the advantages of named
function parameters?
Looking for all suggestions.