<div dir="ltr"><div class="gmail_extra"><div><div dir="ltr">Hi David,</div></div><div dir="ltr"><br></div><div>To clarify: I want to take an unstructured grid (x,y) with face data (z) and make it a 2D structured grid. I have connectivity information (triangulation).</div><div><br></div><div>Looking at vtkPlaneSource: looks like it should work/make my life easier<br></div><div><br></div><div>However, even with the above linked demo with the slight modification, I cannot make this work. This is most likely a PEBKAC as a result of my lack of familiarity with VTK so I appreciate you taking the time to help. The minimum working example is below, based upon this code <a href="http://www.itk.org/Wiki/VTK/Examples/Cxx/PolyData/InterpolateMeshOnGrid">http://www.itk.org/Wiki/VTK/Examples/Cxx/PolyData/InterpolateMeshOnGrid</a></div><div><br></div><div><div>vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();</div><div>    vtkSmartPointer<vtkFloatArray>  data  = vtkSmartPointer<vtkFloatArray>::New();</div><div>    data->SetName("elevation");</div><div><br></div><div>    unsigned int gridSize = 10;</div><div>    float maxHeight = 5;</div><div>    for ( unsigned int i = 0; i < 100; ++i )</div><div>    {</div><div>        double x = vtkMath::Random(0, gridSize);</div><div>        double y = vtkMath::Random(0, gridSize);</div><div>        double z = vtkMath::Random(0, maxHeight);</div><div>    points->InsertNextPoint ( x, y, 0);</div><div>    data->InsertNextValue(z);</div><div>    }</div><div><br></div><div>    // Add the grid points to a polydata object</div><div>    vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();</div><div>    polydata->SetPoints ( points );</div><div>    polydata->GetPointData()->SetScalars(data);</div><div><br></div><div>    // Triangulate the grid points. If you do not have a mesh (points</div><div>    // only), the output will not be interpolated!</div><div>    vtkSmartPointer<vtkDelaunay2D> tri = vtkSmartPointer<vtkDelaunay2D>::New();</div><div>    tri->SetInputData ( polydata );</div><div>    tri->Update();</div><div><br></div><div>    // Create a grid of points to interpolate over</div><div>    vtkSmartPointer<vtkPlaneSource> gridPoints = vtkSmartPointer<vtkPlaneSource>::New();</div><div>    gridPoints->SetResolution(gridSize, gridSize);</div><div>    gridPoints->SetOrigin(0,  0, 0);</div><div><br></div><div>    // Perform the interpolation</div><div>    vtkSmartPointer<vtkProbeFilter> probeFilter =  vtkSmartPointer<vtkProbeFilter>::New();</div><div>    probeFilter->SetSourceConnection(tri->GetOutputPort());</div><div>    probeFilter->SetInputData(gridPoints->GetOutput()); //</div><div>    // Interpolate 'Source' at these points</div><div>    probeFilter->Update();</div><div><br></div><div>    vtkSmartPointer<vtkDelaunay2D> gridDelaunay = vtkSmartPointer<vtkDelaunay2D>::New();</div><div>    gridDelaunay->SetInputConnection ( probeFilter->GetOutputPort() );</div><div><br></div><div>    vtkSmartPointer<vtkXMLPolyDataWriter> gridWriter =  vtkSmartPointer<vtkXMLPolyDataWriter>::New();</div><div>    gridWriter->SetFileName ( "gridSurface.vtp" );</div><div>    gridWriter->SetInputConnection ( gridDelaunay->GetOutputPort() );</div><div>    gridWriter->Write();</div></div><div><br></div><div><br></div><div><br></div>
<br><div class="gmail_quote">On Tue, Sep 16, 2014 at 12:07 PM, David Gobbi <span dir="ltr"><<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">If you want to create a polydata that is a regular grid, then<br>
use vtkPlaneSource with SetResolution(gridSize, gridSize).<br>
<br>
If you want your regular grid to be a vtkImageData, then<br>
use vtkImageGridSource with SetDataExtent(), SetDataSpacing(),<br>
an SetDataOrigin() to create the needed dimensions.<br>
<br>
Note that if your point cloud is just points without any connectivity<br>
between the points (i.e. without any cells), then you cannot use<br>
vtkProbeFilter.<br>
<div class=""><div class="h5"><br>
<br>
<br>
<br>
On Tue, Sep 16, 2014 at 11:52 AM, Chris Marsh <<a href="mailto:chris.marsh@usask.ca">chris.marsh@usask.ca</a>> wrote:<br>
> Mmh thanks. I think I'll stick with the probe filter.<br>
><br>
> I've been able to get  this example working<br>
> <a href="http://www.itk.org/Wiki/VTK/Examples/Cxx/PolyData/InterpolateMeshOnGrid" target="_blank">http://www.itk.org/Wiki/VTK/Examples/Cxx/PolyData/InterpolateMeshOnGrid</a><br>
> if I have a real-world pt cloud, I'm a bit unclear how I should make the<br>
> grid.<br>
><br>
> If xll and yll are the lower x and y coordinates of an axis aligned bounding<br>
> box<br>
><br>
> size_t gridSize = 100;<br>
>     for ( size_t x = 0; x < gridSize; x++ )<br>
>     {<br>
>         for ( size_t y = 0; y < gridSize; y++ )<br>
>         {<br>
>             gridPoints->InsertNextPoint ( x+xll, y+yll, 0);<br>
>         }<br>
>     }<br>
><br>
> does not seem to produce any output.<br>
><br>
> Any suggestions?<br>
><br>
> On Mon, Sep 15, 2014 at 4:39 PM, David Gobbi <<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>> wrote:<br>
>><br>
>> Another filter that might work is vtkShepardMethod, which takes<br>
>> unstructured points (e.g. an arbitrary set of samples) as input and<br>
>> produces a vtkImageData as output.<br>
>><br>
>> The difference between vtkProbeFilter and vtkShepardMethod is<br>
>> that the former performs the interpolation based on the connectivity<br>
>> of the points (i.e. based on the cells), while the latter ignores the<br>
>> connectivity and does the interpolation purely based on distance.<br>
>><br>
>>  - David<br>
>><br>
>> On Mon, Sep 15, 2014 at 4:23 PM, Chris Marsh <<a href="mailto:chris.marsh@usask.ca">chris.marsh@usask.ca</a>> wrote:<br>
>> > Thanks David, this looks perfect.<br>
>> ><br>
>> ><br>
>> > On Mon, Sep 15, 2014 at 4:10 PM, David Gobbi <<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>><br>
>> > wrote:<br>
>> >><br>
>> >> Hi Chris,<br>
>> >><br>
>> >> This sounds like a job for vtkProbeFilter.  The probe filter takes two<br>
>> >> inputs,<br>
>> >> the "input" and the "source".  The idea is that it resamples the<br>
>> >> scalars<br>
>> >> from<br>
>> >> the "source" onto the geometry of the "input".  So, in this case, the<br>
>> >> "source"<br>
>> >> is your unstructured grid, and the "input" is any vtkImageData that has<br>
>> >> the<br>
>> >> origin, spacing, and extent that you want to use for the regridding.<br>
>> >> The<br>
>> >> output of vtkProbeFilter will be an image that has the same geometry as<br>
>> >> the input, but that has pixel values that have been interpolated from<br>
>> >> your<br>
>> >> unstructured grid.  You should be able to find several examples on the<br>
>> >> wiki.<br>
>> >><br>
>> >>  - David<br>
>> >><br>
>> >><br>
>> >> On Mon, Sep 15, 2014 at 3:59 PM, chrism <<a href="mailto:chris.marsh@usask.ca">chris.marsh@usask.ca</a>> wrote:<br>
>> >> > Is it possible to (easily) convert an unstructured grid to a<br>
>> >> > structured<br>
>> >> > grid<br>
>> >> > (Image data)?<br>
>> >> ><br>
>> >> > Is unstructured -> polydata -> image data  the only way? If so, how<br>
>> >> > example<br>
>> >> ><br>
>> >> > (<a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DataSetSurfaceFilter" target="_blank">http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DataSetSurfaceFilter</a><br>
>> >> > ??)<br>
>> >> ><br>
>> >> > Ultimately, the unstructured grid represents a topography, and I am<br>
>> >> > looking<br>
>> >> > to 'rasterize' it for use in a GIS.<br>
>> ><br>
>> ><br>
><br>
><br>
</div></div></blockquote></div><br></div></div>