13 #ifndef ROOT_TGLPhysicalShape
14 #define ROOT_TGLPhysicalShape
25 class TGLLogicalShape;
31 class TGLPhysicalShape
33 friend class TGLLogicalShape;
36 TGLPhysicalShape(
const TGLPhysicalShape&);
37 TGLPhysicalShape& operator=(
const TGLPhysicalShape&);
41 enum EManip { kTranslateX = 1 << 0,
44 kTranslateAll = kTranslateX | kTranslateY | kTranslateZ,
48 kScaleAll = kScaleX | kScaleY | kScaleZ,
52 kRotateAll = kRotateX | kRotateY | kRotateZ,
53 kManipAll = kTranslateAll | kScaleAll | kRotateAll
57 const TGLLogicalShape * fLogicalShape;
58 TGLPhysicalShape* fNextPhysical;
59 TGLPShapeRef * fFirstPSRef;
63 TGLBoundingBox fBoundingBox;
69 Bool_t fIsScaleForRnr;
72 void UpdateBoundingBox();
73 void InitColor(
const Float_t rgba[4]);
76 TGLPhysicalShape(UInt_t ID,
const TGLLogicalShape & logicalShape,
77 const TGLMatrix & transform, Bool_t invertedWind,
78 const Float_t rgba[4]);
79 TGLPhysicalShape(UInt_t ID,
const TGLLogicalShape & logicalShape,
80 const double * transform, Bool_t invertedWind,
81 const Float_t rgba[4]);
82 virtual ~TGLPhysicalShape();
84 void AddReference (TGLPShapeRef* ref);
85 void RemoveReference(TGLPShapeRef* ref);
87 UInt_t ID()
const {
return fID; }
88 const TGLBoundingBox & BoundingBox()
const {
return fBoundingBox; }
90 virtual void CalculateShapeLOD(TGLRnrCtx & rnrCtx, Float_t& pixSize, Short_t& shapeLOD)
const;
91 virtual void QuantizeShapeLOD (Short_t shapeLOD, Short_t combiLOD, Short_t& quantLOD)
const;
93 void SetupGLColors(TGLRnrCtx & rnrCtx,
const Float_t* color=0)
const;
94 virtual void Draw(TGLRnrCtx & rnrCtx)
const;
96 const TGLLogicalShape * GetLogical()
const {
return fLogicalShape; }
97 const TGLPhysicalShape * GetNextPhysical()
const {
return fNextPhysical; }
100 EManip GetManip()
const {
return fManip; }
101 void SetManip(EManip manip) { fManip = manip; }
105 Bool_t IsModified()
const {
return fModified; }
108 Bool_t IsSelected()
const {
return fSelected != 0; }
109 UChar_t GetSelected()
const {
return fSelected; }
110 void Select(UChar_t select) { fSelected = select; }
113 const Float_t * Color()
const {
return fColor; }
114 Bool_t IsTransparent()
const {
return fColor[3] < 1.f; }
115 Bool_t IsInvisible()
const {
return fColor[3] == 0.f; }
116 void SetColor(
const Float_t rgba[17]);
117 void SetColorOnFamily(
const Float_t rgba[17]);
118 void SetDiffuseColor(
const Float_t rgba[4]);
119 void SetDiffuseColor(
const UChar_t rgba[4]);
120 void SetDiffuseColor(Color_t ci, UChar_t transparency);
123 TGLVector3 GetScale()
const;
124 TGLVertex3 GetTranslation()
const;
126 void SetTransform(
const TGLMatrix & transform);
127 void SetTransform(
const Double_t vals[16]);
128 void SetTranslation(
const TGLVertex3 & translation);
129 void Translate(
const TGLVector3 & vect);
130 void Scale(
const TGLVector3 & scale);
131 void Rotate(
const TGLVertex3 & pivot,
const TGLVector3 & axis, Double_t angle);
134 void InvokeContextMenu(TContextMenu & menu, UInt_t x, UInt_t y)
const;
136 ClassDef(TGLPhysicalShape,0)
141 inline TGLVector3 TGLPhysicalShape::GetScale()
const
143 return fTransform.GetScale();
147 inline TGLVertex3 TGLPhysicalShape::GetTranslation()
const
149 return fTransform.GetTranslation();
153 inline void TGLPhysicalShape::SetTransform(
const TGLMatrix & transform)
155 fTransform = transform;
161 inline void TGLPhysicalShape::SetTransform(
const Double_t vals[16])
163 fTransform.Set(vals);
169 inline void TGLPhysicalShape::SetTranslation(
const TGLVertex3 & translation)
171 fTransform.SetTranslation(translation);
177 inline void TGLPhysicalShape::Translate(
const TGLVector3 & vect)
179 fTransform.Translate(vect);
185 inline void TGLPhysicalShape::Scale(
const TGLVector3 & scale)
187 TGLVertex3 origCenter = fBoundingBox.Center();
188 fTransform.Scale(scale);
190 TGLVector3 shift = fBoundingBox.Center() - origCenter;
197 inline void TGLPhysicalShape::Rotate(
const TGLVertex3 & pivot,
const TGLVector3 & axis, Double_t angle)
199 TGLVertex3 c = BoundingBox().Center();
200 fTransform.Rotate(pivot, axis, angle);
205 #endif // ROOT_TGLPhysicalShape