Hello!!!
First off - I added the space in the topic title to get around a “long word” warning when posting…
I’m using vtkExtractBlockUsingDataAssembly to extract blocks from a vtkPartitionedDataSetCollection and I can’t understand the design of the filter.
If I set up the filter as shown below, nothing comes through the filter even though the selector is valid
reader=vtk.vtkXMLPartitionedDataSetCollectionReader()
reader.SetFileName(self.model_filename)
self.assembly_block_filter = vtk.vtkExtractBlockUsingDataAssembly()
test = self.assembly_block_filter.AddSelector('//*[@type="geom"]')
self.assembly_block_filter.SetInputConnection(reader.GetOutputPort())
self.assembly_block_filter.Update()
out = self.assembly_block_filter.GetOutput()
print('\n\nOutput assembly',out.GetDataAssembly().SerializeToXML(vtk.vtkIndent(2)))
If I insert the line highlighted below, everything works just fine
self.assembly_block_filter = vtk.vtkExtractBlockUsingDataAssembly()
**self.assembly_block_filter.SetAssemblyName('Model_1')**
test = self.assembly_block_filter.AddSelector('//*[@type="geom"]')
Question : Why doesn’t the filter just use the root node of the vtkDataAssembly from the input vtkPartitionedDataSetCollection by default?
What is the recommended way of using this filter in a pipeline - does something like what is shown below make sense or is there a better approach? (This works, it just looks awkward…)
reader=vtk.vtkXMLPartitionedDataSetCollectionReader()
reader.SetFileName(self.model_filename)
reader.Update()
**root_assy_name = reader.GetOutput().GetDataAssembly().GetRootNodeName()**
self.assembly_block_filter = vtk.vtkExtractBlockUsingDataAssembly()
**self.assembly_block_filter.SetAssemblyName(root_assy_name)**
test = self.assembly_block_filter.AddSelector('//*[@type="geom"]')
self.assembly_block_filter.SetInputConnection(reader.GetOutputPort())
self.assembly_block_filter.Update()
out = self.assembly_block_filter.GetOutput()
print('\n\nInput assembly',out.GetDataAssembly().SerializeToXML(vtk.vtkIndent(2)))
Finally, this filter works well to to extract the blocks selected by the selector, but it would be a great usability enhancement if there was way to return the blocks NOT selected by the selector. Maybe return the unselected blocks on another output or provide a switch to return the inverse set of Blocks?
Thanks in advance,
Doug