X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaVtk%2FMeshManagerModel.cpp;fp=lib%2FcreaVtk%2FMeshManagerModel.cpp;h=677727c6057a054b06ecb097298ba36977c1f78a;hb=4c66cb9b724ca030dfd569b546521f700baadacb;hp=cf0b3dd2384da5f2e7b1b01847a5fbcc3a840e4e;hpb=d59326dc256aa89dd33ca55cfa4b0a37fcae095c;p=creaVtk.git diff --git a/lib/creaVtk/MeshManagerModel.cpp b/lib/creaVtk/MeshManagerModel.cpp index cf0b3dd..677727c 100644 --- a/lib/creaVtk/MeshManagerModel.cpp +++ b/lib/creaVtk/MeshManagerModel.cpp @@ -27,17 +27,39 @@ #include "MeshManagerModel.h" -MeshManagerModel::MeshManagerModel() +//////////////////// +/////////////////////// MESH MODEL +//////////////////// + +MeshModel::MeshModel(int id) { - _meshBase = NULL; + _meshBase = NULL; _meshTemp = NULL; + _meshId = id; + _name = "mesh-" + std::to_string(id); } -MeshManagerModel::~MeshManagerModel() +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); + } } -void MeshManagerModel::ResetMeshTemp_() +MeshModel::~MeshModel(){ + if(_meshBase != NULL){ + _meshBase->Delete(); + } + if(_meshTemp != NULL){ + _meshTemp->Delete(); + } +} + +void MeshModel::ResetMeshTemp_() { if (_meshBase!=NULL) { @@ -52,29 +74,26 @@ void MeshManagerModel::ResetMeshTemp_() } } -void MeshManagerModel::SetMeshBase(vtkPolyData* mesh) +void MeshModel::SetMeshBase(vtkPolyData* mesh) { if (mesh!=NULL) { _meshBase = mesh; ResetMeshTemp_(); - RefreshOutputs(); } // if mesh } -void MeshManagerModel::SetMeshMemoryMode(vtkPolyData* mesh) +void MeshModel::SetMeshMemoryMode(vtkPolyData* mesh) { _meshBase = mesh; - RefreshOutputs(); } -void MeshManagerModel::ResetMeshTemp() +void MeshModel::ResetMeshTemp() { ResetMeshTemp_(); - RefreshOutputs(); } -void MeshManagerModel::CopySetMeshBase(vtkPolyData* mesh) +void MeshModel::CopySetMeshBase(vtkPolyData* mesh) { if (mesh!=NULL) { @@ -85,16 +104,291 @@ void MeshManagerModel::CopySetMeshBase(vtkPolyData* mesh) } -vtkPolyData* MeshManagerModel::GetMeshBase() +vtkPolyData* MeshModel::GetMeshBase() { return _meshBase; } -vtkPolyData* MeshManagerModel::GetMeshTemp() +vtkPolyData* MeshModel::GetMeshTemp() { return _meshTemp; } -void MeshManagerModel::RefreshOutputs() // virtula +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; }