Run-time type information and vtkWhatever::New()
Brian Alexander Todd
bat5 at po.cwru.edu
Mon Jan 17 16:42:42 EST 2000
Dear vtkusers,
I have a question about navigating the vtk class heirarchy.
I have an application that uses a "document/view" architecture.
The doc maintains a list of <vtkDataSet *> and the views render
the data using pipelines that depend on what the exact type of
vtkDataSet is (vtkStructuredPoints, vtkPolyData, etc.). At somepoint,
the view is required to figure out exactly what kind of object the
vtkDataSet pointer points to so it can decide which pipeline to use.
Naturally, I assumed I should use dynamic_cast to do this, since the
type will not be known at compile-time. I ran into some problems doing
this
If I run this block of code under WinNT 4.0 (SP 5) and VC++ 6.0 (SP 3),
vtkDataSet * vtkds;
vtkStructuredPoints * vtksp1 = vtkStructuredPoints::New();
vtkStructuredPoints * vtksp2;
vtkds = vtksp1;
vtksp2 = dynamic_cast<vtkStructuredPoints *>( vtkds );
std::cout << vtksp1 << std::endl;
std::cout << vtksp2 << std::endl;
The program returns,
00300570
00000000
This confused me because it means the program was unable to
convert back to the subclass vtkStructuredPoints after handing
the pointer off to the polymorphic vtkDataSet. However, if
I through out the vtkStructuredPoints::New idea and go with the
normal "new vtkStructuredPoints", as in,
vtkDataSet * vtkds;
vtkStructuredPoints * vtksp1 = new vtkStructuredPoints;
vtkStructuredPoints * vtksp2;
vtkds = vtksp1;
vtksp2 = dynamic_cast<vtkStructuredPoints *>( vtkds );
std::cout << vtksp1 << std::endl;
std::cout << vtksp2 << std::endl;
then the program returns,
00300570
00300570
which is the expected behavior.
So, basically, I have two questions. Why does this happen (out of
curiousoty) and what can I do to get run-time type identification
so that make my program works (more importantly)?
Thank you,
Brian Todd
_____________________________________________________
________| |________
\ | Brian Todd email: bat5 at po.cwru.edu | /
\ | N.O.B.L. home: (216) 791-2407 | /
\ | C.W.R.U. office: (216) 368-4209 | /
/ | Cleveland, OH 44106 fax: (216) 368-4969 | \
/ |_____________________________________________________| \
/___________) (__________\
-----------------------------------------------------------------------------
This is the private VTK discussion list. Please keep messages on-topic.
Check the FAQ at: <http://www.automatrix.com/cgi-bin/vtkfaq>
To UNSUBSCRIBE, send message body containing "unsubscribe vtkusers" to
<majordomo at gsao.med.ge.com>. For help, send message body containing
"info vtkusers" to the same address. Live long and prosper.
-----------------------------------------------------------------------------
More information about the vtkusers
mailing list