#include "vtkDemandDrivenPipeline.h"
#include "vtkDataObjectTreeIterator.h"
#include "vtkThreshold.h"
+#include "vtkMultiBlockDataGroupFilter.h"
+#include "vtkCompositeDataToUnstructuredGridFilter.h"
#include <map>
#include <deque>
}
template<class CellPointExtractor>
-vtkDataSet *FilterFamilies(vtkDataSet *input, const std::set<int>& idsToKeep, bool insideOut, const char *arrNameOfFamilyField,
+vtkDataSet *FilterFamilies(vtkSmartPointer<vtkThreshold>& thres,
+ vtkDataSet *input, const std::set<int>& idsToKeep, bool insideOut, const char *arrNameOfFamilyField,
const char *associationForThreshold, bool& catchAll, bool& catchSmth)
{
static const int VTK_DATA_ARRAY_DELETE=vtkDataArrayTemplate<double>::VTK_DATA_ARRAY_DELETE;
static const char ZE_SELECTION_ARR_NAME[]="@@ZeSelection@@";
vtkDataSet *output(input->NewInstance());
output->ShallowCopy(input);
- vtkSmartPointer<vtkThreshold> thres(vtkSmartPointer<vtkThreshold>::New());
thres->SetInputData(output);
vtkDataSetAttributes *dscIn(input->GetCellData()),*dscIn2(input->GetPointData());
vtkDataSetAttributes *dscOut(output->GetCellData()),*dscOut2(output->GetPointData());
std::set<int> idsToKeep(this->Internal->getIdsToKeep());
// first shrink the input
bool catchAll,catchSmth;
- vtkDataSet *tryOnCell(FilterFamilies<CellExtractor>(input,idsToKeep,this->InsideOut,
+ vtkSmartPointer<vtkThreshold> thres1(vtkSmartPointer<vtkThreshold>::New()),thres2(vtkSmartPointer<vtkThreshold>::New());
+ vtkDataSet *tryOnCell(FilterFamilies<CellExtractor>(thres1,input,idsToKeep,this->InsideOut,
MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_CELL_NAME,"vtkDataObject::FIELD_ASSOCIATION_CELLS",catchAll,catchSmth));
if(tryOnCell)
{
{
if(catchSmth)
{
- vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(tryOnCell,idsToKeep,this->InsideOut,
+ vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(thres2,input,idsToKeep,this->InsideOut,
MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth));
if(tryOnNode && catchSmth)
{
- output->ShallowCopy(tryOnNode);
+ vtkSmartPointer<vtkMultiBlockDataGroupFilter> mb(vtkSmartPointer<vtkMultiBlockDataGroupFilter>::New());
+ vtkSmartPointer<vtkCompositeDataToUnstructuredGridFilter> cd(vtkSmartPointer<vtkCompositeDataToUnstructuredGridFilter>::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();//
+ tryOnNode->Delete();
return 1;
}
else
}
else
{
- vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(input,idsToKeep,this->InsideOut,
+ vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(thres1,input,idsToKeep,this->InsideOut,
MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth));
if(tryOnNode)
{
}
else
{
- vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(input,idsToKeep,this->InsideOut,
+ vtkDataSet *tryOnNode(FilterFamilies<PointExtractor>(thres1,input,idsToKeep,this->InsideOut,
MEDFileFieldRepresentationLeavesArrays::FAMILY_ID_NODE_NAME,"vtkDataObject::FIELD_ASSOCIATION_POINTS",catchAll,catchSmth));
if(tryOnNode)
{
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2015 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# Author : Anthony Geay (EDF R&D)
+
+# Non regression test for bug EDF11343. Extract group on groups mixing cells entities and node entities.
+
+from MEDLoader import *
+
+fname="testMEDReader18.med"
+arr1=DataArrayDouble(5) ; arr1.iota()
+arr2=DataArrayDouble([0,1])
+m=MEDCouplingCMesh() ; m.setCoords(arr1,arr2)
+m.setName("mesh")
+m=m.buildUnstructured()
+#
+mm=MEDFileUMesh()
+mm[0]=m
+#
+grp0=DataArrayInt([1,2]) ; grp0.setName("grp0")
+grp1=DataArrayInt([3,4,8,9]) ; grp1.setName("grp1")
+#
+mm.addGroup(0,grp0)
+mm.addGroup(1,grp1)
+#
+mm.write(fname,2)
+#####
+from paraview.simple import *
+
+reader=MEDReader(FileName=fname)
+reader.AllArrays=['TS0/mesh/ComSup0/mesh@@][@@P0']
+ExtractGroup1 = ExtractGroup(Input=reader)
+ExtractGroup1.AllGroups=["GRP_grp0","GRP_grp1"]
+ExtractGroup1.UpdatePipelineInformation()
+res=servermanager.Fetch(ExtractGroup1,0)
+assert(res.GetBlock(0).GetNumberOfCells()==3)