00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FX_DISABLEGL
00025
00026 #if FX_GRAPHINGMODULE
00027
00028 #ifndef FXGLSHAPE_H
00029 #define FXGLSHAPE_H
00030
00031 #ifndef FXGLOBJECT_H
00032 #include "FXGLObject.h"
00033 #endif
00034
00035 namespace FX {
00036
00037
00038 class FXGLViewer;
00039 class FXGLObject;
00040
00041
00042
00043 enum {
00044 SURFACE_SINGLESIDED = 0,
00045 SURFACE_DUALSIDED = 0x00000001,
00046 SHADING_NONE = 0,
00047 SHADING_SMOOTH = 0x00000002,
00048 SHADING_FLAT = 0x00000004,
00049 FACECULLING_OFF = 0,
00050 FACECULLING_ON = 0x00000008,
00051 STYLE_SURFACE = 0x00000010,
00052 STYLE_WIREFRAME = 0x00000020,
00053 STYLE_POINTS = 0x00000040,
00054 STYLE_BOUNDBOX = 0x00000080
00055 };
00056
00057
00058
00060 class FXGRAPHINGMODULEAPI FXGLShape : public FXGLObject {
00061 FXDECLARE_ABSTRACT(FXGLShape)
00062 protected:
00063 FXVec3f position;
00064 FXMaterial material[2];
00065 FXRangef range;
00066 FXuint options;
00067 FXString tip;
00068 protected:
00069 FXGLShape();
00070 virtual void drawshape(FXGLViewer*){}
00071 void drawbox();
00072 void drawhandles();
00073 public:
00074 long onDNDDrop(FXObject*,FXSelector,void*);
00075 long onDNDMotion(FXObject*,FXSelector,void*);
00076 long onQueryTip(FXObject*,FXSelector,void*);
00077 long onCmdShadeOff(FXObject*,FXSelector,void*);
00078 long onUpdShadeOff(FXObject*,FXSelector,void*);
00079 long onCmdShadeOn(FXObject*,FXSelector,void*);
00080 long onUpdShadeOn(FXObject*,FXSelector,void*);
00081 long onCmdShadeSmooth(FXObject*,FXSelector,void*);
00082 long onUpdShadeSmooth(FXObject*,FXSelector,void*);
00083 long onCmdFrontMaterial(FXObject*,FXSelector,void*);
00084 long onUpdFrontMaterial(FXObject*,FXSelector,void*);
00085 long onCmdBackMaterial(FXObject*,FXSelector,void*);
00086 long onUpdBackMaterial(FXObject*,FXSelector,void*);
00087 long onCmdDrawingStyle(FXObject*,FXSelector,void*);
00088 long onUpdDrawingStyle(FXObject*,FXSelector,void*);
00089 public:
00090 enum {
00091 ID_SHADEOFF=FXGLObject::ID_LAST,
00092 ID_SHADEON,
00093 ID_SHADESMOOTH,
00094 ID_TOGGLE_SIDED,
00095 ID_TOGGLE_CULLING,
00096 ID_STYLE_POINTS,
00097 ID_STYLE_WIREFRAME,
00098 ID_STYLE_SURFACE,
00099 ID_STYLE_BOUNDINGBOX,
00100 ID_FRONT_MATERIAL,
00101 ID_BACK_MATERIAL,
00102 ID_LAST
00103 };
00104 public:
00105
00107 FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts);
00108
00110 FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts,const FXMaterial& front,const FXMaterial& back);
00111
00113 FXGLShape(const FXGLShape& orig);
00114
00116 virtual void bounds(FXRangef& box);
00117
00119 virtual void draw(FXGLViewer* viewer);
00120
00122 virtual void hit(FXGLViewer* viewer);
00123
00125 virtual FXGLObject* copy();
00126
00128 virtual FXbool canDrag() const;
00129
00131 virtual FXbool canDelete() const;
00132
00134 virtual FXbool drag(FXGLViewer* viewer,FXint fx,FXint fy,FXint tx,FXint ty);
00135
00137 FXuint getOptions() const { return options; }
00138
00140 void setOptions(FXuint opts) { options=opts; }
00141
00143 void setTipText(const FXString& text){ tip=text; }
00144
00146 const FXString& getTipText() const { return tip; }
00147
00149 void setMaterial(FXint side,const FXMaterial &mtl);
00150
00152 void getMaterial(FXint side,FXMaterial &mtl) const;
00153
00155 const FXVec3f &getPosition() const { return position; }
00156
00158 void setPosition(const FXVec3f &pos);
00159
00161 virtual void save(FXStream& store) const;
00162
00164 virtual void load(FXStream& store);
00165 };
00166
00167 }
00168
00169 #endif
00170 #endif
00171 #endif