69 fLogicalShape (&logicalShape),
73 fTransform (transform),
76 fInvertedWind (invertedWind),
78 fIsScaleForRnr(kFALSE)
80 fLogicalShape->AddRef(
this);
98 fLogicalShape (&logicalShape),
102 fTransform (transform),
105 fInvertedWind (invertedWind),
172 Error(
"TGLPhysicalShape::RemoveReference",
"Attempt to un-ref an unregistered shape-ref.");
230 for (
UInt_t i = 0; i < 17; i++) {
256 for (
Int_t i=0; i<4; ++i)
266 for (
Int_t i=0; i<4; ++i)
283 fColor[3] = 1.0f - 0.01*transparency;
294 if (color == 0) color =
fColor;
312 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color);
313 glMaterialfv(GL_FRONT, GL_AMBIENT, color + 4);
314 glMaterialfv(GL_FRONT, GL_SPECULAR, color + 8);
315 glMaterialfv(GL_FRONT, GL_EMISSION, color + 12);
316 glMaterialf(GL_FRONT, GL_SHININESS, color[16]);
342 Info(
"TGLPhysicalShape::Draw",
"this %ld (class %s) LOD %d",
361 Info(
"TGLPhysicalShape::Draw",
"this %ld (class %s) LOD %d",
371 glPushAttrib(GL_LIGHTING_BIT | GL_DEPTH_BUFFER_BIT);
373 glDisable(GL_LIGHTING);
374 glDisable(GL_DEPTH_TEST);
378 static const Int_t offsets[20][2] =
379 { {-1,-1}, { 1,-1}, { 1, 1}, {-1, 1},
380 { 1, 0}, { 0, 1}, {-1, 0}, { 0,-1},
381 { 0,-2}, { 2, 0}, { 0, 2}, {-2, 0},
382 {-2,-2}, { 2,-2}, { 2, 2}, {-2, 2},
383 { 0,-3}, { 3, 0}, { 0, 3}, {-3, 0} };
384 static const Int_t max_off =
389 for (
int i = 0; i < max_off; ++i)
391 glViewport(vp.
X() + offsets[i][0], vp.
Y() + offsets[i][1], vp.
Width(), vp.
Height());
445 std::vector <Double_t> boxViewportDiags;
471 Error(
"TGLPhysicalShape::CalcPhysicalLOD",
"LOD calculation for single axis not implemented presently");
478 for (
UInt_t i = 0; i < boxViewportDiags.size(); i++) {
479 if (boxViewportDiags[i] > largestDiagonal) {
480 largestDiagonal = boxViewportDiags[i];
483 pixSize = largestDiagonal;
485 if (largestDiagonal <= 1.0) {
492 if (lodApp > 1000) lodApp = 1000;
std::string GetName(const std::string &scope_name)
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
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 Short_t QuantizeShapeLOD(Short_t shapeLOD, Short_t combiLOD) const
Logical shapes usually support only discreet LOD values, especially in view of display-list caching...
Abstract base camera class - concrete classes for orthographic and perspective cameras derive from it...
void SetColorOnFamily(const Float_t rgba[17])
Set full color attributes to all physicals sharing the same logical with this object.
void Set(const TGLVertex3 vertex[8])
Set a bounding box from provided 8 vertices.
16 component (4x4) transform matrix - column MAJOR as per GL.
virtual ~TGLPhysicalShape()
Destroy the physical shape.
void SetupGLColors(TGLRnrCtx &rnrCtx, const Float_t *color=0) const
Setup colors - avoid setting things not required for current draw flags.
Bool_t fModified
face winding TODO: can get directly from fTransform?
static Float_t GetScreenScalingFactor()
Returns scaling factor between screen points and GL viewport pixels.
void Transpose3x3()
Transpose the top left 3x3 matrix component along major diagonal Supported as currently incompatibili...
void UpdateBoundingBox()
cache
void AddRef(TGLPhysicalShape *phys) const
Add reference to given physical shape.
void Modified()
Call this after modifying the physical so that the information can be propagated to the object refere...
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Bool_t IsDrawPassOutlineLine() const
Bool_t fInvertedWind
selected state
const TGLLogicalShape * fLogicalShape
virtual void QuantizeShapeLOD(Short_t shapeLOD, Short_t combiLOD, Short_t &quantLOD) const
Factor in scene/vierer LOD and Quantize ...
Concrete physical shape - a GL drawable.
void InitColor(const Float_t rgba[4])
Initialise the colors, using basic RGBA diffuse material color supplied.
TGLRect ViewportRect(const TGLBoundingBox &box, TGLBoundingBox::EFace face) const
Calculate viewport rectangle which just contains projection of single 'face' of world frame bounding ...
TGLBoundingBox fBoundingBox
transform (placement) of physical instance
void SubRef(TGLPhysicalShape *phys) const
Remove reference to given physical shape, potentially deleting this object when hitting zero ref-coun...
void SetColor(const Float_t rgba[17])
Set full color attributes - see OpenGL material documentation for full description.
void Transform(const TGLMatrix &matrix)
Transform all vertices with matrix.
const TGLBoundingBox & BoundingBox() const
double pow(double, double)
void Info(const char *location, const char *msgfmt,...)
Viewport (pixel base) 2D rectangle class.
static UInt_t LockColor()
Prevent further color changes.
static UInt_t UnlockColor()
Allow color changes.
void Error(const char *location, const char *msgfmt,...)
const TGLBoundingBox & BoundingBox() const
virtual void DrawHighlight(TGLRnrCtx &rnrCtx, const TGLPhysicalShape *pshp, Int_t lvl=-1) const
Draw the logical shape in highlight mode.
Bool_t HighlightOutline() const
TGLPhysicalShape * fNextPhysical
the associated logical shape
const Double_t * CArr() const
const TGLPhysicalShape * GetFirstPhysical() const
virtual void PShapeModified()
This is called from physical shape when it is modified.
Base class for references to TGLPysicalShape that need to be notified when the shape is destroyed...
void InvalidateBoundingBox()
Int_t Diagonal() const
Return the diagonal of the rectangle.
Abstract logical shape - a GL 'drawable' - base for all shapes - faceset sphere etc.
virtual void Draw(TGLRnrCtx &rnrCtx) const
Draw physical shape, using LOD flags, potential from display list cache.
Bool_t fIsScaleForRnr
has been modified - retain across scene rebuilds
virtual void SetPShape(TGLPhysicalShape *shape)
Set the shape.
void AddReference(TGLPShapeRef *ref)
Add reference ref.
TGLPhysicalShape(const TGLPhysicalShape &)
Float_t fColor[17]
bounding box of the physical (transformed)
Bool_t IsScalingForRender() const
Return true if matrix is to be considered a scaling matrix for rendering.
The color creation and management class.
TGLMatrix fTransform
unique physical ID within containing scene
Concrete class describing an orientated (free) or axis aligned box of 8 vertices. ...
virtual void Draw(TGLRnrCtx &rnrCtx) const
Draw the GL drawable, using draw flags.
void InvokeContextMenu(TContextMenu &menu, UInt_t x, UInt_t y) const
Invoke popup menu or our bound external TObject (if any), using passed 'menu' object, at location 'x' 'y'.
virtual ELODAxes SupportedLODAxes() const
void RemoveReference(TGLPShapeRef *ref)
Remove reference ref.
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...
TGLColorSet & ColorSet()
Return reference to current color-set (top of the stack).
TGLScene * GetScene() const
TGLPShapeRef * fNextPSRef
TGLPShapeRef * fFirstPSRef
pointer to next replica
static void ColorAlpha(const TGLColor &color, UChar_t alpha)
Set color from TGLColor and alpha value.
void SetDiffuseColor(const Float_t rgba[4])
Set color from ROOT color index and transparency [0,100].