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
|
|