<div dir="ltr">Here is an example that uses ProgrammableGlyphFilter<br><a href="http://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/ProgrammableGlyphFilter">http://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/ProgrammableGlyphFilter</a><br>
<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 19, 2013 at 1:17 PM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The number of normals msu match the number of points. Off the top of my head, you might be able to use the<br>
// .NAME vtkProgrammableGlyphFilter - control the generation and placement of glyphs at input points<br>
// .SECTION Description<br>// vtkProgrammableGlyphFilter is a filter that allows you to place a glyph at<br>// each input point in the dataset. In addition, the filter is programmable<br>// which means the user has control over the generation of the glyph. The<br>

// glyphs can be controlled via the point data attributes (e.g., scalars,<br>// vectors, etc.) or any other information in the input dataset.<br>//<br><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Apr 18, 2013 at 6:04 AM, Kilgus, Thomas <span dir="ltr">&lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="purple" lang="DE"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hi Bill,<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">that worked out well. Now my normals have the correct color. <u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> <u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">I am still struggling how I could visualize a Subset of normals of my surface. I can select the normal subset like this:<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">    vtkSmartPointer&lt;vtkFloatArray&gt; normals = vtkSmartPointer&lt;vtkFloatArray&gt;::New();<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">    normals-&gt;SetNumberOfComponents(3);<u></u><u></u></span></p><p class="MsoNormal">

<span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">     vtkSmartPointer&lt;vtkIdList&gt; IDs = //a containing about 200 IDs of all normals I would like to see<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">      for(int j = 0; j &lt; IDs-&gt;GetNumberOfIds(); ++j)<u></u><u></u></span></p><p class="MsoNormal">

<span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">      {<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">          normals-&gt;InsertNextTuple( normalGenerator-&gt;GetOutput()-&gt;GetPointData()-&gt;GetNormals()-&gt;GetTuple(IDs-&gt;GetId(j)) );<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">      }<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"><u></u> <u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">However, if I set these normals for my polydata and try to render everything a crash occurs inside the Update() of the glyph3d. I assume that the glyph3d is struggling, because I insert a polydata with 300k points and add only 200 normals. <u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">I could also select the corresponding 200 points from the polydata and make a new polydata containing 200 points and 200 normals. Is this the “optimal” way to go?<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"><br>Regards<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Thomas<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"><u></u> <u></u></span></p><div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">

<div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US"> Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>] <br>

<b>Sent:</b> Montag, 15. April 2013 18:47</span></p><div><div><br><b>To:</b> Kilgus, Thomas<br><b>Cc:</b> <a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br><b>Subject:</b> Re: [vtkusers] Rendering/Computing normals of a surface<u></u><u></u></div>

</div><p></p></div></div><div><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">Have you set the ScalarRange on the Mapper? You should set it to the range of your scalar data. If you do not want to display scalar colors, apply SetScalarVisibilityOff() to your mapper.<u></u><u></u></p>

<div><p class="MsoNormal"><u></u> <u></u></p></div></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><u></u> <u></u></p><div><p class="MsoNormal">On Mon, Apr 15, 2013 at 11:51 AM, Kilgus, Thomas &lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt; wrote:<u></u><u></u></p>

<div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Hey Bill,</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">I just figured out that the normals of my Kinect data are indeed there. They are just rendered very small and in dark blue on a black renderwindow. I set the color of the actor to red and don’t use the SetColorMode method of the glyph3d (I tried to use it, but it didn’t change anything). The normals of my ball are rendered in red. Do you have any idea why my Kinect data has blue glyphs and ignores all color calls? Does this “blue” have any meaning? </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Regards,</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Thomas</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p>

<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt"><div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US"> Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>] <br>

<b>Sent:</b> Freitag, 12. April 2013 16:44</span><u></u><u></u></p><div><div><p class="MsoNormal"><br><b>To:</b> Kilgus, Thomas<br><b>Cc:</b> <a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br><b>Subject:</b> Re: [vtkusers] Rendering/Computing normals of a surface<u></u><u></u></p>

