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