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 FXGLSHAPE_H
00025 #define FXGLSHAPE_H
00026
00027 #ifndef FXGLOBJECT_H
00028 #include "FXGLObject.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034 class FXGLViewer;
00035 class FXGLObject;
00036
00037
00038
00039 enum {
00040 SURFACE_SINGLESIDED = 0,
00041 SURFACE_DUALSIDED = 0x00000001,
00042 SHADING_NONE = 0,
00043 SHADING_SMOOTH = 0x00000002,
00044 SHADING_FLAT = 0x00000004,
00045 FACECULLING_OFF = 0,
00046 FACECULLING_ON = 0x00000008,
00047 STYLE_SURFACE = 0x00000010,
00048 STYLE_WIREFRAME = 0x00000020,
00049 STYLE_POINTS = 0x00000040,
00050 STYLE_BOUNDBOX = 0x00000080
00051 };
00052
00053
00054
00055
00056 class FXAPI FXGLShape : public FXGLObject {
00057 FXDECLARE_ABSTRACT(FXGLShape)
00058 protected:
00059 FXVec3f position;
00060 FXMaterial material[2];
00061 FXRangef range;
00062 FXuint options;
00063 FXString tip;
00064 protected:
00065 FXGLShape();
00066 virtual void drawshape(FXGLViewer*){}
00067 void drawbox();
00068 void drawhandles();
00069 public:
00070 long onDNDDrop(FXObject*,FXSelector,void*);
00071 long onDNDMotion(FXObject*,FXSelector,void*);
00072 long onQueryTip(FXObject*,FXSelector,void*);
00073 long onCmdShadeOff(FXObject*,FXSelector,void*);
00074 long onUpdShadeOff(FXObject*,FXSelector,void*);
00075 long onCmdShadeOn(FXObject*,FXSelector,void*);
00076 long onUpdShadeOn(FXObject*,FXSelector,void*);
00077 long onCmdShadeSmooth(FXObject*,FXSelector,void*);
00078 long onUpdShadeSmooth(FXObject*,FXSelector,void*);
00079 long onCmdFrontMaterial(FXObject*,FXSelector,void*);
00080 long onUpdFrontMaterial(FXObject*,FXSelector,void*);
00081 long onCmdBackMaterial(FXObject*,FXSelector,void*);
00082 long onUpdBackMaterial(FXObject*,FXSelector,void*);
00083 long onCmdDrawingStyle(FXObject*,FXSelector,void*);
00084 long onUpdDrawingStyle(FXObject*,FXSelector,void*);
00085 public:
00086 enum {
00087 ID_SHADEOFF=FXGLObject::ID_LAST,
00088 ID_SHADEON,
00089 ID_SHADESMOOTH,
00090 ID_TOGGLE_SIDED,
00091 ID_TOGGLE_CULLING,
00092 ID_STYLE_POINTS,
00093 ID_STYLE_WIREFRAME,
00094 ID_STYLE_SURFACE,
00095 ID_STYLE_BOUNDINGBOX,
00096 ID_FRONT_MATERIAL,
00097 ID_BACK_MATERIAL,
00098 ID_LAST
00099 };
00100 public:
00101
00102
00103 FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts);
00104
00105
00106 FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts,const FXMaterial& front,const FXMaterial& back);
00107
00108
00109 FXGLShape(const FXGLShape& orig);
00110
00111
00112 virtual void bounds(FXRangef& box);
00113
00114
00115 virtual void draw(FXGLViewer* viewer);
00116
00117
00118 virtual void hit(FXGLViewer* viewer);
00119
00120
00121 virtual FXGLObject* copy();
00122
00123
00124 virtual FXbool canDrag() const;
00125
00126
00127 virtual FXbool canDelete() const;
00128
00129
00130 virtual FXbool drag(FXGLViewer* viewer,FXint fx,FXint fy,FXint tx,FXint ty);
00131
00132
00133 void setTipText(const FXString& text){ tip=text; }
00134
00135
00136 const FXString& getTipText() const { return tip; }
00137
00138
00139 void setMaterial(FXint side,const FXMaterial &mtl);
00140
00141
00142 void getMaterial(FXint side,FXMaterial &mtl) const;
00143
00144
00145 virtual void save(FXStream& store) const;
00146
00147
00148 virtual void load(FXStream& store);
00149 };
00150
00151 }
00152
00153 #endif
00154