diff --git a/TP_Geom3D_2018/Projet_modeling/main.cpp b/TP_Geom3D_2018/Projet_modeling/main.cpp
index b1abfadd622d8a5f67957ac021850421a200e2ea..a12054f62113f0e04a2768aec17d08f7f1862847 100644
--- a/TP_Geom3D_2018/Projet_modeling/main.cpp
+++ b/TP_Geom3D_2018/Projet_modeling/main.cpp
@@ -19,7 +19,7 @@ const Vec3 NOIR    = {0,0,0};
 
 void draw_repere(const Primitives& prim, const Mat4& tr)
 {
-     prim.draw_sphere(tr, BLANC);
+    prim.draw_sphere(tr, BLANC);
     prim.draw_cylinder(tr*translate(1,0,0)* scale(2,0.5,0.5) * rotateY(90) , ROUGE); // X
     prim.draw_cylinder(tr*translate(0,1,0)*  scale(0.5,2,0.5) * rotateX(90)  , VERT); //Y
     prim.draw_cylinder(tr*translate(0,0,1) * scale(0.5,0.5,2) , BLEU); //Z
@@ -32,73 +32,99 @@ void draw_repere(const Primitives& prim, const Mat4& tr)
 
 void star(MeshQuad& m)
 {
-	m.create_cube();
-    float rot = 0 ;
-    for (int i = 0 ; i < 10 ; i++)
+    m.create_cube();
+
+    float rot = 0. ;
+   #pragma omp parallel for private(j)
+    for (int i = 0 ; i < 12 ; i++)
         for (int j = 0 ; j < 6 ; j++){
              rot = 20 + 2*i ;
              m.extrude_quad(j*4) ;
-             m.shrink_quad(j*4,0.8) ;
+             m.shrink_quad(j*4,0.85) ;
              m.tourne_quad(j*4,rot) ;
 
         }
-
 }
 
+
 void spirale(MeshQuad& m)
 {
+    m.create_cube();
+     #pragma omp parallel for
+    for(int i = 0 ; i < 250 ; i++)
+    {
+          m.transfo_quad(4,rotateX(10)*translate(0.11,0,0)*scale(0.99)) ;
+          m.extrude_quad(4) ;
+    }
 
 }
+void test(MeshQuad& m ,int q, int n )
+{
+    if(n > 0)
+    {
+        m.extrude_quad(q) ;
+        m.extrude_quad(q+16) ;
+        m.extrude_quad(q+8) ;
+        m.shrink_quad(q+4,0.85);
 
 
+      test(m,q+4,n-1) ;
+    }
 
+}
+
+void shape1(MeshQuad& m )
+{
+    m.create_cube() ;
+    test(m,4,3) ;
 
+}
 int main(int argc, char *argv[])
 {
-	Primitives prim;
-	int selected_quad = -1;
-	glm::mat4 selected_frame;
-	MeshQuad mesh;
-
-	// init du viewer
-	QApplication a(argc, argv);
-	SimpleViewer::init_gl();
-	SimpleViewer viewer({0.1,0.1,0.1},5);
-
-	// GL init
-	viewer.f_init = [&] ()
-	{
-		prim.gl_init();
-		mesh.gl_init();
-	};
-
-	// drawing
-	viewer.f_draw = [&] ()
-	{
-		mesh.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
-		prim.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
+    Primitives prim;
+    int selected_quad = -1;
+    glm::mat4 selected_frame;
+    MeshQuad mesh;
+
+    // init du viewer
+    QApplication a(argc, argv);
+    SimpleViewer::init_gl();
+    SimpleViewer viewer({0.1,0.1,0.1},5);
+
+    // GL init
+    viewer.f_init = [&] ()
+    {
+        prim.gl_init();
+        mesh.gl_init();
+    };
+
+    // drawing
+    viewer.f_draw = [&] ()
+    {
+        mesh.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
+        prim.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
 
         mesh.draw(CYAN);
 
         if (selected_quad>=0)
         {
-            //draw_repere(prim,selected_frame);
-            //std::cout << "selected is N° "<< selected_quad << std::endl;
+            draw_repere(prim,selected_frame);
+            std::cout << "selected is N° "<< selected_quad << std::endl;
          }
-	};
+    };
 
     Mat4 transfo  =translate(0,1,0) ;
-	// to do when key pressed
-	viewer.f_keyPress = [&] (int key, Qt::KeyboardModifiers mod)
-	{
-		switch(key)
-		{
-			case Qt::Key_C:
-				if (!(mod & Qt::ControlModifier))
-					mesh.create_cube();
-				break;
-
-			// e extrusion
+    // to do when key pressed
+    viewer.f_keyPress = [&] (int key, Qt::KeyboardModifiers mod)
+    {
+        switch(key)
+        {
+            case Qt::Key_C:
+                if (!(mod & Qt::ControlModifier))
+                    mesh.create_cube();
+                break;
+
+            // e extrusion
             case Qt::Key_E:
             if (!(mod & Qt::ControlModifier))
                 if (selected_quad >=0 ) mesh.extrude_quad(selected_quad) ;
@@ -113,56 +139,58 @@ int main(int argc, char *argv[])
 
              case Qt::Key_Minus:
             if (!(mod & Qt::ControlModifier))
-            if (selected_quad
-                    >=0 ) mesh.decale_quad(selected_quad,-1) ;
+            if (selected_quad >=0 ) mesh.decale_quad(selected_quad,-1) ;
              break ;
-			// z/Z shrink
+            // z/Z shrink
              case Qt::Key_Z:
                  if (!(mod & Qt::ControlModifier))
                  if (selected_quad >=0 ) mesh.shrink_quad(selected_quad,0.5) ;
              break ;
-			// t/T tourne
+            // t/T tourne
             case Qt::Key_T:
                  if (!(mod & Qt::ControlModifier))
                  if (selected_quad >=0 ) mesh.tourne_quad(selected_quad,1)  ;
                break ;
-			// Attention au cas m_selected_quad == -1
 
-			// generation d'objet
-			case Qt::Key_S:
-				star(mesh);
-				break;
+            // generation d'objet
+            case Qt::Key_S:
+                star(mesh);
+                break;
 
-        case Qt::Key_P:
-             spirale(mesh) ;
-            break;
+            case Qt::Key_P:
+               spirale(mesh) ;
+               break;
+
+            case Qt::Key_1:
+                shape1(mesh) ;
+                break ;
              // ....
 
+                // Attention au cas m_selected_quad == -1
+            default:
+                break;
+        }
 
-			default:
-				break;
-		}
-
-		Vec3 sc;
-		float r;
-		mesh.bounding_sphere(sc,r);
-		viewer.setSceneCenter(qglviewer::Vec(sc[0],sc[1],sc[2]));
-		viewer.setSceneRadius(r);
-		viewer.camera()->centerScene();
-		viewer.update();
-	};
-
-	// to do when mouse clicked (P + Dir = demi-droite (en espace objet) orthogonale à l'écran passant par le point cliqué
-	viewer.f_mousePress3D = [&] (Qt::MouseButton /*b*/, const glm::vec3& P, const glm::vec3& Dir)
-	{
-		selected_quad = mesh.intersected_closest(P,Dir);
-		if (selected_quad>=0)
-			selected_frame = mesh.local_frame(selected_quad);
+        Vec3 sc;
+        float r;
+        mesh.bounding_sphere(sc,r);
+        viewer.setSceneCenter(qglviewer::Vec(sc[0],sc[1],sc[2]));
+        viewer.setSceneRadius(r);
+        viewer.camera()->centerScene();
+        viewer.update();
+    };
+
+    // to do when mouse clicked (P + Dir = demi-droite (en espace objet) orthogonale à l'écran passant par le point cliqué
+    viewer.f_mousePress3D = [&] (Qt::MouseButton /*b*/, const glm::vec3& P, const glm::vec3& Dir)
+    {
+        selected_quad = mesh.intersected_closest(P,Dir);
+        if (selected_quad>=0)
+            selected_frame = mesh.local_frame(selected_quad);
         //std::cout << selected_quad << std::endl;
-	};
+    };
 
-	viewer.clearShortcuts();
-	viewer.setShortcut(QGLViewer::EXIT_VIEWER,Qt::Key_Escape);
-	viewer.show();
-	return a.exec();
+    viewer.clearShortcuts();
+    viewer.setShortcut(QGLViewer::EXIT_VIEWER,Qt::Key_Escape);
+    viewer.show();
+    return a.exec();
 }
diff --git a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
index 449640595f6be4eaf38125cd9d5df9f9812ff535..f603e6987bad2fb8291460bdd4633a9ea207cab5 100644
--- a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
+++ b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
@@ -3,8 +3,10 @@
 #include <iostream>
 #include <vector>
 #include <algorithm>
+#include <omp.h>
 
 using namespace std;
+
 void MeshQuad::clear()
 {
     m_points.clear();
@@ -25,6 +27,7 @@ void MeshQuad::add_quad(int i1, int i2, int i3, int i4)
     m_quad_indices.push_back(i2);
     m_quad_indices.push_back(i3);
     m_quad_indices.push_back(i4);
+
     m_nb_ind_edges += 4;
 }
 
@@ -35,7 +38,9 @@ void MeshQuad::convert_quads_to_tris(const std::vector<int>& quads, std::vector<
 
     // Pour chaque quad on genere 2 triangles
     // Attention a repecter l'orientation des triangles
-    for (size_t i=0; i<quads.size(); i+=4) {
+
+    #pragma omp parallel for
+    for (size_t i=0; i< quads.size(); i+=4) {
         int v1 = quads.at(i);
         int v2 = quads.at(i+1);
         int v3 = quads.at(i+2);
@@ -55,11 +60,15 @@ void MeshQuad::convert_quads_to_edges(const std::vector<int>& quads, std::vector
 {
     edges.clear();
     edges.reserve(quads.size()); // ( *2 /2 !)
+
     // Pour chaque quad on genere 4 aretes, 1 arete = 2 indices.
     // Mais chaque arete est commune a 2 quads voisins !
     // Comment n'avoir qu'une seule fois chaque arete ?
-    size_t i, max_quads = quads.size();
-    for (i = 0; i < max_quads; i+=4) {
+
+    size_t i, nb_quads = quads.size();
+
+    #pragma omp parallel for
+    for (i = 0; i < nb_quads; i+=4) {
         int i1 = quads.at(i);
         int i2 = quads.at(i+1);
         int i3 = quads.at(i+2);
@@ -87,16 +96,20 @@ void MeshQuad::convert_quads_to_edges(const std::vector<int>& quads, std::vector
 
 void MeshQuad::bounding_sphere(Vec3& C, float& R)
 {
-      size_t i;
-      for (i = 0; i < m_points.size(); i++) {
+      size_t i , nb_points = m_points.size();
+
+      #pragma omp parallel for reduction(+:C)
+      for (i = 0; i < nb_points; i++) {
           C += m_points.at(i);
       }
-      C /= m_points.size();
-      float max = glm::length(m_points.at(0) - C);
-      for (i = 1; i < m_points.size(); i++) {
-          float tmp = glm::length(m_points.at(i) - C);
-          if (tmp > max) {
-              max = tmp;
+      C /= nb_points;
+
+      float temp ,max = glm::length(m_points.at(0) - C);
+
+      for (i = 1; i < nb_points; i++) {
+          temp = glm::length(m_points.at(i) - C);
+          if (temp > max) {
+              max = temp;
           }
       }
       R = max;
@@ -106,23 +119,25 @@ void MeshQuad::bounding_sphere(Vec3& C, float& R)
 void MeshQuad::create_cube()
 {
     clear();
-    // ajouter 8 sommets (-0.5 +0.5)
-    int i1 = add_vertex(Vec3(-0.35,0.35,0.35));
-    int i2 = add_vertex(Vec3(-0.35,-0.35,0.35));
-    int i3 = add_vertex(Vec3(0.35,-0.35,0.35));
-    int i4 = add_vertex(Vec3(0.35,0.35,0.35));
-    int i5 = add_vertex(Vec3(-0.35,0.35,-0.35));
-    int i6 = add_vertex(Vec3(-0.35,-0.35,-0.35));
-    int i7 = add_vertex(Vec3(0.35,-0.35,-0.35));
-    int i8 = add_vertex(Vec3(0.35,0.35,-0.35));
+    float s = 0.7 ;
+
+    // ajouter 8 sommets (-1 +1)
+    int i1 = add_vertex(Vec3(-s,s,s));
+    int i2 = add_vertex(Vec3(-s,-s,s));
+    int i3 = add_vertex(Vec3(s,-s,s));
+    int i4 = add_vertex(Vec3(s,s,s));
+    int i5 = add_vertex(Vec3(-s,s,-s));
+    int i6 = add_vertex(Vec3(-s,-s,-s));
+    int i7 = add_vertex(Vec3(s,-s,-s));
+    int i8 = add_vertex(Vec3(s,s,-s));
 
     // ajouter 6 faces (sens trigo)
-    add_quad(i1,i2,i3,i4);
-    add_quad(i4,i3,i7,i8);
-    add_quad(i8,i7,i6,i5);
     add_quad(i5,i6,i2,i1);
     add_quad(i2,i6,i7,i3);
     add_quad(i1,i4,i8,i5);
+    add_quad(i1,i2,i3,i4);
+    add_quad(i4,i3,i7,i8);
+    add_quad(i8,i7,i6,i5);
 
     gl_update();
 }
@@ -132,16 +147,12 @@ Vec3 MeshQuad::normal_of(const Vec3& A, const Vec3& B, const Vec3& C)
     // Attention a l'ordre des points !
     // le produit vectoriel n'est pas commutatif U ^ V = - V ^ U
     // ne pas oublier de normaliser le resultat.
-    //Produit vectoriel(Vec(AB),Vec(BC))
-    Vec3 AB, AC, total, n;
-    AB = B - A;
-    AC = C - A;
-    total = glm::cross(AB, AC);
-    n = glm::normalize(total);
-    return n;
-}
 
-float MeshQuad::calcul_aire(int q)
+    Vec3 normal = glm::cross(B - A, C - A);
+    return glm::normalize(normal);
+ }
+
+float MeshQuad::quad_aire(int q)
 {
     int v1, v2, v3, v4;
     v1 = m_quad_indices.at(q);
@@ -155,13 +166,15 @@ float MeshQuad::calcul_aire(int q)
     C = m_points.at(v3);
     D = m_points.at(v4);
 
-    float triAire1, triAire2, aire;
-    //Aire triangle ABC et Aire triangle ACD
-    triAire1 = glm::length(glm::cross(B - A, C - A));
-    triAire2 = glm::length(glm::cross(C - A, D - A));
-    //L'aire du quad est la somme des 2 aires
-    aire = triAire1 + triAire2;
-    return aire;
+    float a1 , a2;
+
+    // Aire triangle ABC
+    a1 = glm::length(glm::cross(B - A, C - A))/2;
+
+    // Aire triangle ACD
+    a2 = glm::length(glm::cross(C - A, D - A))/2;
+
+    return a1 + a2;
 }
 
 
@@ -170,7 +183,7 @@ bool MeshQuad::is_points_in_quad(const Vec3& P, const Vec3& A, const Vec3& B, co
     // On sait que P est dans le plan du quad.
     // P est-il au dessus des 4 plans contenant chacun la normale au quad et une arete AB/BC/CD/DA ?
     // si oui il est dans le quad
-    float res = -1, d = 0;
+
     Vec3 n1, n2, n3, n4, n, AB, BC, CD, DA;
     n = normal_of(A, B, C);
     AB = B - A;
@@ -178,37 +191,26 @@ bool MeshQuad::is_points_in_quad(const Vec3& P, const Vec3& A, const Vec3& B, co
     CD = D - C;
     DA = A - D;
 
-    //Plan AB
+    // AB
     n1 = glm::cross(n, AB);
-    d = glm::dot(n1, A);
-    res = glm::dot(n1, P) - d;
-    if (res < 0) {
+    if (glm::dot(n1, P) - glm::dot(n1, A)  < 0)
         return false;
-    }
 
-    //Plan BC
+    // BC
     n2 = glm::cross(n, BC);
-    d = glm::dot(n2, B);
-    res = glm::dot(n2, P) - d;
-    if (res < 0) {
+    if ( glm::dot(n2, P) - glm::dot(n2, B) < 0)
         return false;
-    }
 
-    //Plan CD
+    // CD
     n3 = glm::cross(n, CD);
-    d = glm::dot(n3, C);
-    res = glm::dot(n3, P) - d;
-    if (res < 0) {
+    if (glm::dot(n3, P) - glm::dot(n3, C) < 0)
         return false;
-    }
 
-    //Plan DA
+    // DA
     n4 = glm::cross(n, DA);
-    d = glm::dot(n4, D);
-    res = glm::dot(n4, P) - d;
-    if (res < 0) {
+    if (glm::dot(n4, P) - glm::dot(n4, D)< 0)
         return false;
-    }
+
     return true;
 }
 
@@ -220,21 +222,25 @@ bool MeshQuad::intersect_ray_quad(const Vec3& P, const Vec3& Dir, int q, Vec3& i
     i2 = m_quad_indices.at(q+1);
     i3 = m_quad_indices.at(q+2);
     i4 = m_quad_indices.at(q+3);
+
     // recuperation des points
     Vec3 A, B, C, D;
     A = m_points.at(i1);
     B = m_points.at(i2);
     C = m_points.at(i3);
     D = m_points.at(i4);
+
     // calcul de l'equation du plan (N+d)
     Vec3 n = normal_of(A, B, C);
-    float d = glm::dot(n, A); //Produit scalaire normal et p1 pour trouver d
+    float d = glm::dot(n, A);
 
     // calcul de l'intersection rayon plan
     float alpha = (d - glm::dot(n, P)) / glm::dot(n, Dir);
+
     // I = P + alpha*Dir est dans le plan => calcul de alpha
     // alpha => calcul de I
     inter = P + alpha*Dir;
+
     // I dans le quad ?
     return is_points_in_quad(inter, A, B, C, D);
 }
@@ -245,29 +251,40 @@ int MeshQuad::intersected_closest(const Vec3& P, const Vec3& Dir)
     // on parcours tous les quads
     // on teste si il y a intersection avec le rayon
     // on garde le plus proche (de P)
-    int inter = -1;
-    Vec3 intersection = Vec3();
-    bool first = true;
-    float temp;
-    int i;
-    int max_quads = static_cast<int>(m_quad_indices.size());
-    for (i = 0; i < max_quads; i+=4) {
-        if (intersect_ray_quad(P, Dir, i, intersection)) {
-            if (first) {
-                temp = glm::length(P - intersection);
-                inter = i;
-                first = false;
+
+    int i, index = -1;
+    Vec3 intersector = Vec3();
+    bool existe = false;
+    float min ,temp ;
+
+    int nb_quads = m_quad_indices.size();
+
+    // Chercher l'indice de la premiere intersection
+    #pragma omp parallel for
+    for (i = 0; i < nb_quads; i += 4) {
+        if (intersect_ray_quad(P, Dir, i, intersector)) {
+                min = glm::length(P - intersector);
+                index = i;
+                existe = true ;
             }
-            else {
-                float test = glm::length(P - intersection);
-                if (test < temp) {
-                    inter = i;
-                    temp = test;
-                }
+        }
+    // S'il y'a au moins une intersection
+    if(existe)
+    {
+        #pragma omp parallel for
+        for (i = 0; i < nb_quads; i += 4){
+            if (intersect_ray_quad(P, Dir, i, intersector))
+            {
+                    temp = glm::length(P - intersector);
+                    if (temp < min) {
+                        index = i;
+                        min = temp;
+                    }
             }
         }
     }
-    return inter;
+
+    return index;
 }
 
 
@@ -289,32 +306,35 @@ Mat4 MeshQuad::local_frame(int q)
     i4 = m_quad_indices.at(q+3);
 
     // recuperation des points
-    Vec3 A, B, C, D, AB, AC;
+    Vec3 A, B, C, D, AB;
     A = m_points.at(i1);
     B = m_points.at(i2);
     C = m_points.at(i3);
     D = m_points.at(i4);
     AB = B - A;
-    AC = C - A;
 
     // calcul de Z:N / X:AB -> Y
-    Vec3 X, Y, Z, nTri1, nTri2;
-    nTri1 = normal_of(A, B, C);
-    nTri2 = normal_of(A, C, D);
-    Z = glm::normalize((nTri1+nTri2)/2.0f);
-    X = glm::normalize(glm::cross(A - B, Z));
+    Vec3 X, Y, Z, n;
+
+     n = normal_of(A, B, C) + normal_of(A, C, D);
+     n /= 2 ;
+
+    Z = glm::normalize(n);
+    X = glm::normalize(glm::cross(AB, Z));
     Y = glm::normalize(glm::cross(X, Z));
 
     // calcul du centre
-    Vec3 center = (A + B + C + D)/4.0f;
+    Vec3 center = (A + B + C + D);
+    center /= 4 ;
 
     // calcul de la taille
     float taille = glm::length(AB)/2;
 
     // calcul de la matrice
-    Mat4 res = Mat4(Vec4(X, 0), Vec4(Y, 0), Vec4(Z, 0), Vec4(center, 1));
-    res *= scale(taille);
-    return res;
+    Mat4 result = Mat4(Vec4(X, 0), Vec4(Y, 0), Vec4(Z, 0), Vec4(center, 1));
+    result *= scale(taille);
+
+    return result;
 
 }
 
@@ -328,38 +348,45 @@ void MeshQuad::extrude_quad(int q)
     i4 = m_quad_indices.at(q+3);
 
     // recuperation des points
-    Vec3 A, B, C, D, AB, AC;
+    Vec3 A, B, C, D;
     A = m_points.at(i1);
     B = m_points.at(i2);
     C = m_points.at(i3);
     D = m_points.at(i4);
-    AB = B - A;
-    AC = C - A;
+
+
     // calcul de la normale
     Vec3 n = normal_of(A, B, C);
+
     // calcul de la hauteur
-    float longueur = sqrt(calcul_aire(q));
+    float longueur = sqrt(quad_aire(q));
+
     // calcul et ajout des 4 nouveaux points
     Vec3 p1, p2, p3, p4;
-    int v1, v2, v3, v4;
     p1 = A + n * longueur;
     p2 = B + n * longueur;
     p3 = C + n * longueur;
     p4 = D + n * longueur;
+
+    int v1, v2, v3, v4;
     v1 = add_vertex(p1);
     v2 = add_vertex(p2);
     v3 = add_vertex(p3);
     v4 = add_vertex(p4);
+
     // on remplace le quad initial par le quad du dessu
     m_quad_indices.at(q) = v1;
     m_quad_indices.at(q+1) = v2;
     m_quad_indices.at(q+2) = v3;
     m_quad_indices.at(q+3) = v4;
+
     // on ajoute les 4 quads des cotes
     add_quad(i1, i2, v2, v1);
-    add_quad(i2, i3, v3, v2);
     add_quad(i3, i4, v4, v3);
     add_quad(i4, i1, v1, v4);
+    add_quad(i2, i3, v3, v2);
+
+
     gl_update();
 }
 
@@ -381,19 +408,21 @@ void MeshQuad::transfo_quad(int q, const glm::mat4& tr)
 
     // generation de la matrice de transfo globale:
     // indice utilisation de glm::inverse() et de local_frame
-    Mat4 pos = local_frame(q);
+    Mat4 local = local_frame(q);
 
-    float det = glm::determinant(pos);
-    if (det == 0) {
+     if (glm::determinant(local) == 0) {
         return;
     }
-    Mat4 transfo = pos * tr * glm::inverse(pos);
+    Mat4 transfo = local * tr * glm::inverse(local);
+
     // Application au 4 points du quad
     Vec4 A_prime, B_prime, C_prime, D_prime;
+
     A = Vec3(transfo * Vec4(A, 1));
     B = Vec3(transfo * Vec4(B, 1));
     C = Vec3(transfo * Vec4(C, 1));
     D = Vec3(transfo * Vec4(D, 1));
+
     gl_update();
 }
 
@@ -401,6 +430,7 @@ void MeshQuad::decale_quad(int q, float d)
 {
     Mat4 transfo = translate(0, 0, d);
     transfo_quad(q, transfo);
+
     gl_update();
 }
 
@@ -408,6 +438,7 @@ void MeshQuad::shrink_quad(int q, float s)
 {
     Mat4 transfo = scale(s);
     transfo_quad(q, transfo);
+
     gl_update();
 }
 
@@ -415,13 +446,11 @@ void MeshQuad::tourne_quad(int q, float a)
 {
     Mat4 transfo = rotateZ(a) ;
     transfo_quad(q, transfo);
+
     gl_update();
 }
 
 
-
-
-
 MeshQuad::MeshQuad():
     m_nb_ind_edges(0)
 {}
diff --git a/TP_Geom3D_2018/Projet_modeling/meshquad.h b/TP_Geom3D_2018/Projet_modeling/meshquad.h
index 20943fceb174fbb0b285fcf707c544cca8ae9601..c1494dad0c4df7d1d282f6d9ec15faf9af8c1f4c 100644
--- a/TP_Geom3D_2018/Projet_modeling/meshquad.h
+++ b/TP_Geom3D_2018/Projet_modeling/meshquad.h
@@ -10,7 +10,8 @@
 
 class MeshQuad
 {
-protected:
+public:
+
 	/// Points
 	std::vector<Vec3> m_points;
 	/// indice de quads
@@ -18,7 +19,6 @@ protected:
 	/// nombre d'aretes
 	int m_nb_ind_edges;
 
-public:
 
 	inline int nb_quads() const { return m_quad_indices.size()/4;}
 
@@ -29,9 +29,8 @@ public:
 	 */
 	void clear();
 
-    float triAire(const Vec3& P, const Vec3& A, const Vec3& B) ;
-    float calcul_aire(int q) ;
-/**
+
+    /**
 	 * @brief ajoute un sommet
 	 * @param P sommet
 	 * @return l'indice du sommet
@@ -91,7 +90,7 @@ public:
      * @return l'aire du quad
      */
 
-    //float calcul_aire(Vec3 p1,Vec3 p2,Vec3 p3,Vec3 p4);
+    float quad_aire(int q) ;
 
 	/**
 	 * @brief Determine si P est dans le quad A,B,C,D (P considéré ~ dans le plan ABCD)
diff --git a/TP_Geom3D_2018/bin/proj_model.exe b/TP_Geom3D_2018/bin/proj_model.exe
index 7185bce1b5d402675a4fe23fada2694ba8843058..73e179ff3626880832142170af7c42c67da42d76 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.exe and b/TP_Geom3D_2018/bin/proj_model.exe differ
diff --git a/TP_Geom3D_2018/bin/proj_model.ilk b/TP_Geom3D_2018/bin/proj_model.ilk
index 911f7b4df0a72ae7716e96ddce6edb0bf2ce3f4a..3302f40956bbf72742a51da1f267ef076799fb51 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.ilk and b/TP_Geom3D_2018/bin/proj_model.ilk differ
diff --git a/TP_Geom3D_2018/bin/proj_model.pdb b/TP_Geom3D_2018/bin/proj_model.pdb
index e5bf9da95bbd5ab05b0635c3d3ea4897f82ede7f..0b66bd9af84f080c5e6a2d4bc6252a83a81ea516 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.pdb and b/TP_Geom3D_2018/bin/proj_model.pdb differ
diff --git a/TP_Geom3D_2018/geom3D.pro.user b/TP_Geom3D_2018/geom3D.pro.user
index ddceba7f6bcdac6e3126c08ece2f4926c155f9de..4d935056bc8477ad8f2dbc0a2193984d3cd3f87c 100644
--- a/TP_Geom3D_2018/geom3D.pro.user
+++ b/TP_Geom3D_2018/geom3D.pro.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-03-17T00:37:07. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-02T14:43:58. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj
index 0140e409764d7fb98b34bd669a727595c14428cd..459e124526787fefe2bd50f490577dee86ab21df 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj
index e2e24ec4cfe52c531d7bc732f29138725c9d577d..4dc4da8bc2be4784409eac6b63dd6a531f3c4621 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj
index a2ac973988516b8bd606eaa7d8016debe8a1f700..c7cc3e4b9b9cbac13591f7f7b10c840d869e8cad 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb
index 7994324ade10a3efec18c4ec27a30c5e0f9ded5f..0abd5eb4309ecc69004f4c5c40e294e4fefd20dc 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb differ