From 5ff13e1235d6d559daec90798d4d4d638cbabeee Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 20 Apr 2004 20:55:41 +0000
Subject: [PATCH] added drawing code for faces of 2nd order tets

---
 Graphics/Mesh.cpp | 113 ++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 93 insertions(+), 20 deletions(-)

diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index dac738f104..115e18d37c 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.72 2004-04-20 01:26:13 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.73 2004-04-20 20:55:41 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -472,27 +472,100 @@ void Draw_Simplex_Volume(void *a, void *b)
       glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron);
 
     double n[3];
-    // FIXME: should subdivide if s->VSUP
     if(CTX.mesh.light) glEnable(GL_LIGHTING);
     glEnable(GL_POLYGON_OFFSET_FILL);
-    glBegin(GL_TRIANGLES);
-    if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[2], s->V[1], n);
-    glVertex3d(X[0], Y[0], Z[0]);
-    glVertex3d(X[2], Y[2], Z[2]);
-    glVertex3d(X[1], Y[1], Z[1]);
-    if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[1], s->V[3], n);
-    glVertex3d(X[0], Y[0], Z[0]);
-    glVertex3d(X[1], Y[1], Z[1]);
-    glVertex3d(X[3], Y[3], Z[3]);
-    if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[3], s->V[2], n);
-    glVertex3d(X[0], Y[0], Z[0]);
-    glVertex3d(X[3], Y[3], Z[3]);
-    glVertex3d(X[2], Y[2], Z[2]);
-    if(CTX.mesh.light) glNormal3verts(s->V[3], s->V[1], s->V[2], n);
-    glVertex3d(X[3], Y[3], Z[3]);
-    glVertex3d(X[1], Y[1], Z[1]);
-    glVertex3d(X[2], Y[2], Z[2]);
-    glEnd();
+    if(!s->VSUP){
+      glBegin(GL_TRIANGLES);
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[2], s->V[1], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[1], s->V[3], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      glVertex3d(X[3], Y[3], Z[3]);
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->V[3], s->V[2], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X[3], Y[3], Z[3]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      if(CTX.mesh.light) glNormal3verts(s->V[3], s->V[1], s->V[2], n);
+      glVertex3d(X[3], Y[3], Z[3]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      glEnd();
+    }
+    else{
+      glBegin(GL_TRIANGLES);
+      // face 1
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->VSUP[2], s->VSUP[0], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[0], s->VSUP[1], s->V[1], n);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[2], s->V[2], s->VSUP[1], n);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[0], s->VSUP[2], s->VSUP[1], n);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      // face 2
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->VSUP[0], s->VSUP[3], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[0], s->V[1], s->VSUP[5], n);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[3], s->VSUP[5], s->V[3], n);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      glVertex3d(X[3], Y[3], Z[3]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[0], s->VSUP[5], s->VSUP[3], n);
+      glVertex3d(X2[0], Y2[0], Z2[0]);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      // face 3
+      if(CTX.mesh.light) glNormal3verts(s->V[0], s->VSUP[3], s->VSUP[2], n);
+      glVertex3d(X[0], Y[0], Z[0]);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[3], s->V[3], s->VSUP[4], n);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      glVertex3d(X[3], Y[3], Z[3]);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[2], s->VSUP[4], s->V[2], n);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[2], s->VSUP[3], s->VSUP[4], n);
+      glVertex3d(X2[2], Y2[2], Z2[2]);
+      glVertex3d(X2[3], Y2[3], Z2[3]);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      // face 4
+      if(CTX.mesh.light) glNormal3verts(s->V[3], s->VSUP[5], s->VSUP[4], n);
+      glVertex3d(X[3], Y[3], Z[3]);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[5], s->V[1], s->VSUP[1], n);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      glVertex3d(X[1], Y[1], Z[1]);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[4], s->VSUP[1], s->V[2], n);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      glVertex3d(X[2], Y[2], Z[2]);
+      if(CTX.mesh.light) glNormal3verts(s->VSUP[1], s->VSUP[4], s->VSUP[5], n);
+      glVertex3d(X2[1], Y2[1], Z2[1]);
+      glVertex3d(X2[4], Y2[4], Z2[4]);
+      glVertex3d(X2[5], Y2[5], Z2[5]);
+      glEnd();
+    }
     glDisable(GL_POLYGON_OFFSET_FILL);
     glDisable(GL_LIGHTING);
   }
-- 
GitLab