[vtkusers] Problems with VTKAppendPolyData

Ricardo Seco VTK secolasua at gmail.com
Thu Jan 25 13:16:59 EST 2007


E a ideia é primeiro normalizar e em seguida fazer o append?

RS

Paulo José Correia Bernardes wrote:
>
> Eu também tive esse problema e resolvi-o desta forma:
>
> void normalizeVRMLData ( vtkVRMLImporter *vrmlData )
>
> {
>
> // Declaração das variáveis locais
>
> vtkActor *tmpActor; // variável local auxiliar
>
> vtkActorCollection *tmpActorCollection; // variável local auxiliar
>
> vtkMatrix4x4 *tmpTransformMatrix; // variável local auxiliar
>
> vtkProperty *tmpActorProperty; // variável local auxiliar
>
> vtkActor **tmpActorToBeInsertedInCollection; // variável local auxiliar
>
> vtkPolyData **tmpObjectPolyData; // variável local auxiliar
>
> vtkTransform **tmpTransformPolyData; // variável local auxiliar
>
> vtkTransformPolyDataFilter **tmpTransformPolyDataFilter; // variável 
> local auxiliar
>
> vtkPolyDataMapper **tmpPolyDataMapper; // variável local auxiliar
>
> int i=0; // variável local usada nos ciclos
>
> // Iniciação das variáveis locais;
>
> // Alocar memória para uma lista de vtkPolyDataMapper
>
> tmpPolyDataMapper = new 
> vtkPolyDataMapper*[vrmlData->GetRenderer()->GetActors()->GetNumberOfItems()];
>
> // Alocar memória para uma lista de vtkTransformPolyDataFilter
>
> tmpTransformPolyDataFilter = new 
> vtkTransformPolyDataFilter*[vrmlData->GetRenderer()->GetActors()->GetNumberOfItems()];
>
> // Alocar memória para uma lista de vtkTransform
>
> tmpTransformPolyData = new 
> vtkTransform*[vrmlData->GetRenderer()->GetActors()->GetNumberOfItems()];
>
> // Alocar memória para uma lista de vtkPolyData
>
> tmpObjectPolyData = new 
> vtkPolyData*[vrmlData->GetRenderer()->GetActors()->GetNumberOfItems()];
>
> // Alocar memória para uma lista de vtkActor
>
> tmpActorToBeInsertedInCollection = new 
> vtkActor*[vrmlData->GetRenderer()->GetActors()->GetNumberOfItems()];
>
> tmpActorCollection = vtkActorCollection::New();
>
> tmpActor = vtkActor::New();
>
> tmpTransformMatrix = vtkMatrix4x4::New();
>
> tmpActorProperty = vtkProperty::New();
>
> for(i=0; i<vrmlData->GetRenderer()->GetActors()->GetNumberOfItems(); i++)
>
> {
>
> tmpActorToBeInsertedInCollection[i] = vtkActor::New();
>
> tmpObjectPolyData[i] = vtkPolyData::New();
>
> tmpTransformPolyData[i] = vtkTransform::New();
>
> tmpTransformPolyDataFilter[i] = vtkTransformPolyDataFilter::New();
>
> tmpPolyDataMapper[i] = vtkPolyDataMapper::New();
>
> }
>
> // Acede à actor collection do renderer
>
> tmpActorCollection = vrmlData->GetRenderer()->GetActors(); // Actor 
> Collection
>
> tmpActorCollection->InitTraversal(); // Inicio da Lista
>
> tmpActor = tmpActorCollection->GetNextActor(); // Primeiro Actor
>
> // Cria uma nova actor collection com novos actors e insere-os no renderer
>
> i=0;
>
> while (tmpActor != NULL)
>
> {
>
> tmpTransformMatrix = tmpActor->GetMatrix(); // Guarda a matriz de 
> transformação do objecto
>
> tmpActorProperty = tmpActor->GetProperty(); // Guarda as propriedades 
> do objecto
>
> tmpTransformPolyData[i]->SetMatrix( tmpTransformMatrix ); // Compõe a 
> transformação do novo objecto
>
> // Transformação dos pontos do objecto inicial
>
> tmpObjectPolyData[i] = reinterpret_cast<vtkPolyData *>( 
> tmpActor->GetMapper()->GetInput() );
>
> tmpTransformPolyDataFilter[i]->SetInput( tmpObjectPolyData[i] );
>
> tmpTransformPolyDataFilter[i]->SetTransform( tmpTransformPolyData[i] );
>
> tmpTransformPolyDataFilter[i]->Update();
>
> // Dados do novo objecto
>
> tmpObjectPolyData[i] = tmpTransformPolyDataFilter[i]->GetOutput();
>
> // Composição do novo actor
>
> tmpPolyDataMapper[i]->SetInput( tmpObjectPolyData[i] );
>
> tmpPolyDataMapper[i]->ScalarVisibilityOff();
>
> tmpActorToBeInsertedInCollection[i]->SetMapper( tmpPolyDataMapper[i] );
>
> tmpActorToBeInsertedInCollection[i]->SetProperty( tmpActorProperty );
>
> // Inserção do novo actor na nova actor collection e no renderer
>
> vrmlData->GetRenderer()->AddActor(tmpActorToBeInsertedInCollection[i] );
>
> i++;
>
> // Remoção do velho actor do renderer
>
> vrmlData->GetRenderer()->RemoveActor( tmpActor );
>
> tmpActor = tmpActorCollection->GetNextActor(); // Actor seguinte
>
> }// end "while-statement"
>
> delete(tmpActorToBeInsertedInCollection);
>
> delete(tmpObjectPolyData);
>
> delete(tmpTransformPolyData);
>
> delete(tmpTransformPolyDataFilter);
>
> delete(tmpPolyDataMapper);
>
> }
>
> Isto foi uma solução de recurso e não está optimizado…
>
> PB
>
> ------------------------------------------------------------------------
>
> *De:* vtkusers-bounces+pbernardes=uaum.uminho.pt at vtk.org 
> [mailto:vtkusers-bounces+pbernardes=uaum.uminho.pt at vtk.org] *Em nome 
> de *Secolas UA
> *Enviada:* quinta-feira, 25 de Janeiro de 2007 13:07
> *Para:* vtkusers at vtk.org
> *Assunto:* Re: [vtkusers] Problems with VTKAppendPolyData
>
> Exactamente! Vai uma imagem em anexo...
>
> On 1/24/07, *Paulo José Correia** Bernardes* 
> <pbernardes at uaum.uminho.pt <mailto:pbernardes at uaum.uminho.pt>> wrote:
>
> Olá,
>
> Isso parece-me ser problema do ficheiro vrml… da forma como ele é 
> construído…
>
> Vejamos se percebi bem: depois de importar os dados, os vários 
> elementos que compõe a cena ficam centralizados num ponto?
>
> PB
>
> ------------------------------------------------------------------------
>
> *De:* vtkusers-bounces+pbernardes=uaum.uminho.pt at vtk.org 
> <mailto:uaum.uminho.pt at vtk.org> 
> [mailto:vtkusers-bounces+pbernardes=uaum.uminho.pt at vtk.org 
> <mailto:vtkusers-bounces+pbernardes=uaum.uminho.pt at vtk.org>] *Em nome 
> de *Secolas UA
> *Enviada:* quarta-feira, 24 de Janeiro de 2007 16:27
> *Para:* vtkusers at vtk.org <mailto:vtkusers at vtk.org>
> *Assunto:* [vtkusers] Problems with VTKAppendPolyData
>
> Hello.
> I am importing from a vrml file the polygonal data from the model and 
> I have the following problem... The spacial data is not correct, after 
> appending all data, everything is rendered in the same spot on my 
> render window.
> Anyone knows what the problem is?
>
> Thanks
> Ricardo Seco
> University of Aveiro
>




More information about the vtkusers mailing list