<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Arial","sans-serif";
        color:windowtext;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'>I am having trouble extracting the appropriate data from a .vtk polydata file and using it with vtkClipPolyData.&nbsp; My polydata file contains three points representing a plane, the file contents are shown below.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><u><span style='font-size:9.5pt;font-family:Consolas;color:gray'>(Sample1-plane.vtk)</span></u><u><span style='font-family:"Arial","sans-serif";color:gray'><o:p></o:p></span></u></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'># vtk DataFile Version 3.0<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>vtk output<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>ASCII<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>DATASET POLYDATA<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>POINTS 3 float<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>-2.31291 -0.472235 -26.3682 27.227 -13.8288 4.74193 -29.2774 -4.23973 -2.38224 <o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>VERTICES 3 6<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>1 0 <o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>1 1 <o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:gray'>1 2<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'>I am not sure how to read/extract this data and convert it into a usable form for the vtkclipPolyData filter.&nbsp; My code is below.&nbsp; Does anyone know how to compute the origin and normal vector form the polydata file above?&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:#948A54'>//import polydata file from above:<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>vtkPolyDataReader *trim =vtkPolyDataReader::New();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trim-&gt;SetFileName(<span style='color:#A31515'>&quot;C:/Program Files/VTK/TPS/Debug/Sample1-plane.vtk&quot;</span>); <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;trim-&gt;Update();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;<span style='color:green'>//Convert vtkpolydatareader object to vtkpolydata</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; vtkPolyData* trimpd = trim-&gt;GetOutput();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;SetPoints(trim-&gt;GetOutput()-&gt;GetPoints());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;SetVerts(trim-&gt;GetOutput()-&gt;GetVerts());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;SetPolys(trim-&gt;GetOutput()-&gt;GetPolys());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;Update();<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:green'>// Write all of the coordinates of the points in the vtkPolyData to the console.</span><span style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; <span style='color:blue'>for</span>(vtkIdType a = 0; a &lt; trimpd-&gt;GetNumberOfPoints(); a++)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:blue'>double</span> p[3];<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trimpd-&gt;GetPoint(a,p);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// This is identical to:</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// polydata-&gt;GetPoints()-&gt;GetPoint(i,p);</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; <span style='color:#A31515'>&quot;Points in trim plane &quot;</span> &lt;&lt; a &lt;&lt; <span style='color:#A31515'>&quot; : (&quot;</span> &lt;&lt; p[0] &lt;&lt; <span style='color:#A31515'>&quot; &quot;</span> &lt;&lt; p[1] &lt;&lt; <span style='color:#A31515'>&quot; &quot;</span> &lt;&lt; p[2] &lt;&lt; <span style='color:#A31515'>&quot;)&quot;</span> &lt;&lt; std::endl;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:green'>//Compute plane normal</span><span style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; vtkPolyDataNormals *trimnorm = vtkPolyDataNormals::New();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimnorm-&gt;SetInput(trimpd);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimnorm-&gt;ComputePointNormalsOn();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimnorm-&gt;ComputePointNormalsOn();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimnorm-&gt;ComputeCellNormalsOn();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimnorm-&gt;Update();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; <span style='color:green'>/*trimpd-&gt;GetCellData()-&gt;SetNormals(trimnorm-&gt;ComputeCellNormalsOn()-&gt;GetOutput());*/</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;GetCellData()-&gt;SetNormals(trimnorm-&gt;GetOutput()-&gt;GetCellData()-&gt;GetNormals());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimpd-&gt;Update();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'> <span style='color:green'>///////// Get cell normals ///////////</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp; vtkDoubleArray *cellNormalsRetrieved = vtkDoubleArray::SafeDownCast(trimpd<span style='color:green'>/*-&gt;GetOutput()*/</span>-&gt;GetCellData()-&gt;GetNormals());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp; <span style='color:blue'>if</span>(cellNormalsRetrieved)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; { <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; <span style='color:#A31515'>&quot;There are &quot;</span> &lt;&lt; cellNormalsRetrieved-&gt;GetNumberOfTuples() &lt;&lt; <span style='color:#A31515'>&quot; cell normals.&quot;</span> &lt;&lt; endl;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'> <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>for</span>(vtkIdType i = 0; i &lt; cellNormalsRetrieved-&gt;GetNumberOfTuples(); i++)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:blue'>double</span> cN[3];<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellNormalsRetrieved-&gt;GetTuple(i, cN);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; <span style='color:#A31515'>&quot;Cell normal &quot;</span> &lt;&lt; i &lt;&lt; <span style='color:#A31515'>&quot;: &quot;</span> &lt;&lt; cN[0] &lt;&lt; <span style='color:#A31515'>&quot; &quot;</span> &lt;&lt; cN[1] &lt;&lt; <span style='color:#A31515'>&quot; &quot;</span> &lt;&lt; cN[2] &lt;&lt; endl;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp; <span style='color:blue'>else</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; cout &lt;&lt; <span style='color:#A31515'>&quot;No cell normals.&quot;</span> &lt;&lt; endl;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif";color:#948A54'>//Create trim plane from polydata:<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>vtkPlane *trimplane = vtkPlane::New();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimplane-&gt;SetOrigin(trimpd-&gt;GetPoint(0));<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; trimplane-&gt;SetNormal(0.0, 1.0, 0.0);<span style='color:#948A54'>//made up values, would like to use output of vtkpolydatanormals somehow.</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'> <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:#948A54'>//clip polydata named &#8220;warp&#8221;: <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp;&nbsp;vtkClipPolyData *clipper = vtkClipPolyData::New();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; clipper-&gt;SetInputConnection(warp-&gt;GetOutputPort());<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; clipper-&gt;SetClipFunction(trimplane);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; clipper-&gt;GenerateClippedOutputOn();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas'>&nbsp;&nbsp; clipper-&gt;SetValue(0.5);<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Chris<o:p></o:p></p></div><DIV>&nbsp;</DIV><BR/><body><font size="2" color="gray" face="calibri">**** GN GROUP NOTICE - AUTOMATICALLY INSERTED **** 
<BR/>The information in this e-mail (including attachments, if any) is considered confidential and is intended only for the recipient(s) listed above. Any review, use, disclosure, distribution or copying of this e-mail is prohibited except by or on behalf of the intended recipient. If you have received this email in error, please notify me immediately by reply e-mail, delete this e-mail, and do not disclose its contents to anyone. Any opinions expressed in this e-mail are those of the individual and not necessarily the GN group. Thank you. <BR/>
******************** DISCLAIMER END ************************
 </font></body></body></html>