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

Concetta Piazzese aliens30586 at hotmail.it
Thu Aug 9 14:27:23 EDT 2012


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

          To: aliens30586 at hotmail.it; 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

                To: aliens30586 at hotmail.it

                CC: 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 by www.kitware.com

Visit other Kitware open-source projects at http://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 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120809/ec11401a/attachment.htm>


More information about the vtkusers mailing list