// This section is is essentially a part of the quad_test.C tutorial by Matevz Tadel. // Only meant to draw something. Please scroll down to quadtest2() for problems. #include "TApplication.h" #include "TEveQuadSet.h" #include "TEveManager.h" #include "TGeoMatrix.h" #include "TEveTrans.h" #include "TMath.h" #include "TRandom.h" #include "TStyle.h" #include "TSystem.h" #include "TGLViewer.h" TEveQuadSet* quad_test(Float_t x=0, Float_t y=0, Float_t z=0, Int_t num=100, Bool_t Register=kTRUE) { TEveManager::Create(); TRandom r(0); gStyle->SetPalette(1, 0); TEveRGBAPalette *pal = new TEveRGBAPalette(0, 130); TEveFrameBox *box = new TEveFrameBox(); box->SetAAQuadXY(-10, -10, 0, 20, 20); box->SetFrameColor(kGray); TEveQuadSet* q = new TEveQuadSet("RectangleXY"); q->SetOwnIds(kTRUE); q->SetPalette(pal); q->SetFrame(box); q->Reset(TEveQuadSet::kQT_RectangleXY, kFALSE, 32); for (Int_t i=0; iAddQuad(r.Uniform(-10, 9), r.Uniform(-10, 9), 0, r.Uniform(0.2, 1), r.Uniform(0.2, 1)); q->QuadValue(r.Uniform(0, 130)); q->QuadId(new TNamed(Form("QuadIdx %d", i), "TNamed assigned to a quad as an indentifier.")); } q->RefitPlex(); TEveTrans& t = q->RefMainTrans(); //t.RotateLF(1, 3, 0.5*TMath::Pi()); //t.SetPos(x, y, z); if (Register) { gEve->AddElement(q); gEve->Redraw3D(kTRUE); } Info("quad_test", "use alt-left-mouse to select individual digits."); return q; } ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// void quadtest2() { TApplication app("app", 0,0); //Make & show a QuadSet: TEveQuadSet* qs = quad_test(); TGLViewer* glv = gEve->GetDefaultGLViewer(); //-->Copied from my TBuffer3D-style code - does not seem to work: double fieldofview = 17; double distancefromcenter = fieldofview; double center[] = {0.,0.,0.}; double hrotate = -30*TMath::DegToRad(); //rotation around horizontal axis double vrotate = 50*TMath::DegToRad(); //rotation around vertical axis glv->ResetCameras(); glv->SetPerspectiveCamera(TGLViewer::kCameraPerspXOZ, fieldofview, distancefromcenter, center, hrotate, vrotate); gEve->Redraw3D(); //<-- gSystem->ProcessEvents(); glv->SavePicture("GLViewer_before_delete.png"); //The effect of the following delete is that the point "RectangleXY" //gets removed from the tree-view (top-left in in the eve window). //But the QuadSet is still in the GL view! How do I force a removal of all //deleted objects? delete qs; gEve->Redraw3D(); gSystem->ProcessEvents(); glv->SavePicture("GLViewer_after_delete.png"); app.Run(); }