From 8ef63941c9017ad89dfd1f538ac85b1805e84134 Mon Sep 17 00:00:00 2001
From: "Beaufort, Pierre-Alexandre Richard (INF)" <pb20r939@campus.unibe.ch>
Date: Tue, 6 Apr 2021 15:08:37 +0200
Subject: [PATCH] Color for tetrahedra

---
 FileVTK.cc | 22 ++++++++++++++++-----
 FileVTK.hh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+), 5 deletions(-)

diff --git a/FileVTK.cc b/FileVTK.cc
index d78925e..a9cd8b3 100644
--- a/FileVTK.cc
+++ b/FileVTK.cc
@@ -480,8 +480,6 @@ int FileVTKPlugin::addLine(PolyMesh*& _mesh, const std::vector<quint32>& _indice
 int FileVTKPlugin::addFace(TriMesh*& _mesh, const std::vector<quint32>& _indices)                      { return addFaceToOpenMesh(_mesh, _indices);                  }
 int FileVTKPlugin::addFace(PolyMesh*& _mesh, const std::vector<quint32>& _indices)                     { return addFaceToOpenMesh(_mesh, _indices);                  }
 
-int FileVTKPlugin::addFace(TriMesh*& _mesh, quint32 _index1, quint32 _index2, quint32 _index3)  { return addFaceToOpenMesh(_mesh, _index1, _index2, _index3); }
-int FileVTKPlugin::addFace(PolyMesh*& _mesh, quint32 _index1, quint32 _index2, quint32 _index3) { return addFaceToOpenMesh(_mesh, _index1, _index2, _index3); }
 
 void FileVTKPlugin::updateVertexNormals(TriMesh*& _mesh)                                        { updateVertexNormalsOfOpenMesh(_mesh);                       }
 void FileVTKPlugin::updateVertexNormals(PolyMesh*& _mesh)                                       { updateVertexNormalsOfOpenMesh(_mesh);                       }
@@ -495,6 +493,8 @@ void FileVTKPlugin::addLineColor(TriMesh *& _mesh, quint32 _index, int _color) {
 void FileVTKPlugin::addLineColor(PolyMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for OpenMesh"));}
 void FileVTKPlugin::addFaceColor(TriMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for OpenMesh"));}
 void FileVTKPlugin::addFaceColor(PolyMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for OpenMesh"));}
+void FileVTKPlugin::addCellColor(TriMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for OpenMesh"));}
+void FileVTKPlugin::addCellColor(PolyMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for OpenMesh"));}
 
 
 void FileVTKPlugin::addVertexNormal(TriMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)   { addVertexNormalToOpenMesh(_mesh, _index, _normal);          }
@@ -766,7 +766,6 @@ void FileVTKPlugin::addVertexColorToOpenVolumeMesh(MeshT _mesh, quint32 _index,
   OpenVolumeMesh::VertexPropertyT<int> vertexColors = _mesh->template request_vertex_property<int>("vertex_colors");
   vertexColors[OpenVolumeMesh::VertexHandle(_index)] = _color;
   _mesh->set_persistent(vertexColors, true);
-  std::cerr << _index << "->" << _color << std::endl;
 
 }
 //pa
@@ -792,6 +791,16 @@ void FileVTKPlugin::addLineColorToOpenVolumeMesh(MeshT _mesh, quint32 _index, in
   _mesh->set_persistent(lineColors, true);
 
 }
+//pa
+template <typename MeshT>
+void FileVTKPlugin::addCellColorToOpenVolumeMesh(MeshT _mesh, quint32 _index, int _color)
+{
+  OpenVolumeMesh::CellPropertyT<int> cellColors = _mesh->template request_cell_property<int>("cell_colors");
+  OpenVolumeMesh::CellHandle ch(_index);
+  cellColors[ch] = _color;
+  _mesh->set_persistent(cellColors, true);
+}
+
 
 template <typename MeshT>
 void FileVTKPlugin::addVertexNormalToOpenVolumeMesh(MeshT _mesh, quint32 _index, OpenMesh::Vec3d _normal)
@@ -1247,6 +1256,7 @@ int FileVTKPlugin::addFace(HexahedralMesh*& _mesh, quint32 _index1, quint32 _ind
 void FileVTKPlugin::addVertexColor(HexahedralMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for hex meshes"));}
 void FileVTKPlugin::addLineColor(HexahedralMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for hex meshes"));}
 void FileVTKPlugin::addFaceColor(HexahedralMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for hex meshes"));}
+void FileVTKPlugin::addCellColor(HexahedralMesh *& _mesh, quint32 _index, int _color) { emit log(LOGERR, tr("Coloring is not supported for hex meshes"));}
 void FileVTKPlugin::addVertexNormal(HexahedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)  { addVertexNormalToOpenVolumeMesh(_mesh, _index, _normal);          }
 void FileVTKPlugin::addFaceNormal(HexahedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)    { addFaceNormalToOpenVolumeMesh(_mesh, _index, _normal);            }
 bool FileVTKPlugin::writeASCIIData(std::ostream& _out, HexahedralMesh& _mesh)                         { return writeASCIIDataOfOpenVolumeMesh(_out, _mesh);               }
@@ -1264,6 +1274,7 @@ int FileVTKPlugin::addFace(PolyhedralMesh*& _mesh, quint32 _index1, quint32 _ind
 void FileVTKPlugin::addVertexColor(PolyhedralMesh *& _mesh, quint32 _index, int _color) { addVertexColorToOpenVolumeMesh(_mesh, _index, _color); }
 void FileVTKPlugin::addLineColor(PolyhedralMesh *& _mesh, quint32 _index, int _color) { addLineColorToOpenVolumeMesh(_mesh, _index, _color); }
 void FileVTKPlugin::addFaceColor(PolyhedralMesh *& _mesh, quint32 _index, int _color) { addFaceColorToOpenVolumeMesh(_mesh, _index, _color); }
+void FileVTKPlugin::addCellColor(PolyhedralMesh *& _mesh, quint32 _index, int _color) { addCellColorToOpenVolumeMesh(_mesh, _index, _color); }
 void FileVTKPlugin::addVertexNormal(PolyhedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)  { addVertexNormalToOpenVolumeMesh(_mesh, _index, _normal);          }
 void FileVTKPlugin::addFaceNormal(PolyhedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)    { addFaceNormalToOpenVolumeMesh(_mesh, _index, _normal);            }
 bool FileVTKPlugin::writeASCIIData(std::ostream& _out, PolyhedralMesh& _mesh)                         { return writeASCIIDataOfOpenVolumeMesh(_out, _mesh);               }
@@ -1280,7 +1291,8 @@ int FileVTKPlugin::addFace(TetrahedralMesh*& _mesh, const std::vector<quint32>&
 int FileVTKPlugin::addFace(TetrahedralMesh*& _mesh, quint32 _index1, quint32 _index2, quint32 _index3) { return addFaceToOpenVolumeMesh(_mesh, _index1, _index2, _index3); }
 void FileVTKPlugin::addVertexColor(TetrahedralMesh*& _mesh, quint32 _index, int _color) { addVertexColorToOpenVolumeMesh(_mesh, _index, _color); }
 void FileVTKPlugin::addLineColor(TetrahedralMesh*& _mesh, quint32 _index, int _color)  { addLineColorToOpenVolumeMesh(_mesh, _index, _color); } 
-void FileVTKPlugin::addFaceColor(TetrahedralMesh*& _mesh, quint32 _index, int _color)  { addLineColorToOpenVolumeMesh(_mesh, _index, _color); }
+void FileVTKPlugin::addFaceColor(TetrahedralMesh*& _mesh, quint32 _index, int _color)  { addFaceColorToOpenVolumeMesh(_mesh, _index, _color); }
+void FileVTKPlugin::addCellColor(TetrahedralMesh*& _mesh, quint32 _index, int _color)  { addCellColorToOpenVolumeMesh(_mesh, _index, _color); }
 void FileVTKPlugin::addVertexNormal(TetrahedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)  { addVertexNormalToOpenVolumeMesh(_mesh, _index, _normal);          }
 void FileVTKPlugin::addFaceNormal(TetrahedralMesh*& _mesh, quint32 _index, OpenMesh::Vec3d _normal)    { addFaceNormalToOpenVolumeMesh(_mesh, _index, _normal);            }
 bool FileVTKPlugin::writeASCIIData(std::ostream& _out, TetrahedralMesh& _mesh)                         { return writeASCIIDataOfOpenVolumeMesh(_out, _mesh);               }
@@ -2432,7 +2444,7 @@ bool FileVTKPlugin::loadMeshColors(QString _spec,QTextStream& _in,MeshT*& _mesh,
 	addFaceColor(_mesh, _cells[read].index, color);
 	break;
       case 10 :
-	std::cout << "" ;
+	addCellColor(_mesh, _cells[read].index, color);
 	break;
       default :
 	emit log(LOGERR, tr("Coloring an unsupported type of cells: type %1").arg(_cells[read].type));	
diff --git a/FileVTK.hh b/FileVTK.hh
index 47a354c..ba6df54 100644
--- a/FileVTK.hh
+++ b/FileVTK.hh
@@ -602,6 +602,24 @@ class FileVTKPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInte
     * @param _normal      color that is added
     */
     void addFaceColor(PolyMesh *& _mesh, quint32 _index, int _color);
+
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _normal      color that is added
+    */
+    void addCellColor(TriMesh *& _mesh, quint32 _index, int _color);
+  
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _normal      color that is added
+    */
+    void addCellColor(PolyMesh *& _mesh, quint32 _index, int _color);
   
     /** \brief Adds a vertex normal.
     *
@@ -784,6 +802,17 @@ class FileVTKPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInte
     */
     template <typename MeshT>
     void addFaceColorToOpenVolumeMesh(MeshT _mesh, quint32 _index, int _color);
+
+    //pa
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _color       Color that is added
+    */
+    template <typename MeshT>
+    void addCellColorToOpenVolumeMesh(MeshT _mesh, quint32 _index, int _color);
   
     /** \brief Adds a vertex normal.
     *
@@ -938,6 +967,16 @@ class FileVTKPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInte
     * @param _color      Color that is added
    */
     void addFaceColor(HexahedralMesh *& _mesh, quint32 _index, int _color);
+
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _color      Color that is added
+   */
+    void addCellColor(HexahedralMesh *& _mesh, quint32 _index, int _color);
+
   
     /** \brief Adds a vertex normal.
     *
@@ -1099,6 +1138,15 @@ class FileVTKPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInte
     */
     void addFaceColor(PolyhedralMesh *& _mesh, quint32 _index, int _color);
 
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _color       Color that is added
+    */
+    void addCellColor(PolyhedralMesh *& _mesh, quint32 _index, int _color);
+
   
     /** \brief Adds a vertex normal.
     *
@@ -1259,6 +1307,15 @@ class FileVTKPlugin : public QObject, BaseInterface, FileInterface, LoadSaveInte
     * @param _color       Color that is added
     */
     void addFaceColor(TetrahedralMesh*& _mesh, quint32 _index, int _color);
+
+    /** \brief Adds a cell color.
+    *
+    *
+    * @param _mesh        Mesh the cell color is added to
+    * @param _index       Index of the cell
+    * @param _color       Color that is added
+    */
+    void addCellColor(TetrahedralMesh*& _mesh, quint32 _index, int _color);
   
     /** \brief Adds a vertex normal.
     *
-- 
GitLab