CMS 3D CMS Logo

FWViewContextMenuHandlerGL.cc
Go to the documentation of this file.
2 
3 #include "TClass.h"
4 #include "TEveViewer.h"
5 #include "TGLViewer.h"
6 #include "TGLAnnotation.h"
7 #include "TGLWidget.h"
8 #include "TEveVector.h"
9 
13 
19 
21 
23  adder.addEntry("Add Annotation", kAnnotate);
25  const char* p = id.item()->purpose().c_str();
26  bool enabled = (strstr(p, "Beam Spot") || strstr(p, "Vertices"));
27  adder.addEntry("Use As Projection Origin", kCameraCenter, enabled);
28  adder.addEntry("Reset Projection Origin", kResetCameraCenter, enabled);
29  } else {
30  adder.addEntry("Set Camera Center", kCameraCenter);
31  adder.addEntry("Reset Camera Center", kResetCameraCenter);
32  }
33 }
34 
35 void FWViewContextMenuHandlerGL::select(int iEntryIndex, const FWModelId& id, int iX, int iY) {
36  TGLViewer* v = m_view->viewerGL();
37 
38  Window_t wdummy;
39  Int_t x, y;
40  gVirtualX->TranslateCoordinates(gClient->GetDefaultRoot()->GetId(), v->GetGLWidget()->GetId(), iX, iY, x, y, wdummy);
41 
42  TGLVector3 pnt(x, y, 0.5 * v->GetSelRec().GetMinZ());
43  v->CurrentCamera().WindowToViewport(pnt);
44  pnt = v->CurrentCamera().ViewportToWorld(pnt);
45 
46  switch (iEntryIndex) {
47  case kAnnotate: {
48  TGFrame* f = v->GetGLWidget();
49  gVirtualX->TranslateCoordinates(gClient->GetDefaultRoot()->GetId(), f->GetId(), iX, iY, x, y, wdummy);
50 
51  std::string name = id.item()->modelName(id.index());
52  if (id.item()->haveInterestingValue())
53  name += ", " + id.item()->modelInterestingValueAsString(id.index());
54 
55  TGLAnnotation* an =
56  new TGLAnnotation(v, name.c_str(), x * 1.f / f->GetWidth(), 1 - y * 1.f / f->GetHeight(), pnt);
57  an->SetUseColorSet(true);
58  an->SetTextSize(0.03);
59  break;
60  }
61  case kCameraCenter: {
63  FWModelId mId = *(m_view->context().selectionManager()->selected().begin());
64  const FWItemValueGetter& valueGetter = mId.item()->valueGetter();
65  TEveVector center;
66  center.fX = valueGetter.valueFor(mId.item()->modelData(mId.index()), 0);
67  center.fY = valueGetter.valueFor(mId.item()->modelData(mId.index()), 1);
68  center.fZ = valueGetter.valueFor(mId.item()->modelData(mId.index()), 2);
69 
70  FWRPZView* pv = static_cast<FWRPZView*>(m_view);
71  pv->shiftOrigin(center);
72  } else {
73  v->CurrentCamera().SetExternalCenter(true);
74  v->CurrentCamera().SetCenterVec(pnt.X(), pnt.Y(), pnt.Z());
75  v->SetDrawCameraCenter(true);
76  }
77  break;
78  }
79  case kResetCameraCenter: {
81  FWRPZView* pv = static_cast<FWRPZView*>(m_view);
82  pv->resetOrigin();
83  }
84 
85  v->CurrentCamera().SetExternalCenter(false);
86  v->SetDrawCameraCenter(false);
87  break;
88  }
89  }
90 }
const std::set< FWModelId > & selected() const
const FWItemValueGetter & valueGetter() const
one value from the model which is normally used for the popup
Definition: FWEventItem.h:112
void select(int iEntryIndex, const FWModelId &id, int iX, int iY) override
TGLViewer * viewerGL() const
Definition: FWEveView.cc:177
void resetOrigin()
Definition: FWRPZView.cc:235
static bool isProjected(int)
Definition: FWViewType.cc:100
int index() const
Definition: FWModelId.h:41
void init(FWViewContextMenuHandlerBase::MenuEntryAdder &, const FWModelId &id) override
Called when have to add entries to the context menu.
def pv(vc)
Definition: MetAnalyzer.py:7
double f[11][100]
FWSelectionManager * selectionManager() const
Definition: Context.h:54
void shiftOrigin(TEveVector &center)
Definition: FWRPZView.cc:219
const fireworks::Context & context()
Definition: FWEveView.h:64
double valueFor(const void *, int idx) const
int addEntry(const char *iEntryName, int idx, bool enable=true)
const void * modelData(int iIndex) const
Definition: FWEventItem.cc:466
const FWEventItem * item() const
Definition: FWModelId.h:39
FWViewType::EType typeId() const
Definition: FWViewBase.h:42