Alex,
I don't think this should be part of TNode/TShape, but an
independent small class. Meanwhile (and for fun) you can get
some inspiration for one (or both) macros below:
Rene Brun
//==============simple axis.C
{
lx = new TPolyLine3D(2);
lx->SetLineColor(6);
lx->SetLineWidth(2);
lx->SetLineStyle(2);
lx->SetPoint(0,0,0,0);
lx->SetPoint(1,800,0,0);
ly = new TPolyLine3D(2);
ly->SetLineColor(4);
ly->SetLineStyle(2);
ly->SetLineWidth(2);
ly->SetPoint(0,0,0,0);
ly->SetPoint(1,0,800,0);
lz = new TPolyLine3D(2);
lz->SetLineColor(2);
lz->SetLineStyle(2);
lz->SetLineWidth(2);
lz->SetPoint(0,0,0,0);
lz->SetPoint(1,0,0,1200);
lx->Draw();
ly->Draw();
lz->Draw();
}
//==============funny axis.C by Stascek Jadach
{
// S. Jadach, arrows.C, truly 3-dim. reference system
gROOT->Reset();
c1 = new TCanvas("c1","Geometry Shapes",0,0,700,700);
brik = new TBRIK("BRIK","BRIK","void",1000,1000,1000);
cone = new TCONE("CONE","CONE","void", 200, 0,200, 0,0);
// +-z r1,rmax r1,rmax
tube = new TTUBE("TUBE","TUBE","void", 0,50,500);
cone->SetLineColor(1);
tube->SetLineColor(2);
//delete rot1;
TRotMatrix *rot1 = new TRotMatrix("rot1","rot1" ,90,90 ,0,0 ,90,0
);
// y z x
TRotMatrix *rot2 = new TRotMatrix("rot2","rot2" ,0,0 ,90,0
,90,90);
// y z x
// Build the geometry hierarchy
node1 = new TNode("NODE1","NODE1","BRIK");
node1->cd();
TNode *node2 = new TNode("NODE2","NODE2","TUBE", 500,0,0,"rot1");
node2->cd();
TNode *node3 = new TNode("NODE3","NODE3","CONE", 0, 0, 700,"");
node3->SetLineColor(6);
node1->cd();
TNode *node4 = new TNode("NODE4","NODE4","TUBE", 0, 0, 500);
node4->cd();
TNode *node5 = new TNode("NODE5","NODE5","CONE", 0, 0, 700);
node3->SetLineColor(4);
node1->cd();
TNode *node6 = new TNode("NODE6","NODE6","TUBE", 0, 500, 0,"rot2");
node6->cd();
TNode *node7 = new TNode("NODE7","NODE7","CONE", 0, 0, 700);
node7->SetLineColor(5);
// Draw this geometry in the current canvas
node1->cd();
node1->Draw();
node1->SetVisibility(0);
c1->Update();
pline3D = new TPolyLine3D(2,"");
pline3D->SetLineColor(7);
pline3D->SetLineWidth(2);
pline3D->SetPoint(0, 0,0,0);
pline3D->SetPoint(1, 1200,800,1000);
pline3D->Draw();
}