cd1 resumo do curso preparado pelo ovídio (by rodrigo toledo)

25
CD 1 CD resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

Upload: internet

Post on 16-Apr-2015

114 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 1

CD

resumo do curso preparado pelo Ovídio

(by Rodrigo Toledo)

Page 2: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 2

Estrutura do Curso

• Pré-requisitos• Conceitos de programação• Linguagem de programação C• IUP

• Objetivos• Apresentar o CD• Verificar as vantagens da utilização do CD• Utilizar o CD para desenhar gráficos • Relacionar o CD com outros sistemas de

programação

Page 3: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 3

Apresentação

• Canvas Draw (CD) é um sistema gráfico portátil, projetado para ser usado em conjunto com o sistema IUP. Sua implementação foi baseada nos seguintes sistemas gráficos: Microsoft Windows (GDI), Macintosh (QuickDraw), X-Windows (XLIB) e DOS (VESA e VGA).

• O CD foi projetado para ser um sistema simples, pequeno e totalmente adaptado às novas tecnologias que surgiram desde o padrão GKS (e gl_canvas).

Page 4: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 4

Conteúdo

• Motivação e características do CD

• CD• Arquitetura• Descrição conceitual• Primitivas de desenho

• IM

• LUA

Page 5: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 5

Motivação

• Manter as aplicações portáteis.

• Simplificar a API (Application Programmers Interface):• Todos os dados são tipos básicos de C (int, double ou char).

• A lista de parâmetros das funções primitivas contêm apenas a descrição geométrica dos objetos (linhas, círculos, texto, etc).

• Aproveitar as novas tecnologias desenvolvidas após o GKS.

• Viabilizar o tratamento de imagens rasters.

Page 6: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 6

Características do CD

• Multiplataforma• Simples

• O gráfico é desenhado em apenas um dispositivo de cada vez.• Não possui tratamento para uso incorreto das funções. Chamadas

incorretas podem resultar invasão de memória.

• Vetorial & Raster• Viabiliza a integração com outros sistemas - CDPLAY• Flexível

• Mesmo sendo projetado para ser usado com o IUP, um mecanismo foi inventado para utilizá-lo separadamente.

• Expansível• Permite a criação de novos drivers sem limite.

Page 7: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 7

Arquitetura

Aplicação

CD

DosMacintosh Motif Windows

Page 8: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 8

Descrição Conceitual - Modelo

• O CD usa o conceito de superfície de visualização virtual (VVS). Uma VVS pode ser o canvas de um diálogo IUP, a página de um documento enviado para a impressora, uma imagem offscreen, o clipboard, um metafile, a memória ou arquivos gráficos (CGM, WMF, EMF, PS, DXF, DGN, CDM). Por questões de simplificação a VVS também será chamada de canvas. As funções do CD podem ser classificadas da seguinte maneira:

• Controle• Funções para criar, ativar e fechar uma VVS, além de outras funções de controle.

• Sistema de Coordenadas e Clipping• Controlam a área de clipping, o tamanho da VVS, convertem unidades (mm x pixel)

e podem relacionar coordenadas de mundo com as da tela.

• Primitivas• Funções de desenho, entre elas: linhas, poligonais, retângulos, arcos, marcas e

textos.

• Atributos• Modificam e consultam atributos das primitivas.

• Cores e Imagens• Funções relacionadas às cores e imagens.

Page 9: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 9

Funções de Controle - I

cdCanvas *cdCreateCanvas(cdContext* driver, void *data)

driver: Define uma VVS (canvas)

data: Informações adicionais. Esta relacionado com o parâmetro driver.

retorno: Retorna um ponteiro para a área de memória criada ou NULL em caso de alguma falha.

Valores possíveis para driver:

Ainda que seja possível criar mais de um canvas com o mesmo par driver/data, isso não é recomendado e seu comportamento não é especificado. Cada canvas armazena em memória um contexto próprio com seus atributos e valores.

•CD_IUP•CD_NATIVEWINDOW

Janelas

•CD_CGM•CD_DGN•CD_DXF

•CD_WMF•CD_EMF•CD_METAFILE•CD_PS

Arquivos

•CD_PRINTER

•CD_CLIPBOARD

•CD_SIMULATE

Dispositivos•CD_IMAGE•CD_IMAGERGB

Imagem

Page 10: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 10

Funções de Controle - II

int cdActivate(cdCanvas *canvas)

• retorno: CD_OK ou CD_ERROR, indicando se o canvas foi ativado com sucesso ou não.

