00001 #ifndef MULTIRESMESHEDITOR_H
00002 #define MULTIRESMESHEDITOR_H
00003 #include <QGLViewer/qglviewer.h>
00004 #include "BaryPatch.h"
00005 #include <qobject.h>
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00017
00023 class MultiResMeshEditor : public QGLViewer
00024 {
00025 Q_OBJECT
00026 public:
00030
00031 MultiResMeshEditor(QWidget *parent, const char *name);
00034 virtual void draw();
00035 virtual void drawWithNames();
00037 virtual void init();
00039 virtual QString helpString() const;
00042 virtual void postSelection(const QPoint& point);
00044 virtual void keyPressEvent(QKeyEvent *e);
00046 void RefreshHelperPos();
00047
00049 double OptimizePlanarityFunctionTables(double &WorstPlanarity,double& AveragePlanarity, int NbQuads, Point*** Quads, double* QuadPlanarities);
00051 double OptimizePlanarityFunctionTablesAfterPerturbModif(double& WorstPlanarity,double& NewWorstPlanarity,double& AveragePlanarity,double& NewAveragePlanarity,int NbQ, Point*** QTable,double* QuadPlanarities,int* ModifiedQuads);
00053 OptimizePlanarityTables(bool OnlySelectedPerturb, bool OnlySelectedPatches, float MaxBigVectorNorm, float DerStep, float MoveStep, int NbIter, float Alpha, float Beta, float Gamma);
00055 OptimizePlanarityTablesZMode(bool OnlySelectedPerturb, bool OnlySelectedPatches, float MaxBigVectorNorm, float DerStep, float MoveStep, int NbIter, float Alpha, float Beta, float Gamma);
00057
00060
00063
00066 int _DrawLevel;
00069 int _DrawMode;
00071 BaryPatch* _RootPatch;
00074 Point ** _LvlZeroPts;
00076 int _LvlZeroNbPts;
00081 ManipulatedFrame* _MyManipulatedFrame;
00083
00092 int _InitMeshUSize;
00094 int _InitMeshVSize;
00096 int _InitMeshWSize;
00099 int _InitMeshCreateMode;
00102 float _DrawParameter1;
00105 float _DrawParameter2;
00108 float _DrawParameter3;
00110
00118 QString _SubFileName;
00120 SubdivScheme* _SubdivScheme;
00122 int _SubdivSchemeUCnx1;
00123 int _SubdivSchemeUCnx2;
00124 int _SubdivSchemeVCnx1;
00125 int _SubdivSchemeVCnx2;
00126 int _SubdivSchemeWCnx1;
00127 int _SubdivSchemeWCnx2;
00130 stack<SubdivScheme*> _UsedSchemes;
00132 stack<Point*> _PointTable1;
00134 stack<Point*> _PointTable2;
00136 stack<Point*> _PointTable3;
00138 stack<Point*> _PointTable4;
00140 stack<BaryPatch*> _PatchTable1;
00142 stack<BaryPatch*> _PatchTable2;
00144 stack<BaryPatch*> _PatchTable3;
00146 stack<BaryPatch*> _PatchTable4;
00148 int _TablesLevel[8];
00150 int _LevelMax;
00152 Point*** _PerturbTable;
00154 int* _NbPerturb;
00156
00163 QString _ObjFileName;
00165 QString _SaveName;
00170 int _OutputMode;
00172 int _NbGridPoints;
00174
00181 Frame _HelperFrame;
00183 bool _HelperDraw;
00185 float _HelperSize;
00188 float _HelperPosX;
00190 float _HelperPosY;
00192 float _HelperPosZ;
00194 Point* _HelperPt1;
00196 Point* _HelperPt2;
00198 Point* _HelperPt3;
00200 bool _HelperBaryPos;
00202 float _HelperOrientX;
00204 float _HelperOrientY;
00206 float _HelperOrientZ;
00208 bool _HelperFollowMF;
00210 AxisPlaneConstraint* _PlaneConstrainedObject;
00212 AxisPlaneConstraint* _AxisConstrainedObject;
00214 AxisPlaneConstraint* _FreeObject;
00216
00223 float _PlanaritySelectionThreshHold;
00225 float _PlanarityOptimDerStep;
00227 int _PlanarityOptimNbIter;
00229 bool _PlanarityOptimSelectedPatches;
00231 bool _PlanarityOptimSelectedPerturbs;
00233 float _PlanarityOptimMoveStep;
00235 float _PlanarityOptimAlpha;
00236 float _PlanarityOptimBeta;
00238 bool _PlanarityOptimZMode;
00241 bool _PlanarityDegMode;
00243 int _PlanarityNbTestsBetter;
00245
00246 public slots :
00252 S_ToggleDrawLevel(int Level);
00254 S_ToggleDrawMode(int DrawMode);
00255
00257 S_ToggleInitMeshUSize(int USize);
00259 S_ToggleInitMeshVSize(int VSize);
00261 S_ToggleInitMeshWSize(int WSize);
00263 S_ToggleInitMeshCreateMode(int Mode);
00265 S_SetDrawParameter1(const QString& Value);
00267 S_SetDrawParameter2(const QString& Value);
00269 S_SetDrawParameter3(const QString& Value);
00271 S_CreateInitMesh();
00273 S_ResetPerturbations();
00275 S_ResetLevelPerturbations();
00277 S_ResetSelectedPerturbations();
00279 S_DeletePatch();
00282 S_CutSubtreePatch();
00284 S_SelectNeighbors();
00286 S_SelectNextPoint();
00288 S_SelectPrevPoint();
00290 S_SelectNextPatch();
00292 S_SelectPrevPatch();
00294 S_InversePointSelection();
00299 S_CreateSaveTable(int Key);
00301 S_PrintSaveTable(int Key);
00303
00308 S_ChangeSubFileName(const QString& Name);
00311 S_LoadSubdivScheme();
00314 S_NewSubdivScheme();
00316 S_EditSubdivScheme();
00318 S_ActivateTransfo(int Uindice,int Vindice,int Windice);
00320 S_RotateTransfo(int Uindice,int Vindice,int Windice,int Axis);
00322 S_SymetriseTransfo(int Uindice,int Vindice,int Windice,int Axis);
00324 S_ApplySchemeToSelectedPatches();
00326 S_SubdivideLevel();
00328 S_SubdivideSelected();
00330 S_BuildPerturbations();
00332
00338 S_ChangeObjFileName(const QString& Name);
00340 S_ToggleOutputMode(int Mode);
00342 S_SaveObjFile();
00344 S_SaveStructure();
00346 S_LoadStructure();
00348 S_BuildStructureFromPoints(int NbGridPoints);
00350
00356 S_ToggleHelperView(bool B);
00358 S_ChangeHelperSize(int S);
00360 S_SetHelperPosX(const QString& S);
00362 S_SetHelperPosY(const QString& S);
00364 S_SetHelperPosZ(const QString& S);
00366 S_ToggleBaryAbs(bool Abs);
00368 S_SetHelperPt1();
00370 S_SetHelperPt2();
00372 S_SetHelperPt3();
00374 S_SetHelperOrientX(const QString& S);
00376 S_SetHelperOrientY(const QString& S);
00378 S_SetHelperOrientZ(const QString& S);
00380 S_PutMFOnHelper();
00382 S_MoveMFOnHelper();
00384 S_PutHelperOnPt();
00386 S_ToggleHelperFollowMF(bool B);
00388 S_ConstrainHelperXY(bool B);
00390 S_ConstrainHelperZ(bool B);
00392 S_ConstrainHelperFree(bool B);
00394
00401 S_ViewWorstPlanarity();
00404 S_ViewAveragePlanarity();
00406 S_ResetColor();
00408 S_TogglePlanarityOnSelected(bool B);
00410 S_TogglePlanarityBySelected(bool B);
00412 S_TogglePlanarityMoveTypeFree(bool B);
00414 S_SetPlanarityThreshHold(const QString &S);
00416 S_SetPlanarityDerStep(const QString &S);
00418 S_SetPlanarityMoveStep(const QString &S);
00420 S_SetPlanarityAlpha(const QString &S);
00422 S_SetPlanarityBeta(const QString &S);
00424 S_SetPlanarityNbIter(int I);
00426 S_TogglePlanarityDegMode(bool B);
00428 S_SetPlanarityNbTestsBetter(int N);
00430
00431 signals :
00437 void S_DisplayQstring(const QString & Q);
00439 void S_ResetSubdivSchemeModifier(int NbTU,int NbTV,int NbTW);
00441 void S_ResetProgressBar();
00443 void S_SetProgressBar(int B);
00445 };
00446 #endif