</div></div></div></div><div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">The mapping is 1:1. There will be a normal for each point and a normal for each cell.<u></u><u></u></p><div><p class="MsoNormal">

 <u></u><u></u></p></div></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"> <u></u><u></u></p><div><p class="MsoNormal">On Fri, Apr 12, 2013 at 10:30 AM, Kilgus, Thomas &lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt; wrote:<u></u><u></u></p>

<div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Sorry, either this example is not the answer to my question or I don’t get it :). </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">I have N normals inside a vtkDoubleArray and V vertices inside a vtkPolyData. How can I get the corresponding normal(s) N(j) to vertex V(i). I think i != j, because when splitting is on NumberOfNormals != NumberOfVertices, or not? In other words, the mapping is NOT 1:1. </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">The example simply adds 3 normals to 3 points and here the mapping is 1:1.</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">

<div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US"> Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>] <br>

<b>Sent:</b> Freitag, 12. April 2013 16:21</span><u></u><u></u></p><div><div><p class="MsoNormal"><br><b>To:</b> Kilgus, Thomas<br><b>Cc:</b> <a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br><b>Subject:</b> Re: [vtkusers] Rendering/Computing normals of a surface<u></u><u></u></p>

</div></div></div></div><div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">Look at this example:<u></u><u></u></p><div><p class="MsoNormal"><a href="http://vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataPointNormals" target="_blank">http://vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataPointNormals</a><u></u><u></u></p>

</div><div><p class="MsoNormal"> <u></u><u></u></p></div></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"> <u></u><u></u></p><div><p class="MsoNormal">On Fri, Apr 12, 2013 at 9:04 AM, Kilgus, Thomas &lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt; wrote:<u></u><u></u></p>

<div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">And how would I get the normal of a certain vertex? Especially with SplittingOn()</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">

<div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US"> Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>] <br>

<b>Sent:</b> Freitag, 12. April 2013 14:57</span><u></u><u></u></p><div><div><p class="MsoNormal"><br><b>To:</b> Kilgus, Thomas<br><b>Cc:</b> <a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br><b>Subject:</b> Re: [vtkusers] Rendering/Computing normals of a surface<u></u><u></u></p>

</div></div></div></div><div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">2) vtkPlaneSource generates normals. Many of the source&#39;s do.<u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p>

</div><div><p class="MsoNormal">After<u></u><u></u></p></div><div><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"> normalGenerator-&gt;Update();</span><u></u><u></u></p>

</div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">try</span><u></u><u></u></p></div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">normalGenerator-&gt;GetOutput()-&gt;Print(std::cout);</span><u></u><u></u></p>

</div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">to see if there are normals present</span><u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">

 <u></u><u></u></p></div></div></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"> <u></u><u></u></p><div><p class="MsoNormal">On Fri, Apr 12, 2013 at 8:45 AM, Kilgus, Thomas &lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt; wrote:<u></u><u></u></p>

<div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Unfortunately, that is a bit complicated and inside our own framework. But basically, this happens:</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">vtkSmartPointer&lt;vtkPoints&gt; points = vtkSmartPointer&lt;vtkPoints&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">points-&gt;SetDataTypeToDouble();</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">vtkSmartPointer&lt;vtkCellArray&gt; polys = vtkSmartPointer&lt;vtkCellArray&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">for loop for all pixels of the depth image</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">{</span><u></u><u></u></p><p class="MsoNormal" style="text-indent:35.4pt"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Insert 3d point into points</span><u></u><u></u></p>

<p class="MsoNormal" style="text-indent:35.4pt"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal" style="text-indent:35.4pt">

<span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Insert cell points for valid (!=0) points with valid neighbors (simple triangulation)</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">}</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">vtkSmartPointer&lt;vtkPolyData&gt; mesh = vtkSmartPointer&lt;vtkPolyData&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">mesh-&gt;SetPoints(points);</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">mesh-&gt;SetPolys(polys);</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">We also add texture coordinates and scalars, but this is not related to normals, is it?</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">You can see the details here: <a href="http://mitk.org/git/?p=MITK.git;a=blob;f=Modules/ToFProcessing/mitkToFDistanceImageToSurfaceFilter.cpp;h=2b24b193315c2db97bce1d4f8aed90df42c99d1f;hb=HEAD" target="_blank">http://mitk.org/git/?p=MITK.git;a=blob;f=Modules/ToFProcessing/mitkToFDistanceImageToSurfaceFilter.cpp;h=2b24b193315c2db97bce1d4f8aed90df42c99d1f;hb=HEAD</a></span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">My questions 3. and 4.  are not related to the Kinect data, are they?</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Regards,</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Thomas</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span><u></u><u></u></p>

