<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:10pt"><div>Hi,<br><br>I have an unorganized points that could be fitted in a surface with the following code:<br><br>(taken from: <a href="http://www.cmake.org/Wiki/Create_a_surface_from_Unorganized_Points">http://www.cmake.org/Wiki/Create_a_surface_from_Unorganized_Points</a>, in blue you can see my modification to that code)<br><br><div dir="ltr" style="text-align: left;"><div class="cpp source-cpp" style="font-family: monospace;"><pre class="de1"><span class="co2">#include "vtkSurfaceReconstructionFilter.h"</span><br><span class="co2">#include "vtkProgrammableSource.h"</span><br><span class="co2">#include "vtkContourFilter.h"</span><br><span class="co2">#include "vtkReverseSense.h"</span><br><span class="co2">#include "vtkPolyDataMapper.h"</span><br><span class="co2">#include "vtkProperty..h"</span><br><span
class="co2">#include "vtkPolyData.h"</span><br><span class="co2">#include "vtkCamera.h"</span><br><span class="co2">#include "vtkRenderer.h"</span><br><span class="co2">#include "vtkRenderWindow.h"</span><br><span class="co2">#include "vtkRenderWindowInteractor.h"</span><br><span class="co2">#include <vtkMath.h></span><br><span class="co2">#include <cmath></span><br> <br>vtkPoints<span class="sy2">*</span> readPoints<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br> <br><span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span> <span class="sy2">**</span>argv<span class="br0">)</span><br><span class="br0">{</span><br> <br>        <span class="co1">// Read some points</span><br>        vtkPoints<span class="sy2">*</span> points <span class="sy1">=</span> readPoints<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>
        vtkPolyData<span class="sy2">*</span> polydata <span class="sy1">=</span> vtkPolyData<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        polydata<span class="sy2">-</span><span class="sy1">></span>SetPoints<span class="br0">(</span>points<span class="br0">)</span><span class="sy4">;</span><br> <br> <span style="color: rgb(0, 0, 191);">...generate scalar...</span><br style="color: rgb(0, 0, 191);"><span style="color: rgb(0, 0, 191);"> </span><br style="color: rgb(0, 0, 191);"><span style="color: rgb(0, 0, 191);"> polydata->GetPointData()->SetScalars(scalars);</span><br> <br>        <span class="co1">// Construct the surface and create isosurface.        </span><br>        vtkSurfaceReconstructionFilter<span class="sy2">*</span> surf <span class="sy1">=</span>
