<!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>