<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    <tt>Thanks,<br>
      <br>
      I realized my problem now. I was doing tracer ->
      vtkSelectPolyData -> vtkClipPolyData. But the output of
      vtkSelectPolyData is already what I needed. It just so happen to
      work with the .ply because it has scalar data for the color at
      each pixel while the obj relies on texture mapping. I thought the
      vtkSelectPolydata worked by outputing the original polydata with a
      boolean scalar that indicated what points were selected, but it
      actually extracts the selected polydata. <br>
      <br>
      Thank you very much!<br>
      Adam<br>
      <br>
      <br>
    </tt>On 5/19/2011 3:32 PM, Jérôme wrote:
    <blockquote
      cite="mid:BANLkTi=kv4drH4L8DM5Nax-xZMr1+JCq6Q@mail.gmail.com"
      type="cite">Hi,<br>
      <br>
      If you want to track the bug, you should avoid a so complicated
      code (I got some<br>
      build error, I don't know if my fixes are coherent with your
      issue...). The error<br>
      message deals with Clip, so basically you write a test pipeline
      like this :<br>
         reader -> clip -> update<br>
      If the error doesn't occur, add and test new functionnality step
      by step.<br>
      <br>
      For your case, I just opened your data with paraview : it seems
      that your obj file<br>
      doesn't contain point data. Please, try to generate scalar data
      before clipping, <br>
      as the error says.<br>
      <br>
      Jerome<br>
      <br>
      <div class="gmail_quote">2011/5/19 agerlach <span dir="ltr"><<a
            moz-do-not-send="true" href="mailto:agerlach@gmail.com">agerlach@gmail.com</a>></span><br>
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          OK. Here is an attempt at an example of my problem.
          Unfortunately for some<br>
          reason I cannot get an observer to work to identify the end of
          the<br>
          tracerWidet event. I'm sure it is something simple. So, may
          need some help<br>
          getting that to work before I will be able to demonstrate my
          problem.<br>
          (Please be patient, I'm a newbie) In my main application it
          uses a gui so I<br>
          use the gui button press to turn tracerWidet off and then
          compute the area.<br>
          <br>
          To run place the following ply and obj model and texture in
          the same folder<br>
          as the exe.<br>
          <a moz-do-not-send="true"
            href="http://www.intellimedsystems.com/files/AreaTruth_T1.jpg"
            target="_blank">http://www.intellimedsystems.com/files/AreaTruth_T1.jpg</a>
          Texture<br>
          <a moz-do-not-send="true"
            href="http://www.intellimedsystems.com/files/AreaTruth.ply"
            target="_blank">http://www.intellimedsystems.com/files/AreaTruth.ply</a>
          ply model<br>
          <a moz-do-not-send="true"
            href="http://www.intellimedsystems.com/files/AreaTruth.obj"
            target="_blank">http://www.intellimedsystems.com/files/AreaTruth.obj</a>
          obj model<br>
          <br>
          Run and type y to use the obj otherwise the ply will be
          loaded.<br>
          <br>
          #include <vtkPolyDataMapper.h><br>
          #include <vtkActor.h><br>
          #include <vtkRenderWindow.h><br>
          #include <vtkRenderer.h><br>
          #include <vtkRenderWindowInteractor.h><br>
          #include <vtkPolyData.h><br>
          #include <vtkSmartPointer.h><br>
          #include <vtkSphereSource.h><br>
          #include <vtkImageTracerWidget.h><br>
          #include <vtkInteractorStyleTrackballCamera.h><br>
          #include <vtkSelectPolyData.h><br>
          #include <vtkClipPolyData.h><br>
          #include <vtkMassProperties.h><br>
          #include <vtkPLYReader.h><br>
          #include <vtkOBJReader.h><br>
          #include <vtkJPEGReader.h><br>
          #include <vtkTexture.h><br>
          #include <vtkCallbackCommand.h><br>
          <br>
          <br>
          class vtkITWCallback : public vtkCommand<br>
          <br>
          {<br>
          <br>
          public:<br>
             static vtkITWCallback *New()<br>
             { return new vtkITWCallback; }<br>
          <br>
             virtual void Execute(vtkObject *caller, unsigned long,
          void*)<br>
             {<br>
                 vtkImageTracerWidget *tracer =<br>
                       
           reinterpret_cast&lt;vtkImageTracerWidget*&gt;(caller);<br>
          <br>
                 if(tracer->IsClosed()) {<br>
          <div class="im">            vtkSmartPointer<vtkPolyData>
            tracePolyData =<br>
                             
             vtkSmartPointer<vtkPolyData>::New();<br>
            <br>
          </div>
                     tracer->GetPath(tracePolyData);<br>
                     std::cout << "There are " <<
          tracePolyData->GetNumberOfPoints()<br>
          << " points in the path." << std::endl;<br>
          <div class="im"><br>
                       vtkSmartPointer<vtkSelectPolyData> loop =<br>
            vtkSmartPointer<vtkSelectPolyData>::New();<br>
          </div>
                     loop->SetInput(polyData);<br>
          <div class="im">          
             loop->SetLoop(tracePolyData->GetPoints());<br>
                       loop->SetSelectionModeToSmallestRegion();<br>
                       loop->Update();<br>
            <br>
                       vtkSmartPointer<vtkClipPolyData> clip =<br>
            vtkSmartPointer<vtkClipPolyData>::New();<br>
                       clip->SetInput(loop->GetOutput());<br>
                       clip->Update();<br>
            <br>
                       vtkSmartPointer<vtkMassProperties> mass =<br>
            vtkSmartPointer<vtkMassProperties>::New();<br>
                       mass->SetInput(clip->GetOutput());<br>
          </div>
                     std::cout << "Area = " <<
          mass->GetSurfaceArea() << "[mm]";<br>
                 }<br>
                 else<br>
                     std::cout << "Trace not closed";<br>
             }<br>
          <br>
             vtkITWCallback():polyData(0){}<br>
          <br>
             vtkPolyData *polyData;<br>
          <br>
          <br>
          };<br>
          <br>
          int main(int argc, char *argv[])<br>
          {<br>
           bool usePLY = true;<br>
           bool hasTexture = false;<br>
          <br>
           std::string input = " ";<br>
           std::cout << "Use obj (y/n):\n>";<br>
           std::getline(cin,input);<br>
          <br>
           if(input == "y" || input == "Y")<br>
               usePLY = false;<br>
          <br>
           vtkSmartPointer<vtkPolyData> polyData;<br>
           polyData = vtkSmartPointer<vtkPolyData>::New();<br>
          <br>
           vtkSmartPointer<vtkTexture> texture =<br>
                   vtkSmartPointer<vtkTexture>::New();<br>
          <br>
           if(usePLY)<br>
           {<br>
               std::cout << "Using *.ply";<br>
               vtkSmartPointer<vtkPLYReader> plyReader =<br>
                       vtkSmartPointer<vtkPLYReader>::New();<br>
          <br>
               plyReader->SetFileName("AreaTruth.ply");<br>
               plyReader->Update();<br>
               polyData = plyReader->GetOutput();<br>
          <br>
           }<br>
           else<br>
           {<br>
               std::cout << "Using *.obj";<br>
               vtkSmartPointer<vtkOBJReader> objReader =<br>
                       vtkSmartPointer<vtkOBJReader>::New();<br>
          <br>
               objReader->SetFileName("AreaTruth.obj");<br>
               objReader->Update();<br>
               polyData = objReader->GetOutput();<br>
          <br>
               hasTexture = true;<br>
          <br>
               vtkSmartPointer<vtkJPEGReader> jpgReader =<br>
                       vtkSmartPointer<vtkJPEGReader>::New();<br>
               jpgReader->SetFileName("AreaTruth_T1.jpg");<br>
               jpgReader->Update();<br>
          <br>
          <br>
             
           texture->SetInputConnection(jpgReader->GetOutputPort());<br>
               texture->InterpolateOn();<br>
          <br>
          <br>
           }<br>
          <br>
            // Create a mapper and actor<br>
           vtkSmartPointer<vtkPolyDataMapper> mapper =<br>
             vtkSmartPointer<vtkPolyDataMapper>::New();<br>
           mapper->SetInput(polyData);<br>
           vtkSmartPointer<vtkActor> actor =<br>
             vtkSmartPointer<vtkActor>::New();<br>
           actor->SetMapper(mapper);<br>
          <br>
           if(hasTexture)<br>
               actor->SetTexture(texture);<br>
          <br>
           // A renderer and render window<br>
           vtkSmartPointer<vtkRenderer> renderer =<br>
             vtkSmartPointer<vtkRenderer>::New();<br>
           vtkSmartPointer<vtkRenderWindow> renderWindow =<br>
               vtkSmartPointer<vtkRenderWindow>::New();<br>
           renderWindow->AddRenderer(renderer);<br>
           renderer->AddActor(actor);<br>
          <br>
           // An interactor<br>
           vtkSmartPointer<vtkRenderWindowInteractor>
          renderWindowInteractor =<br>
             vtkSmartPointer<vtkRenderWindowInteractor>::New();<br>
           renderWindowInteractor->SetRenderWindow(renderWindow);<br>
          <br>
           vtkSmartPointer<vtkInteractorStyleTrackballCamera>
          style =<br>
           
           vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();<br>
          <br>
           renderWindowInteractor->SetInteractorStyle(style);<br>
          <br>
           vtkSmartPointer<vtkCallbackCommand> callback =<br>
             vtkSmartPointer<vtkCallbackCommand>::New();<br>
           callback->SetCallback(CallbackFunction);<br>
          <br>
           vtkSmartPointer<vtkITWCallback> itwCallback =<br>
                   vtkSmartPointer<vtkITWCallback>::New();<br>
           itwCallback->polyData = polyData;<br>
          <br>
          <br>
          <br>
           vtkSmartPointer<vtkImageTracerWidget> tracerWidget;<br>
           tracerWidget =
          vtkSmartPointer<vtkImageTracerWidget>::New();<br>
           tracerWidget->SetInteractor(renderWindowInteractor);<br>
           tracerWidget->SetViewProp(actor);<br>
           tracerWidget->AutoCloseOn();<br>
           tracerWidget->AddObserver(vtkCommand::EndInteractionEvent,
          itwCallback);<br>
           tracerWidget->On();<br>
           renderWindow->Render();<br>
          <br>
           renderWindowInteractor->Initialize();<br>
           renderWindow->Render();<br>
          <br>
          <br>
          <br>
          <br>
           // Begin mouse interaction<br>
          <br>
           renderWindowInteractor->Start();<br>
          <br>
           return EXIT_SUCCESS;<br>
          }<br>
          <font color="#888888"><br>
            <br>
            --<br>
            View this message in context: <a moz-do-not-send="true"
href="http://vtk.1045678.n5.nabble.com/Weird-vtkClipPolyData-error-when-using-an-obj-tp4408314p4410434.html"
              target="_blank">http://vtk.1045678.n5.nabble.com/Weird-vtkClipPolyData-error-when-using-an-obj-tp4408314p4410434.html</a><br>
          </font>
          <div>
            <div class="h5">Sent from the VTK - Users mailing list
              archive at Nabble.com.<br>
              _______________________________________________<br>
              Powered by <a moz-do-not-send="true"
                href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
              <br>
              Visit other Kitware open-source projects at <a
                moz-do-not-send="true"
                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
                moz-do-not-send="true"
                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 moz-do-not-send="true"
                href="http://www.vtk.org/mailman/listinfo/vtkusers"
                target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
    </blockquote>
    <br>
  </body>
</html>