-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcg2d.h
executable file
·124 lines (98 loc) · 3.08 KB
/
cg2d.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
Autor: Murillo Rodrigo Petrucelli Homem
Departamento de Computação
Universidade Federal de São Carlos
Código ilustrativo (esboço) de uma pequena biblioteca gráfica bidimensional
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
// Utilizado apenas na função Dump2X()
#define EventMask (KeyPressMask | ExposureMask)
/* Exemplo de estruturas de dados para a
biblioteca de funções gráficas em C, considerando
o plano como referência para o mundo */
// Variáveis globais que determinam o tamanho do Universo no SRU
//float XWMin, YWMin, XWMax, YWMax;
// Janela de visualização definida no SRU
typedef struct Window {
float xmin,
xmax,
ymin,
ymax;
} window;
// Porta de visualização (viewport) definida no SRD
typedef struct ViewPort {
int xmin,
ymin,
xmax,
ymax;
} viewport;
// Estrutura de dados para um ponto no plano (SRU 2D) com
// uma componente homogênea (w != 0)
typedef struct HPoint2D {
float x,
y,
w; // componente homogênea que será discutida em aula futura!!!
int color;
} point;
// Estrutura de dados para um objeto (polígono) no
// plano (SRU 2D)
typedef struct Object2D {
int numbers_of_points;
point * points;
} object;
// Estrutura de dados para uma componente de cor no
// modelo aditivo RGB
typedef struct Color {
float red,
green,
blue;
} ColorValues;
// Paleta de cores (colormap)
typedef struct Palette {
int numbers_of_colors;
ColorValues * colors;
} palette;
// Estrutura de dados para uma grade bidimensional de
// entradas que corresponde ao SRD
typedef struct Buffer {
int MaxX,
MaxY;
int * buffer;
} bufferdevice;
// Estrutura para uma matriz homogênea para operações
// lineares no plano - SRU
typedef struct HMatrix2D {
float a11, a12, a13,
a21, a22, a23,
a31, a32, a33;
} matrix;
/* Determina os limites do mundo */
void SetWorld(float, float, float, float);
/* cria pontos e objetos no mundo */
point * SetPoint(float, float, float, int);
object * CreateObject(int);
int SetObject(point *, object *);
/* Funções para criar e gerenciar uma
paleta e cores */
palette * CreatePalette(int);
int SetColor(float, float, float, palette *);
ColorValues * GetColor(int, palette *);
/* Sistemas de referências, janelas e viewports */
window * CreateWindow(float, float, float, float);
viewport * CreateViewPort(int, int, int, int);
point * Sru2Srn(point *, window *);
point * Srn2Srd(point *, viewport *);
bufferdevice * CreateBuffer(int, int);
/* Funções para conversão matricial e preenchimento de objetos */
int DrawViewPort(viewport *, bufferdevice *, int);
int DrawLine(point *, point *, window *, viewport *, bufferdevice *, int);
int DrawObject(object *, window *, viewport *, bufferdevice *, int);
/* Visualiza o buffer (SRD) no monitor virtual */
int Dump2X(bufferdevice *, palette *);
/* Funções auxiliares */
int InWin(point *, window *);
point * InterX(point *, point *, float);
point * InterY(point *, point *, float);