Nicolas:<br><br>Replace vtkPolyDataPointPlacer vtkPolygonalSurfacePointPlacer and now I can no longer move the points ouside teh silhoutte.<br><br>Thanks<br>--<br>karthik<br><br><div class="gmail_quote">On Fri, May 14, 2010 at 2:25 PM, Nicolas Sarrasin <span dir="ltr">&lt;<a href="mailto:nsarrasin@phenix-systems.com">nsarrasin@phenix-systems.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


  

<div bgcolor="#ffffff" text="#003333">
<font size="-1"><font face="Tahoma">Here is a compiling example, I post
a picture too to be clearer.<br>
<br>
picture : <a href="http://img138.imageshack.us/img138/1695/123qny.png" target="_blank">http://img138.imageshack.us/img138/1695/123qny.png</a><br>
<br>
/*        code begins        */<br>
<br>
#include &lt;vtkRenderer.h&gt;<br>
#include &lt;vtkRendererCollection.h&gt;<br>
#include &lt;vtkRenderWindow.h&gt;<br>
#include &lt;vtkRenderWindowInteractor.h&gt;<br>
#include &lt;vtkProperty.h&gt;<br>
#include &lt;vtkLODActor.h&gt;<br>
#include &lt;vtkPolyDataMapper.h&gt;<br>
#include &lt;vtkPolyData.h&gt;<br>
#include &lt;vtkCellArray.h&gt;<br>
#include &lt;vtkSphereSource.h&gt;<br>
#include &lt;vtkContourWidget.h&gt;<br>
#include &lt;vtkOrientedGlyphContourRepresentation.h&gt;<br>
#include &lt;vtkLinearContourLineInterpolator.h&gt;<br>
#include &lt;vtkGlyph3D.h&gt;<br>
#include &lt;vtkCellPicker.h&gt;<br>
#include &lt;vtkCallbackCommand.h&gt;<br>
#include &lt;vtkCamera.h&gt;<br>
#include &lt;vtkInteractorStyleTrackballCamera.h&gt;<br>
#include &lt;vtkSmartPointer.h&gt;<br>
#include &lt;vtkPolyDataPointPlacer.h&gt;<br>
<br>
int main(int argc, char*argv[])<br>
{<br>
    //définition de la sphere<br>
    vtkSphereSource* theSphere = vtkSphereSource::New();<br>
    theSphere-&gt;SetCenter( 0, 0, 5);<br>
    theSphere-&gt;SetRadius(1.0);<div class="im"><br>
<br>
    vtkPolyDataMapper * sphereMapper = vtkPolyDataMapper::New();<br>
    sphereMapper-&gt;SetInput(theSphere-&gt;GetOutput());<br>
    <br>
    vtkLODActor* sphereActor = vtkLODActor::New();<br>
    sphereActor-&gt;SetMapper( sphereMapper);<br>
    <br></div>
    // définition Renderer + renderWindow<br>
    vtkRenderer *renderer1 = vtkRenderer::New();<br>
    renderer1-&gt;SetBackground(0.3, 0.45, 0.6);<div class="im"><br>
    renderer1-&gt;AddActor(sphereActor);<br>
<br>
    vtkRenderWindow *renWin = vtkRenderWindow::New();<br>
    renWin-&gt;AddRenderer(renderer1);<br></div>
    renWin-&gt;SetSize(600, 600);<br>
    renWin-&gt;SetPosition(450,150);<br>
    <br>
    //définition du WindowIteractor<div class="im"><br>
    vtkRenderWindowInteractor *rendIter =
vtkRenderWindowInteractor::New();<br>
    rendIter-&gt;SetRenderWindow(renWin);<br>
<br>
    // Here comes the image actor constrained handle widget stuff.....<br>
    vtkContourWidget *widget = vtkContourWidget::New();<br>
    widget-&gt;SetInteractor(rendIter);<br>
<br>
    vtkSmartPointer&lt;vtkLinearContourLineInterpolator&gt;
contourStyle =
vtkSmartPointer&lt;vtkLinearContourLineInterpolator&gt;::New();<br>
        <br>
    vtkOrientedGlyphContourRepresentation *rep
=vtkOrientedGlyphContourRepresentation::SafeDownCast(
widget-&gt;GetRepresentation() );<br></div>
    rep-&gt;GetLinesProperty()-&gt;SetColor(1, 1, 0);<br>
    rep-&gt;GetLinesProperty()-&gt;SetLineWidth(3.0);<br>
    rep-&gt;SetLineInterpolator(contourStyle);<br>
<br>
    //on définit un Placer pour forcer le contour a etre sur la sphere<div class="im"><br>
    vtkPolyDataPointPlacer * spherePlacer =
vtkPolyDataPointPlacer::New();<br>
    spherePlacer-&gt;AddProp(sphereActor);<br>
    rep-&gt;SetPointPlacer(spherePlacer);<br>
<br>
    renWin-&gt;Render();<br>
    rendIter-&gt;Initialize();<br>
    widget-&gt;EnabledOn();<br>
    rendIter-&gt;Start();<br>
    <br></div>
    //clean<br>
    rendIter-&gt;Delete();<br>
    renWin-&gt;Delete();<br>
    renderer1-&gt;Delete();<br>
        <br>
    sphereMapper-&gt;Delete();<br>
    sphereActor-&gt;Delete();<br>
    theSphere-&gt;Delete();<br>
<br>
    return 0;<br>
}<br>
<br>
/*        code ends           */<br>
<br>
Thanks<br>
<br>
</font></font><br>
Le 14/05/2010 10:13, Karthik Krishnan a écrit :
<div><div></div><div class="h5"><blockquote type="cite">
  <div class="gmail_quote">On Fri, May 14, 2010 at 1:15 PM, Nicolas
