[vtkusers] vtkAppendPolyData delete the scalars

Alex Malyushytskyy alexmalvtk at gmail.com
Mon Aug 6 22:19:25 EDT 2012


If both polydata have exactly the same scalars (type, dimensions )
output should have a scalar field.
If it does not , it is a bug.

But I doubt it. You do not show all significant code, so
I am not sure these 2 scalars are compatible.

Did you want 1 scalar value per cell?
If so, could you try to replace

    vtkIntArray* scalars = vtkIntArray::New();
    scalars->SetNumberOfComponents(1);
    scalars->SetNumberOfValues(myPolyData->GetNumberOfCells());
    scalars->SetNumberOfTuples(myPolyData->GetNumberOfCells());

 with

   vtkIntArray* scalars = vtkIntArray::New();
   scalars->SetNumberOfValues( myPolyData->GetNumberOfCells());

if this does not help, or it is not what you want check what value (
if not null, what type of array ) the following line would return

vtkDataArray * pA =finalPolyData->GetCellData()->GetScalars();

// replace the following line with line above
  vtkIntArray* scalarArray =
static_cast<vtkIntArray*>(finalPolyData->GetCellData()->GetScalars());


Alex

On Mon, Aug 6, 2012 at 2:18 AM, Gonzalo Amadio <gonzaloamadio at gmail.com> wrote:
> Yes, what I wanted to mean with "is Strange" is that letting the input
> without appending works fine, so it means that it has its scalars.
> In other words, I printed the scalars of "otherPolyData" and "myPolyData"
> before appending, and I obtain desired results. So it means that they have
> scalars.
>
> So I don't know what is happening here. Maybe I have to add something more
> to satisfy conditions for using the filter, but I don't know.
> Some help?
>
> Thank you!
>
>
>
> 2012/8/3 Alex Malyushytskyy <alexmalvtk at gmail.com>
>>
>> >> appendGreenSubdAndRedBlue->AddInput(otherPolyData);   // what is
>> >> extrange is that if I comment this line, it works fine
>> >> appendGreenSubdAndRedBlue->AddInput(myPolyData);
>>
>> there is nothing strange, if you comment this line there is no
>> modification were made,
>> so output is the same as input.
>>
>> why it removes scalar?
>> otherPolyData probably does not the same scalar. From documentation:
>>
>> "All geometry is extracted and appended, but point and cell attributes
>> (i.e., scalars, vectors, normals) are extracted and appended only if
>> all datasets have the point and/or cell attributes available. (For
>> example, if one dataset has point scalars but another does not, point
>> scalars will not be appended.)"
>>
>> Regards,
>>   Alex
>>
>>
>> On Thu, Aug 2, 2012 at 4:25 AM, Gonzalo Amadio <gonzaloamadio at gmail.com>
>> wrote:
>> > Hello everyone. Is there some reason whereby vtkAppendPolyData delete
>> > the
>> > scalars when I append 2 polydatas?
>> >
>> > Here is my code.
>> >
>> >> myPolyData->ShallowCopy(otherPolyData);
>> >>         SubdividePolyData(myPolyData);   /// Here I modified the
>> >> polydata,
>> >> so I need to assign it again the scalar array.
>> >>
>> >>
>> >>
>> >>         // The problem I think is here in this lines, where I assign
>> >> the
>> >> scalar array
>> >> vtkIntArray* scalars = vtkIntArray::New();
>> >> scalars->SetNumberOfComponents(1);
>> >> scalars->SetNumberOfValues(myPolyData->GetNumberOfCells());
>> >> scalars->SetNumberOfTuples(myPolyData->GetNumberOfCells());
>> >>
>> >>
>> >>
>> >> for (int i = 0; i < myPolyData->GetNumberOfCells(); i++)
>> >> scalars->SetValue(i, 1);
>> >>
>> >>
>> >>
>> >> myPolyData->GetCellData()->SetScalars(scalars);
>> >>
>> >>
>> >>
>> >>         vtkSmartPointer<vtkAppendPolyData> appendGreenSubdAndRedBlue =
>> >> vtkSmartPointer<vtkAppendPolyData>::New();
>> >> appendGreenSubdAndRedBlue->AddInput(otherPolyData);   // what is
>> >> extrange
>> >> is that if I comment this line, it works fine
>> >> appendGreenSubdAndRedBlue->AddInput(myPolyData);
>> >> appendGreenSubdAndRedBlue->Update();
>> >>
>> >>
>> >>
>> >> vtkPolyData * finalPolyData = appendGreenSubdAndRedBlue->GetOutput();
>> >>
>> >>
>> >>
>> >>         vtkIntArray* scalarArray =
>> >> static_cast<vtkIntArray*>(finalPolyData->GetCellData()->GetScalars());
>> >>         std::cout  << scalarArray->GetNumberOfTuples() << std::endl;
>> >> //This line gives me an error
>> >
>> >
>> >
>> > The error that I obtain is the following :
>> >
>> > File :     vtkAbstractArray.h -  line 104
>> >
>> >   vtkIdType GetNumberOfTuples()
>> >     {return (this->MaxId + 1)/this->NumberOfComponents;}
>> >
>> > error:
>> >
>> > name               type                          value
>> > this        vtkAbstractArray * const           0x0
>> >
>> >
>> > I can assign "manually" again the scalars to the finalPolyData, but it
>> > is
>> > suppose that the scalars remains when I append them.
>> >
>> > Thank you!
>> >
>> > --
>> > --------
>> > Gonzalo
>> >
>> > _______________________________________________
>> > 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 VTK FAQ at:
>> > http://www.vtk.org/Wiki/VTK_FAQ
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://www.vtk.org/mailman/listinfo/vtkusers
>> >
>> _______________________________________________
>> 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 VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
>
>
> --
> --------
> Gonzalo Amadio
>



More information about the vtkusers mailing list