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