3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
23 // File: VISU_ExtractUnstructuredGrid.cxx
24 // Author: Alexey PETROV
28 #include "VISU_ExtractUnstructuredGrid.hxx"
29 #include "VISU_ConvertorUtils.hxx"
31 #include <vtkUnstructuredGrid.h>
32 #include <vtkObjectFactory.h>
33 #include <vtkIdList.h>
39 static int MYDEBUG = 0;
41 static int MYDEBUG = 0;
44 vtkStandardNewMacro(VISU_ExtractUnstructuredGrid);
46 VISU_ExtractUnstructuredGrid::VISU_ExtractUnstructuredGrid(){}
48 VISU_ExtractUnstructuredGrid::~VISU_ExtractUnstructuredGrid(){}
50 void VISU_ExtractUnstructuredGrid::RemoveCell(vtkIdType theCellId){
51 myRemovedCellIds.insert(theCellId);
55 void VISU_ExtractUnstructuredGrid::RemoveCellsWithType(vtkIdType theCellType){
56 myRemovedCellTypes.insert(theCellType);
61 inline void InsertCell(vtkUnstructuredGrid *theInput,
62 vtkUnstructuredGrid *theOutput,
63 vtkIdType theCellId, vtkIdList *theCellIds)
66 vtkCell *aCell = theInput->GetCell(theCellId);
67 vtkIdType aNbIds = aCell->PointIds->GetNumberOfIds();
68 for(vtkIdType i = 0; i < aNbIds; i++)
69 theCellIds->InsertNextId(aCell->GetPointIds()->GetId(i));
70 theOutput->InsertNextCell(theInput->GetCellType(theCellId), theCellIds);
74 void VISU_ExtractUnstructuredGrid::Execute(){
75 vtkUnstructuredGrid *anInput = this->GetInput(), *anOutput = this->GetOutput();
76 vtkIdType aNbCells = anInput->GetNumberOfCells();
77 anOutput->Allocate(aNbCells);
78 MSG(MYDEBUG,"Execute - anInput->GetNumberOfCells() = "<<anInput->GetNumberOfCells());
79 vtkIdList *aCellIds = vtkIdList::New();
80 MSG(MYDEBUG,"Execute - myRemovedCellIds.empty() = "<<myRemovedCellIds.empty()<<
81 "; myRemovedCellTypes.empty() = "<<myRemovedCellTypes.empty());
82 if(myRemovedCellIds.empty() && myRemovedCellTypes.empty())
83 anOutput->CopyStructure(anInput);
84 else if(!myRemovedCellIds.empty() && myRemovedCellTypes.empty()){
85 for(vtkIdType aCellId = 0; aCellId < aNbCells; aCellId++)
86 if(myRemovedCellIds.find(aCellId) == myRemovedCellIds.end())
87 InsertCell(anInput,anOutput,aCellId,aCellIds);
88 }else if(myRemovedCellIds.empty() && !myRemovedCellTypes.empty()){
89 for(vtkIdType aCellId = 0; aCellId < aNbCells; aCellId++)
90 if(myRemovedCellTypes.find(anInput->GetCellType(aCellId)) == myRemovedCellTypes.end())
91 InsertCell(anInput,anOutput,aCellId,aCellIds);
92 }else if(!myRemovedCellIds.empty() && !myRemovedCellTypes.empty())
93 for(vtkIdType aCellId = 0; aCellId < aNbCells; aCellId++)
94 if(myRemovedCellTypes.find(anInput->GetCellType(aCellId)) == myRemovedCellTypes.end())
95 if(myRemovedCellIds.find(aCellId) == myRemovedCellIds.end())
96 InsertCell(anInput,anOutput,aCellId,aCellIds);
98 anOutput->SetPoints(anInput->GetPoints());
99 MSG(MYDEBUG,"Execute - anOutput->GetNumberOfCells() = "<<anOutput->GetNumberOfCells());