A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

HGraphViz Haskell Binding for GraphViz João Paulo Barbosa.

Apresentações semelhantes


Apresentação em tema: "HGraphViz Haskell Binding for GraphViz João Paulo Barbosa."— Transcrição da apresentação:

1 HGraphViz Haskell Binding for GraphViz João Paulo Barbosa

2 Motivação Visualizar estruturas de dados class Graphical a where draw :: Graphical a => a -> IO () … instance Show a => Graphical [a] where draw = … instance Graphical NDfa where draw … Manipular grafos/estruturas de dados Modificar várias bibliotecas da UMinho Haskell Library (ver adiante)

3 GraphViz - Introdução Sistema/biblioteca de visualização/manipulação de grafos Possuí várias tipos de layout de grafos: – Hierárquico – Mola – Radial – Circular Desenvolvido em C Bindings para várias linguagens mas não para Haskell (yet…)

4 GraphViz - Componentes O GraphViz lida com os seguintes tipos de componentes: – Grafo (Nós,Arcos,Atributos) :: ([No],[Arco],[Atributos]) – Nó (Chegada,Saída,Atributos) :: ([Arco],[Arco],[Atributo]) – Arco (Origem,Destino,Atributos) :: (No,No,[Atributo]) – Atributo (Propriedade,Valor) :: (String,String)

5 GraphViz – Linguagem Dot Linguagem simples para armazenar grafos Actualmente várias bibliotecas da UMinho Haskell Library criam um ficheiro neste formato para ser feito o layout pelo GraphViz ou para ser visualizado. graph ER { node [shape=box]; course; institute; student; node [shape=ellipse]; {node [label="name"] name0; name1; name2;} code; grade; number; node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I"; name0 -- course; code -- course; course -- "C-I" [label="n",len=1.00]; "C-I" -- institute [label="1",len=1.00]; institute -- name1; institute -- "S-I" [label="1",len=1.00]; "S-I" -- student [label="n",len=1.00]; student -- grade; student -- name2; student -- number; student -- "S-C" [label="m",len=1.00]; "S-C" -- course [label="n",len=1.00]; label = "\n\nEntity Relation Diagram\ndrawn by NEATO; fontsize=20; }

6 GraphViz - Layout As rotinas de Layout podem gravar o grafo numa imagem São suportados vários formatos de imagem Alguns atributos controlam o layout

7 Foreign Function Interface (FFI) FFI permite: – Especificar em Haskell funções externas – Especificar funções Haskell passíveis de serem usadas externamente – Converter estruturas externas para Haskell e vice-versa Um pouco Low-level

8 FFI - Greencard Pré-processador FFI para Haskell Abstrai a complexidade do FFI Processa directivas da forma %xpto Gera código Haskell e funções stub em C correspondentes Permite misturar código C no Haskell Directivas opcionais são inferidas automáticamente

9 FFI – Exemplo Greencard module HGraphViz where import Prelude hiding (init) import Foreign.GreenCard %#include %prefix ag data AgGraph = AgGraph type Graph = Ptr AgGraph %dis graph g = ptr ({Agraph_t*} g) %fun agopen :: String -> Int -> IO Graph %fun agread :: String -> IO Graph %call (string f) %code FILE * fs = fopen(f, "w"); % r = agread(fs); %result (graph r)

10 GraphViz HGraphViz - Arquitectura HGraphViz Greencard Stubs FFI HGraphViz UI

11 HGraphViz - Exemplo instance Show a => Graphical [a] where graph n l = do g <- open n Directed ns <- sequence $ map (node g. show) l sequence. map (uncurry (edge g)) $ zip ns (tail ns) return g main = do HGraphViz.init gl <- graph "lista" ["ola","teste","graphviz"] write gl "lista.dot"

12 Combinadores GraphViz trata os atributos como pares de Strings Alguns atributos podem tornar-se complexos (p.e. records) O uso de combinadores facilita a formatação dos vários componentes de um grafo

13 HGraphViz - UI wxHaskell (wxWindows binding for Haskell) Portável Fácil Utilização Tipicamente o GraphViz faz o layout de um grafo e grava em imagem para então ser visualizado Desvantagens: – Imagem temporária – Fraca interactividade

14 HGraphViz - Interactividade Manipulação gráfica de grafos Como obter a nova estrutura modificada graficamente? – edit :: Graphical a => a -> IO a – Associar funções que manipulam a estrutura às operações gráficas – Sugestões ? Dynamic Layout Managers – Dynagraph – O sistema GraphViz fornece uma biblioteca que facilita o layout incremental em grafos. Não tão dispendioso como os outros layouts

15 HGraphViz – Extensibilidade Outros atributos que não estejam definidos na especificação podem ser processados pelo visualizador: – Imagens – Outro grafo (grafos dentro de nós?) – Visualização 3D Sugestões

16 HGraphViz – Aplicações Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. Automatic graph drawing has many important applications in software engineering, database and web design, networking, and in visual interfaces for many other domains. in


Carregar ppt "HGraphViz Haskell Binding for GraphViz João Paulo Barbosa."

Apresentações semelhantes


Anúncios Google