Sarrasin <span dir="ltr">&lt;<a href="mailto:nsarrasin@phenix-systems.com" target="_blank">nsarrasin@phenix-systems.com</a>&gt;</span>
wrote:<br>
  <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#003333"><font size="-1"><font face="Tahoma">Ok thanks for your reply.<br>
    </font></font></div>
  </blockquote>
  <div><br>
Please keep mails on the list, so others may chime in.<br>
 </div>
  <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#003333"><font size="-1"><font face="Tahoma"><br>
I&#39;m gonna use </font></font><i><small><font face="Tahoma">vtkPolygonalSurfaceContourLineInterpolator</font></small></i><small><font face="Tahoma">, it satisfied me, for the moment.<br>
    </font></small></div>
  </blockquote>
  <div><br>
Great.<br>
 <br>
  </div>
  <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#003333"><small><font face="Tahoma"><br>
    </font></small>
    <div>
    <blockquote type="cite"><small><font face="Tahoma">The interpolator
internally traces the shortest path between the two
nodes along vertices of the mesh, so its not as good as a projection
that cuts through the cells, but if your mesh is dense enough the
traced path might be good enough.</font></small></blockquote>
    <br>
    </div>
    <small>What do you suggest me if my mesh isn&#39;t dense enough ? How
can i
project the contour on my sphere ?</small><br>
    </div>
  </blockquote>
  <div><br>
The path is an approximation of a projection onto the mesh, such that
the projected path lies wholly along the vertices of the mesh.<br>
  <br>
  </div>
  <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#003333"><small><font face="Tahoma"><br>
