X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPlugins%2FMEDReader%2FIO%2FvtkExtractGroup.cxx;h=255ccc5b9e1b2e4d2c6e990493909f59354d0d3b;hb=eb9a54c7c13624ca227d587e5ae33fcdba29e40f;hp=06ceb7a911cea4e01abf2b9b5c6d3ff4f1596a79;hpb=88fa99f207bdea2f62e4ecef7421a8c6e00b3ccf;p=modules%2Fparavis.git diff --git a/src/Plugins/MEDReader/IO/vtkExtractGroup.cxx b/src/Plugins/MEDReader/IO/vtkExtractGroup.cxx index 06ceb7a9..255ccc5b 100644 --- a/src/Plugins/MEDReader/IO/vtkExtractGroup.cxx +++ b/src/Plugins/MEDReader/IO/vtkExtractGroup.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2010-2015 CEA/DEN, EDF R&D +// Copyright (C) 2010-2016 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -23,6 +23,7 @@ #include "vtkMEDReader.h" #include "vtkAdjacentVertexIterator.h" +#include "vtkDataArrayTemplate.h" #include "vtkIntArray.h" #include "vtkCellData.h" #include "vtkPointData.h" @@ -452,7 +453,7 @@ int vtkExtractGroup::RequestInformation(vtkInformation *request, vtkInformationV if(!vtkExtractGroup::vtkExtractGroupInternal::IsInformationOK(inputInfo)) { vtkErrorMacro("No SIL Data available ! The source of this filter must be MEDReader !"); - return 0; + return 0; } this->SetSIL(vtkMutableDirectedGraph::SafeDownCast(inputInfo->Get(vtkMEDReader::META_DATA()))); @@ -568,95 +569,100 @@ int vtkExtractGroup::RequestData(vtkInformation *request, vtkInformationVector * // std::cerr << "########################################## vtkExtractGroup::RequestData ##########################################" << std::endl; // request->Print(cout); vtkInformation* inputInfo=inputVector[0]->GetInformationObject(0); - vtkDataSet *input(vtkDataSet::SafeDownCast(inputInfo->Get(vtkDataObject::DATA_OBJECT()))); + vtkMultiBlockDataSet *inputMB(vtkMultiBlockDataSet::SafeDownCast(inputInfo->Get(vtkDataObject::DATA_OBJECT()))); + if(inputMB->GetNumberOfBlocks()!=1) + { + std::ostringstream oss; oss << "vtkExtractGroup::RequestData : input has not the right number of parts ! Expected 1 !"; + if(this->HasObserver("ErrorEvent") ) + this->InvokeEvent("ErrorEvent",const_cast(oss.str().c_str())); + else + vtkOutputWindowDisplayErrorText(const_cast(oss.str().c_str())); + vtkObject::BreakOnError(); + return 0; + } + vtkDataSet *input(vtkDataSet::SafeDownCast(inputMB->GetBlock(0))); vtkInformation *info(input->GetInformation()); vtkInformation *outInfo(outputVector->GetInformationObject(0)); - vtkDataSet *output(vtkDataSet::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()))); + vtkMultiBlockDataSet *output(vtkMultiBlockDataSet::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()))); std::set idsToKeep(this->Internal->getIdsToKeep()); // first shrink the input bool catchAll,catchSmth; vtkSmartPointer thres1(vtkSmartPointer::New()),thres2(vtkSmartPointer::New()); vtkDataSet *tryOnCell(FilterFamilies(thres1,input,idsToKeep,this->InsideOut, - MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_CELL_NAME,"vtkDataObject::FIELD_ASSOCIATION_CELLS",catchAll,catchSmth)); + MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_CELL_NAME,"vtkDataObject::FIELD_ASSOCIATION_CELLS",catchAll,catchSmth)); if(tryOnCell) - { - if(catchAll) - { - output->ShallowCopy(tryOnCell); - tryOnCell->Delete();// - return 1; - } - else - { - if(catchSmth) - { - vtkDataSet *tryOnNode(FilterFamilies(thres2,input,idsToKeep,this->InsideOut, - MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); - if(tryOnNode && catchSmth) - { - vtkSmartPointer mb(vtkSmartPointer::New()); - vtkSmartPointer cd(vtkSmartPointer::New()); - mb->AddInputConnection(thres1->GetOutputPort()); - mb->AddInputConnection(thres2->GetOutputPort()); - cd->SetInputConnection(mb->GetOutputPort()); - cd->SetMergePoints(0); - cd->Update(); - output->ShallowCopy(cd->GetOutput()); - tryOnCell->Delete(); - tryOnNode->Delete(); - return 1; - } - else - { - if(tryOnNode) - tryOnNode->Delete(); - output->ShallowCopy(tryOnCell); - tryOnCell->Delete(); - return 1; - } - } - else - { - vtkDataSet *tryOnNode(FilterFamilies(thres1,input,idsToKeep,this->InsideOut, - MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); - if(tryOnNode) - { - tryOnCell->Delete(); - output->ShallowCopy(tryOnNode); - tryOnNode->Delete(); - return 1; - } - else - { - output->ShallowCopy(tryOnCell); - tryOnCell->Delete(); - return 0; - } - } - } - } + { + if(catchAll) + { + output->SetBlock(0,tryOnCell); + tryOnCell->Delete();// + return 1; + } + else + { + if(catchSmth) + { + vtkDataSet *tryOnNode(FilterFamilies(thres2,input,idsToKeep,this->InsideOut, + MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); + if(tryOnNode && catchSmth) + { + output->SetBlock(0,tryOnCell); + output->SetBlock(1,tryOnNode); + tryOnCell->Delete(); + tryOnNode->Delete(); + return 1; + } + else + { + if(tryOnNode) + tryOnNode->Delete(); + output->SetBlock(0,tryOnCell); + tryOnCell->Delete(); + return 1; + } + } + else + { + vtkDataSet *tryOnNode(FilterFamilies(thres1,input,idsToKeep,this->InsideOut, + MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); + if(tryOnNode) + { + tryOnCell->Delete(); + output->SetBlock(0,tryOnNode); + tryOnNode->Delete(); + return 1; + } + else + { + output->SetBlock(0,tryOnNode); + tryOnCell->Delete(); + return 0; + } + } + } + } else - { - vtkDataSet *tryOnNode(FilterFamilies(thres1,input,idsToKeep,this->InsideOut, - MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); - if(tryOnNode) - { - output->ShallowCopy(tryOnNode); - tryOnNode->Delete();// - return 1; - } - else - { - std::ostringstream oss; oss << "vtkExtractGroup::RequestData : The integer array with name \""<< MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_CELL_NAME; - oss << "\" or \"" << MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME << "\" does not exist ! The extraction of group and/or family is not possible !"; - if(this->HasObserver("ErrorEvent") ) - this->InvokeEvent("ErrorEvent",const_cast(oss.str().c_str())); - else - vtkOutputWindowDisplayErrorText(const_cast(oss.str().c_str())); - vtkObject::BreakOnError(); - return 0; - } - } + { + vtkDataSet *tryOnNode(FilterFamilies(thres1,input,idsToKeep,this->InsideOut, + MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth)); + if(tryOnNode) + { + output->ShallowCopy(tryOnNode); + tryOnNode->Delete();// + return 1; + } + else + { + std::ostringstream oss; oss << "vtkExtractGroup::RequestData : The integer array with name \""<< MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_CELL_NAME; + oss << "\" or \"" << MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME << "\" does not exist ! The extraction of group and/or family is not possible !"; + if(this->HasObserver("ErrorEvent") ) + this->InvokeEvent("ErrorEvent",const_cast(oss.str().c_str())); + else + vtkOutputWindowDisplayErrorText(const_cast(oss.str().c_str())); + vtkObject::BreakOnError(); + return 0; + } + } } catch(INTERP_KERNEL::Exception& e) {