<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Hello,<br>I was just showing to my students how to write a very basic filter, for them to concentrate on the different steps rather than on the algorithm itself but... my example did not work!<br>The filter was supposed just to withdraw the X components of the normal of a PolyData and the students were asked to show a cylinder before and after the filter so as to compare the shading.<br>Looking at the code of the PassData() function, it seems that it really copies everything but when I apply my filter, the shading is modified both in the output and the input.<br>So where is the problem and how should I do it?<br><br>int vtkPbPassData::RequestData(<br>&nbsp; vtkInformation *vtkNotUsed(request),<br>&nbsp; vtkInformationVector **inputVector,<br>&nbsp; vtkInformationVector *outputVector)<br>{<br>&nbsp; // get the info objects<br>&nbsp; vtkInformation *inInfo = inputVector[0]-&gt;GetInformationObject(0);<br>&nbsp; vtkInformation *outInfo = outputVector-&gt;GetInformationObject(0);<br><br>&nbsp; // get the input and output<br>&nbsp; vtkPolyData *input = vtkPolyData::SafeDownCast(<br>&nbsp;&nbsp;&nbsp; inInfo-&gt;Get(vtkDataObject::DATA_OBJECT()));<br>&nbsp; vtkPolyData *output = vtkPolyData::SafeDownCast(<br>&nbsp;&nbsp;&nbsp; outInfo-&gt;Get(vtkDataObject::DATA_OBJECT()));<br><br>&nbsp; // pass all associated data to output dataset<br>&nbsp; output-&gt;CopyStructure(input);<br>&nbsp; output-&gt;GetPointData()-&gt;PassData(input-&gt;GetPointData());<br>&nbsp; output-&gt;GetFieldData()-&gt;PassData(input-&gt;GetFieldData());<br><br>&nbsp; // modify the normals<br>&nbsp; vtkPointData *pd = output-&gt;GetPointData();<br>&nbsp; if (pd ==NULL) {<br>&nbsp;&nbsp;&nbsp; vtkErrorMacro(&lt;&lt;"No point data");<br>&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp; }<br>&nbsp; vtkFloatArray *norms = (vtkFloatArray *)pd-&gt;GetNormals();<br>&nbsp; if (norms == NULL) {<br>&nbsp;&nbsp;&nbsp; vtkErrorMacro(&lt;&lt;"Normals must be defined for this filter to work");<br>&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp; }<br>&nbsp; float *coords = norms-&gt;GetPointer(0);<br><br>&nbsp; for (int i=0 ; i&lt;output-&gt;GetNumberOfPoints() ; i++,coords+=3)<br>&nbsp;&nbsp;&nbsp; *coords = 0;<br><br>&nbsp; return 1;<br>}<br><br>                                               </body>
</html>