[vtk-developers] Casting vtkIntArray vs vtkIdTypeArray

pat marion pat.marion at kitware.com
Fri Sep 17 17:42:56 EDT 2010


David,

Instead of saving a file and opening it in paraview, you could try:

      filter->GetOutput()->Print(cout);

This will display all the point & cell arrays on the output and their names
and data types.  Make sure you have updated the filter first.  Also, if you
notice that SafeDownCast has failed, you can do a debug print to get the
correct class type:

       cout << filter->GetOutput()->GetArray("RegionId")->GetClassName() <<
endl;

this would print: vtkIdTypeArray

GetClassName is great for debugging, but I wouldn't recommend it for
comparisons.  For example, instead of:

      if (array->GetClassName() == std::string("vtkIdTypeArray")) cout <<
"It's an id type array";

it is preferable to use:

      if (vtkIdTypeArray::SafeDownCast(array)) cout << "It's an id type
array";

The compiler can error check a SafeDownCast statement, but can't catch a
typo in a string comparison.

Pat


On Fri, Sep 17, 2010 at 4:03 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi David,
>
> I think you misunderstand what "SafeDownCast" does.
> After every SafeDownCast(), you must check the result
> to make sure that it isn't NULL.  That is what dynamic
> casting is all about: it is an _attempt_ to do a cast when
> you aren't sure if the object is of the correct type.
>
> You can write code that is robust to a large number of
> array types by adding a "switch" statement.  If you combine
> the switch with a templated function, then you will
> end up with the same mechanism that VTK's image filters
> use to deal with arrays of different types.
>
>  David
>
>
> On Fri, Sep 17, 2010 at 1:53 PM, David Doria <daviddoria at gmail.com> wrote:
> > On Fri, Sep 17, 2010 at 3:50 PM, David Cole <david.cole at kitware.com>
> wrote:
> >>
> >> That's not a C++ cast, that's a transformation operation....
> >> All the array classes are siblings of each other, aren't they?
> >>
> >
> > Maybe my terminology is off, but whatever it is called I feel that it
> should
> > work and it currently doesn't :)
> > Yes, they are all siblings. Are you recommending first SafeDownCasting to
> a
> > vtkDataArray, checking the type, and then performing the appropriate
> > SafeDownCast? That seems like a lot of trouble, no?
> > David
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.vtk.org/mailman/listinfo/vtk-developers
> >
> >
> >
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtk-developers/attachments/20100917/e482b313/attachment.htm>


More information about the vtk-developers mailing list