void cdFlush(void)

void cdClear(void)

void cdKillCanvas(cdCanvas *canvas)

cdCanvas* cdActiveCanvas(void)

• retorno: O canvas ativo no momento.

char* cdVersion(void)

• retorno: A versão da biblioteca.

Page 11: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 11

Funções de Coordenadas e Clipping

void cdGetCanvasSize(int *width, int *height, double *mm_width, double *mm_height)

int cdClip(int mode)

•mode: CD_CLIPAREA, CD_CLIPPOLYGON, CD_CLIPOFF ou CD_QUERY

Para o modo CD_CLIPPOLYGON é preciso usar a função cdBegin, para definir o polígono de clipping.

•retorno: o status anterior.

void cdClipArea(int xmin, int xmax, int ymin, int ymax)

int cdGetClipArea(int *xmin, int *xmax, int *ymin, int *ymax)

•retorno: o retângulo e o status de clipping correntes.

void cdCanvas2Raster(int *x, int *y) Do CD para o IUP.

void cdMM2Pixel(double mm_dx, double mm_dy, int *dx, int *dy)

void cdPixel2MM(int dx, int dy, double *mm_dx, double *mm_dy)

Page 12: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 12

Funções de Coordenadas de Mundo - wd

Utilizam a metáfora Window-Viewport para definir um sistema de coordenadas de mundo em qualquer unidade.

Para usar qualquer uma destas funções , você deve ativar o canvas através da função wdActivate e incluir o arquivo wd.h.

Todas as funções de primitivas da biblioteca CD têm uma implementação equivalente em WD, de forma que é possível desenhar primitivas especificando coordenadas de mundo.

Page 13: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 13

Prática 1 - Primitivas Gráficas

•Execute o programa CDTest (praticas\cdtest).

•O programa CDTest foi elaborado para testar o CD e como tem uma grande interatividade com o usuário, permite ao programador verificar o funcionamento de todas funções e atributos da biblioteca CD.

•Siga as instruções do instrutor para obter o máximo proveito do programa. O código fonte é liberado como exemplo.

Page 14: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 14

Funções de Atributos

As informações a respeito de como as primitivas gráficas devem aparecer, qual a cor, espessura e etc, são definidas como variáveis de estado corrente e armazenadas em cada canvas criado. Desta maneira os atributos de um canvas não interferem nos de outro.

A modificação do estado de um atributo somente afetará o canvas ativo e todas as primitivas desenhadas nesse canvas que dependem do atributo serão desenhadas de um modo diferente.

Para um lista completa dos atributos, consulte o manual em Funções/Atributos.

Page 15: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 15

Guia de Programação C

void main(void) { cdCanvas *canvas;

IupOpen (); IupLoad ("ex1.led");/* Mapeando o CANVAS */ IupMap (IupGetHandle("dial"));/* Criando o CANVAS */ canvas = cdCreateCanvas (CD_IUP, IupGetHandle("canv"));/* Registrando as callbacks */ IupSetFunction ("Acao_redesenha",(Icallback)Acao_redesenha); IupSetFunction ("Acao_tamanho",(Icallback) Acao_tamanho); IupSetFunction ("Acao_scroll",(Icallback) Acao_scroll);/* Exibindo o diálogo e entrando no loop de eventos */ IupShow (IupGetHandle("dial")); IupMainLoop ();/* Fechando o canvas criado */ cdKillCanvas(canvas); IupClose(); }

A programação deve levar em consideração:•A função IupShow gera eventos resize e repaint.•Para desenhar alguma coisa no canvas ele já deve estar criado e ativo.•Para criar um canvas CD_IUP ele precisa estar mapeado na memória.

Page 16: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 16

Prática 2 - Primeiro Programa

•Use o pfe para observar o código fonte Ex1.c no diretório praticas\1.

•O programa Ex1, tem como principal objetivo mostrar ao aluno a programação necessária aos principais eventos que ocorrem num canvas, bem como desenhar algumas primitivas que também podem ser exportadas.

•O instrutor informará as tarefas de acordo com o objetivo e tempo disponível no curso.

Page 17: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 17

Imagens I - CD_IMAGE

O CD trabalha com dois tipos de imagens denominadas no manual como imagem de servidor e imagem de cliente.

A imagem de servidor é de alto desempenho, se baseia nos recursos disponíveis no sistema e devido a isso é amplamente dependente da plataforma. Tem um formato interno inacessível ao programador e é usada principalmente para implementar desenhos offscreen, técnica também conhecida como double buffer.

