<div dir="ltr">Maximillian,<div><br></div><div><span style="font-size:12.8px">> <i>a downcast is required in order to convert a vtkPolyData object into a </i></span><i><b style="font-size:12.8px">Mesh</b><span style="font-size:12.8px"> object</span></i><br></div><div><i><span style="font-size:12.8px"><br></span></i></div><div><span style="font-size:12.8px">Not true. A downcast is required to convert a <b>pointer</b> of type vtkPolyData to <b>pointer</b> of type Mesh, but it need not succeed i.e. return non-null. The cast will only succeed if the the object pointed to via the vtkPolyData pointer is indeed of type Mesh. vtkSTLReader will never create Mesh, it will only create vtkPolyData. As a result you cannot "downcast" it to Mesh with success.</span></div><div><br></div><div>> <i>why do dynamic_cast work just fine whereas SafeDownCast don‘t</i><br></div><div><i><br></i></div><div>Hopefully the attached C++ code helps.<br></div><div><div><br></div></div><div>Utkarsh<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 9, 2017 at 4:23 PM, Maximilian Weiherer <span dir="ltr"><<a href="mailto:weiherer.maximilian@gmx.de" target="_blank">weiherer.maximilian@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE" link="blue" vlink="purple"><div class="m_1447988832858569916WordSection1"><p class="MsoNormal">Hi Utkarsh, <u></u><u></u></p><p class="MsoNormal">as <b>Mesh</b> <i>is a</i> vtkPolyData, a downcast is required in order to convert a vtkPolyData object into a <b>Mesh</b> object. I still don’t know why SafeDownCast do not work properly. As far as I know, the parent class (vtkPolyData) must be downcasted to <b>Mesh</b>… . If a dynamic_cast is essentially the same as SafeDownCast, why do dynamic_cast work just fine whereas SafeDownCast don‘t?<u></u><u></u></p><p class="MsoNormal">Best regards<br>Maximilian<u></u><u></u></p><p class="MsoNormal"><span class=""><b>Von:</b> Utkarsh Ayachit [mailto:<a href="mailto:utkarsh.ayachit@kitware.com" target="_blank">utkarsh.ayachit@<wbr>kitware.com</a>] <br></span><b>Gesendet:</b> Mittwoch, 9. August 2017 20:33<br><b>An:</b> Maximilian Weiherer <<a href="mailto:weiherer.maximilian@gmx.de" target="_blank">weiherer.maximilian@gmx.de</a>>; ParaView <<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>></p><div><div class="h5"><br><b>Betreff:</b> Re: [vtkusers] SafeDownCast does not work properly<u></u><u></u></div></div><p></p><div><div class="h5"><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal"><span style="font-size:9.5pt">Maximilian,</span><u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><span style="font-size:9.5pt">That's not a reasonable expectation. Mesh **isa** vtkPolyData, and not vice-versa. Look at docs for dynamic_cast in C++. In spirit, SafeDownCast is essentially the same thing.</span><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><span style="font-size:9.5pt">Utkarsh</span><u></u><u></u></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">On Wed, Aug 9, 2017 at 2:12 PM, Maximilian Weiherer <<a href="mailto:weiherer.maximilian@gmx.de" target="_blank">weiherer.maximilian@gmx.de</a>> wrote:<u></u><u></u></p><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><p class="MsoNormal">Hi Utkarsh, <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">thanks for your reply. I created the custom mesh class in order to add some new functionality (e.g. a method to check whether a mesh intersects another mesh). The vtkPolyData object which should be casted is the output of a vtkSTLReader, i.e. <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* mesh = </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::SafeDownCast(reader-><wbr>GetOutput()); </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// mesh always equals NULL</span><u></u><u></u></p><p class="MsoNormal">Best regards<u></u><u></u></p><p class="MsoNormal">Maximilian<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"><b>Von:</b> Utkarsh Ayachit [mailto:<a href="mailto:utkarsh.ayachit@kitware.com" target="_blank">utkarsh.ayachit@<wbr>kitware.com</a>] <br><b>Gesendet:</b> Mittwoch, 9. August 2017 17:53<br><b>An:</b> Maximilian Weiherer <<a href="mailto:weiherer.maximilian@gmx.de" target="_blank">weiherer.maximilian@gmx.de</a>><br><b>Cc:</b> vtk <<a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a>><br><b>Betreff:</b> Re: [vtkusers] SafeDownCast does not work properly<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal"><span style="font-size:9.5pt">Maximilian,</span><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal"><span style="font-size:9.5pt">I am confused why any arbitrary vtkPolyData object would be castable to "Mesh". It will only return non-null, if it's is indeed created as a Mesh. Is it? Where's the "<vtkPolyData object>" coming from?</span><u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal"><span style="font-size:9.5pt">Utkarsh</span><u></u><u></u></p></div></div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">On Wed, Aug 9, 2017 at 11:50 AM, Maximilian Weiherer <<a href="mailto:weiherer.maximilian@gmx.de" target="_blank">weiherer.maximilian@gmx.de</a>> wrote:<u></u><u></u></p><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt"><div><div><p class="MsoNormal">Hi all, <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I defined my own mesh class (named <b>Mesh</b>) by inheriting from vtkPolyData. Now I am struggling with the SafeDownCast method in order to cast a vtkPolyData object into a <b>Mesh</b> object. Whenever I am applying a SafeDownCast to a vtkPolyData object, NULL is returned.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">The <b>Mesh</b> class looks as follows:<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:blue">class</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> : </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">public</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">vtkPolyData</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">{</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">  </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">public</span><span style="font-size:9.5pt;font-family:Consolas;color:black">:</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">static</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* New();</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    </span><span style="font-size:9.5pt;font-family:Consolas;color:#6f008a">vtkTypeMacro</span><span style="font-size:9.5pt;font-family:Consolas;color:black">(</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">, </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">vtkPolyData</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> PrintSelf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">ostream</span><span style="font-size:9.5pt;font-family:Consolas;color:black">& </span><span style="font-size:9.5pt;font-family:Consolas;color:gray">os</span><span style="font-size:9.5pt;font-family:Consolas;color:black">, </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">vtkIndent</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:gray">indent</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">  </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">protected</span><span style="font-size:9.5pt;font-family:Consolas;color:black">:</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    Mesh();</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    ~Mesh();</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">  </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">private</span><span style="font-size:9.5pt;font-family:Consolas;color:black">:</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    Mesh(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">const</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">&); </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// Not implemented.</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">    </span><span style="font-size:9.5pt;font-family:Consolas;color:blue">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:teal">operator=</span><span style="font-size:9.5pt;font-family:Consolas;color:black">(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">const</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">&); </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// Not implemented.</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">};</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="color:black">…and this is the cast that does not work properly:</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="color:black"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">* mesh = </span><span style="font-size:9.5pt;font-family:Consolas;color:#2b91af">Mesh</span><span style="font-size:9.5pt;font-family:Consolas;color:black">::SafeDownCast(<<wbr>vtkPolyData object>); </span><span style="font-size:9.5pt;font-family:Consolas;color:green">// mesh always equals NULL</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:green"> </span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="color:black">Any help would be appreciated. Thanks!</span><u></u><u></u></p><p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"> </span><u></u><u></u></p><p class="MsoNormal">Best regards<u></u><u></u></p><p class="MsoNormal">Maximilian<u></u><u></u></p></div><div id="m_1447988832858569916m_5834314892408756603m_3987841914009693506DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><p class="MsoNormal"> <u></u><u></u></p><table class="m_1447988832858569916MsoNormalTable" border="1" cellpadding="0" style="border:none;border-top:solid #d3d4de 1.0pt"><tbody><tr><td width="55" style="width:41.25pt;border:none;padding:13.5pt .75pt .75pt .75pt"><p class="MsoNormal"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank"><span style="border:solid windowtext 1.0pt;padding:0cm;text-decoration:none"><img border="0" width="46" height="29" style="width:.4791in;height:.302in" id="m_1447988832858569916m_5834314892408756603_x005f_x0000_i1025" src="cid:image001.jpg@01D3115C.B8B13140" alt="Das Bild wurde vom Absender entfernt."></span></a><u></u><u></u></p></td><td width="470" style="width:352.5pt;border:none;padding:12.75pt .75pt .75pt .75pt"><p class="MsoNormal" style="line-height:13.5pt"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#41424e">Virenfrei. <a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank"><span style="color:#4453ea">www.avast.com</span></a> </span><u></u><u></u></p></td></tr></tbody></table></div></div><p class="MsoNormal" style="margin-bottom:12.0pt"><br>______________________________<wbr>_________________<br>Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br><br>Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br><br>Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br><br>Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br><br>Follow this link to subscribe/unsubscribe:<br><a href="http://public.kitware.com/mailman/listinfo/vtkusers" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><u></u><u></u></p></blockquote></div><p class="MsoNormal"> <u></u><u></u></p></div></div></div></blockquote></div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></div></blockquote></div><br></div>