Visualização da estrutura cristalina e magnética utilizando o VTK

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

... para pessoas que não sabem c++
Um programa em C Bibliotecas Variáveis globais
Linguagem de Programação IV
Linguagem C Marco Reis.
Linguagem C Marco Antonio – Julho/2009. Instalação A IDE que será utilizada é o Eclipse, com plugin para C/C++. Descompacte no diretório.
Métodos, Parâmetros, Argumentos e Contratos
Sumário Aula n.º 18 Formatações Tamanho Cor Parágrafos Alinhamento
Classes C++ Class nome da classe { private: membros privados
Introdução à Programação usando Processing Programação Gráfica 2D Estrutura de Seleção Exercício Estrutura de Seleção 2º Semestre 2009 > PUCPR > Design.
Introdução à Programação usando Processing Programação Gráfica 2D Estrutura de Seleção Exercícios de Revisão Estrutura de Seleção 14/10/09 Bruno C. de.
Construção de Algoritmos AULA 07
Programação II Estruturas de Dados
PARA ADICIONAR UM VÍDEO
Inserir uma tabela com os dados que se pretendem visualisar
Introdução à Computação - Jorge Macêdo
INF Computação Gráfica
Disciplina: AAM Profa. Ana Watanabe 03/13 vol.2
LINGUAGEM ESTRUTURADA TURBO C
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Iluminação Para programar um sistema de iluminação, dois passos principais devem ser considerados: c) Que tipo e posição de Iluminação se deseja b) Que.
Armazenamento de Dados em Arquivos
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Linguagem C Estruturas de Seleção.
Armazenamento de Dados em Arquivos
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
VETORES, STRINGS E MATRIZES
Revisão da Linguagem C.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CURSO DE LINUX EDUCACIONAL
Apontadores ou Ponteiros
O Portal do Estudante de Computação
1 APLICAÇÃO DA VISUALIZAÇÃO CIENTÍFICA À OCEANOGRAFIA Representação da agitação marítima no porto de Leixões Disciplina de Visualização Científica Mestrado.
Sistema Operativo em Ambiente Gráfico
VISUALIZAÇÃO DE CAMPOS ELÉCTRICOS PLANOS INFINITOS, CILINDROS INFINITOS, ESFERAS E CONDENSADORES VISUALIZAÇÃO CIENTÍFICA - MMCCE FRANCISCO PAULO MARQUES.
Animações no Power Point
Simulação Massa-Mola para Tecidos
Vetores em c / c++: Formato geral para declaração de variáveis:
PROGRAMAÇÃO ESTRUTURADA II
Visualization Toolkit - VTK
Tipos Abstratos de Dados
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO
Sistemas Operativos em Ambiente Gráfico
Interface Grafica - Swing Professor Rafael Monteiro
Seminário 1: Revisão de C
Tarefa 02 Visual Studio 2005 Visual C# Programa Hello World.
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO TIC 10 Folha de Cálculo.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
APRENDER A APRENDER deve ser nossa meta. Comandos de Controle de Programa Comandos de Seleção Prof. Me. Jeime Nunes.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Microsoft Office Excel Fórmulas complexas  Se  Soma.Se  Contar.Se  Contar.Val  Contar.Vazio.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Escola Profissional Vasconcellos Lebre - Mealhada
Estruturas de Dados Aula 17: Estruturas Genéricas
Introdução à Linguagem C
Linguagem de Programação C#
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
CAD AutoCAD Mouse Menu de barras.
Revisão Luis Antonio Tavares
Aula Prática 3 Funções Monitoria Introdução à Programação.
Manipulação de Imagens em OpenGL
Animação 2D. // Variáveis que guardam a translação que será aplicada // sobre a casinha GLfloat Tx; GLfloat Ty; // Variáveis que guardam os valores mínimos.
Formatando trabalhos no Writer PROF. ANDRÉ APARECIDO DA SILVA Disponível em:
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Transcrição da apresentação:

Visualização da estrutura cristalina e magnética utilizando o VTK

Objectivos do trabalho Representar graficamente a célula unitária a 3D; Representar graficamente a estrutura magnética do composto; Simular a transição magneto-estrutural do composto; Simular a reorientação de spin do composto.

Menu printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\n\n ///////////////////////////////////////////////////////////////////////////////\n\n"); printf(" -----------------------------------MENU---------------------------------\n\n"); printf("\t ATENCAO: Este programa diferencia maisculas de minusculas \n\n\n"); printf ("\t \t C-Visualizacao da Estrutura Cristalografica \n\n\n"); printf (" \t \t M-Visualizacao da Estrutura Magnetica \n\n\n"); printf ("\t \t S-Simulacao da transicao estrutural \n\n\n"); printf ("\t \t H-Simulacao da reorientacao de spin \n\n\n"); printf("////////////////////////////////////////////////////////////////////////////////\n\n"); printf("\n\n\n\n"); util = getchar(); //Condição da escolha da letra C programa para visualizar a Estrutura Cristalografica if ( util == 'C') { Erro !!! if ( util != 'H' && util != 'S' && util != 'M' && util != 'C') { printf ("\n\n Voce nao escolheu nenhuma das opcoes dadas\n"); printf ("\n\n O programa desliga-se automaticamente volte a tentar por favor\n"); printf ("\n\n para isso carregue em qualquer tecla \n"); }

