English version
PRINCIPAL | PUBLICAÇÕES | PESQUISA | PROVA DE ANÁLISE E SISTEMAS | DICAS | SYNTHETIC VESSEL DATASET | DICAS ALUNO IME / USP |


Download the code. (Glifos / glyph)(.cpp)

//Maysa Macedo maysa@ime.usp.br
#include "vtkRenderer.h"

#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkProperty.h"
#include "vtkDataSetMapper.h"
#include "vtkFloatArray.h"
#include "vtkGlyph3D.h"
#include "vtkSphereSource.h"

int main (int argc, char **argv)
{
FILE *arquivo;
int numero,i,j,npontos;
float xponto,yponto,zponto;
vtkPoints *pointsBall = vtkPoints::New(VTK_DOUBLE);
arquivo = fopen("dados.txt", "r");
if (arquivo==NULL)
return 0;

//cria uma janela de renderização

vtkRenderer *aRenderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(aRenderer);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);

//leitura do arquivo

i=0;
fscanf(arquivo,"%d",&npontos);
printf("%d",npontos);
for(int jj=0;jj fscanf(arquivo,"%g\t%g\t%g",&xponto,&yponto,&zponto);
printf("-- %g\t%g\t%g\n",xponto,yponto,zponto);
pointsBall->InsertPoint(jj, xponto/300,yponto/300,zponto/300);
}
fclose(arquivo);


//declaracao dos objetos que serão utilizados para representar o conjunto de esferas

vtkSphereSource *sphere = vtkSphereSource::New();
vtkPolyData *glyphData = vtkPolyData::New();
vtkGlyph3D *glyph = vtkGlyph3D::New();
vtkActor *spikeActor = vtkActor::New();
vtkPolyDataMapper *spikeMapper = vtkPolyDataMapper::New();

//configura as propriedades da esfera que será modelo

sphere->SetThetaResolution(8);
sphere->SetPhiResolution(8);
sphere->SetRadius(0.015);

//armazena os pontos que serão o centro de cada estrutura de um glifo

glyphData->SetPoints(pointsBall);


//cria o glifo 3D, onde o cada ponto armazenado (pointsBall) será o centro de uma esfera

glyph->SetSource(sphere->GetOutput());
glyph->SetInput(glyphData);
glyph->SetVectorModeToUseNormal();
glyph->SetScaleModeToScaleByVector();
glyph->SetScaleFactor(1);

//cria um mapeador para o glifo

spikeMapper->SetInputConnection(glyph->GetOutputPort());

//cria o ator para o mapeador do glifo

spikeActor->SetMapper(spikeMapper);
spikeActor->GetProperty()->SetDiffuseColor( 1, 0.4, 1);
spikeActor->GetProperty()->SetSpecular(.3);
spikeActor->GetProperty()->SetSpecularPower(30);

//adiciona o ator ao renderizador

aRenderer->AddActor(spikeActor);

//cria e configura a camera- dependendo da configuração é possível que você não consiga visualizar o ator

vtkCamera *aCamera = vtkCamera::New();
aCamera->Elevation(-30);
aCamera->Roll(-20);

//adiciona a camera ao renderizador

aRenderer->SetActiveCamera(aCamera);
aRenderer->ResetCamera();

//configura mais uns detalhes da tela

aRenderer->SetBackground (0.2, 0.4, 0.6);
aRenderer->ResetCameraClippingRange();
renWin->SetSize(400,400);


//Inicializa a renderização

iren->Initialize();
iren->Start();


//destrói objetos

aRenderer->Delete();
iren->Delete();
aCamera->Delete();
renWin->Delete();
spikeMapper->Delete();
spikeActor->Delete();
glyph->Delete();
sphere->Delete();
glyphData->Delete();
pointsBall->Delete();
return 1;
}




maysa (a t) ime.usp.br