Формат DXF
Формат DXF (Drawing Exchange Format) розроблено фірмою AutoDesk у 1982 році для обміну кресленнями та іншими графічними документами в середовищі AutoCAD. Незважаючи на вік цього формату та його недоліки, DXF зараз підтримується багатьма програмами як формат обміну даними.
Файл DXF складається з пар
<код групи>
<команда>
Код групи пояснює те, що міститься в наступному рядку. Наприклад, послідовність пар
0 (означає початок нового елементу) LINE
10 (далі буде значення першої координати X) 12.354
20 (перша координата Y) -34
11 (наступна координата X) 23.08
21 (наступна координата Y) 5.7
визначає лінію.
Наведемо декілька кодів групи (табл. 6.21).
Загальна структура файлу DXF така:
Кожна секція описується так:
Головним недоліком формату DXF можна вважати великий об'єм файлів. У середовищі системи AutoCAD для роботи з документами використовується більш компактний формат — DWG, однак він є внутрішнім форматом, його не розуміють інші програми.
Формат MIF-MID
Тут ми дещо відхилимося від тематики "класичної комп'ютерної графіки" й розглянемо приклад векторного формату, який використовується в геоінформаційних системах (ГІС). Ці системи описують просторові об'єкти сукупністю метричних та атрибутивних (семантичних) даних. Формат MIF-MID є найпопулярнішим векторним форматом обміну даними для ГІС. Він розроблений фірмою MapInfo для власної ГІС, однак зараз використовується майже усіма ГІС як формат експорту-імпорту.
Опис просторових об'єктів у цьому форматі складається з двох файлів — *.MIF та *.МID. Файл із розширенням MIF містить загальний опис та координати вузлових точок об'єктів. Об'єкти можуть бути точковими, лінійними або площинними. Графічні примітиви: Arc, Ellipse, Line, Pline, Point, Rect, Region, Roundrect та Text.
Кольори та стилі показу об'єктів позначаються записами Brash, Pen та Symbol.
Заголовок файлу MIF містить таку інформацію:
• версія формату;
• кодова сторінка для символів;
• символ-роздільник для файлу MID;
• опис системи координат;
• кількість та формат стовпців таблиці атрибутів.
У файл MID (не плутати з файлами формату MIDI) записується таблиця атрибутивних даних. Один рядок файлу містить атрибути відповідного об'єкта, розділені спеціальним символом-роздільником (найчастіше комою).
Файли MIF та MID є текстовими файлами ASCII.
Розглянемо приклад опису об`єктів. На рис. 6.17 показано сім простеньких об'єктів.
Тут маємо два точкових об'єкти ("пункті" та "пункт2"), позначених умовними знаками — прапорець та зірка. Три лінійних об'єкти — лінія, полілінія (3 вузли) та мультиполілінія (декілька поліліній). Два площинних об'єкти — чотирикутник та регіон. Регіон тут у вигляді двох островів, один з яких із отвором. Для об'єктів записані атрибутивні дані у відповідних рядках таблиці.
Тепер надамо опис цих об'єктів у файлах MIF, MID. Зміст файлу MIF:
3. Засобами бібліотеки Opengl забезпечити зміну кольору створеного трикутника при подвійному натисненні лівої кнопки миші
(мал. №1 )
(мал. №2 )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
hrc: HGLRC;
h : GLfloat;
end;
var
frmGL: TfrmGL;
Vert:array[1..6,1..10] of GLfloat;
mx,my:byte; //коефіцієнти збільшення/зменшення
implementation
{$R *.DFM}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc);
glViewPort (0, 0, ClientWidth, ClientHeight);
glClearColor (0.5, 0.5, 0.75, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (2.0, 0.0, 0.8); // текущий цвет примитивов
glBegin (GL_TRIANGLES);
glVertex3f (-1, -1, h);
glVertex3f (-1, 1, h);
glVertex3f (1, 0, h);
glEnd;
SwapBuffers(Canvas.Handle); // содержимое буфера - на экран
wglMakeCurrent(0, 0);
end;
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
procedure TfrmGL.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
h := 0.0;
end;
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
If Key = VK_SPACE then
begin
If ssShift in Shift
then h := h + 1
else h := h - 1;
Caption := Floattostr (h);
Refresh
end;
end;
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
FormPaint(Sender);
end;
end.
4. Для попереднього практичного завдання вашого варіанту забезпечити операцію маштабування використовуючи клавіши + та -.
Потім для точного виконання завдання виконати слідуючий алгоритм дій при цьому використати згідно варіанту клавіші «+» та «-», що по умові завдання виконують наближення та відділення фігури на фоні:
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
InvalidateRect(Handle, nil, False);
end;
end.
Список використаної літератури:
1. С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002
2. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004.
3. OpenGl, технология ставшая символов, Учебник в примерах.
4. Конспект лекцій.
5. Мережа Інтернет.