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