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 <nena...@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.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 > _______________________________________________ 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