<div class="gmail_quote">Responses inline...</div><div class="gmail_quote"><br></div><div class="gmail_quote">2011/6/9 Frédéric Speisser <span dir="ltr">&lt;<a href="mailto:frederic.speisser@grooviz.com">frederic.speisser@grooviz.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

  
    
  
  <div bgcolor="#ffffff" text="#000000">
    Thank you David for your response.<br>
    I had already took a look to TestPriorityStreaming in vtk and to
    Paraview StreamingView code but i can&#39;t get it work...<br>
    Here is a sample code I use for test, am I doing something wrong ?<br>
    <br>
    <br>
    // Dummy clipper only used to set bounding box of pieces to read<br>
    // Only ProcessRequest method is redefined<br>
    <br>
    class VtkClipDataSetExtend : public vtkClipDataSet<br>
    {<br>
    public:<br>
        vtkTypeMacro(VtkClipDataSetExtend,vtkClipDataSet);<br>
    <br>
        static VtkClipDataSetExtend *New();<br>
    <br>
    <br>
    protected:<br>
        VtkClipDataSetExtend() {}<br>
        virtual ~VtkClipDataSetExtend() {}<br>
    <br>
        int VtkClipDataSetExtend::ProcessRequest(vtkInformation*
    request,<br>
            vtkInformationVector** inputVector,<br>
            vtkInformationVector* outputVector)<br>
        {<br>
    <br>
            vtkInformation *outInfo =
    outputVector-&gt;GetInformationObject(0);<br>
    <br>
            vtkStreamingDemandDrivenPipeline *sdd = <br>
               
    vtkStreamingDemandDrivenPipeline::SafeDownCast(this-&gt;GetExecutive());<br>
    <br>
            if (sdd == NULL)<br>
            {<br>
                return -1;<br>
            }<br>
    <br>
            // Bounds of pieces to read<br>
            int extent[6];<br>
    <br></div></blockquote><div><br></div><div>What are you trying to do with the following code? Update extents should be negotiated between the source and sink of the pipeline. Structured readers set the WHOLE_EXTENT in the RequestInformation pass to announce what they can potentially produce. The downstream end then asks for a particular subextent during the RequestUpdateExtent pass. During that negotiation, vtkExtentTranslators are invoked by the pipeline to map from unstructured extent requests to structured extents, if needed. </div>

<div><br></div><div>The code below appears to operate in all passes, not just RequestUpdateExtent where extents are meant to be asked of the input, and asks for a single voxel.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div bgcolor="#ffffff" text="#000000">
            extent[0] = 0;<br>
            extent[1] = 1;<br>
            extent[2] = 0;<br>
            extent[3] = 1;<br>
            extent[4] = 0;<br>
            extent[5] = 1;<br>
    <br>
            vtkDebugMacro(&lt;&lt;&quot;SetUpdateExtent &quot; <br>
                &lt;&lt; extent[0] &lt;&lt; &quot;  &quot; &lt;&lt; extent[1]
    &lt;&lt; &quot;  &quot; <br>
                &lt;&lt; extent[2] &lt;&lt; &quot;  &quot; &lt;&lt; extent[3]
    &lt;&lt; &quot;  &quot;<br>
                &lt;&lt; extent[4] &lt;&lt; &quot;  &quot; &lt;&lt; extent[5]
    &lt;&lt; &quot;  &quot;);<br>
    <br>
            // Set these bounds in pipeline<br>
            sdd-&gt;SetUpdateExtent(outInfo, extent);<br>
    <br>
    <br>
    <br>
            return 1;<br>
        }<br>
    <br>
    };<br>
    <br>
    vtkStandardNewMacro(VtkClipDataSetExtend);<br>
    <br>
    ..........<br>
    <br>
    {<br>
    ..........<br>
           
//----------------------------------------------------------------------------------------------------//<br>
            // writer<br>
            // generate a pieces splitted image file <br>
            if(writeFile)<br>
            {<br>
                vtkImageGridSource* const source =
    vtkImageGridSource::New();<br>
                source-&gt;SetDataScalarTypeToShort();<br>
                source-&gt;SetFillValue((double)0xAAAA);<br>
                source-&gt;SetDataExtent(0, DATASOURCESIZE-1, 0,
    DATASOURCESIZE-1, 0, DATASOURCESIZE-1);<br>
    <br>
                // parallel image writer<br>
                vtkSmartPointer&lt;vtkXMLPImageDataWriter&gt; writer =
    vtkSmartPointer&lt;vtkXMLPImageDataWriter&gt;::New();<br>
    <br>
                // connect data source<br>
               
    writer-&gt;SetInputConnection(source-&gt;GetOutputPort());<br>
                source-&gt;Delete();<br>
    <br>
                // settings<br>
                writer-&gt;SetFileName(&quot;PartShortVolume16.pvti&quot;);<br>
                writer-&gt;SetNumberOfPieces(NUMPIECES);<br>
    <br>
                // range of pieces assigned to this writer<br>
                writer-&gt;SetStartPiece(0);<br>
                writer-&gt;SetEndPiece(NUMPIECES-1);<br>
    <br>
                // split xml ref / data<br>
                writer-&gt;SetWriteSummaryFile(TRUE); <br>
    <br>
                // write<br>
                writer-&gt;Update();<br>
                writer-&gt;Write();<br>
            }<br>
    <br>
            // reader<br>
            vtkSmartPointer&lt;vtkXMLPImageDataReader&gt; reader =
    vtkSmartPointer&lt;vtkXMLPImageDataReader&gt;::New();<br>
            reader-&gt;SetFileName(&quot;PartShortVolume16.pvti&quot;);<br>
    <br>
            reader-&gt;ReleaseDataFlagOn();<br>
    <br>
            reader-&gt;DebugOn();<br>
    <br>
            // clipping<br>
            vtkSmartPointer&lt;VtkClipDataSetExtend&gt; clipper =
    vtkSmartPointer&lt;VtkClipDataSetExtend&gt;::New();<br>
            vtkSmartPointer&lt;vtkPlane&gt; plane =
    vtkSmartPointer&lt;vtkPlane&gt;::New();<br>
            plane -&gt;SetNormal(1.0,0.0,0.0);<br>
            plane &gt;SetOrigin(5.5,5.5,5.5);<br>
            clipper -&gt;SetClipFunction(plane);<br>
    <br>
            // pipeline connections<br>
            vtkSmartPointer&lt;vtkDataSetMapper&gt; mapper =
    vtkSmartPointer&lt;vtkDataSetMapper&gt;::New();<br>
            clipper -&gt;SetInputConnection(reader-&gt;GetOutputPort());<br>
            mapper -&gt;SetInputConnection(clipper
    -&gt;GetOutputPort());<br>
    <br>
            // Send the request of update to the reader<br>
            // The reader should only read pieces include in bounds
    defined by extent set in clipper<br>
            // But all pieces are loaded ... custom extent is not
    retrieved by reader ?<br>
            mapper-&gt;Update();<br></div></blockquote><div><br></div><div>The mapper can ask for whatever extent it wants, and probably is asking for the whole thing by default. See vtkPolyDataMapper::Set*Piece for an example of how that can be changed.</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div bgcolor="#ffffff" text="#000000">
    }<br>
    <br>
    Is somewhere maybe a documentation explaining the mechanism of
    pieces streaming and how to use it ? ...<br>
    <br></div></blockquote><div><br></div><div>I&#39;m not aware of anything definitive.</div><div><br></div><div>Do make sure that you understand pipeline passes, especially REQUEST_UPDATE_EXTENT, where pieces are asked from upstream. The pipeline is described in Chapter 15 of the VTK Users guide, 11&#39;th edition and more briefly in this kitware source issue: </div>