Now I encounter a new &quot;problem&quot; in using contour widget. After closing
a contour, everytime I try to modify it by dragging a node, the node
can be move outside the surface (it&#39;s still inside the silhouette of
the sphere but it&#39;s not lying on any more and approach the screen).<br>
    </font></small></div>
  </blockquote>
  <div><br>
This should not happen if you are using a
vtkPolygonalSurfacePointPlacer to constrain the nodes and the
vtkPolygonalSurfaceContourLineInterpolator to constrain the path. <br>
  <br>
Please post a minimal, (compiling) example. Also take a look a look at
TestDijkstraImageGeodesicPath. The contour and the interpolated path
are confined to the surface of the mesh, while you manipulate
interactively.<br>
  <br>
--<br>
karthik<br>
 <br>
  </div>
  <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#003333"><small><font face="Tahoma"><br>
How can I manage this problem and constrain the position of the node of
the contour during all its lifetime in the visualisation?<br>
    <br>
Thanks by advance,<br>
    <br>
Nicolas<br>
    </font></small><br>
Le 12/05/2010 18:43, Karthik Krishnan a écrit :
    <div>
    <div>
    <blockquote type="cite">Yes Nicolas:<br>
      <br>
The contour widget uses two sets of classes, which (are generally
independent of each other).<br>
      <br>
A subclass of vtkPointPlacer dictates the constraints imposed on the
nodes. <br>
A subclass of vtkContourLIneInterpolator dictates the constraints
imposed on the path in between the nodes. <br>
      <br>
In your case, you might want to look at the following combination :<br>
      <br>
  vtkPolygonalSurfacePointPlacer -&gt;
vtkPolygonalSurfaceContourLineInterpolator<br>
      <br>
The interpolator internally traces the shortest path between the two
nodes along vertices of the mesh, so its not as good as a projection
that cuts through the cells, but if your mesh is dense enough the
traced path might be good enough.<br>
      <br>
      <br>
Something like :<br>
      <br>
      <br>
   vtkContourWidget *contourWidget = vtkContourWidget::New();<br>
  contourWidget-&gt;SetInteractor(iren);<br>
      <br>
  vtkOrientedGlyphContourRepresentation *rep = <br>
      vtkOrientedGlyphContourRepresentation::SafeDownCast(<br>
                        contourWidget-&gt;GetRepresentation());<br>
      <br>
  vtkPolygonalSurfacePointPlacer * pointPlacer <br>
        = vtkPolygonalSurfacePointPlacer::New();<br>
  pointPlacer-&gt;AddProp( sphereActor );<br>
  rep-&gt;SetPointPlacer(pointPlacer);<br>
      <br>
  vtkPolygonalSurfaceContourLineInterpolator * lineInterpolator <br>
        = vtkPolygonalSurfaceContourLineInterpolator::New();<br>
  rep-&gt;SetLineInterpolator(lineInterpolator);<br>
  <br>
  iren-&gt;Initialize();<br>
  contourWidget-&gt;EnabledOn();<br>
      <br>
      <br>
Hope this helps.. Here is a minimal example..<br>
      <br>
--<br>
karthik<br>
      <br>
      <br>
      <div class="gmail_quote">On Wed, May 12, 2010 at 7:21 PM, Nicolas
Sarrasin <span dir="ltr">&lt;<a href="mailto:nsarrasin@phenix-systems.com" target="_blank">nsarrasin@phenix-systems.com</a>&gt;</span>
wrote:<br>
      <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
        <div bgcolor="#ffffff" text="#003333">Hi all,<br>
        <br>
I&#39;m quite new in developping with vtk and I have some questions
concerning vtkContourWidget.<br>
        <br>
I built a quick project which uses vtkContourWidget and
vtkPolyDataPointPlacer to display a contour on a sphere.<br>
        <br>
When I click on this sphere, there&#39;s no problem : the points of the
contour are well positionned on the sphere. But it&#39;s not the case for
the spans which are outside or inside the sphere (but not on).<br>
        <br>
Is there a way to force the borders of the contour to follow the
surface ?<br>
        <br>
A solution would be to project the contour on the sphere but I can find
any documentation about that.<br>
        <br>
For more clarity, I post a sample of my code.<br>
        <br>
Thanks by advance.<br>
        <br>
Nicolas<br>
        <br>
code:<br>
        <pre>    //sphere definition

     vtkSphereSource* theSphere = vtkSphereSource::New();

     vtkPolyDataMapper * sphereMapper = vtkPolyDataMapper::New();
     sphereMapper-&gt;SetInput(theSphere-&gt;GetOutput());

     vtkLODActor* sphereActor = vtkLODActor::New();
     sphereActor-&gt;SetMapper( sphereMapper);

     vtkRenderer *renderer1 = vtkRenderer::New();
     renderer1-&gt;AddActor(sphereActor);

     vtkRenderWindow *renWin = vtkRenderWindow::New();
     renWin-&gt;AddRenderer(renderer1);

     vtkRenderWindowInteractor *rendIter = vtkRenderWindowInteractor::New();
     rendIter-&gt;SetRenderWindow(renWin);

     // Here comes the image actor constrained handle widget stuff.....
     vtkContourWidget *widget = vtkContourWidget::New();
     widget-&gt;SetInteractor(rendIter);

     vtkSmartPointer&lt;vtkLinearContourLineInterpolator&gt; contourStyle = 
vtkSmartPointer&lt;vtkLinearContourLineInterpolator&gt;::New();

     vtkOrientedGlyphContourRepresentation *rep 
=vtkOrientedGlyphContourRepresentation::SafeDownCast( 
widget-&gt;GetRepresentation() );
     rep-&gt;SetLineInterpolator(contourStyle);

    // we define a Placer to force the contour to be on the sphere
     vtkPolyDataPointPlacer * spherePlacer = vtkPolyDataPointPlacer::New();
     spherePlacer-&gt;AddProp(sphereActor);
     rep-&gt;SetPointPlacer(spherePlacer);

     renWin-&gt;Render();
     rendIter-&gt;Initialize();
     widget-&gt;EnabledOn();
     rendIter-&gt;Start();/
    </pre>
        <br>
        <div>-- <br>
        <br>
        </div>
        </div>
        <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>
        <br>
      </blockquote>
      </div>
      <br>
      <br clear="all">
      <br>
      <br>
    </blockquote>
    </div>
    </div>
    </div>
  </blockquote>
  </div>
  <br>
  <br>
</blockquote>
</div></div></div>

</blockquote></div><br><br>