|
Blender
V2.59
|
00001 /* 00002 * $Id: LOD_ExternNormalEditor.h 35147 2011-02-25 10:47:28Z jesterking $ 00003 * ***** BEGIN GPL LICENSE BLOCK ***** 00004 * 00005 * This program is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * as published by the Free Software Foundation; either version 2 00008 * of the License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software Foundation, 00017 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00018 * 00019 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. 00020 * All rights reserved. 00021 * 00022 * The Original Code is: all of this file. 00023 * 00024 * Contributor(s): none yet. 00025 * 00026 * ***** END GPL LICENSE BLOCK ***** 00027 */ 00028 00034 #ifndef NAN_INCLUDED_ExternNormalEditor_h 00035 #define NAN_INCLUDED_ExternNormalEditor_h 00036 00037 #include "MEM_NonCopyable.h" 00038 #include "LOD_ManMesh2.h" 00039 #include "MT_Vector3.h" 00040 #include "../extern/LOD_decimation.h" 00041 00042 class LOD_ExternNormalEditor : public MEM_NonCopyable 00043 { 00044 00045 public : 00046 00047 // Creation 00049 00050 static 00051 LOD_ExternNormalEditor * 00052 New( 00053 LOD_Decimation_InfoPtr, 00054 LOD_ManMesh2 &mesh 00055 ); 00056 00057 // Property editor interface 00059 00060 00061 // Faces 00063 void 00064 Remove( 00065 std::vector<LOD_FaceInd> &sorted_faces 00066 ); 00067 00068 void 00069 Add( 00070 ); 00071 00072 void 00073 Update( 00074 std::vector<LOD_FaceInd> &sorted_faces 00075 ); 00076 00077 const 00078 std::vector<MT_Vector3> & 00079 Normals( 00080 ) const { 00081 return m_normals.Ref(); 00082 }; 00083 00084 00085 // vertex normals 00087 00088 void 00089 RemoveVertexNormals( 00090 std::vector<LOD_VertexInd> &sorted_verts 00091 ); 00092 00093 00094 void 00095 UpdateVertexNormals( 00096 std::vector<LOD_VertexInd> &sorted_verts 00097 ); 00098 00099 // Editor specific methods 00101 00102 void 00103 BuildNormals( 00104 ); 00105 00106 00107 private : 00108 00109 MEM_SmartPtr<std::vector<MT_Vector3> > m_normals; 00110 00111 LOD_ManMesh2 &m_mesh; 00112 LOD_Decimation_InfoPtr m_extern_info; 00113 00114 private : 00115 00116 00117 LOD_ExternNormalEditor( 00118 LOD_Decimation_InfoPtr extern_info, 00119 LOD_ManMesh2 &mesh 00120 ); 00121 00122 const 00123 MT_Vector3 00124 ComputeNormal( 00125 const LOD_TriFace &face 00126 ) const ; 00127 00128 const 00129 MT_Vector3 00130 ComputeVertexNormal ( 00131 const LOD_VertexInd vi 00132 ) const; 00133 }; 00134 00135 #endif 00136