00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 #ifndef __FK_SHAPE_VIEWER_HEADER__
00073 #define __FK_SHAPE_VIEWER_HEADER__
00074
00075 #include <FK/Window.h>
00076 #include <FK/MatExample.h>
00077 #include <FK/Line.h>
00078 #include <FK/Texture.h>
00079 #include <FK/Model.h>
00080 #include <FK/Light.h>
00081 #include <FK/Scene.h>
00082 #include <map>
00083
00084 #ifndef FK_DOXYGEN_USER_PROCESS
00085
00086 enum fk_ShapeGUIMenuItem {
00087 FK_SV_GUI_NONE,
00088 FK_SV_GUI_WRLOPEN,
00089 FK_SV_GUI_STLOPEN,
00090 FK_SV_GUI_DXFOPEN,
00091 FK_SV_GUI_WRLSAVE,
00092 FK_SV_GUI_STLSAVE,
00093 FK_SV_GUI_IMAGESNAP,
00094 FK_SV_GUI_QUIT,
00095 FK_SV_GUI_POLYDRAW,
00096 FK_SV_GUI_EDGEDRAW,
00097 FK_SV_GUI_VERTEXDRAW,
00098 FK_SV_GUI_LIGHTROTATE,
00099 FK_SV_GUI_AXISDRAW,
00100 FK_SV_GUI_AMBIENT,
00101 FK_SV_GUI_DIFFUSE,
00102 FK_SV_GUI_SPECULAR,
00103 FK_SV_GUI_EMISSION,
00104 FK_SV_GUI_SHININESS,
00105 FK_SV_GUI_VERTEXCOLOR,
00106 FK_SV_GUI_EDGECOLOR
00107 };
00108
00109 class fk_GUI_;
00110
00111 #endif
00112
00114
00150 class fk_ShapeViewer : public fk_BaseObject {
00151 private:
00152
00153 fk_Dimension fkWinSize;
00154 fk_Dimension allWinSize;
00155 fk_Dimension groupPos;
00156 fk_Dimension mousePos;
00157
00158 int mouseX, mouseY;
00159
00160
00161 Fl_Window *mainWindow;
00162 fk_Window *viewWin;
00163
00164
00165 fk_GUI_ *gui;
00166
00167
00168 bool changeFlag;
00169 bool lightFlag;
00170 bool materialFlag;
00171 bool moveFlag;
00172 bool oldMoveFlag;
00173 fk_DrawMode drawMode;
00174
00175
00176 fk_Model parentModel;
00177 std::vector<fk_Model *> modelArray;
00178 std::map<int, int> IDMap;
00179 fk_Model lightModel[2], camera, axisModel;
00180 fk_Solid localSolid;
00181 fk_Line axisLine;
00182 fk_Light light;
00183 fk_Scene scene;
00184 std::vector<fk_Material *> polyMaterial;
00185 std::vector<fk_Color *> edgeColor;
00186 std::vector<fk_Color *> vertexColor;
00187
00188 void InitValue(void);
00189 void InitFlag(void);
00190 void InitWindow(void);
00191 void InitGUI(void);
00192 void LightInit(void);
00193 void AxisInit(void);
00194 void ViewInit(void);
00195 void ModelInit(int, fk_Shape *);
00196 void RotateLight(double);
00197 bool MenuSelect(void);
00198 void SetOrientation(double, double, double, double);
00199 void SetAxisLine(double);
00200 void MovePosition(double, double, double);
00201 void DragShape(void);
00202 void KeyHandle(void);
00203 std::string CommonFileChooser(std::string, int, std::string);
00204 void SetAllMaterial(void);
00205 void SetSceneFlg(fk_ShapeGUIMenuItem);
00206
00207 void GetMaterial(int, fk_ShapeGUIMenuItem,
00208 double *, double *, double *);
00209 void SetMaterial(int, fk_ShapeGUIMenuItem,
00210 double, double, double);
00211 void SetDrawMode(void);
00212
00213 public:
00215
00222 fk_ShapeViewer(int w = 300, int h = 360);
00223
00225 virtual ~fk_ShapeViewer();
00226
00228
00229
00231
00250 bool draw(void);
00251
00253
00259 void setWindowSize(int w, int h);
00260
00262
00280 void setOGLPointerMode(bool mode);
00281
00283
00293 bool getOGLPointerMode(void);
00294
00295
00296
00298
00300
00309 void setShape(fk_Shape *shape);
00310
00312
00322 void setShape(int ID, fk_Shape *shape);
00323
00325
00334 fk_Shape * getShape(int ID = 0);
00335
00337
00342 int getModelNum(void);
00343
00345
00348 void clearModel(void);
00349
00351
00364 virtual bool shapeProcess(fk_Solid *shape);
00365
00366
00368
00369
00371
00399 void setDrawMode(fk_DrawMode mode);
00400
00402
00409 fk_DrawMode getDrawMode(void);
00410
00412
00419 void setBGColor(fk_Color col);
00420
00422
00433 void setBGColor(float r, float g, float b);
00434
00436
00443 fk_Color getBGColor(void);
00444
00446
00452 void setAxisScale(double scale);
00453
00455
00462 double getAxisScale(void);
00463
00465
00470 fk_Vector getCenter(void);
00471
00472
00474
00475
00477
00506 void setDrawMode(int ID, fk_DrawMode mode);
00507
00509
00518 fk_DrawMode getDrawMode(int ID);
00519
00521
00528 void setLineWidth(int ID, double width);
00529
00531
00541 double getLineWidth(int ID);
00542
00544
00551 void setPointSize(int ID, double size);
00552
00554
00564 double getPointSize(int ID);
00565
00567
00575 void setMaterial(int ID, fk_Material mat);
00576
00578
00586 void setEdgeColor(int ID, fk_Color col);
00587
00589
00597 void setVertexColor(int ID, fk_Color col);
00598
00599
00600
00602
00603
00605
00614 void setHead(double angle);
00615
00617
00624 double getHead(void);
00625
00627
00636 void setPitch(double angle);
00637
00639
00646 double getPitch(void);
00647
00649
00658 void setBank(double angle);
00659
00661
00668 double getBank(void);
00669
00671
00678 void setScale(double scale);
00679
00681
00688 double getScale(void);
00689
00690
00691
00693
00694
00696
00706 void setPosition(int ID, fk_Vector pos);
00707
00709
00721 void setPosition(int ID, double x, double y, double z);
00722
00724
00735 void setAngle(int ID, fk_Angle angle);
00736
00738
00752 void setAngle(int ID, double h, double p, double b);
00753
00755
00766 void setVec(int ID, fk_Vector vec);
00767
00769
00782 void setVec(int ID, double x, double y, double z);
00783
00785
00796 void setUpvec(int ID, fk_Vector vec);
00797
00799
00812 void setUpvec(int ID, double x, double y, double z);
00813
00814
00816
00817
00819
00845 void setFrameMode(fk_FrameMode mode);
00846
00848
00855 fk_FrameMode getFrameMode(void);
00856
00858
00874 void setFrameInterval(int ms);
00875
00877
00884 int getFrameInterval(void);
00885
00887
00896 int getSkipFrame(void);
00897
00898
00900
00901
00902
00904
00922 bool snapImage(std::string fileName,
00923 fk_ImageType format = FK_IMAGE_BMP,
00924 fk_SnapProcMode mode = FK_SNAP_GL_FRONT);
00925
00927
00943 bool snapImage(fk_Image *image,
00944 fk_SnapProcMode mode = FK_SNAP_GL_FRONT);
00945
00946
00948
00949
00951
00957 void setPutStrMode(const fk_PutStrMode mode);
00958
00960
00966 fk_PutStrMode getPutStrMode(void);
00967
00969
00975 bool setPutFile(const std::string &str);
00976
00978
00984 void putString(const std::string &str);
00985
00987
00993 void printf(const char *format, ...);
00994
00996
01002 void clearBrowser(void);
01003
01004 };
01005
01006 #endif // !__FK_SHAPE_VIEWER_HEADER__