Classes do VTK utilizadas mais importantes vtkSphereSource.h vtkArrowSource.h vtkAxes.h vtkActor2D.h vtkCellArray.h Texto

Opção “C”-Estrutura cristalina // Criação de uma esfera por uma classe pré definida (Source) vtkSphereSource *sphere = vtkSphereSource::New(); sphere->SetThetaResolution(100); sphere->SetPhiResolution(50); // Mapeamento de uma esfera que depois irá ser utilizada em vários actores vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); sphereMapper->SetInput(sphere->GetOutput()); // Criação dos actores Neste caso temos 36 atomos: vtkActor *sphere1 = vtkActor::New(); sphere1->SetMapper(sphereMapper); sphere1->GetProperty()->SetColor(0,0,1); sphere1->GetProperty()->SetAmbient(0.3); sphere1->GetProperty()->SetDiffuse(0.5); sphere1->GetProperty()->SetSpecular(1.0); sphere1->GetProperty()->SetSpecularPower(20.0); sphere1->AddPosition(x[1],y[1],z[1]); ……. vtkRenderer *ren1 = vtkRenderer::New(); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(ren1); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); Source da Esfera Mapeamento da Esfera Actor da Esfera Render Janela

Opção “C”-Estrutura cristalina char *text = "Estrutura Cristalografica"; vtkTextMapper *pText = vtkTextMapper::New(); pText->SetInput(text); vtkTextProperty *propText = pText->GetTextProperty(); propText->SetFontSize(18); propText->SetFontFamilyToArial(); propText->SetColor(0,0,1); propText->BoldOn(); propText->ItalicOff(); propText->ShadowOff(); propText->SetJustificationToLeft(); propText->SetVerticalJustificationToBottom(); vtkActor2D *pActor = vtkActor2D::New(); pActor->SetMapper(pText); pActor->SetPosition(425,650); ren1->AddActor2D(pActor); ren1->AddActor(sphere1); ren1->SetBackground(1, 1, 0.7); renWin->SetSize(400, 200); // Tamanho dos parâmetros da rede a=7.4313; b=14.6278; c=7.7151; static float q[8][3]={{0,0,0}, {a,0,0}, {a,b,0}, {0,b,0}, {0,0,c}, {a,0,c}, {a,b,c}, {0,b,c}}; static vtkIdType pts[6][4]={{0,1,2,3}, {4,5,6,7}, {0,1,5,4}, {1,2,6,5}, {2,3,7,6}, {3,0,4,7}}; vtkPolyData *celula = vtkPolyData::New(); vtkPoints *points = vtkPoints::New(); vtkCellArray *polys=vtkCellArray::New(); Título Célula

Opção “C”-Estrutura cristalina int j; for (j=0; j<8; j++) points->InsertPoint(j,q[j]); for (j=0; j<6; j++) polys->InsertNextCell(4,pts[j]); celula->SetPoints(points); points->Delete(); celula->SetPolys(polys); polys->Delete(); // Mapeador da celula vtkPolyDataMapper *celulaMapper = vtkPolyDataMapper::New(); celulaMapper->SetInput(celula); // Criação do actor da celula vtkActor *celulaActor = vtkActor::New(); celulaActor->SetMapper(celulaMapper); celulaActor->GetProperty()->SetRepresentationToWireframe(); ren1->AddActor(celulaActor); celulaMapper->Delete(); // Criação do texto com as direcções segundo xx neste caso é segundo // a direcção do parametro a da celula,b corresponde aos yy e finalmente c aos zz. vtkVectorText *texta=vtkVectorText::New(); texta->SetText("a"); vtkPolyDataMapper *textaMapper=vtkPolyDataMapper::New(); textaMapper->SetInput(texta->GetOutput()); vtkActor *textaActor=vtkActor::New(); textaActor->SetMapper(textaMapper); textaActor->SetPosition(1,0,-0.5); textaActor->SetScale(0.5); ren1->AddActor(textaActor); vtkVectorText *textb=vtkVectorText::New(); vtkVectorText *textc=vtkVectorText::New(); Célula Etiquetagem eixos

