/* # --------------------------------------------------------------------- # # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image # pour la Sante) # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton # Previous Authors : Laurent Guigues, Jean-Pierre Roux # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil # # This software is governed by the CeCILL-B license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL-B # license as circulated by CEA, CNRS and INRIA at the following URL # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html # or in the file LICENSE.txt. # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL-B license and that you accept its terms. # ------------------------------------------------------------------------ */ #include "MeshManagerModel.h" //////////////////// /////////////////////// MESH MODEL //////////////////// MeshModel::MeshModel(int id) { _meshBase = NULL; _meshTemp = NULL; _meshId = id; _name = "mesh-" + std::to_string(id); } MeshModel::MeshModel(vtkPolyData* mesh, int id) { if(mesh != NULL){ _meshBase = mesh; _meshTemp = vtkPolyData::New(); _meshTemp->DeepCopy(_meshBase); _meshId = id; _name = "mesh-" + std::to_string(id); } } MeshModel::~MeshModel(){ if(_meshBase != NULL){ _meshBase->Delete(); } if(_meshTemp != NULL){ _meshTemp->Delete(); } } void MeshModel::ResetMeshTemp_() { if (_meshBase!=NULL) { if (_meshTemp!=NULL) { _meshTemp->Delete(); } // if _meshTemp = vtkPolyData::New(); _meshTemp->DeepCopy(_meshBase); } else { _meshTemp=NULL; } } void MeshModel::SetMeshBase(vtkPolyData* mesh) { if (mesh!=NULL) { _meshBase = mesh; ResetMeshTemp_(); } // if mesh } void MeshModel::SetMeshMemoryMode(vtkPolyData* mesh) { _meshBase = mesh; } void MeshModel::ResetMeshTemp() { ResetMeshTemp_(); } void MeshModel::CopySetMeshBase(vtkPolyData* mesh) { if (mesh!=NULL) { vtkPolyData *newMesh = vtkPolyData::New(); newMesh->DeepCopy( mesh ); SetMeshBase(newMesh); } // if mesh } vtkPolyData* MeshModel::GetMeshBase() { return _meshBase; } vtkPolyData* MeshModel::GetMeshTemp() { return _meshTemp; } int MeshModel::GetId() { return _meshId; } std::string MeshModel::GetName() { return _name; } //////////////////// /////////////////////// MESH MANAGER //////////////////// MeshManagerModel::MeshManagerModel() { //MeshModel* firstMesh = new MeshModel(); //_meshes.push_back(firstMesh); currentMesh = 0; meshId = 0; } MeshManagerModel::~MeshManagerModel() { DeleteAll(); } void MeshManagerModel::RefreshOutputs(bool signalBox) // virtual { } int MeshManagerModel::GetNumberOfMeshes(){ return _meshes.size(); } void MeshManagerModel::AddMesh_(vtkPolyData* mesh){ if(mesh != NULL){ MeshModel *meshModel = new MeshModel(mesh, meshId); _meshes.push_back(meshModel); meshId++; } else{ printf("PG MeshManagerModel::AddMesh Mesh is null \n"); } } void MeshManagerModel::AddMesh(vtkPolyData* mesh){ AddMesh_(mesh); RefreshOutputs(true); } void MeshManagerModel::AddMeshes_(std::vector meshList){ if(!meshList.empty()) { MeshModel *meshModel; for(int i = 0; i < meshList.size(); i++){ meshModel = new MeshModel(meshList[i], meshId); _meshes.push_back(meshModel); meshId++; } }else{ printf("PG MeshManagerModel::AddMeshes Empty list of meshes \n"); } } void MeshManagerModel::AddMeshes(std::vector meshList){ AddMeshes_(meshList); RefreshOutputs(true); } void MeshManagerModel::AddEmptyMesh_(){ MeshModel *meshModel = new MeshModel(meshId); _meshes.push_back(meshModel); meshId++; } void MeshManagerModel::AddEmptyMesh(){ AddEmptyMesh_(); RefreshOutputs(true); } void MeshManagerModel::InsertMeshesAtCurrent_(std::vector meshList) { if(!meshList.empty()) { std::vector tmpVect; MeshModel *meshModel; for(int i = 0; i < meshList.size(); i++){ meshModel = new MeshModel(meshList[i], meshId); tmpVect.push_back(meshModel); meshId++; } _meshes.insert(_meshes.begin() + currentMesh, tmpVect.begin(), tmpVect.end()); }else{ printf("PG MeshManagerModel::AddMeshes Empty list of meshes \n"); } } void MeshManagerModel::InsertMeshesAtCurrent(std::vector meshList) { InsertMeshesAtCurrent_(meshList); RefreshOutputs(true); } void MeshManagerModel::SelectMesh(int i) { if(i >= 0 && i < _meshes.size()){ int prevCurrent = currentMesh; currentMesh = i; if(prevCurrent != i){ RefreshOutputs(true); } } else{ printf("PG MeshManagerModel::SelectMesh index out of bounds \n"); } } void MeshManagerModel::SelectMeshByName(std::string meshName) { if(!_meshes.empty()){ bool found = false; for(int i = 0; i < _meshes.size() && !found; i++){ if(_meshes.at(i)->GetName() == meshName){ found = true; SelectMesh(i); } } } } void MeshManagerModel::DeleteMesh(int position){ if(position >= 0 && position < _meshes.size()){ delete _meshes.at(position); _meshes.erase(_meshes.begin() + position); currentMesh = currentMesh + (position <= currentMesh?-1:0); if(currentMesh < 0){ currentMesh = 0; } RefreshOutputs(true); } } void MeshManagerModel::DeleteMeshByName(std::string meshName){ if(!_meshes.empty()){ bool found = false; for(int i = 0; i < _meshes.size() && !found; i++){ if(_meshes.at(i)->GetName() == meshName){ found = true; delete _meshes.at(i); _meshes.erase(_meshes.begin() + i); currentMesh = currentMesh + (i <= currentMesh?-1:0); if(currentMesh < 0){ currentMesh = 0; } RefreshOutputs(true); } } } } void MeshManagerModel::DeleteCurrentMesh(){ if(!_meshes.empty()){ delete _meshes.at(currentMesh); _meshes.erase(_meshes.begin() + currentMesh); currentMesh--; if(currentMesh < 0){ currentMesh = 0; } RefreshOutputs(true); } } void MeshManagerModel::DeleteAll(){ if(!_meshes.empty()){ for (MeshModel* element : _meshes) { delete element; } _meshes.clear(); RefreshOutputs(true); } } void MeshManagerModel::NextMesh(){ currentMesh++; if(currentMesh >= _meshes.size()){ currentMesh = _meshes.size()-1; } RefreshOutputs(true); } void MeshManagerModel::PreviousMesh(){ currentMesh--; if(currentMesh < 0){ currentMesh = 0; } RefreshOutputs(true); } MeshModel* MeshManagerModel::GetMeshModel(){ return _meshes.at(currentMesh); } vtkPolyData* MeshManagerModel::GetMeshBase() { if(!_meshes.empty()){ return _meshes.at(currentMesh)->GetMeshBase(); } else{ return NULL; } } vtkPolyData* MeshManagerModel::GetMeshTemp() { if(!_meshes.empty()){ return _meshes.at(currentMesh)->GetMeshTemp(); } else{ return NULL; } } void MeshManagerModel::SetMeshBase(vtkPolyData* mesh) { if(!_meshes.empty()){ _meshes.at(currentMesh)->SetMeshBase(mesh); RefreshOutputs(true); }else{ printf("PG MeshManagerModel::SetMeshMemoryMode Mesh vector is empty \n"); } } void MeshManagerModel::SetMeshMemoryMode(vtkPolyData* mesh) { //if(!_meshes.empty()){ if(_meshes.size() > 1){ DeleteAll(); } if(_meshes.size() == 0){ AddEmptyMesh_(); } _meshes.at(currentMesh)->SetMeshMemoryMode(mesh); RefreshOutputs(true); //}else{ // printf("PG MeshManagerModel::SetMeshMemoryMode Mesh vector is empty \n"); //} } void MeshManagerModel::ResetMeshTemp() { if(!_meshes.empty()){ _meshes.at(currentMesh)->ResetMeshTemp(); RefreshOutputs(true); }else{ printf("PG MeshManagerModel::ResetMeshTemp Mesh vector is empty \n"); } } void MeshManagerModel::CopySetMeshBase(vtkPolyData* mesh) { if(!_meshes.empty()){ _meshes.at(currentMesh)->CopySetMeshBase(mesh); RefreshOutputs(true); } else{ printf("PG MeshManagerModel::CopySetMeshBase Mesh vector is empty \n"); } } std::vector MeshManagerModel::GetMeshNames() { std::vector names; for(int i = 0; i < _meshes.size(); i++){ names.push_back(_meshes.at(i)->GetName()); } return names; }