C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
SGraph, модуль для рисования графиков
Slader
Отправлено: 28.01.2005, 20:23


Ученик-кочегар

Группа: Участник
Сообщений: 27



У кого-нибудь есть рабочий пример на С++? А то я с Delphi разобраться никак не могу, да и хелп к этому модулю не очень удобный. В общем, если у кого-то что-то есть — буду очень признателен!
Doga
Отправлено: 28.01.2005, 20:46


Мастер участка

Группа: Участник
Сообщений: 575



А в чём прблема? Конкретнее, PLZ. Я пользовался (теперь уже не пользуюсь т.к. знаю его теперь наизусть smile.gif ) тем же хелпом что и Вы — вопросов не было...
Slader
Отправлено: 06.02.2005, 21:21


Ученик-кочегар

Группа: Участник
Сообщений: 27



Да, честно говоря, в принципе не понял как им пользоваться... Я вообще-то не программист, поэтому хелп мне мало о чем сказал...
Насколько я понял, нужно объявлять некие переменные как Tsp_DataSeries, Tsp_Axis,... и далее работать через них.
То есть, точки надо добавлять через обращение к сериям, правильно?
Вопрос — как быстро построить массив точек (есть указатель), если к нему еще необходимо применить приведение типа (short)? Модуль принимает данные как double?

И еще: что такое BaseLine и можно ли изменять положение графика (по вертикали) на XYPlot после того, как он (график) уже нарисован?
Slader
Отправлено: 07.02.2005, 23:38


Ученик-кочегар

Группа: Участник
Сообщений: 27



2 Doga:
Как я понял, чтобы что-то нарисовать, нужно привязывать компоненты Tsp_XYLine, Tsp_SpectrLines,... к объекту Tsp_XYPlot. Привязал. А как добавить теперь на поле серии? Не понял, как установить свойство Plot. Чему оно должно быть равно?
Обязательно ли должна быть указана емкость серии? А то у меня очень много данных, количество которых неизвестно.
Можно ли изменять параметры уже нарисованных графиков (цвет, маркеры, толщина линии, тип линии, линейный преобразовать в спектральный)?
В общем, пока все очень туманно...
Doga
Отправлено: 08.02.2005, 20:18


Мастер участка

Группа: Участник
Сообщений: 575



Tsp_XYPlot — это то, где будут отображажатся Ваши профилограммы.
Данные профилограмм можно сразу записывать в обьекты Tsp_XYLine и
Tsp_SpectrLines (метод AddXY). Tsp_ndsXYLine то же смое что и Tsp_XYLine, за исключением того, что данные для отрисовки графика он получает из внешнего хранилища с помощью соответствующих обработчиков событий. Tsp_XYLine->Plot = Tsp_XYPlot  — это и есть привязка, теперь Tsp_XYLine будет отображаться на Tsp_XYPlot, если
Tsp_XYLine->Active == true. Ёмкость серии — Tsp_XYLine->Count — свойство только для чтения. Методы Tsp_XYLine такие как
Clear
AdjustCapacity
SetCapacity
AddXY
AddXYArrays
InsertXY
ReplaceXY
Delete
DeleteRange
позволяют изменять вид серии на графике.

Если серия уже отрисована на графике то перерд применением вышеозначенных методовследует выставить:
Tsp_XYLine->LockInvalidate = true;
После, когда все преобразования профилограммы закончены:
Tsp_XYLine->LockInvalidate = false;


Tsp_XYLine->Active = true/false  — показывает/убирает профилограмму с
экрана (графика).

Свойства Tsp_XYLine->LineAttr, Tsp_XYLine->PointAttr отвечают за вид профилограммы на графике (цвет, маркеры, толщина линии, тип линии...)


Если Вы точно знаете количество профилограмм на графике — можно просто накидать их на форму в дизайнтайме, а затем настроить их необходимым образом. В противном случае их лучше создавать динамически:
CODE

Tsp_XYLine *XYLine = new Tsp_XYLine(NULL);
XYLine->Active = false;
XYLine->Clear();
XYLine->SetCapacity(100); //резерв на 100 елементов

for(int k = 0; k < 89; k++)
{
 XYLine->AddXY((double)k, sin((double)k/100.0))
}

XYLine->AdjustCapacity(); //XYLine->Capacity = 89


XYLine->LineAttr->Color = clRed;
XYLine->PointAttr->Kind = ptRectangle;
XYLine->PointAttr->Color = clGreen;
...

XYLine->Plot = КакойНибудьTsp_XYPlot;
XYLine->Active = true;


Данные из Tsp_XYLine можно скопировать в Tsp_SpectrLines но не наоборот (возможно я это исправлю), т.к. последний не имеет методов GetX, GetY sad.gif


BaseLine — отметка на оси Y выше которой будут рисоваться столбики спектрограммы (Tsp_SpectrLines ).

Tsp_XYPlot позволяет прокручивать и масштабировать график в рантайме с помощью мыши. Достаточно установить свойства
Tsp_XYPlot->Pan
Tsp_XYPlot->PanShiftKeys
Tsp_XYPlot->Zoom
Tsp_XYPlot->ZoomShiftKeys

Тут я, типа, устал biggrin.gif К тому же вместе с библиотекой поставляются и примеры (правда на паскале) но для понимания работы они вполне сгодятся smile.gif

Slader
Отправлено: 08.02.2005, 22:39


Ученик-кочегар

Группа: Участник
Сообщений: 27



Спасибо большое! Вроде разобрался. Меня просто ставили в тупик Series. Я думал, работать нужно через них, как в стандартном TChart.
А можно ли задавать маркеры не для всех точек, а только, допустим, для каждой 10-й или каждой 100-й?
Как привязать координаты Tsp_LineMarker к координатной сетке XYPlot? Или это никак не реализовано? И можно ли определить на графике координаты пересечения с маркером (в координатах графика, а не экрана)? И последнее: можно ли изменять подписи на осях? То есть, преобразовывать координаты?

Вернуться в Вопросы программирования в C++Builder