[vtkusers] vtkTransform problem

Murat Aydin murat.aydin at netcad.com.tr
Mon Feb 8 03:15:20 EST 2010


Hi,

Default data type for vtkPoints is float. Although the data type for your 
vtkPoints is double (vtkPoints.setDataTypeToDouble() ) ,after most of the 
filters this data type is changed to float which is default. And this change 
may couse data loss.
VtkPoints is used in vtkPolyData.GetPoints(). I have encountered this 
problem last week. In my case the distance between two points changes after 
transformFilter is executed.
Hope this helps.

Regards,

murat

----- Original Message ----- 
From: "Michele Conconi" <michele.conconi at unibo.it>
To: <vtkusers at vtk.org>
Sent: Saturday, February 06, 2010 6:36 PM
Subject: [vtkusers] vtkTransform problem


Hi everybody.
I'm using vtkTransform and its method Inverse() very extensivly in my
program. After a big number of calls of this method anyway I cannot
control anymore nor the matrix of vtkTransform neither the position of
the associated polydata.
The following code gives an example of my problem.

I read a simple .stl file, bring the associated polydata into a control
configuration by means of my vtkTransform and here I look at the
transformation and at the center of the box containing the polydata.
Then I move the polydata into a different configuration, I invert the
transformation 10 000 000 times and bring the polydata back into the
control configuration. After 214 cicle of this loop, the center of my
polydata is no longer equal to that of the control configuration, and
neither it is the transformation.

Any clue? I'm getting mad about it!
Thanks in advance

Michele


#include "vtkTransformPolyDataFilter.h"
#include "vtkSTLReader.h"
#include "vtkTransform.h"
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    double center[]={0,0,0};
    double c[]={0,0,0};

    vtkSTLReader *volumeReader = vtkSTLReader::New();
    vtkTransformPolyDataFilter *TF = vtkTransformPolyDataFilter::New();
    vtkTransform *ActualPosition = vtkTransform::New();
    vtkPolyData *poly = vtkPolyData::New();

    volumeReader->SetFileName("cube.stl");
    TF->SetInput(volumeReader->GetOutput());
    volumeReader->Delete();

    TF->SetTransform(ActualPosition);
    poly=TF->GetOutput();

    ActualPosition->Identity();
    ActualPosition->PostMultiply();
    ActualPosition->RotateX(-45);
    ActualPosition->Translate(10,-20,30);
    poly->Update();

    poly->GetCenter(center);
    cout<<center[0]<<" "<<center[1]<<" "<<center[2]<<endl;//the center
of the cube containing the polydata in the control configuration
configuration
    ActualPosition->Print(cout);

    int i=0;
    while(i<200000)
    {
        //modify the vtkTransform
        ActualPosition->Identity();
        ActualPosition->PostMultiply();
        ActualPosition->RotateX(0);
        ActualPosition->Translate(0,0,0);
        poly->Update();

        for (int j=0; j<1e7; j++)
        {
            ActualPosition->Inverse();
            //my operations...
            ActualPosition->Inverse();
        }

        if(i%10000==0)
            cout<<i<<endl;

        //bring it back to the control configuration
        ActualPosition->Identity();
        ActualPosition->PostMultiply();
        ActualPosition->RotateX(-45);
        ActualPosition->Translate(10,-20,30);
        poly->Update();

        poly->GetCenter(c);
        //check if the center of the cube containing the polydata is
still in the right position
        if(c[0]==center[0] && c[1]==center[1] && c[2]==center[2])
            i++;
        else
        {
            cout<<c[0]<<" "<<c[1]<<" "<<c[2]<<endl;
            cout<<i<<endl;
            ActualPosition->Print(cout);
            i=2000000;
        }
    }

    ActualPosition->Delete();
    TF->Delete();
}
-- 
* Eng. Michele Conconi*
Ph.D. student
DIEM - Dept. of Mechanical Engineering
Alma Mater Studiorum - University of Bologna
Viale Risorgimento 2, 40136, Bologna, Italy
Email: michele.conconi at unibo.it
Website: http://www.diem.ing.unibo.it/grab
Office: (+39) 051 20 93451
Mobile: (+39) 329 0287996



* INFORMAZIONE RISERVATA E CONFIDENZIALE *
Questo messaggio contiene informazioni riservate e confidenziali.
Se il lettore non fosse il destinatario del messaggio, inoltrato e
ricevuto per errore,
il testo dovrà essere immediatamente cancellato dal computer del ricevente.
E' assolutamente proibita qualunque circolazione, disseminazione o
copia del messaggio spedito e/o ricevuto per errore.

* CONFIDENTIALITY and WARNING NOTICE *
This message may contain legally privileged or confidential information.
If the reader is not the intended recipient, you received this message
in error
and it should therefore be deleted from your computer at once.
Any dissemination, distribution and copying of a message
mistakenly sent or received is strictly forbidden.
_______________________________________________
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 




More information about the vtkusers mailing list