Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
TGLPhysicalShape.h
Go to the documentation of this file.
1// @(#)root/gl:$Id$
2// Author: Richard Maunder 25/05/2005
3// Parts taken from original TGLSceneObject Timur Pocheptsov
4
5/*************************************************************************
6 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
7 * All rights reserved. *
8 * *
9 * For the licensing terms see $ROOTSYS/LICENSE. *
10 * For the list of contributors see $ROOTSYS/README/CREDITS. *
11 *************************************************************************/
12
13#ifndef ROOT_TGLPhysicalShape
14#define ROOT_TGLPhysicalShape
15
16//#ifndef ROOT_TGLLogicalShape
17//#include "TGLLogicalShape.h"
18//#endif
19#include "TGLBoundingBox.h"
20#ifndef ROOT_TGLUtil
21#include "TGLUtil.h" // For TGLMatrix
22#endif
23
24class TGLPShapeRef;
25class TGLLogicalShape;
26class TGLRnrCtx;
27
28class TContextMenu;
29
30
32{
33 friend class TGLLogicalShape; // for replica-list management
34
35private:
38
39public:
40 // Flags for permitted manipulation of object
55private:
56 // Fields
57 const TGLLogicalShape * fLogicalShape; ///<! the associated logical shape
58 TGLPhysicalShape* fNextPhysical; ///<! pointer to next replica
59 TGLPShapeRef * fFirstPSRef; ///<! pointer to first reference
60
61 UInt_t fID; ///<! unique physical ID within containing scene
62 TGLMatrix fTransform; ///<! transform (placement) of physical instance
63 TGLBoundingBox fBoundingBox; ///<! bounding box of the physical (transformed)
64 Float_t fColor[17]; ///<! GL color array
65 EManip fManip; ///<! permitted manipulation bitflags - see EManip
66 UChar_t fSelected; ///<! selected state
67 Bool_t fInvertedWind; ///<! face winding TODO: can get directly from fTransform?
68 Bool_t fModified; ///<! has been modified - retain across scene rebuilds
70
71 // Methods
72 void UpdateBoundingBox();
73 void InitColor(const Float_t rgba[4]);
74
75public:
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_t * transform, Bool_t invertedWind,
81 const Float_t rgba[4]);
82 virtual ~TGLPhysicalShape();
83
84 void AddReference (TGLPShapeRef* ref);
86
87 UInt_t ID() const { return fID; }
88 const TGLBoundingBox & BoundingBox() const { return fBoundingBox; }
89
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;
92
93 void SetupGLColors(TGLRnrCtx & rnrCtx, const Float_t* color = nullptr) const;
94 virtual void Draw(TGLRnrCtx & rnrCtx) const;
95
96 const TGLLogicalShape * GetLogical() const { return fLogicalShape; }
98
99 // Modification and manipulation
100 EManip GetManip() const { return fManip; }
101 void SetManip(EManip manip) { fManip = manip; }
102
103 // Modified - treated as temporary modification
104 void Modified();
105 Bool_t IsModified() const { return fModified; }
106
107 // Selection
108 Bool_t IsSelected() const { return fSelected != 0; }
109 UChar_t GetSelected() const { return fSelected; }
110 void Select(UChar_t select) { fSelected = select; }
111
112 // Color
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);
121
122 // Geometry
123 TGLVector3 GetScale() const;
125
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);
132
133 // Context menu
134 void InvokeContextMenu(TContextMenu & menu, UInt_t x, UInt_t y) const;
135
136 ClassDef(TGLPhysicalShape,0) // a physical (placed, global frame) drawable object
137};
138
139
140//______________________________________________________________________________
142{
143 return fTransform.GetScale();
144}
145
146//______________________________________________________________________________
148{
149 return fTransform.GetTranslation();
150}
151
152//______________________________________________________________________________
153inline void TGLPhysicalShape::SetTransform(const TGLMatrix & transform)
154{
155 fTransform = transform;
157 Modified();
158}
159
160//______________________________________________________________________________
161inline void TGLPhysicalShape::SetTransform(const Double_t vals[16])
162{
163 fTransform.Set(vals);
165 Modified();
166}
167
168//______________________________________________________________________________
169inline void TGLPhysicalShape::SetTranslation(const TGLVertex3 & translation)
170{
171 fTransform.SetTranslation(translation);
173 Modified();
174}
175
176//______________________________________________________________________________
178{
179 fTransform.Translate(vect);
181 Modified();
182}
183
184//______________________________________________________________________________
185inline void TGLPhysicalShape::Scale(const TGLVector3 & scale)
186{
187 TGLVertex3 origCenter = fBoundingBox.Center();
188 fTransform.Scale(scale);
190 TGLVector3 shift = fBoundingBox.Center() - origCenter;
191 Translate(-shift);
193 Modified();
194}
195
196//______________________________________________________________________________
197inline void TGLPhysicalShape::Rotate(const TGLVertex3 & pivot, const TGLVector3 & axis, Double_t angle)
198{
200 fTransform.Rotate(pivot, axis, angle);
202 Modified();
203}
204
205#endif // ROOT_TGLPhysicalShape
#define c(i)
Definition RSha256.hxx:101
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char).
Definition RtypesCore.h:52
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
Definition RtypesCore.h:60
bool Bool_t
Boolean (0=false, 1=true) (bool).
Definition RtypesCore.h:77
short Short_t
Signed Short integer 2 bytes (short).
Definition RtypesCore.h:53
double Double_t
Double 8 bytes.
Definition RtypesCore.h:73
short Color_t
Color number (short).
Definition RtypesCore.h:99
float Float_t
Float 4 bytes (float).
Definition RtypesCore.h:71
#define ClassDef(name, id)
Definition Rtypes.h:344
This class provides an interface to context sensitive popup menus.
Concrete class describing an orientated (free) or axis aligned box of 8 vertices.
TGLVertex3 Center() const
Abstract logical shape - a GL 'drawable' - base for all shapes - faceset sphere etc.
16 component (4x4) transform matrix - column MAJOR as per GL.
Definition TGLUtil.h:598
Base class for references to TGLPysicalShape that need to be notified when the shape is destroyed.
void Modified()
Call this after modifying the physical so that the information can be propagated to the object refere...
void InvokeContextMenu(TContextMenu &menu, UInt_t x, UInt_t y) const
Request creation of context menu on shape, attached to 'menu' at screen position 'x' 'y'.
virtual ~TGLPhysicalShape()
Destroy the physical shape.
void SetupGLColors(TGLRnrCtx &rnrCtx, const Float_t *color=nullptr) const
Setup colors - avoid setting things not required for current draw flags.
TGLPhysicalShape * fNextPhysical
! pointer to next replica
UInt_t ID() const
TGLPhysicalShape & operator=(const TGLPhysicalShape &)=delete
const TGLLogicalShape * fLogicalShape
! the associated logical shape
void Scale(const TGLVector3 &scale)
const Float_t * Color() const
Bool_t fModified
! has been modified - retain across scene rebuilds
const TGLPhysicalShape * GetNextPhysical() const
void SetTransform(const TGLMatrix &transform)
const TGLBoundingBox & BoundingBox() const
Bool_t IsInvisible() const
UChar_t fSelected
! selected state
virtual void QuantizeShapeLOD(Short_t shapeLOD, Short_t combiLOD, Short_t &quantLOD) const
Factor in scene/vierer LOD and Quantize ... forward to logical shape.
void RemoveReference(TGLPShapeRef *ref)
Remove reference ref.
EManip fManip
! permitted manipulation bitflags - see EManip
void Rotate(const TGLVertex3 &pivot, const TGLVector3 &axis, Double_t angle)
void SetManip(EManip manip)
TGLVector3 GetScale() const
const TGLLogicalShape * GetLogical() const
void InitColor(const Float_t rgba[4])
Initialise the colors, using basic RGBA diffuse material color supplied.
void SetColor(const Float_t rgba[17])
Set full color attributes - see OpenGL material documentation for full description.
UInt_t fID
! unique physical ID within containing scene
Bool_t fIsScaleForRnr
! cache
TGLVertex3 GetTranslation() const
void SetColorOnFamily(const Float_t rgba[17])
Set full color attributes to all physicals sharing the same logical with this object.
virtual void CalculateShapeLOD(TGLRnrCtx &rnrCtx, Float_t &pixSize, Short_t &shapeLOD) const
Calculate shape-lod, suitable for use under projection defined by 'rnrCtx', taking account of which l...
Bool_t IsSelected() const
void AddReference(TGLPShapeRef *ref)
Add reference ref.
Bool_t fInvertedWind
! face winding TODO: can get directly from fTransform?
void SetTranslation(const TGLVertex3 &translation)
void SetDiffuseColor(const Float_t rgba[4])
Set color from ROOT color index and transparency [0,100].
TGLPhysicalShape(const TGLPhysicalShape &)=delete
Bool_t IsModified() const
TGLBoundingBox fBoundingBox
! bounding box of the physical (transformed)
TGLMatrix fTransform
! transform (placement) of physical instance
UChar_t GetSelected() const
TGLPShapeRef * fFirstPSRef
! pointer to first reference
void Select(UChar_t select)
Bool_t IsTransparent() const
Float_t fColor[17]
! GL color array
void UpdateBoundingBox()
Update our internal bounding box (in global frame).
friend class TGLLogicalShape
void Translate(const TGLVector3 &vect)
EManip GetManip() const
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
Definition TGLRnrCtx.h:41
3 component (x/y/z) vector class.
Definition TGLUtil.h:248
3 component (x/y/z) vertex class.
Definition TGLUtil.h:84
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
th1 Draw()