[vtkusers] usage of vtkCompositePolyDataMapper
Alex Malyushytskyy
alexmalvtk at gmail.com
Tue Aug 25 22:04:40 EDT 2009
Clinton ,
Thanks a lot for suggestion.
But for some reason using GetProducerPort() did not work - nothing is shown.
If I create vtkCompositeDataGeometryFilter and use it GetOutputPort( 0
) to provide port for
compositePolyDatamapperMapper->SetInputConnection, as in the code
below, it does.
If anybody could provide better solution, I would appreciate it.
Regards,
Alex
// create renderer, attach to window
ren = vtkSmartPointer<vtkRenderer>::New();
this->GetRenderWindow()->AddRenderer( ren );
initBackground();
compositeDataSet = vtkSmartPointer<vtkMultiBlockDataSet>::New();
// geometry filter
vtkSmartPointer<vtkCompositeDataGeometryFilter> geom =
vtkSmartPointer<vtkCompositeDataGeometryFilter>::New();
geom->SetInput( compositeDataSet );
// mapper
compositePolyDatamapperMapper =
vtkSmartPointer<vtkCompositePolyDataMapper>::New();
compositePolyDatamapperMapper->SetInputConnection(0,
geom->GetOutputPort( 0 ) ); // This works
// compositePolyDatamapperMapper->SetInputConnection(0,
compositeDataSet->GetProducerPort() ); // this does not work
// actor
lodActor = vtkSmartPointer<vtkLODActor>::New();
lodActor->SetMapper( compositePolyDatamapperMapper );
ren->AddActor(lodActor );
// fill the composite data set, render, update window
createRegionFromStl();
On Tue, Aug 25, 2009 at 5:04 PM, Clinton Stimpson<cjstimpson at gmail.com> wrote:
> On 08/25/2009 05:34 PM, Alex Malyushytskyy wrote:
>>
>> I am new to VTK, so if you see problem with general design or logic
>> below, all comments are appreciated.
>>
>> My application needs to display a set of geometrical blocks. Each
>> block is represented as a set of triangles.
>> I decided to create a vtkMultiBlockDataSet object with blocks defined
>> as vtkPolyData:
>>
>> Assume the data is stored in:
>> vtkSmartPointer<vtkMultiBlockDataSet> compositeDataSet;
>>
>> Now I need to create and assign the mapper and actor.
>> I think I can have single mapper and actor, because all the data is
>> the same type.
>>
>> If it were just single vtkPolyData, I could write something like:
>>
>> vtkSmartPointer<vtkPolyData> polyData =
>> vtkSmartPointer<vtkPolyData>:: New();
>> // fill poly data here
>> ..................
>>
>> // create mapper and actor
>> vtkSmartPointer<vtkPolyDataMapper> mapper =
>> vtkSmartPointer<vtkPolyDataMapper>::New();
>> mapper->SetInput( polyData );
>>
>> vtkLODActor *actor = vtkLODActor::New();
>> actor->SetMapper(mapper);
>>
>>
>> I was looking for mapper which would work for poly data sets and found
>> vtkCompositePolyDataMapper.
>> But it is not clear for me how to use it in my case.
>>
>> First of all vtkCompositePolyDataMapper seems does not have
>> SetInput( ) method.
>> It seems the only input can be specified is output of another filter with:
>>
>> vtkCompositePolyDataMapper::SetInputConnection(int port,
>> vtkAlgorithmOutput* input);
>>
>> But I don't have any filter at this point, only vtkMultiBlockDataSet
>> which contains vtkPolyData is available.
>>
>> Does it mean I have to iterate through vtkMultiBlockDataSet myself
>> and create mapper for each vtkPolyData, instead of using
>> vtkCompositePolyDataMapper or there is a way to use
>> vtkCompositePolyDataMapper in such situation ?
>>
>>
>
> You can use vtkMultiBlockDataSet::GetProducerPort() as an argument to
> vtkCompositePolyDataMapper::SetInputConnection().
>
> Clint
>
>
More information about the vtkusers
mailing list