CD
resumo do curso preparado pelo Ovídio
(by Rodrigo Toledo)
CD
1
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
CD
2
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).
CD
3
Conteúdo
• Motivação e características do CD
• CD
• Arquitetura
• Descrição conceitual
• Primitivas de desenho
• IM
• LUA
CD
4
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.
CD
5
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.
CD
6
Arquitetura
Aplicação
CD
Macintosh
CD
Motif
Windows
Dos
7
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
•
•
Sistema de Coordenadas e Clipping
•
•
Modificam e consultam atributos das primitivas.
Cores e Imagens
•
CD
Funções de desenho, entre elas: linhas, poligonais, retângulos, arcos, marcas e
textos.
Atributos
•
•
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 para criar, ativar e fechar uma VVS, além de outras funções de controle.
Funções relacionadas às cores e imagens.
8
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.
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.
Arquivos
Valores possíveis para driver:
•CD_WMF
•CD_CGM
Imagem
•CD_EMF
Dispositivos
•CD_IMAGE
•CD_DGN
•CD_PRINTER
•CD_METAFILE
•CD_IMAGERGB
•CD_DXF
•CD_PS
•CD_CLIPBOARD
•CD_SIMULATE
CD
Janelas
•CD_IUP
•CD_NATIVEWINDOW
9
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.
CD
10
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)
CD
11
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.
CD
12
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.
CD
13
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.
CD
14
Guia de Programação C
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.
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();
}
CD
15
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.
CD
16
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.
CD
17
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.
CD
18
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)
CD
19
Funções de Imagens
Servidor
•
•
•
•
•
•
CD
cdPutImage
cdGetImage
cdScrollImage
cdPutImageRect
cdCreateImage
cdKillImage
x
Cliente
•
•
•
•
cdPutImageRGB
cdGetImageRGB
cdPutImageRGBA
cdPutImageMap
20
Funções de Cores
VALORES PREDEFINIDOS
•
•
•
•
•
•
CD
cdEncodeColor
cdDecodeColor
cdForeground
cdBackground
cdGetColorPlanes
cdPalette
•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
21
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.
CD
22
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.
CD
23
Importanto Desenhos - CDPLAY
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
Disponibilidade:
•CD_EMF
•CD_CGM
•CD_METAFILE
CD
24
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:
CD
• AIX, SunOS, Solaris, IRIX, Linux (todos UNIX) e
Alpha/Vms
25
Download

CD - rodrigodetoledo