File indexing completed on 2024-04-06 12:11:31
0001 #ifndef Fireworks_Core_FWGeoTopNode_h
0002 #define Fireworks_Core_FWGeoTopNode_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #ifndef __CINT__
0022 #include "Fireworks/Core/interface/FWGeometryTableManagerBase.h"
0023 #endif
0024 #include "TEveElement.h"
0025 #include "TAttBBox.h"
0026 #include "TGLUtil.h"
0027 #include <set>
0028
0029 class TGeoHMatrix;
0030 class TGLPhysicalShape;
0031 class TGLSelectRecord;
0032 class TGLViewer;
0033
0034 class FWGeometryTableView;
0035 class FWOverlapTableView;
0036 class TBuffer3D;
0037 class TGeoNode;
0038 class FWGeoTopNodeGLScene;
0039 class FWPopupMenu;
0040
0041 class FWGeoTopNode : public TEveElementList, public TAttBBox {
0042 friend class FWGeoTopNodeGL;
0043
0044 public:
0045 enum MenuOptions {
0046 kSetTopNode,
0047 kSetTopNodeCam,
0048 kVisSelfOff,
0049 kVisChldOn,
0050 kVisChldOff,
0051 kApplyChldCol,
0052 kApplyChldColRec,
0053 kCamera,
0054 kPrintMaterial,
0055 kPrintPath,
0056 kPrintShape,
0057 kPrintOverlap,
0058 kOverlapVisibilityMotherOn,
0059 kOverlapVisibilityMotherOff
0060 };
0061
0062 FWGeoTopNode(const char* n = "FWGeoTopNode", const char* t = "FWGeoTopNode") {}
0063 ~FWGeoTopNode() override {}
0064
0065 void Paint(Option_t* option = "") override;
0066 FWGeoTopNodeGLScene* m_scene;
0067
0068 virtual FWGeometryTableManagerBase* tableManager() { return nullptr; }
0069 virtual FWGeometryTableViewBase* browser() { return nullptr; }
0070
0071 std::set<TGLPhysicalShape*> fHted;
0072 std::set<TGLPhysicalShape*> fSted;
0073
0074 int getFirstSelectedTableIndex();
0075 bool selectPhysicalFromTable(int);
0076 void clearSelection() {
0077 fHted.clear();
0078 fSted.clear();
0079 }
0080
0081 void printSelected();
0082 virtual void popupMenu(int x, int y, TGLViewer*) {}
0083
0084 void UnSelected() override;
0085 void UnHighlighted() override;
0086
0087 static TGLVector3 s_pickedCamera3DCenter;
0088 static TGLViewer* s_pickedViewer;
0089
0090 protected:
0091 static UInt_t phyID(int tableIdx);
0092 static int tableIdx(TGLPhysicalShape* ps);
0093
0094 void ProcessSelection(TGLSelectRecord& rec, std::set<TGLPhysicalShape*>& sset, TGLPhysicalShape* id);
0095
0096 void EraseFromSet(std::set<TGLPhysicalShape*>& sset, TGLPhysicalShape* id);
0097 void ClearSet(std::set<TGLPhysicalShape*>& sset);
0098
0099 void SetStateOf(TGLPhysicalShape* id);
0100
0101 void setupBuffMtx(TBuffer3D& buff, const TGeoHMatrix& mat);
0102
0103 FWPopupMenu* setPopupMenu(int iX, int iY, TGLViewer* v, bool);
0104
0105 void paintShape(Int_t idx, const TGeoHMatrix& nm, bool volumeColor, bool parentNode);
0106 void ComputeBBox() override;
0107
0108 private:
0109 FWGeoTopNode(const FWGeoTopNode&);
0110 const FWGeoTopNode& operator=(const FWGeoTopNode&);
0111 #ifndef __CINT__
0112 UChar_t wrapTransparency(FWGeometryTableManagerBase::NodeInfo& data, bool leafNode);
0113 #endif
0114
0115 ClassDefOverride(FWGeoTopNode, 0);
0116 };
0117
0118 #endif