00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015
00016 #ifndef __OPTIMIZE_H__
00017 #define __OPTIMIZE_H__
00018
00019 #include "../../scenemodule.h"
00020 #include "../../geometrytriangles.h"
00021 #include <vector>
00022
00023 namespace VRUT
00024 {
00026 const int MODULE_VERSION = 1;
00027
00029 class Optimize: public SceneModule
00030 {
00031 protected:
00033 wxString nameMask;
00035 Parameter::ParameterIdentificator nameMaskParamID;
00036
00038 Parameter::ParameterIdentificator deleteActionParamID;
00039
00041 Parameter::ParameterIdentificator simplifyStructureActionParamID;
00042
00044 Parameter::ParameterIdentificator removeUnusedMaterialsActionParamID;
00045
00047 Parameter::ParameterIdentificator unifyMaterialsActionParamID;
00048
00050 Parameter::ParameterIdentificator unifyVerticesActionParamID;
00051
00053 Parameter::ParameterIdentificator removeUnusedGeometriesActionParamID;
00054
00056 Parameter::ParameterIdentificator mergePrimitivesActionParamID;
00057
00059 Parameter::ParameterIdentificator deleteNormalsActionParamID;
00060
00062 Parameter::ParameterIdentificator deleteTexCoordsActionParamID;
00063
00065 Parameter::ParameterIdentificator statisticsActionParamID;
00066
00067 void parseMask(wxString mask, std::vector<wxString> &maskList);
00068 bool nameHasMask(wxString name, std::vector<wxString> &maskList);
00069
00073 void deleteAction(SCENE_ID _sceneID, wxString mask);
00074
00080 bool simplifyStructureRecursion(Scene *scene, const SceneNode * node, std::vector<wxString> &maskList, long &delCount);
00081
00085 void simplifyStructureAction(SCENE_ID _sceneID, wxString mask);
00086
00089 void removeUnusedMaterialsAction(SCENE_ID _sceneID);
00090
00093 void unifyMaterialsAction(SCENE_ID _sceneID);
00094
00097 void unifyVerticesAction(SCENE_ID _sceneID);
00098
00101 void removeUnusedGeometriesAction(SCENE_ID _sceneID);
00102
00104 void mergePrimitive(std::vector<size_t> &canMerge, GeometryTriangles::PRIMITIVE_TYPE primType, GeometryTriangles::TriDescList &ntriD,
00105 GeometryTriangles::TriDescList *triDescList, std::vector<GeometryTriangles::Indice> &nind, std::vector<bool> &primUsed,
00106 std::vector<GeometryTriangles::Indice> * indices, long &delCount);
00107
00110 void mergePrimitivesAction(SCENE_ID _sceneID);
00111
00114 void deleteNormalsAction(SCENE_ID _sceneID, wxString mask);
00115
00118 void deleteTexCoordsAction(SCENE_ID _sceneID, wxString mask);
00119
00122 void statisticsAction(SCENE_ID _sceneID);
00123
00125 virtual void processEvent(wxCommandEvent & evt)
00126 {
00128 SceneModule::processEvent(evt);
00129
00130 switch (evt.GetEventType())
00131 {
00133 case Event::EVT_PARAM_SET:
00134 {
00135 UPDATE_PARAM_FROM_EVENT_STRING(nameMaskParamID, nameMask, evt);
00136
00137 if (Parameter::ParameterIdentificator::FromEvent(evt) == deleteActionParamID)
00138 deleteAction(sceneID, nameMask);
00139 if (Parameter::ParameterIdentificator::FromEvent(evt) == simplifyStructureActionParamID)
00140 simplifyStructureAction(sceneID, nameMask);
00141 if (Parameter::ParameterIdentificator::FromEvent(evt) == removeUnusedMaterialsActionParamID)
00142 removeUnusedMaterialsAction(sceneID);
00143 if (Parameter::ParameterIdentificator::FromEvent(evt) == unifyMaterialsActionParamID)
00144 unifyMaterialsAction(sceneID);
00145 if (Parameter::ParameterIdentificator::FromEvent(evt) == unifyVerticesActionParamID)
00146 unifyVerticesAction(sceneID);
00147 if (Parameter::ParameterIdentificator::FromEvent(evt) == removeUnusedGeometriesActionParamID)
00148 removeUnusedGeometriesAction(sceneID);
00149 if (Parameter::ParameterIdentificator::FromEvent(evt) == mergePrimitivesActionParamID)
00150 mergePrimitivesAction(sceneID);
00151 if (Parameter::ParameterIdentificator::FromEvent(evt) == deleteNormalsActionParamID)
00152 deleteNormalsAction(sceneID, nameMask);
00153 if (Parameter::ParameterIdentificator::FromEvent(evt) == deleteTexCoordsActionParamID)
00154 deleteTexCoordsAction(sceneID, nameMask);
00155 if (Parameter::ParameterIdentificator::FromEvent(evt) == statisticsActionParamID)
00156 statisticsAction(sceneID);
00157 break;
00158 }
00159 }
00160 }
00161
00162 public:
00164 Optimize(const MODULE_ID & _id, const wxString & _name, EventHandler * msgSink)
00165 : SceneModule(_id, _name, 0, msgSink)
00166 {
00167 REGISTER_PARAM_GUI_TEXTCONTROL(nameMaskParamID, wxT("nameMask"), wxT("*"), wxT("Mame mask for Delete and Simplify structure.\n* - any number on any characters\n? - any character"));
00168 REGISTER_PARAM_GUI_BUTTON(deleteActionParamID, wxT("delete"), wxT("Delete nodes with given nameMask."));
00169 REGISTER_PARAM_GUI_BUTTON(simplifyStructureActionParamID, wxT("simplifyStructure"), wxT("Delete nodes with given nameMask, if they have only one children."));
00170 REGISTER_PARAM_GUI_BUTTON(removeUnusedMaterialsActionParamID, wxT("removeUnusedMaterials"), wxT("Remove materials not used in any node."));
00171 REGISTER_PARAM_GUI_BUTTON(unifyMaterialsActionParamID, wxT("unifyMaterials"), wxT("Remove duplicated materials (that differs only by the name)."));
00172 REGISTER_PARAM_GUI_BUTTON(unifyVerticesActionParamID, wxT("unifyVertices"), wxT("Unify vertices with the same coordinates, normal and texture coordinates"));
00173 REGISTER_PARAM_GUI_BUTTON(removeUnusedGeometriesActionParamID, wxT("removeUnusedGeometries"), wxT("Delete geometries not used in any node."));
00174 REGISTER_PARAM_GUI_BUTTON(mergePrimitivesActionParamID, wxT("mergePrimitives"), wxT("Merge primitives (for example TRIANGLES, QUADS, etc.).\nIt can also convert some types to another (triangle strip with three vertices is triangle, etc."));
00175 REGISTER_PARAM_GUI_BUTTON(deleteNormalsActionParamID, wxT("deleteNormals"), wxT("Detete normals from nodes with given nameMask."));
00176 REGISTER_PARAM_GUI_BUTTON(deleteTexCoordsActionParamID, wxT("deleteTexCoords"), wxT("Detete texture coordinates from nodes with given nameMask."));
00177 REGISTER_PARAM_GUI_BUTTON(statisticsActionParamID, wxT("statistics"), wxT("Compute and log information about scene.\nCorrect LogLevel must be set to see results."));
00178 }
00180 virtual ~Optimize()
00181 {
00182 }
00183
00185 virtual wxString GetDesc() const
00186 {
00187 return wxT("Optimization module");
00188 }
00189 };
00190 };
00191
00192
00193 EXPORT_VRUT_MODULE_FUNCTIONS( Optimize )
00194
00195
00196 #endif