<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
I solved it. The problem was vtkSeedRepresentation. I used
vtkPointHandleRepresentation3D instead of using
vtkPointHandleRepresentation2D that gives the right point position. Damn!<br>
Thank you for your support! =D <br><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">Date: Thu, 9 Aug 2012 21:11:02 +0200<br>From: dominique@toepfer-web.de<br>To: aliens30586@hotmail.it<br>CC: vtkusers@vtk.org<br>Subject: Re: [vtkusers] Distance between 2 points in millimeters (mm)<br><br>
<div class="ecxmoz-cite-prefix">I compiled your code and it works! I
also measured my image with another program and your results seem
to be correct. Can you explain why you think they're wrong?<br>
One small mistake in the loop again: it should be i < num - 1;<br>
<br>
On 09.08.2012 20:27, Concetta Piazzese wrote:<br>
</div>
<blockquote cite="mid:DUB107-W28DC01806535F1BB3754AF97CC0@phx.gbl">
<style><!--
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}
--></style>
<div dir="ltr">
Oh sorry about the discussion list.<br>
<br>
Here is the code.<br>
<br>
<br>
class vtkSeedCallback : public vtkCommand<br>
{<br>
public:<br>
static vtkSeedCallback *New()<br>
{ <br>
return new vtkSeedCallback; <br>
}<br>
vtkSeedCallback() {}<br>
virtual void Execute(vtkObject*, unsigned long event, void
*calldata)<br>
{<br>
if(event == vtkCommand::PlacePointEvent)<br>
{<br>
int i=SeedRepresentation->GetNumberOfSeeds();<br>
double pos[3];<br>
this->SeedRepresentation->GetSeedWorldPosition(i-1, pos);<br>
points->InsertNextPoint(pos);<br>
}<br>
}<br>
<br>
void
SetRepresentation(vtkSmartPointer<vtkSeedRepresentation>
rep)<br>
{<br>
this->SeedRepresentation = rep;<br>
}<br>
private:<br>
vtkSmartPointer<vtkSeedRepresentation>
SeedRepresentation;<br>
vtkSeedWidget* SeedWidget;<br>
};<br>
<br>
<br>
void Seed()<br>
{ <br>
imageViewer->SetInput(reader->GetOutput());<br>
imageViewer->SetSlice(20);<br>
imageViewer->SetColorLevel(127);<br>
imageViewer->SetColorWindow(255);<br>
<br>
vtkRenderWindowInteractor *iren =
vtkRenderWindowInteractor::New();<br>
<br>
/* Create the representation*/<br>
vtkSmartPointer<vtkPointHandleRepresentation3D>
handle =
vtkSmartPointer<vtkPointHandleRepresentation3D>::New();<br>
handle->GetProperty()->SetColor(1,0,0);<br>
vtkSmartPointer<vtkSeedRepresentation> rep =
vtkSmartPointer<vtkSeedRepresentation>::New();<br>
rep->SetHandleRepresentation(handle);<br>
<br>
/* Seed widget*/<br>
vtkSmartPointer<vtkSeedWidget> seedWidget =
vtkSmartPointer<vtkSeedWidget>::New();<br>
seedWidget->SetInteractor(iren);<br>
seedWidget->SetRepresentation(rep);<br>
<br>
vtkSmartPointer<vtkSeedCallback> seedCallback =
vtkSmartPointer<vtkSeedCallback>::New();<br>
seedCallback->SetRepresentation(rep);<br>
<br>
seedWidget->AddObserver(vtkCommand::PlacePointEvent,seedCallback);<br>
seedWidget->AddObserver(vtkCommand::InteractionEvent,seedCallback);<br>
<br>
imageViewer->SetupInteractor(iren);<br>
imageViewer->GetRenderWindow()->SetSize(512, 512);<br>
imageViewer->GetRenderer()->ResetCamera();<br>
imageViewer->SetSliceOrientationToXY();<br>
<br>
iren->Initialize();<br>
seedWidget->On();<br>
iren->Start();<br>
<br>
iren->Delete();<br>
<br>
imageViewer->Delete();<br>
<br>
return;<br>
}<br>
<br>
<div>
<hr id="ecxstopSpelling">Date: Thu, 9 Aug 2012 20:16:34 +0200<br>
From: <a class="ecxmoz-txt-link-abbreviated" href="mailto:dominique@toepfer-web.de">dominique@toepfer-web.de</a><br>
To: <a class="ecxmoz-txt-link-abbreviated" href="mailto:aliens30586@hotmail.it">aliens30586@hotmail.it</a>; <a class="ecxmoz-txt-link-abbreviated" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a><br>
Subject: Re: [vtkusers] Distance between 2 points in
millimeters (mm)<br>
<br>
<div class="ecxmoz-cite-prefix">Please keep the discussion on
the list.<br>
<br>
vtkDistanceWidget with the default representation also uses
sqrt(vtkMath::Distance2BetweenPoints(p1,p2)). Did you check
your points coordinates? Can you provide the rest of your
code?<br>
<br>
On 09.08.2012 19:48, Concetta Piazzese wrote:<br>
</div>
<blockquote cite="mid:DUB107-W59BBA8CC38474F7AAA561297CC0@phx.gbl">
<style><!--
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}
--></style>
<div dir="ltr"> Yeah, I considered that. But I still got
wrong numbers. When the user places a seed, the
vtkSeedCallback stores the point world position
(this->SeedRepresentation->GetSeedWorldPosition(i,
pos);). Do you know how vtkDistanceWidget computes
distance in millimeters? <br>
<br>
<div>
<hr id="ecxstopSpelling">Date: Thu, 9 Aug 2012 19:25:48
+0200<br>
From: <a class="ecxmoz-txt-link-abbreviated" href="mailto:dominique@toepfer-web.de">dominique@toepfer-web.de</a><br>
To: <a class="ecxmoz-txt-link-abbreviated" href="mailto:aliens30586@hotmail.it">aliens30586@hotmail.it</a>;
<a class="ecxmoz-txt-link-abbreviated" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a><br>
Subject: Re: [vtkusers] Distance between 2 points in
millimeters (mm)<br>
<br>
<div class="ecxmoz-cite-prefix">I agree, the loop should
work now. But then the error seems to be in Seed(). Is
it possible, that the order of points provided by the
user is different from the order in your vtkPoints
object? Did you consider the image spacing?<br>
<br>
On 09.08.2012 18:52, Concetta Piazzese wrote:<br>
</div>
<blockquote cite="mid:DUB107-W216B4F0AFF05B8AA9EF70197CC0@phx.gbl">
<style><!--
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}
--></style>
<div dir="ltr"> You're right but the problem isn't
fixed. I still got wrong distances. The loop was
wrong but I think the problem is not in the loop.
Now the loop is:<br>
for (int i=0; i<num; i++)<br>
{ <br>
points->GetPoint(i,punto);<br>
points->GetPoint(i+1,punto2);<br>
<br>
double squaredDistance;<br>
double dist;<br>
<br>
// Distance<br>
squaredDistance =
vtkMath::Distance2BetweenPoints(punto, punto2);<br>
dist=sqrt(squaredDistance);<br>
<br>
std::cout << "Distance " << dist
<< std::endl;<br>
<br>
}<br>
<br>
<div>
<hr id="ecxstopSpelling">Date: Thu, 9 Aug 2012
18:47:08 +0200<br>
From: <a class="ecxmoz-txt-link-abbreviated" href="mailto:dominique@toepfer-web.de">dominique@toepfer-web.de</a><br>
To: <a class="ecxmoz-txt-link-abbreviated" href="mailto:aliens30586@hotmail.it">aliens30586@hotmail.it</a><br>
CC: <a class="ecxmoz-txt-link-abbreviated" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a><br>
Subject: Re: [vtkusers] Distance between 2 points
in millimeters (mm)<br>
<br>
<div class="ecxmoz-cite-prefix">Hi,<br>
<br>
I think these lines in the for-loop are wrong:<br>
<br>
points->GetPoint(num-1,punto);<br>
points->GetPoint(num,punto2);<br>
<br>
You seem to calculate the distance between the
same two points in every iteration. You need to
use i instead of num here.<br>
<br>
Regards,<br>
Dominique<br>
<br>
<br>
On 09.08.2012 18:34, Concetta Piazzese wrote:<br>
</div>
<blockquote cite="mid:DUB107-W49D915FDCD00B5B7CAB16597CC0@phx.gbl">
<style><!--
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}
--></style>
<div dir="ltr"> Hy everyone. I hope somebody can
help me!<br>
I need to find the distance between 2 points
in millimeters like the vtkDistanceWidget
does. An user places 10 points and then the
program compute the distances. The problem is
that I have an array of vtkPoints and I can't
use vtkDistanceWidget to find the distances.
How I can find the distance? The points
positions are inglobal coordinate values. The
distance I got are totally wrong. Here is my
code: <br>
<br>
int main(int argc, char *argv[])<br>
{<br>
reader->SetFileName("C:/Tesi/DistanceBetween2Points_build/Debug/Data/Plaque_08.mhd");<br>
reader->Update(); <br>
<br>
imgconn=reader->GetOutput();<br>
<br>
//Points Placement with vtkSeedWidget.
Poins are stored in a vtkPoints called
"points"<br>
Seed();<br>
<br>
double punto[3];<br>
double punto2[3];<br>
<br>
int num=points->GetNumberOfPoints();<br>
<br>
for (int i=0; i<num; i++)<br>
{ <br>
points->GetPoint(num-1,punto);<br>
points->GetPoint(num,punto2);<br>
<br>
double squaredDistance;<br>
double dist;<br>
<br>
// Distance<br>
squaredDistance =
vtkMath::Distance2BetweenPoints(punto,
punto2);<br>
dist=sqrt(squaredDistance);<br>
<br>
std::cout << "Distance " <<
dist << std::endl;<br>
<br>
}<br>
<br>
return EXIT_SUCCESS;<br>
}<br>
<br>
What's the problem? vtkDistanceWidget computes
distances using
vtkMath::Distance2BetweenPoints. So what am I
doing wrong?<br>
Thank you!<br>
</div>
<br>
<fieldset class="ecxmimeAttachmentHeader"></fieldset>
<br>
<pre>_______________________________________________
Powered by <a class="ecxmoz-txt-link-abbreviated" href="http://www.kitware.com" target="_blank">www.kitware.com</a>
Visit other Kitware open-source projects at <a class="ecxmoz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a>
Please keep messages on-topic and check the VTK FAQ at: <a class="ecxmoz-txt-link-freetext" href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a>
Follow this link to subscribe/unsubscribe:
<a class="ecxmoz-txt-link-freetext" href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a>
</pre>
</blockquote>
<br>
<br>
<pre class="ecxmoz-signature">--
Dominique Töpfer, Dipl.-Inform.
Institute of Medical Physics
University of Erlangen</pre>
</div>
</div>
</blockquote>
<br>
<br>
<pre class="ecxmoz-signature">--
Dominique Töpfer, Dipl.-Inform.
Institute of Medical Physics
University of Erlangen</pre>
</div>
</div>
</blockquote>
<br>
<br>
<pre class="ecxmoz-signature">--
Dominique Töpfer, Dipl.-Inform.
Institute of Medical Physics
University of Erlangen</pre>
</div>
</div>
</blockquote>
<br>
<br>
<pre class="ecxmoz-signature">--
Dominique Töpfer, Dipl.-Inform.
Institute of Medical Physics
University of Erlangen</pre></div>                                            </div></body>
</html>