71 lines
2.4 KiB
C++
71 lines
2.4 KiB
C++
|
#include <plib/ssg.h>
|
||
|
|
||
|
class FGPanel;
|
||
|
class SGPropertyNode;
|
||
|
|
||
|
// PanelNode defines an SSG leaf object that draws a FGPanel object
|
||
|
// into the scene graph. Note that this is an incomplete SSG object,
|
||
|
// many methods, mostly involved with modelling and runtime
|
||
|
// inspection, are unimplemented.
|
||
|
|
||
|
class FGPanelNode : public ssgLeaf
|
||
|
{
|
||
|
protected:
|
||
|
virtual void draw_geometry();
|
||
|
|
||
|
public:
|
||
|
FGPanelNode(SGPropertyNode* props);
|
||
|
virtual ~FGPanelNode();
|
||
|
|
||
|
virtual void draw();
|
||
|
void mouseEvent(int button, int updown, int x, int y);
|
||
|
|
||
|
virtual void recalcBSphere() { bsphere_is_invalid = 0; }
|
||
|
|
||
|
//
|
||
|
// A bunch of Plib functions that aren't implemented. I don't
|
||
|
// even know what many of them do, but they're pure virtual and
|
||
|
// require implementation.
|
||
|
//
|
||
|
virtual int getNumTriangles() { die(); return 0; }
|
||
|
virtual void getTriangle(int n, short* v1, short* v2, short* v3) { die(); }
|
||
|
virtual int getNumLines() { die(); return 0; }
|
||
|
virtual void getLine(int n, short* v1, short* v2) { die(); }
|
||
|
|
||
|
virtual void drawHighlight(sgVec4 colour) { die(); }
|
||
|
virtual void drawHighlight(sgVec4 colour, int i) { die(); }
|
||
|
virtual float* getVertex(int i) { die(); return 0; }
|
||
|
virtual float* getNormal(int i) { die(); return 0; }
|
||
|
virtual float* getColour(int i) { die(); return 0; }
|
||
|
virtual float* getTexCoord(int i) { die(); return 0; }
|
||
|
virtual void pick(int baseName) { die(); }
|
||
|
virtual void isect_triangles(sgSphere* s, sgMat4 m, int testNeeded) { die(); }
|
||
|
virtual void hot_triangles(sgVec3 s, sgMat4 m, int testNeeded) { die(); }
|
||
|
virtual void los_triangles(sgVec3 s, sgMat4 m, int testNeeded) { die(); }
|
||
|
virtual void transform(const sgMat4 m) { die(); }
|
||
|
|
||
|
private:
|
||
|
// Handler for all the unimplemented methods above
|
||
|
void die();
|
||
|
|
||
|
FGPanel* _panel;
|
||
|
|
||
|
// Panel corner coordinates
|
||
|
float _bottomLeft[3], _topLeft[3], _bottomRight[3];
|
||
|
|
||
|
// The input range expected in the panel definition. These x/y
|
||
|
// coordinates will map to the right/top sides.
|
||
|
float _xmax, _ymax;
|
||
|
|
||
|
// The matrix that results, which transforms 2D x/y panel
|
||
|
// coordinates into 3D coordinates of the panel quadrilateral.
|
||
|
GLfloat _xform[16];
|
||
|
|
||
|
// The matrix transformation state that was active the last time
|
||
|
// we were rendered. Used by the mouse code to compute
|
||
|
// intersections.
|
||
|
GLfloat _lastModelview[16];
|
||
|
GLfloat _lastProjection[16];
|
||
|
GLint _lastViewport[4];
|
||
|
};
|