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