tank.C: Drawing a fine tank, using ROOT geometry class. | Geometry package | xtruSamples.C: Draw a sample of TXTRU shapes some convex, concave (and possibly malformed) |
void xtruDraw() { // Draw a "representative" TXTRU shape // Canvas saved as xtru.gif can be used for TXTRU THtml output // Author: Robert Hatcher (rhatcher@fnal.gov) 2000.09.06 TCanvas *canvas = new TCanvas("xtru","Example XTRU object",200,10,640,640); // Create a new geometry TGeometry* geometry = new TGeometry("geometry","geometry"); geometry->cd(); TXTRU* atxtru = new TXTRU("atxtru","atxtru","void",5,2); // outline and z segment specifications Float_t x[] = { -177.292, -308.432, -308.432, -305.435, -292.456, -280.01 , -241.91, -241.91, -177.292, -177.292, 177.292, 177.292 , 241.91, 241.91, 280.06, 297.942, 305.435, 308.432 , 308.432, 177.292, 177.292, -177.292 }; Float_t y[] = { 154.711, 23.5712, 1.1938, 1.1938, 8.6868, 8.6868 , -3.7592, -90.0938, -154.711, -190.602, -190.602, -154.711 , -90.0938, -3.7592, 8.6868, 8.6868, 1.1938, 1.1938 , 23.5712, 154.711, 190.602, 190.602 }; Float_t z[] = { 0.00, 500.0 }; Float_t scale[] = { 1.00, 1.00 }; Float_t x0[] = { 0, 0 }; Float_t y0[] = { 0, 0 }; Int_t i; Int_t nxy = sizeof(x)/sizeof(Float_t); for (i=0; i<nxy; i++) { atxtru->DefineVertex(i,x[i],y[i]); } Int_t nz = sizeof(z)/sizeof(Float_t); for (i=0; i<nz; i++) { atxtru->DefineSection(i,z[i],scale[i],x0[i],y0[i]); } // Define a TNode where this example resides in the TGeometry // Draw the TGeometry TNode* anode = new TNode("anode","anode",atxtru); anode->SetLineColor(1); geometry->Draw(); // Tweak the pad scales so as not to distort the shape 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; // Find the boxed center for (i=0;i<3; i++) center[i] = 0.5*(max[i]+min[i]); Double_t maxSide = 0; // Find the largest side for (i=0;i<3; i++) maxSide = TMath::Max(maxSide,max[i]-center[i]); file://Adjust scales: for (i=0;i<3; i++) { max[i] = center[i] + maxSide; min[i] = center[i] - maxSide; } view->SetRange(min,max); Int_t ireply; thisPad->Modified(); thisPad->Update(); } } xtruDraw.C:1 xtruDraw.C:2 xtruDraw.C:3 xtruDraw.C:4 xtruDraw.C:5 xtruDraw.C:6 xtruDraw.C:7 xtruDraw.C:8 xtruDraw.C:9 xtruDraw.C:10 xtruDraw.C:11 xtruDraw.C:12 xtruDraw.C:13 xtruDraw.C:14 xtruDraw.C:15 xtruDraw.C:16 xtruDraw.C:17 xtruDraw.C:18 xtruDraw.C:19 xtruDraw.C:20 xtruDraw.C:21 xtruDraw.C:22 xtruDraw.C:23 xtruDraw.C:24 xtruDraw.C:25 xtruDraw.C:26 xtruDraw.C:27 xtruDraw.C:28 xtruDraw.C:29 xtruDraw.C:30 xtruDraw.C:31 xtruDraw.C:32 xtruDraw.C:33 xtruDraw.C:34 xtruDraw.C:35 xtruDraw.C:36 xtruDraw.C:37 xtruDraw.C:38 xtruDraw.C:39 xtruDraw.C:40 xtruDraw.C:41 xtruDraw.C:42 xtruDraw.C:43 xtruDraw.C:44 xtruDraw.C:45 xtruDraw.C:46 xtruDraw.C:47 xtruDraw.C:48 xtruDraw.C:49 xtruDraw.C:50 xtruDraw.C:51 xtruDraw.C:52 xtruDraw.C:53 xtruDraw.C:54 xtruDraw.C:55 xtruDraw.C:56 xtruDraw.C:57 xtruDraw.C:58 xtruDraw.C:59 xtruDraw.C:60 xtruDraw.C:61 xtruDraw.C:62 xtruDraw.C:63 xtruDraw.C:64 xtruDraw.C:65 xtruDraw.C:66 xtruDraw.C:67 xtruDraw.C:68 xtruDraw.C:69 xtruDraw.C:70 xtruDraw.C:71 xtruDraw.C:72 xtruDraw.C:73 xtruDraw.C:74 xtruDraw.C:75 xtruDraw.C:76 xtruDraw.C:77 xtruDraw.C:78 xtruDraw.C:79 xtruDraw.C:80 xtruDraw.C:81 |
|