[Paraview] Problems with 'interpolate scalars before mapping' in v3.10
Utkarsh Ayachit
utkarsh.ayachit at kitware.com
Mon May 23 17:10:34 EDT 2011
Ah interesting. I wasn't aware of that change. Thanks.
Utkarsh
On Mon, May 23, 2011 at 1:26 PM, Nenad Vujicic <nenadus at gmail.com> wrote:
> Dear Utkarsh,
>
> Yes, it works perfectly with ParaView v3.8.* release sources. The
> reason is in vtkScalarsToColorsPainter class which produces 256x1
> texture in ParaView v3.8.*, while in ParaView 3.10.* (and current SVN
> sources) it produces 256x2 texture. In v3.10.* case, in first row
> (bottom-up) are texels with colors copied from lookup table, while in
> second row (or first in top-down view) all texels are (64, 0, 0) -
> dark red.
>
> Best regards,
> Nenad.
>
> On Mon, May 23, 2011 at 3:02 PM, Utkarsh Ayachit
> <utkarsh.ayachit at kitware.com> wrote:
>> Interesting, I wonder how that could have worked with older version of
>> ParaView then. Did that piece of code change recently?
>>
>> Utkarsh
>>
>> On Sun, May 22, 2011 at 2:43 PM, Nenad Vujicic <nenadus at gmail.com> wrote:
>>> Hello everyone,
>>>
>>> Just to announce - the problem is solved! It seems the problem was in
>>> plugin's sources when setting texture coordinates data. So, if in
>>> vtkMyExporter.cpp I remove
>>>
>>> tex_coord_data->SetNumberOfComponents(1);
>>>
>>> or set number of components to 2, correct texture will be generated!
>>>
>>> Thanks everyone on Your help!
>>>
>>> Best regards,
>>> Nenad.
>>>
>>> On Fri, May 13, 2011 at 11:49 PM, Nenad Vujicic <nenadus at gmail.com> wrote:
>>>> Hello everyone,
>>>>
>>>> Does anyone have idea where could be the problem in uploaded sources?
>>>>
>>>> Thanks,
>>>> Nenad.
>>>>
>>>> On Tue, May 10, 2011 at 12:13 PM, Nenad Vujicic <nenadus at gmail.com> wrote:
>>>>> Dear Utkarsh,
>>>>>
>>>>> Thank You very much, but unfortunately, adding manually copying of
>>>>> parameters didn't solve all problems. I updated test plug-in with
>>>>> manually copying, converting scalars to texture, applying texture to
>>>>> actor and showing resulting actor in vtkRenderWindow. You can find
>>>>> updated sources at
>>>>> http://alas.matf.bg.ac.rs/~mr00053/projects/PVTest.zip.
>>>>>
>>>>> If You load again disk_out_ref.ex2, select H2 and try to export to
>>>>> .my, You'll see in separate vtkRenderWindow same object with applied
>>>>> generated
>>>>> texture which looks very bad. Again, it works fine in v3.8.1. I
>>>>> believe I'm not initializing new actors properly? Do You have some
>>>>> idea how to fix it?
>>>>>
>>>>> Thanks,
>>>>> Nenad.
>>>>>
>>>>>
>>>>> On Mon, May 9, 2011 at 10:02 PM, Utkarsh Ayachit
>>>>> <utkarsh.ayachit at kitware.com> wrote:
>>>>>> The problem is pretty straight forward. Looks like
>>>>>> vtkMapper::ShallowCopy(..) does not copy the state of
>>>>>> InterpolateScalarsBeforeMapping. I will commit a fix for that for next
>>>>>> release. Until then, you'll have to manually copy ivars that you care
>>>>>> about.
>>>>>>
>>>>>> Utkarsh
>>>>>>
>>>>>> On Sun, May 8, 2011 at 10:25 AM, Nenad Vujicic <nenadus at gmail.com> wrote:
>>>>>>> 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.ayachit at 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 <nenadus at 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.ayachit at 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 <nenadus at 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
>>>>>>>
>>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> 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
>
More information about the ParaView
mailing list