<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt"><div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;" lang="EN-US"> Bill Lorensen [mailto:<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>] <br>

<b>Sent:</b> Freitag, 12. April 2013 14:36<br><b>To:</b> Kilgus, Thomas<br><b>Cc:</b> <a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br><b>Subject:</b> Re: [vtkusers] Rendering/Computing normals of a surface</span><u></u><u></u></p>

</div></div><div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">How are you creating your Kinect mesh?<u></u><u></u></p></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"> <u></u><u></u></p>

<div><p class="MsoNormal">On Fri, Apr 12, 2013 at 8:28 AM, Kilgus, Thomas &lt;<a href="mailto:t.kilgus@dkfz-heidelberg.de" target="_blank">t.kilgus@dkfz-heidelberg.de</a>&gt; wrote:<u></u><u></u></p><div><div><p class="MsoNormal">

Hi everyone,<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">I’m trying to compute and render normals of certain vertices of a mesh (in fact a Kinect mesh). I assume that I have to compute the normals via vtkPolyDataNormals and display them using a vtkGlyph3d? </span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">I observed some strange behavior which really confused me:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>

<p><span lang="EN-US">1.</span><span style="font-size:7.0pt" lang="EN-US">       </span><span lang="EN-US">If I create a vtkPlaneSource or load a ball from hard disc and compute normals for that data, everything seems fine. If I load an “open” surface (my Kinect mesh), there are no normals displayed. The documentation says that SetAutoOrientNormals does only work with closed surfaces. But at the moment I don’t care about orientation. There should be normals for at least some vertices of an open mesh, shouldn’t there?</span><u></u><u></u></p>

<p><span lang="EN-US">2.</span><span style="font-size:7.0pt" lang="EN-US">       </span><span lang="EN-US">If I load my Kinect mesh and make a new polydata which contains as much points at (0,0,0) as I have normals and set the normals for the new polydata, the glyph will produce arrows pointing from (0,0,0) to somewhere. This looks pretty good could but could be a random result with empty memory. </span><u></u><u></u></p>

<p><span lang="EN-US">3.</span><span style="font-size:7.0pt" lang="EN-US">       </span><span lang="EN-US">If I connect my vtkPlaneSource or the ball directly to the glyph (I skip the vtkPolyDataNormals), normals are still rendered correctly. Does this mean my vtkPlaneSource already contains them from the beginning? Are they computed in the background somewhere inside the glyph3d? Is the vtkPolyDataNormals even necessary? This only works for the plane and the ball - not for the Kinect mesh. I can imagine that a plane automatically computes its normal on Update(), but why does my ball have normals already?</span><u></u><u></u></p>

<p><span lang="EN-US">4.</span><span style="font-size:7.0pt" lang="EN-US">       </span><span lang="EN-US">How can I get the normal of a certain vertex Id? If I use vtkFloatArray::SafeDownCast(output-&gt;GetPointData()-&gt;GetNormals()) are Id’s equal to the vertex Id’s of the polydata? What happens if I turn splitting on and get multiple normals for each vertex? How is the mapping done?</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">My code looks as follows:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">vtkSmartPointer&lt;vtkPolyData&gt; inputPolyData = //load some data</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  // Generate normals</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  vtkSmartPointer&lt;vtkPolyDataNormals&gt; normalGenerator = vtkSmartPointer&lt;vtkPolyDataNormals&gt;::New();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  normalGenerator-&gt;SetInput( inputPolyData );</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  normalGenerator-&gt;ComputePointNormalsOn();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  </span>normalGenerator-&gt;ComputeCellNormalsOff();<u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  normalGenerator-&gt;SetSplitting(0); //I want exactly one normal per vertex</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  normalGenerator-&gt;Update();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  </span>vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapperNormals =<u></u><u></u></p><p class="MsoNormal">      <span lang="EN-US">vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  //I chose arrows as representation</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  vtkSmartPointer&lt;vtkArrowSource&gt; arrow = vtkSmartPointer&lt;vtkArrowSource&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  arrow-&gt;Update();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">//use the output of vtkPolyDataNormals as input for the glyph3d</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">vtkSmartPointer&lt;vtkGlyph3D&gt; glyph = vtkSmartPointer&lt;vtkMaskedGlyph3D&gt;::New();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  glyph-&gt;SetInput( normalGenerator-&gt;GetOutput() );</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  glyph-&gt;SetSourceConnection(arrow-&gt;GetOutputPort());</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  glyph-&gt;OrientOn();</span><u></u><u></u></p><p class="MsoNormal">

