Dear Utkarsh,

I uploaded test plugin that shows my problem at
http://alas.matf.bg.ac.rs/~mr00053/projects/PVTest.zip.

After I build and load the plugin from Qt client, I load
disk_out_ref.ex2, select "H2" for mapping scalars, check Interpolate
Scalars on Display tab in Object inspector and go on File->Export
(select .my file). I get 6 message boxes which report 0, 0, 0, 0, 0, 1
(instead of 0, 0, 0, 0, 1, 1) as values for
vtkMapper::InterpolateScalarsBeforeMapping. So, here is first
question: "How to create multiple vtkActor objects from
vtkCompositePolyDataMapper2's input"? I thought that vtkMyExporter.cpp
Ln 138-162 should be fine, but uploaded sources shows different.

Thanks,
Nenad.

On Fri, May 6, 2011 at 2:29 PM, Utkarsh Ayachit
<utkarsh.ayac...@kitware.com> wrote:
> Nenad,
>
> There;s nothing much different about the vtkCompositePolyDataMapper or
> vtkPolyDataMapper as far as the state of the
> InterpolateScalarsBeforeMapping flag goes. I cannot see how that
> variable can return false if it is indeed set to true as you are
> saying. Can you share the plugin?
>
> Utkarsh
>
> On Thu, May 5, 2011 at 6:03 PM, Nenad Vujicic <nena...@gmail.com> wrote:
>> Hello everyone,
>>
>> Perhaps I was a bit unclear in my previous messages. Here are more
>> details about the problem and test case.
>>
>> I use ParaView v3.10.1 release sources, Visual Studio 2008 SP1, Python
>> 2.7, OpenMPI 1.4.3 on Vista SP2. I compiled sources with standard
>> options (just turned on BUILD_SHARED_LIBS, MPI and Python). I derived
>> new class from vtkExporter, vtkMyExporter, and in
>> vtkMyExporter::WriteData() I call code specified down. The problem is
>> in QMessage line, which reports always 0, even when this flag is
>> turned on. Same is happening with most of other parameters.
>>
>> I believe that learning how to decompose composite ptrActor into
>> several actors with vtkPolyDataMapper mapper and vtkPolyData data will
>> solve all other problems (which occur when generating texture from
>> scalars). At the moment, I'm interested only in actors which use
>> vtkCompositePolyDataMapper2 mappers. As input I use disk_out_ref.ex2
>> with selected H2 (or any other channel) for mapping colors. Does
>> anyone have any idea how this can be done? Btw, this worked perfectly
>> under ParaView v.3.8.1 and with RenderWindow created using VTK 5.4.2
>> (where I create vtkCompositePolyDataMapper2 and populate it manually).
>>
>> Thank You very much for Your help!
>>
>> Best regards,
>> Nenad.
>>
>> --------------------
>>
>> 1) Get interactive renderer 'InteractiveRenderer' from
>> vtkMyExporter::RenderWindow
>> 2) For every actor 'ptrActor' (3D actors only) in InteractiveRenderer do:
>>
>>    vtkCompositeDataIterator* actor_iterator;
>>    vtkCompositePolyDataMapper2* composite_mapper = NULL;
>>
>>    // get actor's mapper
>>    vtkMapper* mapper = ptrActor->GetMapper();
>>    if(mapper == NULL)
>>        return true; // discard
>>
>>    // get mapper's input
>>    vtkCompositeDataSet* composite_input_data =
>> dynamic_cast<vtkCompositeDataSet*>(mapper->GetInputDataObject(0, 0));
>>    if(composite_input_data != NULL)
>>    {
>>        // get actor's composite mapper
>>        composite_mapper = dynamic_cast<vtkCompositePolyDataMapper2*>(mapper);
>>        if(composite_mapper == NULL)
>>            return false;
>>
>>        // in case input data is composite object, get iterator for traversing
>>        actor_iterator = composite_input_data->NewIterator();
>>
>>        // initialize iterator for traversing
>>        actor_iterator->InitTraversal();
>>        actor_iterator->GoToFirstItem();
>>    }
>>    else
>>        actor_iterator = NULL;
>>
>>    // export all components of input actor
>>    for(;;)
>>    {
>>        vtkSmartPointer<vtkActor> actor;
>>
>>        // if input data is composite object, create actor with
>> current component as data, otherwise use entire actor (I do this
>> because I need actor with vtkPolyDataMapper and vtkPolyData data for
>> vtkScalarsToColorsPainter)
>>        if(actor_iterator != NULL)
>>        {
>>            // check if there are no more components
>>            if(actor_iterator->IsDoneWithTraversal())
>>                break;
>>
>>            // get next component
>>            vtkDataObject* data_object = 
>> actor_iterator->GetCurrentDataObject();
>>            if(dynamic_cast<vtkPolyData*>(data_object) != NULL)
>>            {
>>                // get poly data
>>                vtkPolyData* poly_data =
>> dynamic_cast<vtkPolyData*>(data_object);
>>
>>                // create new temporary poly data mapper
>>                vtkSmartPointer<vtkPolyDataMapper> poly_data_mapper =
>> vtkSmartPointer<vtkPolyDataMapper>::New();
>>
>>                // copy mapper's parameters
>>                poly_data_mapper->ShallowCopy(composite_mapper);
>>
>>                // set mapper's input
>>                poly_data_mapper->SetInput(poly_data);
>>
>>                // create new actor
>>                actor = vtkSmartPointer<vtkActor>::New();
>>
>>                // copy actor parameters
>>                actor->ShallowCopy(ptrActor);
>>
>>                // set actor's mapper
>>                actor->SetMapper(poly_data_mapper);
>>            }
>>            else
>>            {
>>                return false;
>>            }
>>        }
>>        else
>>            actor = ptrActor;
>>
>>        // report some actor's property
>>        QMessageBox::about(NULL, "",
>> QString::number(ptrActor->GetMapper()->GetInterpolateScalarsBeforeMapping()));
>>
>>        // perform transformation from scalars to texture using
>>        vtkScalarsToColorsPainter class
>>
>>        // extract data from ptrActor (I use previously generated
>> texture instead of colors / scalars)
>>
>>        // write to my custom format
>>
>>        // if input is not composite, break the loop
>>        if(composite_input_data == NULL)
>>            break;
>>
>>        // set iterator on next item
>>        if(actor_iterator != NULL)
>>            actor_iterator->GoToNextItem();
>>    }
>>
>>
>> ----------------------------------------------------------------------------------------------------
>>
>> On Wed, May 4, 2011 at 3:04 PM, Utkarsh Ayachit
>> <utkarsh.ayac...@kitware.com> wrote:
>>> Nenad,
>>>
>>> I am not sure I understand where this code is being put. You say it's
>>> an exporter? Meaning it exports to something like a vrml/x3d file? But
>>> that doesn't seem right since you say you are using the
>>> PolyDataMapper.
>>>
>>> What is this plugin trying to achieve?
>>>
>>> Utkarsh
>>>
>>> On Wed, May 4, 2011 at 8:31 AM, Nenad Vujicic <nena...@gmail.com> wrote:
>>>> Hello everyone,
>>>>
>>>> I'm having some problems with porting my ParaView exporter plug-in to
>>>> v3.10, because ParaView started using vtkCompositeDataSet internally
>>>> instead of keeping components merged. The problem is in performing
>>>> transformation of scalars to texture using vtkScalarsToColorsPainter
>>>> class. Here is approximately my code (questions come after
>>>> pseudo-code):
>>>>
>>>> for every actor in currently active renderer:
>>>>  for every component of composite data object (I retrieve
>>>> vtkDataObject* with vtkCompositeDataIterator::GetCurrentDataObject()
>>>> call)
>>>>
>>>>    // prepare new actor which defines component
>>>>    dynamic cast vtkDataObject* data_object to vtkPolyData* poly_data;
>>>>    create new vtkPolyDataMapper* pdm;
>>>>    pdm->ShallowCopy(composite_mapper);
>>>>    pdm->SetInput(poly_data);
>>>>    allocate new actor and do actor->ShallowCopy(ptrActor) //
>>>> ptrActor) is selected actor from currently active renderer - line 1
>>>>    actor->SetMapper(pdm);
>>>>
>>>>    // perform converting from scalars to texture
>>>>    ConvertScalarsToColors(actor);
>>>>
>>>> Routine ConvertScalarsToColors(vtkActor*) is defined in following way:
>>>>
>>>> L1 get actor's poly_data and mapper references,
>>>> L2 create s2c - instance of MyVtkScalarsToColorsPainter (derived from
>>>> vtkScalarsToColorsPainter for allowing setting its protected
>>>> attributes),
>>>> L3 initialize s2c parameters from mapper and poly_data
>>>> L4 if s2c->CanUseTextureMapForColoring(poly_data) returns true,
>>>> s2c->PrepareForRendering(), get texture and texture coordinates and
>>>> sets them to passed actor
>>>>
>>>> Q1: First problem is in L3 when setting s2c parameters. Original
>>>> mapper has turned on InterpolateScalarsBeforeMapping flag, but new one
>>>> doesn't have it. How to safely copy properties of
>>>> vtkCompositePolyDataMapper2 to vtkPolyDataMapper or I shouldn't do it?
>>>>
>>>> Q2: Even if I override above problem by turning on manually
>>>> InterpolateScalarsBeforeMapping, I get very bad texture on output. It
>>>> looks like scalars were not interpolated before mapping, sometimes
>>>> even more distorted..
>>>>
>>>> The same code works with v3.8 perfectly. I also tried to apply
>>>> vtkCompositeDataGeometryFilter to composite data object and to apply
>>>> ConvertScalarsToColors() to result (even without creating new actor),
>>>> but without success. Strange thing is that when I try this with
>>>> manually created VTK scene (out of ParaView) it works perfectly and
>>>> texture looks great!
>>>>
>>>> I would appreciate any help!
>>>>
>>>> Best regards,
>>>> Nenad.
>>>> _______________________________________________
>>>> 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
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.paraview.org/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
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.paraview.org/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

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to