From 3386c0f13d471c66a1be8b279da1ba9b20d8536e Mon Sep 17 00:00:00 2001
From: Koen Hillewaert <koen.hillewaert@cenaero.be>
Date: Tue, 9 Aug 2016 11:04:55 +0000
Subject: [PATCH] bug fix in quad and tri reorientation for higher orders

---
 Geo/MQuadrangle.cpp |  4 ++--
 Geo/MTriangle.cpp   | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/Geo/MQuadrangle.cpp b/Geo/MQuadrangle.cpp
index 9aa42dea1e..fa7f30395b 100644
--- a/Geo/MQuadrangle.cpp
+++ b/Geo/MQuadrangle.cpp
@@ -331,7 +331,7 @@ double MQuadrangle::getInnerRadius()
 
 void MQuadrangle::reorient(int rot, bool swap) {
   MVertex* tmp[4];
-  if (swap) for (int i=0;i<4;i++) tmp[i] = _v[(8-i-rot)%4];
+  if (swap) for (int i=0;i<4;i++) tmp[i] = _v[(4-i+rot)%4];
   else      for (int i=0;i<4;i++) tmp[i] = _v[(4+i-rot)%4];
   std::memcpy(_v,tmp,4*sizeof(MVertex*));
 }
@@ -342,7 +342,7 @@ void MQuadrangle8::reorient(int rot, bool swap) {
   
   MQuadrangle::reorient(rot,swap);
   MVertex* tmp[4];
-  if (swap) for (int i=0;i<4;i++) tmp[i] = _vs[(8-i-rot)%4];
+  if (swap) for (int i=0;i<4;i++) tmp[i] = _vs[(7-i+rot)%4];
   else      for (int i=0;i<4;i++) tmp[i] = _vs[(4+i-rot)%4];
   std::memcpy(_vs,tmp,4*sizeof(MVertex*));
 }
diff --git a/Geo/MTriangle.cpp b/Geo/MTriangle.cpp
index ec79b52858..c3c88554d4 100644
--- a/Geo/MTriangle.cpp
+++ b/Geo/MTriangle.cpp
@@ -269,19 +269,23 @@ void MTriangle::reorient(int rot,bool swap) {
   
   MVertex* tmp[3];
   std::memcpy(tmp,_v,3*sizeof(MVertex*));
-  if (swap) for (int i=0;i<3;i++) _v[i] = tmp[(6-i-rot)%3];
+  if (swap) for (int i=0;i<3;i++) _v[i] = tmp[(3-i+rot)%3];
   else      for (int i=0;i<3;i++) _v[i] = tmp[(3+i-rot)%3];
 }
 
-void MTriangle6::reorient(int rot, bool swap) {
+#include "HighOrder.h"
 
+void MTriangle6::reorient(int rot, bool swap) {
+  
+  Msg::Info("Reorienting triangle 6 with rot %d and swap %d",
+            rot,swap ? 1:0);
   if (rot == 0 && !swap) return;
 
   MTriangle::reorient(rot,swap);
   MVertex* tmp[3];
   std::memcpy(tmp,_vs,3*sizeof(MVertex*));
-  if (swap) for (int i=0;i<3;i++) _vs[i] = tmp[(7-i-rot)%3];
-  else      for (int i=0;i<3;i++) _vs[i] = tmp[(3+i-rot)%3];
+  if (swap) for (int i=0;i<3;i++) _vs[i] = tmp[(5+rot-i)%3];
+  else      for (int i=0;i<3;i++) _vs[i] = tmp[(3-rot+i)%3];
 }
 
 void MTriangleN::reorient(int rot, bool swap) {
-- 
GitLab