Page 18: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 18

Imagens II - CD_IMAGERGB

A imagem de cliente foi especificada para dar mais flexibilidade ao programador sendo todas as primitivas implementadas independentemente dos sistemas. Este tipo de imagem viabiliza o tratamento de imagens pois pode-se desenhar em imagens já existentes.

Existem dois tipos de imagens de cliente: RGB e RGB Indexada. A imagem RGB é composta por 3 buffers: vermelho, verde e azul, 24 bits por pixel (8 para cada buffer), este tipo pode dispor de mais cores, porém gastará mais memória. A RGB Indexada (também chamada imagem baseada em paleta) é composta por um buffer de índices e uma tabela de valores RGB codificados. Desta maneira ocorre uma economia da memória, porém menos cores estarão disponíveis.

Page 19: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 19

Comparação: Direta x Indexada

Para uma imagem de 640x480 pixels, armazenadas em memória segundo as duas possibilidades, teremos:

1o.) True Color (24 bits):

640 x 480 x 24 = 7.372.800 bits = 921.600 bytes

2o.) Peseudo Color (256 cores = 28 cores):

(640 x 480 x 8) + (256 x 24) = 2.459.648 bits = 307.456 bytes

Observações:

• 256 x 24 => Tabela de 256 posisções.

• 24 => 3 buffers de 8 bits. (1 buffer p/ cada cor primária)

Page 20: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 20

Funções de Imagens

Servidor x Cliente

• cdPutImage• cdGetImage• cdScrollImage• cdPutImageRect• cdCreateImage• cdKillImage

• cdPutImageRGB• cdGetImageRGB• cdPutImageRGBA• cdPutImageMap

Page 21: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 21

Funções de Cores

• cdEncodeColor

• cdDecodeColor

• cdForeground

• cdBackground

• cdGetColorPlanes

• cdPalette

VALORES PREDEFINIDOS

•CD_RED•CD_GREEN•CD_BLUE•CD_DARK_RED•CD_DARK_GREEN•CD_DARK_BLUE•CD_YELLOW•CD_MAGENTA•CD_CYAN•CD_DARK_YELLOW,•CD_DARK_MAGENTA•CD_DARK_CYAN•CD_WHITE•CD_BLACK•CD_DARK_GRAY•CD_GRAY

Page 22: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 22

Facilidades da Biblioteca IM

A biblioteca IM tem como objetivo ler e escrever imagens bitmaps (raster) em vários formatos, tais como: BMP, PCX, GIF, TIF, etc...

A IM possui total compatibilidade com o CD de forma que as imagens lidas pelas funções da IM podem ser mostradas em um canvas CD e os desenhos do canvas também podem ser salvos nos formatos suportados pela IM.

Para uma informação detalhada e completa, inclusive com exemplos, veja o manual on-line em: http://www.tecgraf.puc-rio.br/manuais/im.

Page 23: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 23

Programando CD em LUA

A biblioteca CDLua foi desenvolvida para disponibilizar todas as funcionalidades da biblioteca CD para programadores LUA. Foi escrita em C, com auxílio do utilitário toLua (uma ferramenta para gerar automaticamente ligações C/C++ e LUA).

Juntamente com IUPLua, IMLua, DBLua dentre outras, o CDLua completa o ambiente de progamação LUA.

Page 24: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 24

Importanto Desenhos - CDPLAY

Disponibilidade:

Interpreta o conteúdo gráfico (primitivas e atributos) em um determinado driver e chama funções equivalentes da biblioteca CD utilizando o canvas ativo. As primitivas são geradas dentro da caixa definida pelas coordenadas dadas. Apenas alguns drivers têm esta função implementada.

int cdPlay (cdContext driver, int xmin, int xmax, int ymin, int ymax, void *data)

• CD_CLIPBOARD

•CD_WMF

•CD_EMF

•CD_CGM

•CD_METAFILE

Page 25: CD1 resumo do curso preparado pelo Ovídio (by Rodrigo Toledo)

CD 25

Dicas úteis

• Onde encontrar ( Plataforma PC)• \\SIGMA\CENPESN\TECGRAF\CD

• Manual on-line• http://www.tecgraf.puc-rio.br/manuais/cd• No CENPES: \\SIGMA\CENPESN\TECGRAF\CD \html\index.html

• Apoio CENPES• Ramal: 6806

• Outras plataformas• Solicitar instalação. Já temos:

• AIX, SunOS, Solaris, IRIX, Linux (todos UNIX) e Alpha/Vms