Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
tessellatedNav.C File Reference

Detailed Description

Macro allowing to vizualize tessellations from Wavefront's .obj format.

#include <TROOT.h>
#include <TColor.h>
#include <TDatime.h>
#include <TRandom3.h>
#include <TGeoManager.h>
#include <TView.h>
//______________________________________________________________________________
int randomColor()
{
gRandom = new TRandom3();
TDatime dt;
TColor *color = new TColor(ci, gRandom->Rndm(), gRandom->Rndm(), gRandom->Rndm());
return ci;
}
//______________________________________________________________________________
void tessellatedNav(const char *dot_obj_file = "", bool check = false)
{
// Input a file in .obj format (https://en.wikipedia.org/wiki/Wavefront_.obj_file)
// The file should have a single object inside, only vertex and faces information is used
TString name = dot_obj_file;
TString sfile = dot_obj_file;
if (sfile.IsNull()) {
sfile = gROOT->GetTutorialsDir();
sfile += "/geom/teddy.obj";
}
name.ReplaceAll(".obj", "");
gROOT->GetListOfCanvases()->Delete();
delete gGeoManager;
auto geom = new TGeoManager(name, "Imported from .obj file");
TGeoMaterial *mat = new TGeoMaterial("Al", 26.98, 13, 2.7);
TGeoMedium *med = new TGeoMedium("MED", 1, mat);
TGeoVolume *top = geom->MakeBox("TOP", med, 10, 10, 10);
geom->SetTopVolume(top);
auto tsl = TGeoTessellated::ImportFromObjFormat(sfile.Data(), check);
if (!tsl)
return;
tsl->ResizeCenter(5.);
TGeoVolume *vol = new TGeoVolume(name, tsl, med);
vol->SetLineColor(randomColor());
vol->SetLineWidth(2);
top->AddNode(vol, 1);
geom->CloseGeometry();
// Convert to VecGeom tessellated solid
auto converter = TVirtualGeoConverter::Instance(geom);
if (!converter) {
printf("Raytracing a tessellated shape without VecGeom support will just draw a box\n");
} else {
converter->ConvertGeometry();
}
if (gROOT->IsBatch())
return;
// Set the view
top->Draw();
TView *view = gPad->GetView();
if (!view)
return;
view->Top();
// Raytracing will call VecGeom navigation
top->Raytrace();
}
char name[80]
Definition TGX11.cxx:110
R__EXTERN TGeoManager * gGeoManager
#define gROOT
Definition TROOT.h:406
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
#define gPad
The color creation and management class.
Definition TColor.h:21
static Int_t GetFreeColorIndex()
Static function: Returns a free color index which can be used to define a user custom color.
Definition TColor.cxx:2268
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition TDatime.h:37
Int_t GetTime() const
Return time in form of 123623 (i.e. 12:36:23)
Definition TDatime.cxx:259
The manager class for any TGeo geometry.
Definition TGeoManager.h:44
Base class describing materials.
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition TGeoMedium.h:23
static TGeoTessellated * ImportFromObjFormat(const char *objfile, bool check=false, bool verbose=false)
Reader from .obj format.
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43
void SetLineWidth(Width_t lwidth) override
Set the line width.
void Raytrace(Bool_t flag=kTRUE)
Draw this volume with current settings and perform raytracing in the pad.
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
void Draw(Option_t *option="") override
draw top volume according to option
void SetLineColor(Color_t lcolor) override
Set the line color.
Random number generator class based on M.
Definition TRandom3.h:27
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
Definition TRandom.cxx:615
Double_t Rndm() override
Machine independent random number generator.
Definition TRandom.cxx:559
Basic string class.
Definition TString.h:139
const char * Data() const
Definition TString.h:376
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition TString.h:704
Bool_t IsNull() const
Definition TString.h:414
See TView3D.
Definition TView.h:25
virtual void Top()=0
static TVirtualGeoConverter * Instance(TGeoManager *geom=nullptr)
Static function returning a pointer to the current geometry converter.
Author
Andrei Gheata

Definition in file tessellatedNav.C.