2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
28 #include "MeshManagerModel.h"
31 /////////////////////// MESH MODEL
34 MeshModel::MeshModel(int id)
39 _name = "mesh-" + std::to_string(id);
42 MeshModel::MeshModel(vtkPolyData* mesh, int id)
46 _meshTemp = vtkPolyData::New();
47 _meshTemp->DeepCopy(_meshBase);
49 _name = "mesh-" + std::to_string(id);
53 MeshModel::~MeshModel(){
54 if(_meshBase != NULL){
57 if(_meshTemp != NULL){
62 void MeshModel::ResetMeshTemp_()
70 _meshTemp = vtkPolyData::New();
71 _meshTemp->DeepCopy(_meshBase);
77 void MeshModel::SetMeshBase(vtkPolyData* mesh)
86 void MeshModel::SetMeshMemoryMode(vtkPolyData* mesh)
91 void MeshModel::ResetMeshTemp()
96 void MeshModel::CopySetMeshBase(vtkPolyData* mesh)
100 vtkPolyData *newMesh = vtkPolyData::New();
101 newMesh->DeepCopy( mesh );
102 SetMeshBase(newMesh);
107 vtkPolyData* MeshModel::GetMeshBase()
112 vtkPolyData* MeshModel::GetMeshTemp()
117 int MeshModel::GetId()
122 std::string MeshModel::GetName()
128 /////////////////////// MESH MANAGER
131 MeshManagerModel::MeshManagerModel()
133 //MeshModel* firstMesh = new MeshModel();
134 //_meshes.push_back(firstMesh);
139 MeshManagerModel::~MeshManagerModel()
144 void MeshManagerModel::RefreshOutputs(bool signalBox) // virtual
148 int MeshManagerModel::GetNumberOfMeshes(){
149 return _meshes.size();
152 void MeshManagerModel::AddMesh_(vtkPolyData* mesh){
154 MeshModel *meshModel = new MeshModel(mesh, meshId);
155 _meshes.push_back(meshModel);
159 printf("PG MeshManagerModel::AddMesh Mesh is null \n");
163 void MeshManagerModel::AddMesh(vtkPolyData* mesh){
165 RefreshOutputs(true);
168 void MeshManagerModel::AddMeshes_(std::vector<vtkPolyData*> meshList){
169 if(!meshList.empty())
171 MeshModel *meshModel;
172 for(int i = 0; i < meshList.size(); i++){
173 meshModel = new MeshModel(meshList[i], meshId);
174 _meshes.push_back(meshModel);
178 printf("PG MeshManagerModel::AddMeshes Empty list of meshes \n");
182 void MeshManagerModel::AddMeshes(std::vector<vtkPolyData*> meshList){
183 AddMeshes_(meshList);
184 RefreshOutputs(true);
187 void MeshManagerModel::AddEmptyMesh_(){
188 MeshModel *meshModel = new MeshModel(meshId);
189 _meshes.push_back(meshModel);
193 void MeshManagerModel::AddEmptyMesh(){
195 RefreshOutputs(true);
198 void MeshManagerModel::InsertMeshesAtCurrent_(std::vector<vtkPolyData*> meshList)
200 if(!meshList.empty())
202 std::vector<MeshModel*> tmpVect;
203 MeshModel *meshModel;
204 for(int i = 0; i < meshList.size(); i++){
205 meshModel = new MeshModel(meshList[i], meshId);
206 tmpVect.push_back(meshModel);
209 _meshes.insert(_meshes.begin() + currentMesh, tmpVect.begin(), tmpVect.end());
211 printf("PG MeshManagerModel::AddMeshes Empty list of meshes \n");
215 void MeshManagerModel::InsertMeshesAtCurrent(std::vector<vtkPolyData*> meshList)
217 InsertMeshesAtCurrent_(meshList);
218 RefreshOutputs(true);
221 void MeshManagerModel::SelectMesh(int i) {
222 if(i >= 0 && i < _meshes.size()){
223 int prevCurrent = currentMesh;
225 if(prevCurrent != i){
226 RefreshOutputs(true);
230 printf("PG MeshManagerModel::SelectMesh index out of bounds \n");
234 void MeshManagerModel::SelectMeshByName(std::string meshName) {
235 if(!_meshes.empty()){
237 for(int i = 0; i < _meshes.size() && !found; i++){
238 if(_meshes.at(i)->GetName() == meshName){
246 void MeshManagerModel::DeleteMesh(int position){
247 if(position >= 0 && position < _meshes.size()){
248 delete _meshes.at(position);
249 _meshes.erase(_meshes.begin() + position);
250 currentMesh = currentMesh + (position <= currentMesh?-1:0);
254 RefreshOutputs(true);
258 void MeshManagerModel::DeleteMeshByName(std::string meshName){
259 if(!_meshes.empty()){
261 for(int i = 0; i < _meshes.size() && !found; i++){
262 if(_meshes.at(i)->GetName() == meshName){
264 delete _meshes.at(i);
265 _meshes.erase(_meshes.begin() + i);
266 currentMesh = currentMesh + (i <= currentMesh?-1:0);
270 RefreshOutputs(true);
276 void MeshManagerModel::DeleteCurrentMesh(){
277 if(!_meshes.empty()){
278 delete _meshes.at(currentMesh);
279 _meshes.erase(_meshes.begin() + currentMesh);
284 RefreshOutputs(true);
288 void MeshManagerModel::DeleteAll(){
289 if(!_meshes.empty()){
290 for (MeshModel* element : _meshes)
295 RefreshOutputs(true);
299 void MeshManagerModel::NextMesh(){
301 if(currentMesh >= _meshes.size()){
302 currentMesh = _meshes.size()-1;
304 RefreshOutputs(true);
307 void MeshManagerModel::PreviousMesh(){
312 RefreshOutputs(true);
315 MeshModel* MeshManagerModel::GetMeshModel(){
316 return _meshes.at(currentMesh);
319 vtkPolyData* MeshManagerModel::GetMeshBase()
321 if(!_meshes.empty()){
322 return _meshes.at(currentMesh)->GetMeshBase();
329 vtkPolyData* MeshManagerModel::GetMeshTemp()
331 if(!_meshes.empty()){
332 return _meshes.at(currentMesh)->GetMeshTemp();
339 void MeshManagerModel::SetMeshBase(vtkPolyData* mesh)
341 if(!_meshes.empty()){
342 _meshes.at(currentMesh)->SetMeshBase(mesh);
343 RefreshOutputs(true);
345 printf("PG MeshManagerModel::SetMeshMemoryMode Mesh vector is empty \n");
349 void MeshManagerModel::SetMeshMemoryMode(vtkPolyData* mesh)
351 //if(!_meshes.empty()){
352 if(_meshes.size() > 1){
355 if(_meshes.size() == 0){
358 _meshes.at(currentMesh)->SetMeshMemoryMode(mesh);
359 RefreshOutputs(true);
361 // printf("PG MeshManagerModel::SetMeshMemoryMode Mesh vector is empty \n");
365 void MeshManagerModel::ResetMeshTemp()
367 if(!_meshes.empty()){
368 _meshes.at(currentMesh)->ResetMeshTemp();
369 RefreshOutputs(true);
371 printf("PG MeshManagerModel::ResetMeshTemp Mesh vector is empty \n");
376 void MeshManagerModel::CopySetMeshBase(vtkPolyData* mesh)
378 if(!_meshes.empty()){
379 _meshes.at(currentMesh)->CopySetMeshBase(mesh);
380 RefreshOutputs(true);
383 printf("PG MeshManagerModel::CopySetMeshBase Mesh vector is empty \n");
387 std::vector<std::string> MeshManagerModel::GetMeshNames()
389 std::vector<std::string> names;
390 for(int i = 0; i < _meshes.size(); i++){
391 names.push_back(_meshes.at(i)->GetName());