С помощью чего лучше делать отрисовку графика на много точек? |
Здравствуйте, гость ( Вход | Регистрация )
С помощью чего лучше делать отрисовку графика на много точек? |
Rocky |
18.8.2010, 10:31
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Всем привет! Есть порядка 20000 точек... Грубо говоря это сигнал с ПЗС-линеек. Нужно сделать что-то вроде осциллографа. Т.е. каждые например 200 мс перерисовывать спектр... Как лучше всего это сделать? Пробовал qwt. Вроде все норм, но вот при увеличении масштаба появляются просто дикие тормоза.... Вплоть до минуты думает.. Как с этим бороться непонятно (да и расчитан ли вообще Qwt на такие объемы). Посмотрел в сторону QGraphicsScene. С ним много непонятного... Т.е. как я понял нужно ручками как-то рисовать сетку (grid) например, подписывать значения сигналов на осях, учитывать масштаб и пр... Имхо тут лучше свой класс писать унаследовавшись от QWidget просто.. Или лучше использовать opengl вообще? Поделитесь опытом плиз, как лучше делать?
Спасибо! |
|
|
Litkevich Yuriy |
18.8.2010, 10:41
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я думаю, что графическое представление будет более тормозным, чем реализация своего виджета-отрисовщика. Хотя наверняка утверждать не стану.
С opengl не работал |
|
|
Алексей1153 |
18.8.2010, 10:44
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Rocky, на Qt такое не довелось ещё делать, а вот MFC( aka WinAPI) прекрасно справляется. То есть, хоть какая библиотека способна на такое, надо только всё правильно организовать
Расскажи, как ты делаешь - в словах, не кодом |
|
|
Rocky |
18.8.2010, 11:18
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Я сделал пока через qwt. Сделал класс производный от QwtPlot. Расположил виджет на форме. В классе есть метод, через который передаются массивы (С-массивы - int*) X- и Y-значений. Потом заношу их так QwtPlotCurve::setRawData(m_dX1, m_dY1, nNumUsedPoints). Для навигации и масштабирования по спектру использую классы QwtPlotPicker QwtPlotPanner QwtPlotZoomer.
Свой класс писал на основе примеров, поставляемых с библиотекой. Вобщем-то все это работает на ура когда 50-100 точек.... А когда 20000 - вообще все виснет при увеличении масштаба... Видимо Qwt не предназначен для такого... Свой виджет тоже где-то когда-то писал... Но насколько помню был затык как сделать правильно и грамотно масштабирование при выделении квадрата мышью. А с QGraphicsScene вообще куча всего непонятного и ощущение что реально проще свой виджет писать чем использовать QGraphicsView. А именно: 1. Неясно как зафиксировать сетку (которая foreground grid) при масштабировании. 2. Неясно как сделать подписи на этой сетке. 3. Неясно как реализовать масштабирование не колесиком мыши - а при выделении квадрата мышью. 4. Неясно как сделать перемещение по графику (когда он не влезает в виджет) не с помощью скрол-баров, которые сами появляются, а опять-таки с помощью мыши.... 5. Непонятно как правильно очищать сцену перед отрисовкой новой инфы... Последнее получилось так
Правильно ли это? Фиг знает, по другому не нашел как.... Касаемо пунктов 1-4 видимо нужно делать сабклассинг и самому переписывать QPaintEvent.... Но неясно тогда в чем фишка QGraphicsView... Вобщем, вот такие мысли... Несколько дней думаю, пока ощущение что нужно либо самому писать виджет, производный от QWidget и в нем ловить QPaintEvent и все что нужно делать... Либо завязываться на OpenGL... Последнее интереснее конечно... Но вот интересно, можно ли 2D графики на нем рисовать.... Нужно разбираться вобщем... Сообщение отредактировал Rocky - 18.8.2010, 11:21 |
|
|
Алексей1153 |
18.8.2010, 12:30
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
нет, я ж говорю не про это. Расскажи алгоритм. На человечьих словах
1. Неясно как зафиксировать сетку (которая foreground grid) при масштабировании. 2. Неясно как сделать подписи на этой сетке. 3. Неясно как реализовать масштабирование не колесиком мыши - а при выделении квадрата мышью. 4. Неясно как сделать перемещение по графику (когда он не влезает в виджет) не с помощью скрол-баров, которые сами появляются, а опять-таки с помощью мыши.... 5. Непонятно как правильно очищать сцену перед отрисовкой новой инфы... Ну, тут "неясно" не означает, что невозможно. Може, и умеет ) А может и нет - ведь под всё универсально не сделаешь У тебя основная задача - хранить массив точек, из них делать массив линий, рисовать этот массив |
|
|
Rocky |
18.8.2010, 12:53
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Хм..... по-поводу qwt пока думал как словесно описать, вспомнил что есть пример realtime в котором задаешь количество точек для отрисовки..... Задал 30000 - вроде тормозов нет... Попробую покопать туда... Спасибо )) Потом отпишусь в чем косяк (если найду конечно)
|
|
|
wiz29 |
19.8.2010, 16:31
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
Но вот интересно, можно ли 2D графики на нем рисовать.... На OGL можно гораздо больше чем предоставляет стандарный QPainter. Вывести полилинию в 20к точек это вообще не задача. Я решал твою задачу когда то, но делал все на WinAPI, ну и объемы данных измерялись гигабайтами. А вот если рисовать через стандартный Qpainter большое количество объектов или полилинии из огромного количества вершин дело гиблое, хотя 20к точек должен "тянуть" |
|
|
Rocky |
20.8.2010, 13:18
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Вобщем в итоге на пока оставил qwt... После пары часов просмотра хидеров, сделал так:
Тормоза ушли =) |
|
|
Текстовая версия | Сейчас: 2.1.2025, 18:29 |