<div>  <a href="http://www.kitware.com/products/archive/kitware_quarterly0706.pdf">http://www.kitware.com/products/archive/kitware_quarterly0706.pdf</a></div><div><br></div><div>The way I&#39;ve personally used streaming and why is described here:</div>

<div>  <a href="http://www.vtk.org/Wiki/StreamingParaView">http://www.vtk.org/Wiki/StreamingParaView</a></div><div>and in this kitware source issue:</div><div>  <a href="http://www.kitware.com/products/archive/kitware_quarterly1010.pdf">http://www.kitware.com/products/archive/kitware_quarterly1010.pdf</a></div>

<div><br></div><div>Others on the list can chime in if they&#39;ve used it in other ways, most likely directly within VTK&#39;s imaging filters.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div bgcolor="#ffffff" text="#000000">
    Thank you again !<br>
    <br>
    Le 08/06/2011 19:09, David E DeMarle a écrit :
    <blockquote type="cite"><div><div></div><div class="h5">Look in the ParaView source code under the
      directory Plugins/StreamingView/VTK. That directory does not need
      ParaView, ie you can compile it against a standalone VTK build.
      The tests should be particularly helpful.
      <div><br>
      </div>
      <div>I have not tried vtkXMLPImageDataReader so it might take some
        work to use the files you have at hand. However,
        vtkXMLImageDataReader (note the lack of P) does work with
        streaming. Instead of separate files streaming takes advantage
        of the little exercised sub pieces within a single vti file
        feature to do what it needs to with this file format.</div>
      <div><br>
      </div>
      <div>See VTK/Rendering/Testing/Cxx/TestPriorityStreaming for more
        information.</div>
      <div><br>
      </div>
      <div>David E DeMarle<br>
        Kitware, Inc..<br>
        R&amp;D Engineer<br>
        28 Corporate Drive<br>
        Clifton Park, NY 12065-8662<br>
        Phone: <a href="tel:518-371-3971%20x109" value="+15183713971" target="_blank">518-371-3971 x109</a><br>
        <br>
        <br>
        <div class="gmail_quote">2011/6/8 Frédéric Speisser <span dir="ltr">&lt;<a href="mailto:frederic.speisser@grooviz.com" target="_blank">frederic.speisser@grooviz.com</a>&gt;</span><br>
          <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
            All,<br>
            <br>
            I have a data object stored in pvti format (splitted in
            several pieces) and I would like to be able to stream only
            pieces involved in rendering. This should be possible in
            vtk, referring documentation.<br>
            I use vtkStreamindDemandDrivenPipeline and
            vtkStreamindDemandDrivenPipeline::UPDATE_EXTENT, but despite
            the fact I set bounds defining only a little part of my
            dataobject in update_extent key, the
            reader(vtkXMLPImageDataReader) always loads all pieces...<br>
            I have made plenty of tests but I&#39;m not able to make this
            mechanism working.<br>
            <br>
            I need some help/hints !<br>
            <br>
            Thank you<br>
            <br>
            _______________________________________________<br>
            Powered by <a href="http://www.kitware.com" target="_blank">www.kitware..com</a><br>
            <br>
            Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
            <br>
            Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
            <br>
            Follow this link to subscribe/unsubscribe:<br>
            <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
          </blockquote>
        </div>
        <br>
      </div>
      </div></div><hr noshade size="1">
      <p color="#000000" align="left">Aucun virus trouvé
        dans ce message.<br>
        Analyse effectuée par AVG - <a href="http://www.avg.fr" target="_blank">www.avg.fr</a><br>
        Version: 10.0.1382 / Base de données virale: 1511/3688 - Date:
        08/06/2011</p>
    </blockquote>
    <br>
  </div>

</blockquote></div><br>