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_MODEL_HEADER__ 00073 #define __FK_MODEL_HEADER__ 00074 00075 #include <FK/MatAdmin.h> 00076 #include <FK/Palette.h> 00077 #include <FK/Angle.h> 00078 00079 class fk_Material; 00080 class fk_Shape; 00081 class fk_TreeData; 00082 00083 typedef unsigned int fk_DrawMode; 00084 00085 const fk_DrawMode FK_NONEMODE = 0x0000; 00086 const fk_DrawMode FK_POINTMODE = 0x0001; 00087 const fk_DrawMode FK_LINEMODE = 0x0002; 00088 const fk_DrawMode FK_POLYMODE = 0x0004; 00089 const fk_DrawMode FK_BACK_POLYMODE = (0x0008 | FK_POLYMODE); 00090 const fk_DrawMode FK_FRONTBACK_POLYMODE = (0x0010 | FK_POLYMODE); 00091 const fk_DrawMode FK_TEXTUREMODE = 0x0020; 00092 00093 #ifndef FK_DOXYGEN_USER_PROCESS 00094 00095 enum fk_BoundaryMode { 00096 FK_SPHERE_B, 00097 FK_BOX_B, 00098 FK_CAPSULE_B 00099 }; 00100 00101 #endif 00102 00104 00135 class fk_Model : public fk_MatrixAdmin { 00136 00137 private: 00138 fk_Material *material; 00139 fk_Color *pointColor; 00140 fk_Color *lineColor; 00141 fk_Shape *shape; 00142 fk_Model *parent; 00143 fk_TreeData *treeData; 00144 bool materialFlag; 00145 fk_DrawMode drawMode; 00146 fk_MaterialMode materialMode; 00147 double drawSize; 00148 double drawWidth; 00149 bool pickFlag; 00150 bool smoothFlag; 00151 bool reverseFlag; 00152 bool treeFlag; 00153 unsigned int _modelID; 00154 00155 fk_BoundaryMode boundaryMode; 00156 00157 fk_HVector snapPos; 00158 fk_HVector snapInhPos; 00159 fk_Angle snapAngle; 00160 bool snapFlag; 00161 00162 double sbRadius; 00163 00164 void EntryTree(void); 00165 void DeleteTree(void); 00166 fk_TreeData * GetTreeData(fk_Model *); 00167 00168 public: 00169 00171 00177 fk_Model(fk_Shape *shape = (fk_Shape *)NULL); 00178 00180 virtual ~fk_Model(); 00181 00182 00184 00191 unsigned int getID(void) const; 00192 00194 //@( 00195 00197 00208 void setShape(fk_Shape *shape); 00209 00211 00217 fk_Shape * getShape(void) const; 00218 00219 //@) 00220 00222 //@( 00224 00241 void setMaterial(const fk_Material &mat); 00242 00244 00252 void setPointColor(fk_Color *col); 00253 00255 00265 void setPointColor(float r, float g, float b); 00266 00268 00276 void setLineColor(fk_Color *col); 00277 00279 00289 void setLineColor(float r, float g, float b); 00290 00292 00297 void deleteMaterial(void); 00298 00300 00305 void deletePointColor(void); 00306 00308 00313 void deleteLineColor(void); 00314 //@) 00315 00317 //@( 00319 00327 fk_Material * getMaterial(void); 00328 00330 00339 fk_Material * getInhMaterial(void); 00340 00342 00350 fk_Color * getPointColor(void); 00351 00353 00362 fk_Color * getInhPointColor(void); 00363 00365 00373 fk_Color * getLineColor(void); 00374 00376 00385 fk_Color * getInhLineColor(void); 00386 //@) 00387 00389 //@( 00390 00392 00398 void setSize(const double size); 00399 00401 00407 void setWidth(const double width); 00408 00410 00415 double getSize(void) const; 00416 00418 00423 double getWidth(void) const; 00424 //@) 00425 00427 //@( 00428 00430 00454 void setDrawMode(const fk_DrawMode mode); 00455 00457 00464 fk_DrawMode getDrawMode(void) const; 00465 00467 00493 void setMaterialMode(const fk_MaterialMode mode); 00494 00496 00503 fk_MaterialMode getMaterialMode(void) const; 00504 00506 00518 void setPickMode(const bool mode); 00519 00521 00528 bool getPickMode(void) const; 00529 00531 00540 void setSmoothMode(const bool mode); 00541 00543 00550 bool getSmoothMode(void) const; 00551 00553 00561 void setReverseDrawMode(const bool mode); 00562 00564 00571 bool getReverseDrawMode(void) const; 00572 //@) 00573 00575 //@( 00576 00578 00591 fk_Matrix getInhMatrix(void) const; 00592 00594 00608 fk_Matrix getInhInvMatrix(void) const; 00609 00611 00626 fk_OrthoMatrix getInhBaseMatrix(void) const; 00627 00629 00644 fk_OrthoMatrix getInhInvBaseMatrix(void) const; 00645 00647 00655 fk_Vector getInhPosition(void) const; 00656 00658 00666 fk_Vector getInhVec(void) const; 00667 00669 00677 fk_Vector getInhUpvec(void) const; 00678 00679 #ifndef FK_DOXYGEN_USER_PROCESS 00680 fk_Vector getInhUpVec(void) const; 00681 #endif 00682 00684 00693 fk_Angle getInhAngle(void) const; 00694 //@) 00695 00697 //@( 00698 00700 00718 bool setParent(fk_Model *model, bool setMode = false); 00719 00721 00733 void deleteParent(bool setMode = false); 00734 00736 00744 fk_Model * getParent(void) const; 00745 00747 00765 bool entryChild(fk_Model *model, bool setMode = false); 00766 00768 00785 bool deleteChild(fk_Model *model, bool setMode = false); 00786 00788 00800 void deleteChildren(bool setMode = false); 00801 00803 00832 fk_Model * foreachChild(fk_Model *model); 00833 00834 //@) 00835 00837 //@( 00838 00840 00846 void snapShot(void); 00847 00849 00854 bool restore(void); 00855 00857 00869 bool restore(double t); 00870 00871 //@) 00872 00874 //@( 00875 00877 00890 virtual void preShader(void) {}; 00891 00893 00906 virtual void postShader(void) {}; 00907 //@) 00908 00909 #ifndef FK_DOXYGEN_USER_PROCESS 00910 00911 void setBoundaryMode(fk_BoundaryMode); 00912 fk_BoundaryMode getBoundaryMode(void); 00913 void setSBRadius(double); 00914 double getSBRadius(void); 00915 bool isInterference(fk_Model *); 00916 bool isCollision(fk_Model *); 00917 double getCollisionTime(fk_Model *); 00918 00919 00920 // rita_ext: カスタムテクスチャ描画用エントリポイント 00921 virtual void connectShader(unsigned int) {}; 00922 00923 void TreePrint(void); 00924 #endif 00925 }; 00926 00927 #endif // !__FK_MODEL_HEADER__