void xtruSamples()
{
Bool_t makecw = kFALSE;
Bool_t reversez = kFALSE;
Bool_t domalformed = kFALSE;
c1 = new TCanvas("c1","sample TXTRU Shapes",200,10,640,640);
TGeometry* geom = new TGeometry("sample","sample");
geom->cd();
Float_t zseg = 6;
Int_t extravis = 0;
Float_t unit = 1;
Float_t bigdim = 12.5*unit;
TBRIK* world = new TBRIK("world","world","void",bigdim,bigdim,bigdim);
TNode* worldnode = new TNode("worldnode","world node",world);
worldnode->SetVisibility(0);
worldnode->cd();
Float_t x[] = { -0.50, -1.20, 1.20, 0.50, 0.50, 1.20, -1.20, -0.50 };
Float_t y[] = { -0.75, -2.00, -2.00, -0.75, 0.75, 2.00, 2.00, 0.75 };
Float_t z[] = { -0.50, -1.50, -1.50, 1.50, 1.50, 0.50 };
Float_t s[] = { 0.50, 1.00, 1.50, 1.50, 1.00, 0.50 };
Int_t nxy = sizeof(x)/sizeof(Float_t);
Float_t convexscale[] = { 7.0, -1.0, 1.5 };
Int_t icolor[] = { 1, 2, 3, 2, 2, 2, 4, 2, 6 };
for (Int_t zcase = 0; zcase<3; zcase++) {
if (zcase == 1 && !domalformed) continue;
for (Int_t xycase = 0; xycase<3; xycase++) {
if (xycase == 1 && !domalformed) continue;
Char_t *name = "txtruXYZ";
sprintf(name,"txtru%1d%1d%1d",xycase,zcase,zseg);
TXTRU* mytxtru = new TXTRU(name,name,"void",8,2);
Int_t i, j;
Float_t xsign = (makecw) ? -1 : 1;
Float_t zsign = (reversez) ? -1 : 1;
for (i=0; i<nxy; i++) {
Float_t xtmp = x[i]*xsign;
Float_t ytmp = y[i];
if (i==0||i==3||i==4||i==7) xtmp *= convexscale[xycase];
if (xycase==2) xtmp *=2;
mytxtru->DefineVertex(i,xtmp,ytmp);
}
for (i=0, j=0; i<zseg; i++) {
Float_t ztmp = z[i]*zsign;
if (i==0||i==5) ztmp *= convexscale[zcase];
if (zcase==2) ztmp *= 2.5;
if (zseg>2 && zcase!=2 && (i==1||i==4)) continue;
mytxtru->DefineSection(j,ztmp,s[i]);
j++;
}
TNode* txtrunode = new TNode(name,name,mytxtru);
txtrunode->SetLineColor(icolor[3*zcase+xycase]);
Float_t pos_scale = (domalformed) ? 10 : 6;
Float_t xpos = (xycase-1)*pos_scale*unit;
Float_t ypos = (zcase-1)*pos_scale*unit;
txtrunode->SetPosition(xpos,ypos,0.);
}
}
Float_t zhalf = 0.5*bigdim;
Float_t rmax = 0.03*bigdim;
TCONE* zcone = new TCONE("zcone","zcone","void",zhalf,0.,rmax,0.,0.);
zcone->SetVisibility(extravis);
TNode* zconenode = new TNode("zconenode","zconenode",zcone);
zconenode->SetLineColor(3);
Float_t dzstub = 2*rmax;
TBRIK* zbrik = new TBRIK("zbrik","zbrik","void",rmax,rmax,dzstub);
zbrik->SetVisibility(extravis);
TNode* zbriknode = new TNode("zbriknode","zbriknode",zbrik);
zbriknode->SetPosition(0.,0.,zhalf+dzstub);
zbriknode->SetLineColor(3);
geom->Draw();
TVirtualPad *thisPad = gPad;
if (thisPad) {
TView *view = thisPad->GetView();
if (!view) return;
Double_t min[3],max[3],center[3];
view->GetRange(min,max);
int i;
for (i=0;i<3; i++) center[i] = 0.5*(max[i]+min[i]);
Double_t maxSide = 0;
for (i=0;i<3; i++) maxSide = TMath::Max(maxSide,max[i]-center[i]);
file:
for (i=0;i<3; i++) {
max[i] = center[i] + maxSide;
min[i] = center[i] - maxSide;
}
view->SetRange(min,max);
thisPad->Modified();
thisPad->Update();
}
}
|
|