FineKernelToolKit
2.8.10
|
00001 /**************************************************************************** 00002 * 00003 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, 00006 * with or without modification, are permitted provided that the 00007 * following conditions are met: 00008 * 00009 * - Redistributions of source code must retain the above 00010 * copyright notice, this list of conditions and the 00011 * following disclaimer. 00012 * 00013 * - Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the 00015 * following disclaimer in the documentation and/or 00016 * other materials provided with the distribution. 00017 * 00018 * - Neither the name of the copyright holders nor the names 00019 * of its contributors may be used to endorse or promote 00020 * products derived from this software without specific 00021 * prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00026 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00027 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00028 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00031 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00032 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00033 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00034 * POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 ****************************************************************************/ 00037 /**************************************************************************** 00038 * 00039 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00040 * 00041 * 本ソフトウェアおよびソースコードのライセンスは、基本的に 00042 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。 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 // Window 00161 Fl_Window *mainWindow; 00162 fk_Window *viewWin; 00163 00164 // GUI 00165 fk_GUI_ *gui; 00166 00167 // flag 00168 bool changeFlag; 00169 bool lightFlag; 00170 bool materialFlag; 00171 bool moveFlag; 00172 bool oldMoveFlag; 00173 fk_DrawMode drawMode; 00174 bool axisFlag; 00175 00176 // FK Object 00177 fk_Model parentModel; 00178 std::vector<fk_Model *> modelArray; 00179 std::map<int, int> IDMap; 00180 fk_Model lightModel[2], camera, axisModel; 00181 fk_Solid localSolid; 00182 fk_Line axisLine; 00183 fk_Light light; 00184 fk_Scene scene; 00185 std::vector<fk_Material *> polyMaterial; 00186 std::vector<fk_Color *> edgeColor; 00187 std::vector<fk_Color *> vertexColor; 00188 00189 void InitValue(void); 00190 void InitFlag(void); 00191 void InitWindow(void); 00192 void InitGUI(void); 00193 void LightInit(void); 00194 void AxisInit(void); 00195 void ViewInit(void); 00196 void ModelInit(int, fk_Shape *); 00197 void RotateLight(double); 00198 bool MenuSelect(void); 00199 void SetOrientation(double, double, double, double); 00200 void SetAxisLine(double); 00201 void MovePosition(double, double, double); 00202 void DragShape(void); 00203 void KeyHandle(void); 00204 std::string CommonFileChooser(std::string, int, std::string); 00205 void SetAllMaterial(void); 00206 void SetSceneFlg(fk_ShapeGUIMenuItem); 00207 00208 void GetMaterial(int, fk_ShapeGUIMenuItem, 00209 double *, double *, double *); 00210 void SetMaterial(int, fk_ShapeGUIMenuItem, 00211 double, double, double); 00212 void SetDrawMode(void); 00213 00214 public: 00216 00223 fk_ShapeViewer(int w = 300, int h = 360); 00224 00226 virtual ~fk_ShapeViewer(); 00227 00229 //@( 00230 00232 00251 bool draw(void); 00252 00254 00260 void setWindowSize(int w, int h); 00261 00263 00281 void setOGLPointerMode(bool mode); 00282 00284 00294 bool getOGLPointerMode(void); 00295 00296 //@) 00297 00299 //@( 00301 00310 void setShape(fk_Shape *shape); 00311 00313 00323 void setShape(int ID, fk_Shape *shape); 00324 00326 00335 fk_Shape * getShape(int ID = 0); 00336 00338 00343 int getModelNum(void); 00344 00346 00349 void clearModel(void); 00350 00352 00365 virtual bool shapeProcess(fk_Solid *shape); 00366 //@) 00367 00369 //@( 00370 00372 00400 void setDrawMode(fk_DrawMode mode); 00401 00403 00410 fk_DrawMode getDrawMode(void); 00411 00413 00422 void setBlendStatus(bool mode); 00423 00425 00432 bool getBlendStatus(void); 00433 00435 00442 void setBGColor(fk_Color col); 00443 00445 00456 void setBGColor(float r, float g, float b); 00457 00459 00466 fk_Color getBGColor(void); 00467 00469 00476 void setAxisMode(bool mode); 00477 00479 00486 bool getAxisMode(void); 00487 00489 00495 void setAxisScale(double scale); 00496 00498 00505 double getAxisScale(void); 00506 00507 00508 00510 00515 fk_Vector getCenter(void); 00516 //@) 00517 00519 //@( 00520 00522 00551 void setDrawMode(int ID, fk_DrawMode mode); 00552 00554 00563 fk_DrawMode getDrawMode(int ID); 00564 00566 00573 void setLineWidth(int ID, double width); 00574 00576 00586 double getLineWidth(int ID); 00587 00589 00596 void setPointSize(int ID, double size); 00597 00599 00609 double getPointSize(int ID); 00610 00612 00620 void setMaterial(int ID, fk_Material mat); 00621 00623 00631 void setEdgeColor(int ID, fk_Color col); 00632 00634 00642 void setVertexColor(int ID, fk_Color col); 00643 00644 //@) 00645 00647 //@( 00648 00650 00659 void setHead(double angle); 00660 00662 00669 double getHead(void); 00670 00672 00681 void setPitch(double angle); 00682 00684 00691 double getPitch(void); 00692 00694 00703 void setBank(double angle); 00704 00706 00713 double getBank(void); 00714 00716 00723 void setScale(double scale); 00724 00726 00733 double getScale(void); 00734 00735 //@) 00736 00738 //@( 00739 00741 00751 void setPosition(int ID, fk_Vector pos); 00752 00754 00766 void setPosition(int ID, double x, double y, double z); 00767 00769 00780 void setAngle(int ID, fk_Angle angle); 00781 00783 00797 void setAngle(int ID, double h, double p, double b); 00798 00800 00811 void setVec(int ID, fk_Vector vec); 00812 00814 00827 void setVec(int ID, double x, double y, double z); 00828 00830 00841 void setUpvec(int ID, fk_Vector vec); 00842 00844 00857 void setUpvec(int ID, double x, double y, double z); 00858 //@) 00859 00861 //@( 00862 00864 00890 void setFrameMode(fk_FrameMode mode); 00891 00893 00900 fk_FrameMode getFrameMode(void); 00901 00903 00919 void setFrameInterval(int ms); 00920 00922 00929 int getFrameInterval(void); 00930 00932 00941 int getSkipFrame(void); 00942 //@) 00943 00945 //@( 00946 00947 00949 00967 bool snapImage(std::string fileName, 00968 fk_ImageType format = FK_IMAGE_BMP, 00969 fk_SnapProcMode mode = FK_SNAP_GL_FRONT); 00970 00972 00988 bool snapImage(fk_Image *image, 00989 fk_SnapProcMode mode = FK_SNAP_GL_FRONT); 00990 //@) 00991 00993 //@( 00994 00996 01002 void setPutStrMode(const fk_PutStrMode mode); 01003 01005 01011 fk_PutStrMode getPutStrMode(void); 01012 01014 01020 bool setPutFile(const std::string &str); 01021 01023 01029 void putString(const std::string &str); 01030 01032 01038 void printf(const char *format, ...); 01039 01041 01047 void clearBrowser(void); 01048 //@) 01049 }; 01050 01051 #endif // !__FK_SHAPE_VIEWER_HEADER__