Видимость кривой Tchart

  • Автор темы Serginio
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Serginio

#1
Привет коллеги,
Работаю с компонентом TChart и загружаю на график кривые на определенный диапазон
([chart->BottomAxis->Minimum; chart->BottomAxis->Maximum]), диапазон равен [0; 100] значений.
И у меня вот такая проблема: когда я рисую на график кривую и ”расстояние” между предыдущей точки и следующей точки велика (примерно 5000-10000 единиц), то часть кривой исчезает. График точно есть, потому что когда я масштабирую (увеличиваю диапазон видимость) график – то вся кривая видна.
Может это быть от свойств компонента? (я честно не верю)
Помогите, кто чем (советом) может!!!
Заранее благодарю!
 
O

Ogion7

#2
Если я правильно понял, Вам нужно перед прорисовкой графика, оценить сколько единиц(графика) находиться в одном пикселе TChart-а
 
S

Serginio

#3
Вообще-то, (для примера) я рисую первую точку в 0 (ноль) а следующую в 5000 (или 10000) по оси времени и т.д. (ось времени - это BottomAxis и ее формат число...)

Вот кусок кода:
Код:
Chart1->Series[curveNr]->AddXY(curMaxPos, value, "", color);
или
((TChart*)FindComponent(chartName))->Series[0]->AddXY(curMaxPos, value, "", color);
где: 
int curveNr - серия на Чарте 
float value - текущая значение 
TColor color - цвет
AnsiString chartName - имя Чарта созданным динамически
int curMaxPos - текущая значение оси времени (BottomAxis, формат число)
При AddXY(...) все точки соединяются между ними,
а здесь часть кривой между двумя точками исчезает...

Для малениких "растоянии" между точками - работает как надо,
а для большых "растоянии" - глючит...
 
O

Ogion7

#4
Ты сам писал
диапазон равен [0; 100] значений
. Как ты можеш увидеть точку 1000 если 100 максимум?
Естесно ничего не видиш. Я грю надо посчитать сколько точек реально на экране(у тебя 100). Хочеш увидеть 1000-ю. Делим 1000/100=10. В одной т. чарта 10 условных единиц. Рисуй в соответсвии с этим. Вот я что то подобное писал на Делфи

Код:
tmp:=DBChart1.ChartRect.Right-DBChart1.ChartRect.Left;
Query1.Last;
step:=Query1.FieldByName('Arg').AsFloat;
Query1.First;
step:=step-Query1.FieldByName('Arg').AsFloat;
step:=step/tmp;//found the mass of pixel in rect.DBChart1
Last и First максимальное и минимальное значение для функции по оси икс(я данные из базы брал потому и квери).
 
S

Serginio

#5
Привет Ogion7,

Спасибо за твое предложение, но дело не в этом - у меня есть Скроллинг и я передвигаюсь по Чарту от 0 (ноль) до максимальной значении с диапазона до 100 единиц на оси Х (времени) и т.д.

Дело в том что, между двумя точками кривое исчезает (свойство Chart1->Series->Active = true;) ...

Для малениких "растоянии" между точками - работает как надо, а для большых "растоянии" - глючит...
 
O

Ogion7

#6
не врубаюсь :) пришли скрин, код. Можн на мыло, откопаю у себя билдер и посмотрю
kos.mail@mail.ru
 
S

Serginio

#7
Sorry, не могу прислать код, потому что этот прожект на заказ...
Лучше скажи что не понятно.
Извени, я перепутал (свойство Chart1->Series->Active = false;).
Свойства всех кривых Active = false; - значит они видимы, не спрятаны.
 
O

Ogion7

#8
что ты рисуеш по оси х? Значение функции в пикселях? Что занчит "от 0 (ноль) до максимальной значении с диапазона до 100 единиц на оси Х"? Шо есть единица? Зачем тебе скролер в чарте?
 
S

Serginio

#9
что ты рисуеш по оси х? Значение функции в пикселях? Что занчит "от 0 (ноль) до максимальной значении с диапазона до 100 единиц на оси Х"? Шо есть единица?
По оси Х я ставляю числа от Ноль до максимальной значении (действие пройсходит во времени):
0, 1, 2, 3, 4, 5, ... 1000, ... 10000, ... 100000, ... 1000000, ...
1 единица соответствует 1 значении.
Значении могут быть в каждой единицы времени или нет.
"Маленикая растояние" - интервал между точками 0 - 100 единиц.
"Большая растояние" - интервал между точками 1000 - 10000 единиц и больше.

Зачем тебе скролер в чарте?
На Чарте одновременно можно увидеть [0; 100] значений/единиц (<=100 единиц) и по этому я использую скролер, чтобы передвигаться по Чарту от 0 (ноль) до максимальной значении с диапазона до 100 (<=100) единиц на оси Х (времени) и т.д.
Диапазон задается пользователем (0 - 100 единиц на оси Х).

Думаю что ответил на твой вопросы...
 
O

Ogion7

#11
Наверно в чарте для прорисовки, нужно чтобы точки начала конца линии были в пределах просматриваемой области. Т.е. ситуация -- ты в диапазоне 2000-2100, начальная точка в 1905, конечная в 2005. Просчитай где должна быть точки начала и конца линии в пределах просматриваемого диапазона
 
S

Serginio

#12
Спасибо, но дело не в этом.
Не имеет значение где соединяются точки - кривые должны быть видны на Чарте и так...

У меня есть такой вариант - чтобы нарисовать этт кривые из множество частейб но это не самое лучшее дело, так как увеличивается время отображения - а мне это не надо...
 
Статус
Закрыто для дальнейших ответов.