File indexing completed on 2025-01-30 10:22:28
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_REveDigitSet
0013 #define ROOT_REveDigitSet
0014
0015 #include "TNamed.h"
0016 #include "TAtt3D.h"
0017 #include "TAttBBox.h"
0018
0019 #include "ROOT/REveUtil.hxx"
0020 #include "ROOT/REveElement.hxx"
0021 #include "ROOT/REveFrameBox.hxx"
0022 #include "ROOT/REveRGBAPalette.hxx"
0023 #include "ROOT/REveChunkManager.hxx"
0024 #include "ROOT/REveSecondarySelectable.hxx"
0025
0026 class TRefArray;
0027
0028 namespace ROOT {
0029 namespace Experimental {
0030
0031 class REveDigitSet : public REveElement,
0032 public TAtt3D,
0033 public TAttBBox,
0034 public REveSecondarySelectable
0035 {
0036 friend class REveDigitSetEditor;
0037 friend class REveDigitSetGL;
0038
0039 REveDigitSet(const REveDigitSet&);
0040 REveDigitSet& operator=(const REveDigitSet&);
0041
0042 public:
0043 enum ERenderMode_e { kRM_AsIs, kRM_Line, kRM_Fill };
0044
0045 typedef void (*Callback_foo)(const REveDigitSet*, Int_t, TObject*);
0046 typedef std::string (*TooltipCB_foo)(const REveDigitSet*, Int_t);
0047
0048 struct DigitBase_t
0049 {
0050
0051
0052 Int_t fValue;
0053 void *fUserData{nullptr};
0054
0055 DigitBase_t(Int_t v=0) : fValue(v), fUserData(nullptr) {}
0056 };
0057
0058 protected:
0059 TRefArray *fDigitIds{nullptr};
0060
0061 Int_t fDefaultValue;
0062 Bool_t fValueIsColor{false};
0063 Bool_t fSingleColor;
0064 Bool_t fAntiFlick;
0065
0066 Bool_t fOwnIds{false};
0067 Bool_t fDetIdsAsSecondaryIndices;
0068 REveChunkManager fPlex;
0069 DigitBase_t* fLastDigit;
0070 Int_t fLastIdx;
0071
0072 Color_t fColor;
0073 REveFrameBox* fFrame;
0074 REveRGBAPalette* fPalette;
0075 ERenderMode_e fRenderMode;
0076 Bool_t fSelectViaFrame;
0077 Bool_t fHighlightFrame;
0078 Bool_t fDisableLighting;
0079 Bool_t fHistoButtons;
0080
0081 Bool_t fEmitSignals;
0082 Callback_foo fCallbackFoo;
0083 TooltipCB_foo fTooltipCBFoo;
0084
0085 DigitBase_t* NewDigit();
0086 void ReleaseIds();
0087
0088 public:
0089 REveDigitSet(const char* n="REveDigitSet", const char* t="");
0090 ~REveDigitSet() override;
0091
0092 void UseSingleColor();
0093
0094 Bool_t GetAntiFlick() const { return fAntiFlick; }
0095 void SetAntiFlick(Bool_t f) { fAntiFlick = f; }
0096
0097 void SetMainColor(Color_t color) override;
0098
0099
0100
0101
0102
0103 using REveElement::GetHighlightTooltip;
0104 std::string GetHighlightTooltip(const std::set<int>& secondary_idcs) const override;
0105
0106
0107
0108
0109 void RefitPlex();
0110 void ScanMinMaxValues(Int_t& min, Int_t& max);
0111
0112
0113
0114 void SetCurrentDigit(Int_t idx);
0115
0116 void DigitValue(Int_t value);
0117 void DigitColor(Color_t ci);
0118 void DigitColor(Color_t ci, Char_t transparency);
0119 void DigitColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
0120 void DigitColor(UChar_t* rgba);
0121
0122 void DigitId(TObject* id);
0123 void DigitId(Int_t n, TObject* id);
0124
0125 Bool_t GetDetIdsAsSecondaryIndices() const { return fDetIdsAsSecondaryIndices; }
0126 void SetDetIdsAsSecondaryIndices(Bool_t o) { fDetIdsAsSecondaryIndices = o; }
0127
0128 DigitBase_t* GetDigit(Int_t n) const { return (DigitBase_t*) fPlex.Atom(n); }
0129 TObject* GetId(Int_t n) const;
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143 REveChunkManager* GetPlex() { return &fPlex; }
0144
0145 REveFrameBox* GetFrame() const { return fFrame; }
0146 void SetFrame(REveFrameBox* b);
0147
0148 Bool_t GetSelectViaFrame() const { return fSelectViaFrame; }
0149 void SetSelectViaFrame(Bool_t sf) { fSelectViaFrame = sf; }
0150
0151 Bool_t GetHighlightFrame() const { return fHighlightFrame; }
0152 void SetHighlightFrame(Bool_t hf) { fHighlightFrame = hf; }
0153
0154 Bool_t GetValueIsColor() const { return fValueIsColor; }
0155
0156 REveRGBAPalette* GetPalette() const { return fPalette; }
0157 void SetPalette(REveRGBAPalette* p);
0158 REveRGBAPalette* AssertPalette();
0159
0160 ERenderMode_e GetRenderMode() const { return fRenderMode; }
0161 void SetRenderMode(ERenderMode_e rm) { fRenderMode = rm; }
0162
0163 Bool_t GetDisableLighting() const { return fDisableLighting; }
0164 void SetDisableLighting(Bool_t l) { fDisableLighting = l; }
0165
0166 Bool_t GetHistoButtons() const { return fHistoButtons; }
0167 void SetHistoButtons(Bool_t f) { fHistoButtons = f; }
0168
0169 Bool_t GetEmitSignals() const { return fEmitSignals; }
0170 void SetEmitSignals(Bool_t f) { fEmitSignals = f; }
0171
0172 Callback_foo GetCallbackFoo() const { return fCallbackFoo; }
0173 void SetCallbackFoo(Callback_foo f) { fCallbackFoo = f; }
0174
0175 TooltipCB_foo GetTooltipCBFoo() const { return fTooltipCBFoo; }
0176 void SetTooltipCBFoo(TooltipCB_foo f) { fTooltipCBFoo = f; }
0177
0178 bool IsDigitVisible(const DigitBase_t*) const;
0179 int GetAtomIdxFromShapeIdx(int) const;
0180 int GetShapeIdxFromAtomIdx(int) const;
0181
0182 void NewShapePicked(int shapeId, Int_t selectionId, bool multi);
0183
0184
0185 bool RequiresExtraSelectionData() const override { return GetAlwaysSecSelect(); };
0186 void FillExtraSelectionData(nlohmann::json& j, const std::set<int>& secondary_idcs) const override;
0187
0188 Int_t WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) override;
0189 };
0190
0191 }
0192 }
0193 #endif