#ifndef ROOT_TGLPhysicalShape
#define ROOT_TGLPhysicalShape
#ifndef ROOT_TGLDrawable
#include "TGLDrawable.h"
#endif
#ifndef ROOT_TGLLogicalShape
#include "TGLLogicalShape.h"
#endif
#ifndef ROOT_TGLUtil
#include "TGLUtil.h" // For TGLMatrix
#endif
class TGLCamera;
class TContextMenu;
class TGLPhysicalShape : public TGLDrawable
{
public:
enum EManip { kTranslateX = 1 << 0,
kTranslateY = 1 << 1,
kTranslateZ = 1 << 2,
kTranslateAll = kTranslateX | kTranslateY | kTranslateZ,
kScaleX = 1 << 3,
kScaleY = 1 << 4,
kScaleZ = 1 << 5,
kScaleAll = kScaleX | kScaleY | kScaleZ,
kRotateX = 1 << 6,
kRotateY = 1 << 7,
kRotateZ = 1 << 8,
kRotateAll = kRotateX | kRotateY | kRotateZ,
kManipAll = kTranslateAll | kScaleAll | kRotateAll
};
private:
const TGLLogicalShape & fLogicalShape;
TGLMatrix fTransform;
Float_t fColor[17];
Bool_t fSelected;
Bool_t fInvertedWind;
Bool_t fModified;
EManip fManip;
void UpdateBoundingBox();
void InitColor(const Float_t rgba[4]);
protected:
virtual void DirectDraw(const TGLDrawFlags & flags) const;
public:
TGLPhysicalShape(ULong_t ID, const TGLLogicalShape & logicalShape,
const TGLMatrix & transform, Bool_t invertedWind,
const Float_t rgba[4]);
TGLPhysicalShape(ULong_t ID, const TGLLogicalShape & logicalShape,
const double * transform, Bool_t invertedWind,
const Float_t rgba[4]);
virtual ~TGLPhysicalShape();
TGLDrawFlags CalcDrawFlags(const TGLCamera & camera, const TGLDrawFlags & sceneFlags) const;
virtual ELODAxes SupportedLODAxes() const;
virtual void Draw(const TGLDrawFlags & flags) const;
const TGLLogicalShape & GetLogical() const { return fLogicalShape; }
void InvokeContextMenu(TContextMenu & menu, UInt_t x, UInt_t y) const;
EManip GetManip() const { return fManip; }
void SetManip(EManip manip) { fManip = manip; }
Bool_t IsModified() const { return fModified || IsSelected(); }
Bool_t IsSelected() const { return fSelected; }
void Select(Bool_t select) { fSelected = select; }
const Float_t * Color() const { return fColor; }
Bool_t IsTransparent() const { return fColor[3] < 1.f; }
Bool_t IsInvisible() const { return fColor[3] == 0.f; }
void SetColor(const Float_t rgba[17]);
TGLVector3 GetScale() const;
TGLVertex3 GetTranslation() const;
void SetTransform(const TGLMatrix & transform);
void SetTranslation(const TGLVertex3 & translation);
void Translate(const TGLVector3 & vect);
void Scale(const TGLVector3 & scale);
void Rotate(const TGLVertex3 & pivot, const TGLVector3 & axis, Double_t angle);
ClassDef(TGLPhysicalShape,0)
};
inline TGLPhysicalShape::ELODAxes TGLPhysicalShape::SupportedLODAxes() const
{
return fLogicalShape.SupportedLODAxes();
}
inline TGLVector3 TGLPhysicalShape::GetScale() const
{
return fTransform.GetScale();
}
inline TGLVertex3 TGLPhysicalShape::GetTranslation() const
{
return fTransform.GetTranslation();
}
inline void TGLPhysicalShape::SetTransform(const TGLMatrix & transform)
{
fTransform = transform;
UpdateBoundingBox();
fModified = kTRUE;
Purge();
}
inline void TGLPhysicalShape::SetTranslation(const TGLVertex3 & translation)
{
fTransform.SetTranslation(translation);
UpdateBoundingBox();
fModified = kTRUE;
Purge();
}
inline void TGLPhysicalShape::Translate(const TGLVector3 & vect)
{
fTransform.Translate(vect);
UpdateBoundingBox();
fModified = kTRUE;
Purge();
}
inline void TGLPhysicalShape::Scale(const TGLVector3 & scale)
{
TGLVertex3 origCenter = fBoundingBox.Center();
fTransform.Scale(scale);
UpdateBoundingBox();
TGLVector3 shift = fBoundingBox.Center() - origCenter;
Translate(-shift);
UpdateBoundingBox();
fModified = kTRUE;
Purge();
}
inline void TGLPhysicalShape::Rotate(const TGLVertex3 & pivot, const TGLVector3 & axis, Double_t angle)
{
TGLVertex3 c = BoundingBox().Center();
fTransform.Rotate(pivot, axis, angle);
UpdateBoundingBox();
fModified = kTRUE;
Purge();
}
#endif // ROOT_TGLPhysicalShape
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.