Opção “C”-Estrutura cristalina // Criação dos eixos vtkAxes *axes=vtkAxes::New(); axes->SetOrigin(0,0,0); axes->SetScaleFactor(1); axes->SymmetricOn(); vtkPolyDataMapper *axesMapper=vtkPolyDataMapper::New(); axesMapper->SetInput(axes->GetOutput()); vtkActor *axesActor=vtkActor::New(); axesActor->SetMapper(axesMapper); ren1->AddActor(axesActor); axesMapper->Delete(); // Criação da luz no render vtkLight *light = vtkLight::New(); light->SetFocalPoint(1.875,0.6125,0); light->SetPosition(0.875,1.6125,1); ren1->AddLight(light); // Inicializar as interacções iren->Initialize(); iren->Start(); // Apapgar todos os pointers (actores, render, mapeadores, sources, renderwindows, lights, etc.) pText->Delete(); Eixos Luz Iniciar Interacção Delete

Opção “M”-Estrutura Magnética // Criação da fonte da secta (source) que é a junção de um // cone numa extremidade de um cilindro vtkArrowSource *arrow = vtkArrowSource::New(); // Mappeador da secta vtkPolyDataMapper *arrowMapper = vtkPolyDataMapper::New(); arrowMapper->SetInput(arrow->GetOutput()); // Criação dos actores sectas (correspondem aos spins): vtkActor *arrowactor1 = vtkActor::New(); arrowactor1->SetMapper(arrowMapper); arrowactor1->SetPosition(x[1]-0.5, y[1], z[1]); arrowactor1->SetScale(2); (arrowactor1->GetProperty())->SetColor(0.5, 0.5, 0.5); arrowactor1->RotateZ(phi[1]); arrowactor1->RotateX(theta[1]); Source Seta Mappeamento Seta Actor Seta

Opção “S”-Simulação da transição Estrutural // apontadores declarados globais por serem usados no callback vtkRenderer *ren1; long timeLastCall=0; vtkActor *sphere1; ….. bool toogle=0; // Class Callback para ser utilizado coma interacção class vtkMyCallback : public vtkCommand { public: static vtkMyCallback *New() { return new vtkMyCallback; } void PrintSelf(ostream& os, vtkIndent indent) {} void PrintTrailer(ostream& os, vtkIndent indent) {} void PrintHeader(ostream& os, vtkIndent indent) {} void CollectRevisions(ostream& os) {} virtual void Execute(vtkObject *caller, unsigned long, void*) vtkRenderWindowInteractor *ri = reinterpret_cast<vtkRenderWindowInteractor*>(caller); if ((timeGetTime() - timeLastCall) > 1000) { cout << "1 segundo" << endl; timeLastCall = timeGetTime(); sphere1->AddPosition(0.1,0, 0); ……. } ri->GetRenderWindow()->Render(); AbortFlagOn(); vtkRenderWindowInteractor }; Mycallback

Opção “S”-Simulação da transição Estrutural vtkMyCallback *mo1 = vtkMyCallback::New(); iren->CreateTimer(VTKI_TIMER_FIRST); iren->AddObserver(vtkCommand::TimerEvent, mo1, 2.0); timeLastCall = timeGetTime(); Chamada vtkCallback

Opção “H”-Simulação da transição Reorientação spin vtkRenderer *ren1 = vtkRenderer::New(); ren1->AddActor(pActor); …. ren1->GetActiveCamera()->SetFocalPoint(0,0,0); ren1->GetActiveCamera()->SetPosition(0,10,0); ren1->ResetCamera(); ren1->GetActiveCamera()->SetParallelScale(5); tkRenderer *ren2 = vtkRenderer::New(); ren2->AddActor(pActor2); … ren2->GetActiveCamera()->SetFocalPoint(0,0,0); ren2->GetActiveCamera()->SetPosition(0,10,0); ren2->ResetCamera(); ren2->GetActiveCamera()->SetParallelScale(5); vtkRenderWindow *renWin1 = vtkRenderWindow::New(); renWin1->AddRenderer(ren1); vtkRenderWindow *renWin2 = vtkRenderWindow::New(); renWin2->AddRenderer(ren2); vtkRenderWindowInteractor *iren1 = vtkRenderWindowInteractor::New(); iren1->SetRenderWindow(renWin1); vtkRenderWindowInteractor *iren2 = vtkRenderWindowInteractor::New(); iren2->SetRenderWindow(renWin2); renWin1->Render(); renWin2->Render(); iren1->Start(); Renderer 1 Renderer 2 Janela 1 Janela 2 Interacção

Melhoramentos Futuros Determinação das distâncias/posições dos átomos; Poder seleccionar os planos atómicos; Etiquetar os atómos; Mais dificil!!!!! Utilização de Teoria de Grupos

Trabalho da disciplina de Visualização Científica Realizado por: FIM Agradecimentos Dr(s): J. Tavares & J. Barbosa André Pereira