<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>Hello,</div>

<div>im new to Paraview, and im trying to write a plugin for the application.</div>

<div>I already managed to get going a bit by using on site examples, however i have severe difficulty understanding how to pass data between filters.</div>

<div>&nbsp;</div>

<div>I have written a source plugin which generates some data, and a marching cubes filter to do some analyzing.</div>

<div>However, the data written to the source plugins&#39; output data object never seems to arrive at the m.c. filters input.</div>

<div>The code below was more or less copy pasted and reworked from a couple of examples i could actually get to work,</div>

<div>and which had some sparse explanation to them.</div>

<div>&nbsp;</div>

<div>Heres the code i think is relevant:</div>

<div>
<div>------------------------------------------------------------------------------------------------------------------------------------------------------------------</div>

<div>//first filter</div>

<div>
<div>vtkFirst::vtkFirst() {<br/>
&nbsp;&nbsp;&nbsp; this-&gt;SetNumberOfInputPorts(0);<br/>
&nbsp;&nbsp;&nbsp; this-&gt;SetNumberOfOutputPorts(1);<br/>
}</div>

<div>&nbsp;</div>

<div>vtkFirst::~vtkFirst(){<br/>
}</div>

<div>&nbsp;</div>

<div>int vtkFirst::FillOutputPortInformation(int port, vtkInformation* info) {<br/>
&nbsp;&nbsp;&nbsp; if (port == 0)<br/>
&nbsp;&nbsp; &nbsp;info-&gt;Set(vtkDataObject::DATA_TYPE_NAME(), &quot;vtkUniformGrid&quot;);<br/>
&nbsp;&nbsp;&nbsp; return 1;<br/>
}</div>

<div>&nbsp;</div>

<div>int vtkFirst::RequestDataObject(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;&nbsp; vtkInformationVector **vtkNotUsed(input),<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;&nbsp; vtkInformationVector *outputVector)<br/>
{<br/>
&nbsp;&nbsp;&nbsp; for ( int i = 0; i &lt; this-&gt;GetNumberOfOutputPorts(); ++i ){<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; vtkInformation* outInfo = outputVector-&gt;GetInformationObject( i );<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkUniformGrid&gt; output = vtkUniformGrid::SafeDownCast(outInfo-&gt;Get( vtkDataObject::DATA_OBJECT() ) );<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if (!output ) {<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output = vtkUniformGrid::New();<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outInfo-&gt;Set( vtkDataObject::DATA_OBJECT(), output );<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;GetOutputPortInformation(i)-&gt;Set(vtkDataObject::DATA_EXTENT_TYPE(), output-&gt;GetExtentType() );<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br/>
&nbsp;&nbsp;&nbsp; }<br/>
&nbsp;&nbsp;&nbsp; return 1;<br/>
}</div>

<div>int vtkFirst::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;&nbsp; vtkInformationVector **vtkNotUsed(input),<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;&nbsp; vtkInformationVector *outputVector)<br/>
{<br/>
&nbsp;&nbsp;&nbsp; vtkInformation* outInfo = outputVector-&gt;GetInformationObject(0);<br/>
&nbsp;&nbsp;&nbsp; vtkUniformGrid* output = vtkUniformGrid::SafeDownCast(outInfo-&gt;Get(vtkDataObject::DATA_OBJECT()));</div>

<div>&nbsp;&nbsp;&nbsp; //fill output with some data, for testing i set the dims</div>

<div>&nbsp;&nbsp;&nbsp; int dim[3] = {10,20,30};</div>

<div>
<div>&nbsp;&nbsp;&nbsp; output-&gt;SetDimensions(dim);</div>

<div>&nbsp;</div>

<div>&nbsp;&nbsp;&nbsp; int ext[6];</div>
</div>

<div>
<div>&nbsp;&nbsp;&nbsp; in_grid-&gt;GetExtents(ext);</div>

<div>&nbsp;&nbsp;&nbsp; cout &lt;&lt; ext[0] &lt;&lt; ... &lt;&lt; ext[6] &lt;&lt; endl;</div>

<div>}</div>

<div>//output is 0 9 0 19 0 29</div>
</div>
</div>
</div>

<div>------------------------------------------------------------------------------------------------------------------------------------------------------------------</div>

<div>
<div>//second filter</div>

<div>&nbsp;</div>

<div>void vtkSecond::AddSourceConnection(vtkAlgorithmOutput* input){<br/>
&nbsp;&nbsp;&nbsp; this-&gt;AddInputConnection(1, input);<br/>
}</div>

<div>void vtkSecond::RemoveAllSources(){<br/>
&nbsp;&nbsp;&nbsp; this-&gt;SetInputConnection(1, 0);<br/>
}</div>

<div>&nbsp;</div>

<div>int vtkSecond::FillInputPortInformation( int port, vtkInformation* info ){<br/>
&nbsp;&nbsp;&nbsp; if (!this-&gt;Superclass::FillInputPortInformation(port, info)) {<br/>
&nbsp;&nbsp; &nbsp;return 0;<br/>
&nbsp;&nbsp;&nbsp; }<br/>
&nbsp;&nbsp;&nbsp; if ( port == 0 ) {<br/>
&nbsp;&nbsp; &nbsp;info-&gt;Set( vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), &quot;vtkUniformGrid&quot; );<br/>
&nbsp;&nbsp; &nbsp;return 1;<br/>
&nbsp;&nbsp;&nbsp; }<br/>
&nbsp;&nbsp;&nbsp; return 0;<br/>
}</div>

<div>&nbsp;</div>
int vtkSecond::RequestData(vtkInformation *vtkNotUsed(request),

<div>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; vtkInformationVector **inputVector,<br/>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; vtkInformationVector *outputVector)<br/>
{<br/>
&nbsp;&nbsp;&nbsp; vtkInformation *inInfo = inputVector[0]-&gt;GetInformationObject(0);</div>

<div>
<div>&nbsp;&nbsp;&nbsp; vtkDataObject* inputDataObject = inInfo-&gt;Get(vtkDataObject::DATA_OBJECT());</div>

<div>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkUniformGrid&gt; in_grid = vtkUniformGrid::SafeDownCast(inputDataObject);</div>

<div>&nbsp;&nbsp;&nbsp; int ext[6];</div>

<div>&nbsp;&nbsp;&nbsp; in_grid-&gt;GetExtents(ext);</div>

<div>&nbsp;&nbsp;&nbsp; cout &lt;&lt; ext[0] &lt;&lt; ... &lt;&lt; ext[6] &lt;&lt; endl;</div>
</div>

<div>}</div>

<div>//output is 0 -1 0 -1 0 -1</div>

<div>
<div>------------------------------------------------------------------------------------------------------------------------------------------------------------------</div>

<div>Its not only the data thats getting lost, if i directly compare memory adresses of the DATA_OBJECTs, they are different.</div>

<div>I didnt post the .xml files since i assumed they would throw an error if something is wrong.</div>

<div>In short, the .xml file sets no pins for the first filter, and a single input pin for the second.</div>
</div>
</div>

<div>I also would appreciate an example which is as simple as possible explaning step by step how to talk to the pipeline.</div>

<div>It seems rather hard to find anything useful on the web (because its probably pretty trivial),or at least something that is so</div>

<div>minimal that it will work out of the box, and you can learn from it by expanding a working code, not reducing a</div>

<div>broken one to get it to work. Then again maybe it really is that complicated, then i&#39;ll just write my own vis package :)</div>

<div>&nbsp;</div>

<div>Thanks alot,</div>

<div>&nbsp;&nbsp;&nbsp; Tasche</div></div></body></html>