Hi, This appears to be a bug in VTK. I have a potential fix at https://gitlab.kitware.com/acbauer/vtk/blob/parallelmultiblockdatawriter_write_block_names/IO/ParallelXML/vtkXMLPMultiBlockDataWriter.cxx. You can track the fix at https://gitlab.kitware.com/vtk/vtk/merge_requests/471.
Thanks for reporting this. Cheers, Andy On Mon, Aug 3, 2015 at 4:48 AM, Deij-van Rijswijk, Menno <[email protected]> wrote: > Hi, > > I’m trying to set up a co-processing pipeline by supplying it with a > multi-block dataset, of which the individual unstructured grids have names. > > TL;DR: the block names are not written to XML files when using a Python > co-processing pipeline. > > > In detail: > The block names are supplied like so > > /// > vtkInformation* md = > multiBlockGrid->GetMetaData(static_cast<unsigned int>(0)); > if (md) > { > md->Set(vtkCompositeDataSet::NAME(), "Interior"); > } > /// > > The grid is added as a producer with the name "grid". Then, in the Python > pipeline, I simply write the full grid using the following code: > > /// > grid = coprocessor.CreateProducer( datadescription, "grid" ) > ParallelMultiBlockDataSetWriter1 = coprocessor.CreateWriter( > XMLMultiBlockDataWriter, "fullgrid_%t.vtm", 100 ) > /// > > This writes the fullgrid_0.vtm file, directory and each block in a > separate vtu file. All is good, except that the block names that were set > are not written in the file in the "name" attribute. > > I have tried to write an XML file directly using XMLMultiBlockDataWriter, > but that did not work due to the implementation of a mapped data array > which has no implementation for NewIterator(). Weird - how does the Python > pipeline write the file? I don't know, but it works. > > To still check the names having been set, I emulate the first few steps of > the XMLMultiBlockDataWriter, to see if the block names come through like so: > > /// > vtkSmartPointer<vtkDataObjectTreeIterator> iter; > iter.TakeReference( > vtkDataObjectTree::SafeDownCast(multiBlockGrid)->NewTreeIterator()); > iter->VisitOnlyLeavesOff(); > iter->TraverseSubTreeOff(); > iter->SkipEmptyNodesOff(); > > int index = 0; > int RetVal = 0; > for (iter->InitTraversal(); !iter->IsDoneWithTraversal(); > iter->GoToNextItem(), index++) > { > vtkDataObject* curDO = iter->GetCurrentDataObject(); > const char *name = NULL; > if (iter->HasCurrentMetaData()) > { > name = iter->GetCurrentMetaData()->Get(vtkCompositeDataSet::NAME()); > cout << "Name found by pseudo-write code: " << (name ? name : "NULL") << > endl; > } > else > { > cout << "No metadata found on iterator" << endl; > } > } > /// > > And this clearly shows that the names are found as they are written to > stdout. > > So, the question is: how can I get the Python co-processing pipeline to > write the block names? > > Thanks and best wishes, > > > Menno > > > dr. ir. Menno A. Deij-van Rijswijk > Researcher / Software Engineer > Maritime Simulation & Software Group > E mailto:[email protected] > T +31 317 49 35 06 > > > MARIN > 2, Haagsteeg, P.O. Box 28, 6700 AA Wageningen, The Netherlands > T +31 317 49 39 11, F +31 317 49 32 45, I www.marin.nl > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the ParaView Wiki at: > http://paraview.org/Wiki/ParaView > > Search the list archives at: http://markmail.org/search/?q=ParaView > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/mailman/listinfo/paraview >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Search the list archives at: http://markmail.org/search/?q=ParaView Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/paraview
