00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <boost/bind.hpp>
00015
00016
00017 #include "TGLPerspectiveCamera.h"
00018 #include "TGLViewer.h"
00019 #include "TGLScenePad.h"
00020 #include "TEveScene.h"
00021 #include "TEveViewer.h"
00022
00023 #include "TEveManager.h"
00024 #include "TEveElement.h"
00025
00026 #include "TEveText.h"
00027 #include "TGLFontManager.h"
00028
00029 #include "TEveTrans.h"
00030 #include "TGeoTube.h"
00031 #include "TEveGeoNode.h"
00032 #include "TEveStraightLineSet.h"
00033
00034
00035 #include "Fireworks/Core/interface/FWGlimpseView.h"
00036 #include "Fireworks/Core/interface/BuilderUtils.h"
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 FWGlimpseView::FWGlimpseView(TEveWindowSlot* iParent, FWViewType::EType typeId) :
00051 FWEveView(iParent, typeId),
00052 m_cylinder(0),
00053 m_showAxes(this, "Show Axes", true ),
00054 m_showCylinder(this, "Show Cylinder", true)
00055 {
00056 createAxis();
00057
00058
00059 TEveScene* wns = gEve->SpawnNewScene(Form("Wireframe Scene %s", typeName().c_str()));
00060 viewer()->AddScene(wns);
00061 TGLScene* gls = wns->GetGLScene();
00062 gls->SetStyle(TGLRnrCtx::kWireFrame);
00063 gls->SetLOD(TGLRnrCtx::kLODMed);
00064 gls->SetSelectable(kFALSE);
00065
00066 TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur());
00067 TGeoTube* tube = new TGeoTube(129,130,310);
00068 m_cylinder = fireworks::getShape("Detector outline", tube, kWhite);
00069 m_cylinder->SetPickable(kFALSE);
00070 m_cylinder->SetMainColor(kGray+3);
00071 wns->AddElement(m_cylinder);
00072
00073 TGLViewer* ev = viewerGL();
00074 ev->SetCurrentCamera(TGLViewer::kCameraPerspXOZ);
00075 m_showAxes.changed_.connect(boost::bind(&FWGlimpseView::showAxes,this));
00076 m_showCylinder.changed_.connect(boost::bind(&FWGlimpseView::showCylinder,this));
00077 }
00078
00079 FWGlimpseView::~FWGlimpseView()
00080 {
00081 }
00082
00083
00084
00085
00086
00087
00088 void
00089 FWGlimpseView::createAxis()
00090 {
00091
00092 TEveElementList* axisHolder = new TEveElementList("GlimpseAxisHolder");
00093
00094 TGLFont::EMode fontMode = TGLFont::kPixmap;
00095 Int_t fs = 14;
00096 Color_t fcol = kGray+1;
00097
00098
00099 TEveStraightLineSet* xAxis = new TEveStraightLineSet( "GlimpseXAxis" );
00100 xAxis->SetPickable(kTRUE);
00101 xAxis->SetTitle("Energy Scale, 100 GeV, X-axis (LHC center)");
00102 xAxis->SetLineStyle(3);
00103 xAxis->SetLineColor(fcol);
00104 xAxis->AddLine(-100,0,0,100,0,0);
00105 axisHolder->AddElement(xAxis);
00106
00107 TEveText* xTxt = new TEveText( "X+" );
00108 xTxt->PtrMainTrans()->SetPos(100-fs, -fs, 0);
00109 xTxt->SetFontMode(fontMode);
00110 xTxt->SetMainColor(fcol);
00111 axisHolder->AddElement(xTxt);
00112
00113
00114 TEveStraightLineSet* yAxis = new TEveStraightLineSet( "GlimpseYAxis" );
00115 yAxis->SetPickable(kTRUE);
00116 yAxis->SetTitle("Energy Scale, 100 GeV, Y-axis (upward)");
00117 yAxis->SetLineColor(fcol);
00118 yAxis->SetLineStyle(3);
00119 yAxis->AddLine(0,-100,0,0,100,0);
00120 axisHolder->AddElement(yAxis);
00121
00122 TEveText* yTxt = new TEveText( "Y+" );
00123 yTxt->PtrMainTrans()->SetPos(0, 100-fs, 0);
00124 yTxt->SetFontMode(fontMode);
00125 yTxt->SetMainColor(fcol);
00126 axisHolder->AddElement(yTxt);
00127
00128
00129 TEveStraightLineSet* zAxis = new TEveStraightLineSet( "GlimpseZAxis" );
00130 zAxis->SetPickable(kTRUE);
00131 zAxis->SetTitle("Energy Scale, 100 GeV, Z-axis (west, along beam)");
00132 zAxis->SetLineColor(fcol);
00133 zAxis->AddLine(0,0,-100,0,0,100);
00134 axisHolder->AddElement(zAxis);
00135
00136 TEveText* zTxt = new TEveText( "Z+" );
00137 zTxt->PtrMainTrans()->SetPos(0, -fs, 100 - zTxt->GetExtrude()*2);
00138 zTxt->SetFontMode(fontMode);
00139 zTxt->SetMainColor(fcol);
00140 axisHolder->AddElement(zTxt);
00141
00142 geoScene()->AddElement(axisHolder);
00143 }
00144
00145
00146 void
00147 FWGlimpseView::showAxes( )
00148 {
00149 if ( m_showAxes.value() )
00150 viewerGL()->SetGuideState(TGLUtil::kAxesOrigin, kTRUE, kFALSE, 0);
00151 else
00152 viewerGL()->SetGuideState(TGLUtil::kAxesNone, kTRUE, kFALSE, 0);
00153 }
00154
00155
00156 void
00157 FWGlimpseView::showCylinder( )
00158 {
00159 if ( m_showCylinder.value() )
00160 m_cylinder->SetRnrState(kTRUE);
00161 else
00162 m_cylinder->SetRnrState(kFALSE);
00163
00164 gEve->Redraw3D();
00165 }
00166
00167
00168 void
00169 FWGlimpseView::addTo(FWConfiguration& iTo) const
00170 {
00171 FWEveView::addTo(iTo);
00172 TGLPerspectiveCamera* camera = dynamic_cast<TGLPerspectiveCamera*>(&(viewerGL()->CurrentCamera()));
00173 if (camera)
00174 addToPerspectiveCamera(camera, typeName(), iTo);
00175 }
00176
00177 void
00178 FWGlimpseView::setFrom(const FWConfiguration& iFrom)
00179 {
00180 FWEveView::setFrom(iFrom);
00181 TGLPerspectiveCamera* camera = dynamic_cast<TGLPerspectiveCamera*>(&(viewerGL()->CurrentCamera()));
00182 if (camera)
00183 setFromPerspectiveCamera(camera, typeName(), iFrom);
00184 }
00185