From 53d0761d314c01cd441521eeb1aedbfff792b694 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Fri, 6 Aug 2010 06:25:27 +0000 Subject: [PATCH] corrected bug on missing freeze matrix action (thanks to remedius for submitting the bug) --- .../filter_meshing/meshfilter.cpp | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/meshlabplugins/filter_meshing/meshfilter.cpp b/src/meshlabplugins/filter_meshing/meshfilter.cpp index fb0f98837..290bca8ff 100644 --- a/src/meshlabplugins/filter_meshing/meshfilter.cpp +++ b/src/meshlabplugins/filter_meshing/meshfilter.cpp @@ -575,10 +575,11 @@ case FP_INVERT_FACES: case FP_FREEZE_TRANSFORM: { - tri::UpdatePosition::Matrix(m.cm, m.cm.Tr); - tri::UpdateNormals::PerVertexNormalizedPerFace(m.cm); - tri::UpdateBounding::Box(m.cm); - m.cm.Tr.SetIdentity(); + tri::UpdatePosition::Matrix(m.cm, m.cm.Tr); + tri::UpdateNormals::PerVertexMatrix(m.cm,m.cm.Tr); + tri::UpdateNormals::PerFaceMatrix(m.cm,m.cm.Tr); + tri::UpdateBounding::Box(m.cm); + m.cm.Tr.SetIdentity(); } break; @@ -791,6 +792,14 @@ case FP_CENTER: trTran.SetTranslate(-m.cm.bbox.Center()); m.cm.Tr=trTran; + if(par.getBool("Freeze")){ + tri::UpdatePosition::Matrix(m.cm, m.cm.Tr); + tri::UpdateNormals::PerVertexMatrix(m.cm,m.cm.Tr); + tri::UpdateNormals::PerFaceMatrix(m.cm,m.cm.Tr); + tri::UpdateBounding::Box(m.cm); + m.cm.Tr.SetIdentity(); + } + } break; case FP_SCALE: @@ -820,7 +829,16 @@ case FP_SCALE: trTran.SetTranslate(tranVec); trTranInv.SetTranslate(-tranVec); + m.cm.Tr=trTran*trScale*trTranInv; + if(par.getBool("Freeze")){ + tri::UpdatePosition::Matrix(m.cm, m.cm.Tr); + tri::UpdateNormals::PerVertexMatrix(m.cm,m.cm.Tr); + tri::UpdateNormals::PerFaceMatrix(m.cm,m.cm.Tr); + tri::UpdateBounding::Box(m.cm); + m.cm.Tr.SetIdentity(); + } + } break; case FP_FLIP_AND_SWAP: @@ -843,6 +861,15 @@ case FP_FLIP_AND_SWAP: swapM[2][1]=1.0f; swapM[2][2]=0.0f; tr *= swapM; } m.cm.Tr=tr; + + if(par.getBool("Freeze")){ + tri::UpdatePosition::Matrix(m.cm, m.cm.Tr); + tri::UpdateNormals::PerVertexMatrix(m.cm,m.cm.Tr); + tri::UpdateNormals::PerFaceMatrix(m.cm,m.cm.Tr); + tri::UpdateBounding::Box(m.cm); + m.cm.Tr.SetIdentity(); + } + } break; case FP_NORMAL_EXTRAPOLATION :