[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Класс mglGraph (see section Ядро MathGL) обеспечивает базовые функции для создания научной графики, но это абстрактный класс. Причина в том, что существует несколько возможностей вывода/отображения получившегося рисунка: в растровый или в векторный файлы, используя OpenGL и т.д. В результате, для конечной отрисовки необходимо использовать производные классы. В принципе, можно наследовать непосредственно mglGraph (и так было до версии 1.6). Однако, я рекомендую использовать в качестве базового класс mglGraphAB для большего единообразия получающейся графики в различных классах. Класс mglGraphAB – другой абстрактный класс, обеспечивающий преобразование координат, базовые функции рисования и сохранения в растровое изображение. Он требует доопределения функций рисования линий, треугольников и четырехугольников. Ниже приведены классы “отрисовки” с короткими комментариями.
Абстрактный класс, обеспечивающий отрисовку по глубине, преобразование к экранным координатам, сохранение в растровое изображение и т.д. Класс определен в #include <mgl/mgl_ab.h>
.
Реализует растровую отрисовку изображения используя Z-Buffer. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Также этот класс используется как базовый для рисования в окне (например, используя FLTK, Qt, wxWidgets библиотеки и пр.). При экспорте в EPS формат сохраняется растровая картинка. Получающийся рисунок лучшего качества, но рисуется медленнее чем в классе mglGraphPS. Класс определен в #include <mgl/mgl_zb.h>
.
Реализует векторную отрисовку изображения с возможностью сохранения в векторный PostScript или SVG файл. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Замечу, что сглаживание цвета не поддерживается, а при экспорте в EPS не поддерживается и прозрачность (в силу ограничения формата). В результате рисунок получается быстрее, но более низкого качества чем в классе mglGraphZB. Класс определен в #include <mgl/mgl_eps.h>
.
Реализует векторную графику с использованием OpenGL. Класс не может быть использован для рисования в консоли. В силу ограничения OpenGL возможна проблема корректного отображения нескольких перекрывающихся поверхностей. Класс определен в #include <mgl/mgl_gl.h>
.
Реализует экспорт графики в IDTF формате, который затем можно преобразовать в формат U3D. Класс определен в #include <mgl/mgl_idtf.h>
.
4.1 Класс mglGraphAB |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Вообще говоря это чуть “менее абстрактный” класс чем mglGraph (see section Ядро MathGL). Он предоставляет много методов для обработки промежуточных данных и требует в производных классах определения только нескольких методов для отрисовки примитивов. Разработчикам, наследующим этот класс, следует посмотреть файл ‘mgl_ab.h’ и комментарии в нем или обратиться к автору.
Ниже я только перечислю основные общедоступные методы класса mglGraphAB. В первую очередь это функции, возвращающие созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, “Оконные” классы) или сохранить в файл (см. также, Экспорт в файл).
mglGraphAB
(C++): const unsigned char *
GetBits ()mglGraph
(Python): void
GetRGB (char *
buf, int
size)mglGraph
(Python): void
GetBGRN (char *
buf, int
size)const unsigned char *
mgl_get_rgb (HMGL
gr)Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): {red, green, blue}. Число элементов Width*Height. Положение элемента {i,j} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для GetBGRN()
). В Python вы должны предоставить буфер buf достаточного размера size, т.е. код должен выглядеть следующим образом
from mathgl import * gr = mglGraph(); bits='\t'; bits=bits.expandtabs(4*gr.GetWidth()*gr.GetHeight()); gr.GetBGRN(bits, len(bits));
mglGraphAB
(C++): const unsigned char *
GetRGBA ()mglGraph
(Python): void
GetRGBA (char *
buf, int
size)const unsigned char *
mgl_get_rgba (HMGL
gr)Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): {red, green, blue, alpha}. Число элементов Width*Height. Положение элемента {i,j} есть [4*i + 4*Width*j].
mglGraphAB
(C++, Python): int
GetWidth ()mglGraphAB
(C++, Python): int
GetHeight ()int
mgl_get_width (HMGL
gr)int
mgl_get_height (HMGL
gr)Возвращает ширину и высоту изображения.
Класс mglGraphAB – базовый класс для “оконных классов”. Поэтому он содержит набор функций для создания и управления окном. Большинство из них применимо только в “оконных классах” (типа mglGraphFLTK и др, see section “Оконные” классы). В остальных случаях функции ничего не делают. Если вы создаете оконный класс, то Вам следует предоставить такой же интерфейс для удобства пользователя.
void
Window (int
argc, char **
argv, int (*
draw)(mglGraph *
gr, void *
p), const char *
title, void *
par=NULL
, void (*
reload)(int
next, void *
p)=NULL
, bool
maximize=false
)Создает окно для вывода графика. Параметры argc, argv содержат информацию операционной системы и их слеудет передать в эту функцию из функции main(int argc,char **argv)
(хотя они и могут быть равны NULL
). Параметр draw – указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция draw должна возвращать число кадров или ноль для рисования по запросу. Замечу, что draw может быть равна NULL
для отображения статической (текущей) картинки. Параметр title задает заголовок окна. Параметр par содержит указатель на данные, передаваемые функции рисования draw. Параметр maximize=true
открывает окно раскрытым на весь экран.
В окне просмотра можно использовать клавиши: ’a’, ’d’, ’w’, ’s’ для вращения; ’,’, ’.’ для просмотра предыдущего и следующего кадров; ’r’ для переключения прозрачности; ’f’ для переключения оспещенности; ’x’ для закрытия окна.
ВАЖНО!!! Вам не следует вызывать функцию Rotate() (see section Матрица преобразования) если Вы хотите вращать график.
void
Window (int
argc, char **
argv, mglDraw *
draw, const char *
title, bool
maximize=false
)В основном аналогична предыдущей. Основное отличие в том, что функции рисования и обновления данных определены в классе наследнике класса mglDraw
. Этот класс определен в #include <mgl/mgl_define.h>
и имеет только 2 метода:
class mglDraw { public: virtual int Draw(mglGraph *) { return 0; }; virtual void Reload(int) {}; };
Вы можете создать класс-наследник mglDraw
и переопределить один или оба метода для использования с данной функцией.
mglGraphAB
(C++): void
ToggleAlpha ()int
mgl_wnd_toggle_alpha (HMGL
gr)Включает/выключает прозрачность, но не перезаписывает настройки пользовательской функции рисования.
mglGraphAB
(C++): void
ToggleLight ()int
mgl_wnd_toggle_light (HMGL
gr)Включает/выключает освещение, но не перезаписывает настройки пользовательской функции рисования. Switch on/off lighting but do not overwrite switches in user drawing function.
mglGraphAB
(C++): void
ToggleZoom ()int
mgl_wnd_toggle_zoom (HMGL
gr)Включает/выключает приближение выбранного мышью области рисунка.
mglGraphAB
(C++): void
ToggleRotate ()int
mgl_wnd_toggle_rotate (HMGL
gr)Включает/выключает режим вращения мышью. Обычно левая кнопка вращает график, средняя сдвигает, правая приближает и меняет перспективу.
mglGraphAB
(C++): void
ToggleNo ()int
mgl_wnd_toggle_no (HMGL
gr)Выключает режим приближения/вращения и восстанавливает вид по умолчанию. Switch off all zooming and rotation and restore initial state.
mglGraphAB
(C++): void
Update ()int
mgl_wnd_update (HMGL
gr)Обновляет содержимое окна.
mglGraphAB
(C++): void
ReLoad (bool
o)int
mgl_wnd_reload (HMGL
gr, int
val)Перезагружает данные пользователя и обновляет картинку.
mglGraphAB
(C++): void
Adjust ()int
mgl_wnd_adjust (HMGL
gr)Подгоняет размер картинки под размер окна (виджета).
mglGraphAB
(C++): void
NextFrame ()int
mgl_wnd_next_frame (HMGL
gr)Показывает следующий кадр.
mglGraphAB
(C++): void
PrevFrame ()int
mgl_wnd_prev_frame (HMGL
gr)Показывает предыдущий кадр. Show previous frame if one.
mglGraphAB
(C++): void
Animation ()int
mgl_wnd_animation (HMGL
gr)Запускает/останавливает слайд-шоу (анимацию) кадров.
int
mgl_wnd_set_auto_clf (HMGL
gr, int
val)bool
AutoClfВключает/выключает автоматическую очистку рисунка между перерисовкой. Выключение полезно для рисования с накоплением (например, результатов/точек расчета).
int
mgl_wnd_set_delay (HMGL
gr, int
val)float
DelayЗадержка анимации в секундах. По умолчанию равно 1 секунде.
mglGraphAB
(C++, Python): mglPoint
CalcXYZ (int
xs, int
ys)void
mgl_calc_xyz (HMGL
gr, int
xs, int
ys, float *
x, float *
y, float *
z)Вычисляет 3D координаты {x,y,z} для экранной точки {xs,ys}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (see section Матрица преобразования).
mglGraphAB
(C++, Python): mglPoint
CalcScr (mglPoint
p)mglGraphAB
(C++): void
CalcScr (mglPoint
p, int *
xs, int *
ys)void
mgl_calc_scr (HMGL
gr, float
x, float
y, float
z, int *
xs, int *
ys)Вычисляет экранные координаты {xs,ys} для 3D координат {x,y,z}. Вычисления производятся для последнего использованного InPlot (see section Матрица преобразования).
int
mgl_wnd_set_show_mouse_pos (HMGL
gr, int
val)float
ShowMousePosВключает/выключает показ координат последнего нажатия кнопки мыши на рисунке.
mglPoint
LastMousePosПоследнее положение нажатия кнопки мыши.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Build Daemon user on August 29, 2011 using texi2html 1.82.