[Paraview] TexturePainter missing Scalar Data
Utkarsh Ayachit
utkarsh.ayachit at kitware.com
Thu Feb 11 17:04:28 EST 2010
Can you try this at the end of SimpleExecute:
outarray->SetName("MyArray");
Does that help?
Utkarsh
On Thu, Feb 11, 2010 at 3:06 PM, Christian Werner
<christian.werner at rwth-aachen.de> wrote:
> Hello!
>
> I use the vtkSimpleImageToImageFilter to make a nifty little segmentation
> plugin. Below is how I overwrote the SimpleExecute function. It looks good
> and actually does the job, at least in a VTK-only (Reader>MyFilter>Writer)
> setup. It loads in Paraview, but if executed I get the following warning and
> bad/no (visual) results:
>
> Warning: In /opt/ParaView3/Servers/Filters/vtkTexturePainter.cxx, line 173
> vtkTexturePainter (0x1a34fd0): Failed to locate selected scalars. Will use
> image scalars by default.
>
>
> I traced this down to the function:
> int vtkTexturePainter::SetupScalars(vtkImageData* input)
>
> which does a
>
> vtkDataArray* scalars = vtkAbstractMapper::GetScalars(input,
> this->ScalarMode, this->ScalarArrayName? VTK_GET_ARRAY_BY_NAME :
> VTK_GET_ARRAY_BY_ID,
> this->ScalarArrayIndex,
> this->ScalarArrayName,
> cellFlag);
>
> which becomes NULL. This leads to the above warning. I spent the last hours
> following the information flow in the VTK pipeline and as far as my humble
> understanding goes, all should be fine, because the
> vtkSimpleImageToImageFilter derives from vtkImageAlgorithm which takes care
> that all the OutputPortInformation and all the Requests, etc. are setup
> correctly.
>
> Despite that, Paraview does not seem to have information about the data
> array, at least its not listed where as there IS information on the original
> image: Name:PNGImage DataType: unsigned char, Data Ranges[0,255]...
>
>
> Here is my SimpleExecution Function:
>
> void vtkDislev::SimpleExecute(vtkImageData* input, vtkImageData*
> output)
> {
> if (input==NULL) {
> vtkErrorMacro(<<"Bad Input to vtkDislev");
> return;
> }
> int dim[3];
> input->GetDimensions(dim);
> int numvox = dim[0]*dim[1]*dim[2];
> int numcomp = input->GetNumberOfScalarComponents();
> vtkDataArray* inarray = input->GetPointData()->GetScalars();
> vtkDataArray* outarray = output->GetPointData()->GetScalars();
> unsigned char in=255;
> unsigned char out=0;
> for (int component=0; component < numcomp; component++) {
> for (int i=0; i < numvox; i++) {
> unsigned char v=inarray->GetComponent(i,component);
> if (v >= this->LowerThreshold && v<=this->UpperThreshold) {
> outarray->SetComponent(i,component,in);
> } else {
> outarray->SetComponent(i,component,out); }
> }
> }
> }
>
>
> I would be glad if someone had any idea. Maybe I DO have to rewrite these
> FillOutputInformationVector(...) ?
>
>
> Best regards,
> Christian
> _______________________________________________
> 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