<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Hi!<br>Iīm trying to write a filter with multiple input. Just for trying out, I want to add the scalar attribute data of two datasets (both should have the same structure) and have as an output&nbsp; one dataset with the same structure and the&nbsp; the&nbsp; added scalar data of the two input&nbsp; datasets. <br>The header vtkDataCalculator.h looks like this:<br><br>#ifndef __vtkDataCalculator_h<br>#define __vtkDataCalculator_h<br><br>#include "vtkDataSetAlgorithm.h"<br><br>class VTK_EXPORT vtkDataCalculator: public vtkDataSetAlgorithm<br>{ public:<br>&nbsp; static vtkDataCalculator *New();<br><br>&nbsp; vtkTypeRevisionMacro(vtkDataCalculator,vtkDataSetAlgorithm);<br>&nbsp; void PrintSelf(ostream&amp; os, vtkIndent indent);<br><br>protected:<br>&nbsp;&nbsp;&nbsp; vtkDataCalculator(){};<br>&nbsp;&nbsp;&nbsp; ~vtkDataCalculator(){};<br><br>&nbsp;&nbsp;&nbsp; //virtual int FillInputPortInformation(int port, vtkInformation* info);<br>&nbsp;&nbsp;&nbsp; virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);<br>};<br>#endif<br><br><br>the vtkDataCalculator.cxx file:<br>#include "vtkDataCalculator.h"<br>#include "vtkDataSet.h"<br>#include "vtkDataArray.h"<br>#include "vtkObjectFactory.h"<br>#include "vtkPointData.h"<br>#include "vtkDoubleArray.h"<br>#include "vtkAlgorithm.h"<br>#include "vtkSmartPointer.h"<br>#include "vtkInformation.h"<br>#include "vtkInformationVector.h"<br><br>vtkStandardNewMacro(vtkDataCalculator);<br>//----------------------------------------------------------------------------<br>vtkCxxRevisionMacro(vtkDataCalculator,"$Revision$");<br>//----------------------------------------------------------------------------<br>void vtkDataCalculator::PrintSelf(ostream&amp; os, vtkIndent indent)<br>{<br>&nbsp;&nbsp;&nbsp; this-&gt;Superclass::PrintSelf(os,indent);<br>}<br><br>//----------------------------------------------------------------------------<br><br><br>int vtkDataCalculator::RequestData(vtkInformation *vtkNotUsed(request),<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; vtkInformationVector **inputVector,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; vtkInformationVector *outputVector)<br>{&nbsp;&nbsp; <br>&nbsp;// int numOfInputs = inputVector -&gt; GetNumberOfInformationObjects();<br>&nbsp;// if(numOfInputs != 2) vtkErrorMacro("Number of Inputs not equal 2");<br>//Get the input and the output<br>&nbsp; vtkDataSet* input1 = vtkDataSet::GetData(inputVector[0]);<br>&nbsp; vtkDataSet* input2 = vtkDataSet::GetData(inputVector[1]);<br>&nbsp; vtkDataSet* output = vtkDataSet::GetData(outputVector);<br><br>&nbsp; //check if the same number of points<br>&nbsp; int numOfTuples1 = input1 -&gt; GetPointData() -&gt; GetArray(0) -&gt; GetNumberOfTuples();<br>&nbsp; int numOfTuples2 = input2 -&gt; GetPointData() -&gt; GetArray(0) -&gt; GetNumberOfTuples();<br><br>&nbsp; vtkDoubleArray *scalars1 = vtkDoubleArray::New();<br>&nbsp; input1 -&gt; GetPointData() -&gt; GetArray(0) -&gt; GetData(0,numOfTuples1,0,0,scalars1);<br>&nbsp; <br>&nbsp; vtkDoubleArray *scalars2 = vtkDoubleArray::New();<br>&nbsp; input2 -&gt; GetPointData() -&gt; GetArray(0) -&gt; GetData(0,numOfTuples2,0,0,scalars2);<br><br>&nbsp; vtkDoubleArray *summe = vtkDoubleArray::New();<br>&nbsp; summe -&gt; SetNumberOfComponents(1);<br>&nbsp; summe -&gt; SetNumberOfTuples(numOfTuples1);<br><br>&nbsp; if(numOfTuples1 != numOfTuples2) {vtkErrorMacro("different Number of Tuples");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp; else { for(int index = 0; index &lt; numOfTuples1; index++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { summe -&gt; SetValue(index, (scalars1 -&gt; GetValue(index)) + (scalars2 -&gt; GetValue(index)));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;output -&gt; CopyStructure(input1);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;summe -&gt; SetName("Summe");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;output -&gt; GetPointData() -&gt; AddArray(summe);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; output -&gt; GetPointData() -&gt; SetActiveScalars("Summe");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;output -&gt; Squeeze();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return 1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>}<br><br><br>and now the corresponding ServerManager.xml file:<br><br>&lt;ServerManagerConfiguration&gt;<br>&lt;ProxyGroup name="filters"&gt;<br>&lt;SourceProxy name="DataCalculator" class="vtkDataCalculator" label="Data Calculator"&gt;<br>&lt;Documentation&gt;<br>This filter adds the point data of their scalar attributes. The dimensions must coincide.<br>&lt;/Documentation&gt;<br><br>&lt;InputProperty name="Input" command="AddInputConnection" clean_command="RemoveAllInputs" multiple_input="1"&gt;<br>&lt;ProxyGroupDomain name="groups"&gt;<br>&lt;Group name="sources"/&gt;<br>&lt;Group name="filters"/&gt;<br>&lt;/ProxyGroupDomain&gt;<br><br>&lt;DataTypeDomain name="input_type"&gt;<br>&lt;DataType value="vtkDataSet"/&gt;<br>&lt;/DataTypeDomain&gt;<br><br>&lt;/InputProperty&gt;<br>&lt;/SourceProxy&gt;<br><br>&lt;/ProxyGroup&gt;<br>&lt;/ServerManagerConfiguration&gt;<br><br><br>Well, thatīs my first try.. Paraview shuts down when I try to apply the filter, debugging I get the information that there is something wrong with the input (small wonder ;-) ). But it can also be the case that I just donīt know how to give two datasets to the filter, meaning that to apply the filter, I opened two files, so I had two of those "eye"-icons in paraviewīs pipeline browser displayed and hoped that Paraview would recognize those datasets as the input to the filter. <br><br>Thx for any piece of advice,<br>Natalie<br> <br /><hr />Express yourself instantly with MSN Messenger! <a href='http://clk.atdmt.com/AVE/go/onm00200471ave/direct/01/' target='_new'>MSN Messenger</a></body>
</html>