<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi Chris!<br>
<br>
A plane is defined by three points and that is what you have. Take
two of them and make the cross product, since the cross product is a
vector which is orthogonal to both. In principal this cross product
vector is the normal.<br>
<br>
Or you use the static function ComputeNormal of vtkTriangle:<br>
<br>
double P1[3] = { p1[0], p1[1], p1[2] };<br>
double P2[3] = { p2[0], p2[1], p2[2] };<br>
double P3[3] = { p3[0], p3[1], p[2] };<br>
<br>
double n[3];<br>
vtkTriangle::ComputeNormal(P1, P2, P3, n);<br>
<br>
Am 16.02.2012 23:59, schrieb Bayliss, Chris (Chicago):
<blockquote
cite="mid:7A77D5124AFF914ABC327585A84C900D1038BBAB@USBLMSVEXC003.na-hearing.corp-ad.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<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]-->
<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> </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. 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> </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> </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> </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> </o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </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. My code
is below. Does anyone know how to compute the origin and
normal vector form the polydata file above? <o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </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">
trim->SetFileName(<span style="color:#A31515">"C:/Program
Files/VTK/TPS/Debug/Sample1-plane.vtk"</span>); <o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> trim->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></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> <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"> vtkPolyData*
trimpd = trim->GetOutput();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->SetPoints(trim->GetOutput()->GetPoints());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->SetVerts(trim->GetOutput()->GetVerts());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->SetPolys(trim->GetOutput()->GetPolys());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->Update();<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </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"> <span
style="color:blue">for</span>(vtkIdType a = 0; a <
trimpd->GetNumberOfPoints(); a++)<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"> <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">
trimpd->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"> <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"> <span
style="color:green">//
polydata->GetPoints()->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"> std::cout
<< <span style="color:#A31515">"Points in trim plane
"</span> << a << <span style="color:#A31515">"
: ("</span> << p[0] << <span
style="color:#A31515">" "</span> << p[1] << <span
style="color:#A31515">" "</span> << p[2] << <span
style="color:#A31515">")"</span> << std::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"><span
style="font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </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">
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">
trimnorm->SetInput(trimpd);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimnorm->ComputePointNormalsOn();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimnorm->ComputePointNormalsOn();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimnorm->ComputeCellNormalsOn();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimnorm->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> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> <span
style="color:green">/*trimpd->GetCellData()->SetNormals(trimnorm->ComputeCellNormalsOn()->GetOutput());*/</span><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->GetCellData()->SetNormals(trimnorm->GetOutput()->GetCellData()->GetNormals());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimpd->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> </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">
vtkDoubleArray *cellNormalsRetrieved =
vtkDoubleArray::SafeDownCast(trimpd<span style="color:green">/*->GetOutput()*/</span>->GetCellData()->GetNormals());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> <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"> { <o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> cout
<< <span style="color:#A31515">"There are "</span>
<< cellNormalsRetrieved->GetNumberOfTuples()
<< <span style="color:#A31515">" cell normals."</span>
<< 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"> <span
style="color:blue">for</span>(vtkIdType i = 0; i <
cellNormalsRetrieved->GetNumberOfTuples(); i++)<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"> <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">
cellNormalsRetrieved->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"> cout
<< <span style="color:#A31515">"Cell normal "</span>
<< i << <span style="color:#A31515">": "</span>
<< cN[0] << <span style="color:#A31515">" "</span>
<< cN[1] << <span style="color:#A31515">" "</span>
<< cN[2] << 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"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> <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"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> cout
<< <span style="color:#A31515">"No cell normals."</span>
<< 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"><span
style="font-family:"Arial","sans-serif""><o:p> </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">
trimplane->SetOrigin(trimpd->GetPoint(0));<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
trimplane->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 “warp”: <o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas"> 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">
clipper->SetInputConnection(warp->GetOutputPort());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
clipper->SetClipFunction(trimplane);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
clipper->GenerateClippedOutputOn();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span
style="font-size:9.5pt;font-family:Consolas">
clipper->SetValue(0.5);<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Chris<o:p></o:p></p>
</div>
<div> </div>
<br>
<font color="gray" face="calibri" size="2">**** 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>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>
Visit other Kitware open-source projects at <a class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>
Please keep messages on-topic and check the VTK FAQ at: <a class="moz-txt-link-freetext" href="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</a>
Follow this link to subscribe/unsubscribe:
<a class="moz-txt-link-freetext" href="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</a>
</pre>
</blockquote>
<br>
</body>
</html>