FineKernelToolKit  2.8.10
FK/ShapeViewer.h
説明を見る。
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__
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義