vtkSurfaceReconstructionFilter<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        surf<span class="sy2">-</span><span class="sy1">></span>SetInput<span class="br0">(</span>polydata<span class="br0">)</span><span class="sy4">;</span><br> <br>        vtkContourFilter<span class="sy2">*</span> cf <span class="sy1">=</span> vtkContourFilter<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        cf<span class="sy2">-</span><span class="sy1">></span>SetInputConnection<span class="br0">(</span>surf<span class="sy2">-</span><span class="sy1">></span>GetOutputPort<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span><br>        cf<span class="sy2">-</span><span class="sy1">></span>SetValue<span class="br0">(</span><span class="nu0">0</span>,
<span class="nu16">0.0</span><span class="br0">)</span><span class="sy4">;</span><br> <br>        <span class="co1">// Sometimes the contouring algorithm can create a volume whose gradient</span><br>        <span class="co1">// vector and ordering of polygon (using the right hand rule) are</span><br>        <span class="co1">// inconsistent. vtkReverseSense cures this problem.</span><br>        vtkReverseSense<span class="sy2">*</span> reverse <span class="sy1">=</span> vtkReverseSense<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        reverse<span class="sy2">-</span><span class="sy1">></span>SetInputConnection<span class="br0">(</span>cf<span class="sy2">-</span><span class="sy1">></span>GetOutputPort<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span><br>        reverse<span class="sy2">-</span><span
class="sy1">></span>ReverseCellsOn<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        reverse<span class="sy2">-</span><span class="sy1">></span>ReverseNormalsOn<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br> <br>        <span style="color: rgb(96, 0, 191);">vtkLookupTable *lut = vtkLookupTable::New();</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        lut->SetHueRange(0.267, 0.5);</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        lut->SetSaturationRange(1, 1);</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        lut->SetValueRange(1, 1);</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        lut->Build();</span><br style="color: rgb(96, 0, 191);"><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        vtkPolyDataMapper* map =
vtkPolyDataMapper::New();</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        map->SetInputConnection(reverse->GetOutputPort());</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        map->ScalarVisibilityOn();</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        map->SetScalarRange(0, 1);</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        map->SetScalarModeToDefault();</span><br style="color: rgb(96, 0, 191);"><span style="color: rgb(96, 0, 191);">        map->SetLookupTable(lut);</span><br> <br>        vtkActor<span class="sy2">*</span> surfaceActor <span class="sy1">=</span> vtkActor<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        surfaceActor<span class="sy2">-</span><span class="sy1">></span>SetMapper<span class="br0">(</span>map<span
class="br0">)</span><span class="sy4">;</span><br> <br>        <span class="co1">// Create the RenderWindow, Renderer and both Actors</span><br>        vtkRenderer<span class="sy2">*</span> ren <span class="sy1">=</span> vtkRenderer<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        vtkRenderWindow<span class="sy2">*</span> renWin <span class="sy1">=</span> vtkRenderWindow<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        renWin<span class="sy2">-</span><span class="sy1">></span>AddRenderer<span class="br0">(</span>ren<span class="br0">)</span><span class="sy4">;</span><br>        vtkRenderWindowInteractor<span class="sy2">*</span> iren <span class="sy1">=</span> vtkRenderWindowInteractor<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span
class="sy4">;</span><br>        iren<span class="sy2">-</span><span class="sy1">></span>SetRenderWindow<span class="br0">(</span>renWin<span class="br0">)</span><span class="sy4">;</span><br> <br>        <span class="co1">// Add the actors to the renderer, set the background and size</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>AddActor<span class="br0">(</span>surfaceActor<span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>SetBackground<span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">1</span>, <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span><br>        renWin<span class="sy2">-</span><span class="sy1">></span>SetSize<span class="br0">(</span><span class="nu0">400</span>, <span class="nu0">400</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span
class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span><span class="sy1">></span>SetFocalPoint<span class="br0">(</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span><span class="sy1">></span>SetPosition<span class="br0">(</span><span class="nu0">1</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span><span class="sy1">></span>SetViewUp<span class="br0">(</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span
class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>ResetCamera<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span><span class="sy1">></span>Azimuth<span class="br0">(</span><span class="nu0">20</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span><span class="sy1">></span>Elevation<span class="br0">(</span><span class="nu0">30</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>GetActiveCamera<span class="br0">(</span><span class="br0">)</span><span
class="sy2">-</span><span class="sy1">></span>Dolly<span class="br0">(</span><span class="nu16">1.2</span><span class="br0">)</span><span class="sy4">;</span><br>        ren<span class="sy2">-</span><span class="sy1">></span>ResetCameraClippingRange<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br> <br>        iren<span class="sy2">-</span><span class="sy1">></span>Initialize<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        renWin<span class="sy2">-</span><span class="sy1">></span>Render<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br>        iren<span class="sy2">-</span><span class="sy1">></span>Start<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br> <br>        <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span><br> <br><span class="br0">}</span><br> <br>vtkPoints<span
class="sy2">*</span> readPoints<span class="br0">(</span><span class="br0">)</span><br><span class="br0">{</span><br>        vtkPoints<span class="sy2">*</span> points <span class="sy1">=</span> vtkPoints<span class="sy4">::</span><span class="kw3">New</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span><br> <br>        <span class="kw4">float</span> x, y, z<span class="sy4">;</span><br>        <span class="co1">// generate random points on unit sphere</span><br>        <span class="kw1">for</span><span class="br0">(</span><span class="kw4">int</span> i<span class="sy1">=</span><span class="nu0">0</span><span class="sy4">;</span> i<span class="sy1"><</span><span class="nu0">100</span><span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span><br>                <span class="kw4">double</span> phi, theta,u,v<span class="sy4">;</span><br>                u <span class="sy1">=</span> vtkMath<span class="sy4">::</span><span
class="me2">Random</span><span class="br0">(</span><span class="nu16">0.0</span>,<span class="nu16">1.0</span><span class="br0">)</span><span class="sy4">;</span><br>                v <span class="sy1">=</span> vtkMath<span class="sy4">::</span><span class="me2">Random</span><span class="br0">(</span><span class="nu16">0.0</span>,<span class="nu16">1.0</span><span class="br0">)</span><span class="sy4">;</span><br>                phi <span class="sy1">=</span> <span class="nu16">2.0</span><span class="sy2">*</span><span class="nu16">3.14159265</span><span class="sy2">*</span>u<span class="sy4">;</span><br>                theta <span class="sy1">=</span> <span class="kw3">acos</span><span class="br0">(</span><span class="nu16">2.0</span><span class="sy2">*</span>v<span class="sy2">-</span><span class="nu16">1.0</span><span class="br0">)</span><span class="sy4">;</span><br> <br>                x <span class="sy1">=</span> std<span class="sy4">::</span><span class="kw3">cos</span><span
class="br0">(</span>phi<span class="br0">)</span><span class="sy2">*</span>std<span class="sy4">::</span><span class="kw3">sin</span><span class="br0">(</span>theta<span class="br0">)</span><span class="sy4">;</span><br>                y <span class="sy1">=</span> std<span class="sy4">::</span><span class="kw3">sin</span><span class="br0">(</span>phi<span class="br0">)</span><span class="sy2">*</span>std<span class="sy4">::</span><span class="kw3">sin</span><span class="br0">(</span>theta<span class="br0">)</span><span class="sy4">;</span><br>                z <span class="sy1">=</span> std<span class="sy4">::</span><span class="kw3">cos</span><span class="br0">(</span>theta<span class="br0">)</span><span class="sy4">;</span><br> <br> <br>                points<span class="sy2">-</span><span class="sy1">></span>InsertNextPoint<span class="br0">(</span>x, y, z<span class="br0">)</span><span class="sy4">;</span><br>        <span class="br0">}</span><br>        <span class="kw1">return</span>
points<span class="sy4">;</span><br><span class="br0">}</span></pre></div></div><br>My problem is that I need to associate a scalar to every point in order to generated a colored surface (with a lookup-table). However the surface have always an unique color and seems that the scalar data are ignored (or maybe lost by the filters). How I can obtain that result?<br><br>Thanks,<br><br>- AGPX<br></div>
<!-- cg22.c41.mail.ird.yahoo.com compressed/chunked Thu Nov 26 08:40:47 PST 2009 -->
</div><br>
</body></html>