[vtkusers] Distance between 2 points in millimeters (mm)

Dominique Töpfer dominique at toepfer-web.de
Thu Aug 9 15:11:02 EDT 2012


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?
One small mistake in the loop again: it should be i < num - 1;

On 09.08.2012 20:27, Concetta Piazzese wrote:
> Oh sorry about the discussion list.
>
> Here is the code.
>
>
> class vtkSeedCallback : public vtkCommand
> {
> public:
>     static vtkSeedCallback *New()
>     {
>         return new vtkSeedCallback;
>     }
>     vtkSeedCallback() {}
>     virtual void Execute(vtkObject*, unsigned long event, void *calldata)
>     {
>         if(event == vtkCommand::PlacePointEvent)
>         {
>             int i=SeedRepresentation->GetNumberOfSeeds();
>             double pos[3];
> this->SeedRepresentation->GetSeedWorldPosition(i-1, pos);
>             points->InsertNextPoint(pos);
>         }
>     }
>
>     void SetRepresentation(vtkSmartPointer<vtkSeedRepresentation> rep)
>     {
>         this->SeedRepresentation = rep;
>     }
> private:
>     vtkSmartPointer<vtkSeedRepresentation> SeedRepresentation;
>     vtkSeedWidget* SeedWidget;
> };
>
>
> void Seed()
> {
>         imageViewer->SetInput(reader->GetOutput());
>         imageViewer->SetSlice(20);
>         imageViewer->SetColorLevel(127);
>         imageViewer->SetColorWindow(255);
>
>         vtkRenderWindowInteractor *iren = 
> vtkRenderWindowInteractor::New();
>
>         /* Create the representation*/
>         vtkSmartPointer<vtkPointHandleRepresentation3D> handle = 
> vtkSmartPointer<vtkPointHandleRepresentation3D>::New();
>         handle->GetProperty()->SetColor(1,0,0);
>         vtkSmartPointer<vtkSeedRepresentation> rep = 
> vtkSmartPointer<vtkSeedRepresentation>::New();
>         rep->SetHandleRepresentation(handle);
>
>         /* Seed widget*/
>         vtkSmartPointer<vtkSeedWidget> seedWidget = 
> vtkSmartPointer<vtkSeedWidget>::New();
>         seedWidget->SetInteractor(iren);
>         seedWidget->SetRepresentation(rep);
>
>         vtkSmartPointer<vtkSeedCallback> seedCallback = 
> vtkSmartPointer<vtkSeedCallback>::New();
>         seedCallback->SetRepresentation(rep);
>
> seedWidget->AddObserver(vtkCommand::PlacePointEvent,seedCallback);
> seedWidget->AddObserver(vtkCommand::InteractionEvent,seedCallback);
>
>         imageViewer->SetupInteractor(iren);
>         imageViewer->GetRenderWindow()->SetSize(512, 512);
>         imageViewer->GetRenderer()->ResetCamera();
>         imageViewer->SetSliceOrientationToXY();
>
>         iren->Initialize();
>         seedWidget->On();
>         iren->Start();
>
>         iren->Delete();
>
>     imageViewer->Delete();
>
>     return;
> }
>
> ------------------------------------------------------------------------
> Date: Thu, 9 Aug 2012 20:16:34 +0200
> From: dominique at toepfer-web.de
> To: aliens30586 at hotmail.it; vtkusers at vtk.org
> Subject: Re: [vtkusers] Distance between 2 points in millimeters (mm)
>
> Please keep the discussion on the list.
>
> 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?
>
> On 09.08.2012 19:48, Concetta Piazzese wrote:
>
>     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?
>
>     ------------------------------------------------------------------------
>     Date: Thu, 9 Aug 2012 19:25:48 +0200
>     From: dominique at toepfer-web.de <mailto:dominique at toepfer-web.de>
>     To: aliens30586 at hotmail.it <mailto:aliens30586 at hotmail.it>;
>     vtkusers at vtk.org <mailto:vtkusers at vtk.org>
>     Subject: Re: [vtkusers] Distance between 2 points in millimeters (mm)
>
>     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?
>
>     On 09.08.2012 18:52, Concetta Piazzese wrote:
>
>         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:
>         for (int i=0; i<num; i++)
>             {
>             points->GetPoint(i,punto);
>             points->GetPoint(i+1,punto2);
>
>             double squaredDistance;
>             double dist;
>
>             // Distance
>             squaredDistance = vtkMath::Distance2BetweenPoints(punto,
>         punto2);
>             dist=sqrt(squaredDistance);
>
>             std::cout << "Distance " << dist << std::endl;
>
>             }
>
>         ------------------------------------------------------------------------
>         Date: Thu, 9 Aug 2012 18:47:08 +0200
>         From: dominique at toepfer-web.de <mailto:dominique at toepfer-web.de>
>         To: aliens30586 at hotmail.it <mailto:aliens30586 at hotmail.it>
>         CC: vtkusers at vtk.org <mailto:vtkusers at vtk.org>
>         Subject: Re: [vtkusers] Distance between 2 points in
>         millimeters (mm)
>
>         Hi,
>
>         I think these lines in the for-loop are wrong:
>
>             points->GetPoint(num-1,punto);
>             points->GetPoint(num,punto2);
>
>         You seem to calculate the distance between the same two points
>         in every iteration. You need to use i instead of num here.
>
>         Regards,
>         Dominique
>
>
>         On 09.08.2012 18:34, Concetta Piazzese wrote:
>
>             Hy everyone. I hope somebody can help me!
>             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:
>
>             int main(int argc, char *argv[])
>             {
>             reader->SetFileName("C:/Tesi/DistanceBetween2Points_build/Debug/Data/Plaque_08.mhd");
>                 reader->Update();
>
>                 imgconn=reader->GetOutput();
>
>                 //Points Placement with vtkSeedWidget. Poins are
>             stored in a vtkPoints called "points"
>                 Seed();
>
>                 double punto[3];
>                 double punto2[3];
>
>                 int num=points->GetNumberOfPoints();
>
>                 for (int i=0; i<num; i++)
>                 {
>                 points->GetPoint(num-1,punto);
>                 points->GetPoint(num,punto2);
>
>                 double squaredDistance;
>                 double dist;
>
>                 // Distance
>                 squaredDistance =
>             vtkMath::Distance2BetweenPoints(punto, punto2);
>                 dist=sqrt(squaredDistance);
>
>                 std::cout << "Distance " << dist << std::endl;
>
>                 }
>
>                 return EXIT_SUCCESS;
>             }
>
>             What's the problem? vtkDistanceWidget computes distances
>             using vtkMath::Distance2BetweenPoints. So what am I doing
>             wrong?
>             Thank you!
>
>
>             _______________________________________________
>             Powered bywww.kitware.com  <http://www.kitware.com>
>
>             Visit other Kitware open-source projects athttp://www.kitware.com/opensource/opensource.html
>
>             Please keep messages on-topic and check the VTK FAQ at:http://www.vtk.org/Wiki/VTK_FAQ
>
>             Follow this link to subscribe/unsubscribe:
>             http://www.vtk.org/mailman/listinfo/vtkusers
>
>
>
>         -- 
>         Dominique Töpfer, Dipl.-Inform.
>         Institute of Medical Physics
>         University of Erlangen
>
>
>
>     -- 
>     Dominique Töpfer, Dipl.-Inform.
>     Institute of Medical Physics
>     University of Erlangen
>
>
>
> -- 
> Dominique Töpfer, Dipl.-Inform.
> Institute of Medical Physics
> University of Erlangen


-- 
Dominique Töpfer, Dipl.-Inform.
Institute of Medical Physics
University of Erlangen

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120809/9b79bd29/attachment.htm>


More information about the vtkusers mailing list