Hi Mike, look at this macro (multi.C).
I think it does just what you were looking for:
=== macro begins =====================================
// This creates a copy of "original" node and stores it
// under the "parent" node. It is possible to set also
// the associated rotation matrix.
void replicate (TNode *original, TNode *parent, float x, float y, float z) {
TNode *copy = new TNode(*original);
copy->SetParent(parent);
copy->SetPosition(x, y, z);
parent.GetListOfNodes()->Add(copy);
}
void multi (void) {
// Create a new geometry and set it as default geometry
TGeometry *g = new TGeometry("DETECTOR", "My detector");
g->cd();
// create a set of shapes
TBRIK *brik = new TBRIK("BRIK", "A big brik","void", .5, .5, .5);
TTUBE *tube = new TTUBE("TUBE", "A tube","void",.3,.4,.5);
// create a dummy shape
TBRIK *dummy = new TBRIK("DUMMY", "A dummy shape","void", 0., 0., 0.);
// create the main node for our assembly and cd() to it
TNode *assembly = new TNode("ASSEMBLY", "Node for the main assembly", dummy);
assembly->cd();
// create the first copy of an aggregate as a node associated to
// a dummy shape and cd() to it
TNode *aggregate = new TNode("AGGREGATE", "Node for various shapes", dummy);
aggregate->cd();
// add shapes to the node through other nodes
TNode *brik_node = new TNode("BRIKNODE", "Node for the brik", brik);
TNode *tube_node = new TNode("TTUBENODE", "Node for the tube", tube);
// check the geometry status
g->ls();
// replicate the aggregate into the assembly in various positions
replicate(aggregate, assembly, 3., 0., 0.);
replicate(aggregate, assembly, 0., 3., 0.);
replicate(aggregate, assembly, -3., 0., 0.);
replicate(aggregate, assembly, 0., -3., 0.);
replicate(aggregate, assembly, 3., 3., 0.);
replicate(aggregate, assembly, -3., 3., 0.);
replicate(aggregate, assembly, 3., -3., 0.);
replicate(aggregate, assembly, -3., -3., 0.);
// check the geometry status again
g->ls();
// draw the geometry
g->Draw();
}
=== macro ends =======================================
----------------------------------------------------------
E-Mail: Stefano Bettelli <bettelli@tn.infn.it>
WWW : http://meitner.tn.infn.it
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:39 MET