<span lang="EN-US">  glyph-&gt;SetVectorModeToUseNormal();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  glyph-&gt;Update();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  mapperNormals-&gt;SetInputConnection(glyph-&gt;GetOutputPort());</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">//now follows standard code which could be taken from almost any example…</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  vtkSmartPointer&lt;vtkActor&gt; actorNormals =</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">      vtkSmartPointer&lt;vtkActor&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  actorNormals-&gt;SetMapper(mapperNormals);</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  // Create a renderer, render window, and interactor</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  </span>vtkSmartPointer&lt;vtkRenderer&gt; renderer =<u></u><u></u></p><p class="MsoNormal">      vtkSmartPointer&lt;vtkRenderer&gt;::New();<u></u><u></u></p><p class="MsoNormal">
  vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =<u></u><u></u></p>
<p class="MsoNormal">      vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<u></u><u></u></p><p class="MsoNormal">  renderWindow-&gt;AddRenderer(renderer);<u></u><u></u></p><p class="MsoNormal">  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =<u></u><u></u></p>

<p class="MsoNormal">      vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<u></u><u></u></p><p class="MsoNormal">  <span lang="EN-US">vtkSmartPointer&lt;vtkInteractorStyleTrackballCamera&gt; style = vtkSmartPointer&lt;vtkInteractorStyleTrackballCamera&gt;::New();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  renderWindowInteractor-&gt;SetInteractorStyle(style);</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  renderWindowInteractor-&gt;SetRenderWindow(renderWindow);</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  // Add the actor to the scene</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  renderer-&gt;AddActor(actorNormals);</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  // Render and interact</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">  renderWindow-&gt;Render();</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">  renderWindowInteractor-&gt;Start();</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Regards,</span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">Thomas</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal">

<span lang="EN-US">Thomas Kilgus</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">German Cancer Research Center (DKFZ)</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Div. Medical and Biological Informatics </span><u></u><u></u></p>

<p class="MsoNormal"><span lang="EN-US">Junior group: Computer-assisted Interventions (E131)</span><u></u><u></u></p><p class="MsoNormal">Im Neuenheimer Feld 280<u></u><u></u></p><p class="MsoNormal">69120 Heidelberg, Germany<u></u><u></u></p>

<p class="MsoNormal">Phone: <a href="tel:%2B49%280%29%206221-42-3545" target="_blank">+49(0) 6221-42-3545</a><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p></div></div><p class="MsoNormal" style="margin-bottom:12.0pt">

<br>_______________________________________________<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/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_FAQ</a><br><br>Follow this link to subscribe/unsubscribe:<br><a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><u></u><u></u></p>

</div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">-- <br>Unpaid intern in BillsBasement at noware dot com<u></u><u></u></p></div></div>

</div></div></div></div></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">-- <br>Unpaid intern in BillsBasement at noware dot com<u></u><u></u></p>

</div></div></div></div></div></div></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">-- <br>Unpaid intern in BillsBasement at noware dot com<u></u><u></u></p>

</div></div></div></div></div></div></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">-- <br>Unpaid intern in BillsBasement at noware dot com<u></u><u></u></p>

</div></div></div></div></div></div></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal">-- <br>Unpaid intern in BillsBasement at noware dot com<u></u><u></u></p>

</div></div></div></div></div></div></blockquote></div><br><br clear="all"><br>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>