Russian Qt Forum
Ноябрь 22, 2024, 22:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Дополнительные компоненты
>
Qwt real time
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Qwt real time (Прочитано 9146 раз)
bigirbis
Гость
Qwt real time
«
:
Апрель 05, 2007, 16:08 »
Как при скроллировании любой из осей не использовать replot?
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1988
Qwt real time
«
Ответ #1 :
Апрель 05, 2007, 16:17 »
поподробне
там есть у plot свойтство типа autoreplot
перерисовыввать при изменениях или нет
а вам что хочется?
Записан
bigirbis
Гость
Qwt real time
«
Ответ #2 :
Апрель 05, 2007, 18:02 »
Исходные данные:
регистрация сигналов через usb порт
Скорость обновления - 10 Гц.
Количество одновременно отображаемых точек на плоте - до 500 на одну кривую.
Количество кривых - до 4.
Текущая реализация:
на каждую кривую объявлены динамические массивы, связанные с кривыми с помощью QwtPlot::setRawData(..).
При приходе новой партии массивы сдвигаются влево с помощью memcpy на количество пришедших данных.
В конец массива дописываются пришедшие данные. Высталяются границы QwtPlot::setAxisScale(QwtPlot::xBottom,
левая граница массива, правая граница массива). После чего вызывается QwtPlot::replot().
Есть ли возможность оптимизировать отображения динамики изменения сигналов?
Записан
Alex Forth
Гость
Qwt real time
«
Ответ #3 :
Апрель 06, 2007, 10:55 »
ИМХО:
QWT под realtime не заточен
. Для шустрой прорисовки куевой хучи данных удобнее рисовать, как осцилограф - т е отрисовывать только свежие данные и курву не сдвигать! Но тут прийдется Qwt проапгрейдить. Надо новый движок для шкалы, новый плоттер для согласования времени разных курв и управления шкалой времени. Ну и всего остально, чего я забыл, по мелочи.
Записан
bigirbis
Гость
Qwt real time
«
Ответ #4 :
Апрель 06, 2007, 11:59 »
На самом деле там как-то можно использовать хитрый механизм кэша: прорисовывать все в памяти, а потом на плот картинку выкладывать. Но как его закрутить пока не осилил
Записан
Alex Forth
Гость
Qwt real time
«
Ответ #5 :
Апрель 06, 2007, 12:12 »
Ничего там в кеше хитрого нету. Класс QwtPlotCanvas
Цитировать
enum QwtPlotCanvas::PaintAttribute
Paint attributes.
PaintCached
Paint double buffered and reuse the content of the pixmap buffer for some spontaneous repaints that happen when a plot gets unhidden, deiconified or changes the focus. Disabling the cache will improve the performance for incremental paints (using QwtPlotCurve::draw).
PaintPacked
Suppress system background repaints and paint it together with the canvas contents. Painting packed might avoid flickering for expensive repaints, when there is a notable gap between painting the background and the plot contents.
The default setting enables PaintCached and PaintPacked
В любом случае при сдвиге курвы у тебя возможны 2 варианта:
1) перерисовка всех курв на плотере
2) копирование пиксмапа кеша на плотер со сдвигом + рисование новых новых данных + сдвиг пиксмапа.
В принципе с твоими 10Гц и 4 курвы можно особо не заморачиваться. железо вытянет.
Записан
Ankor
Гость
Qwt real time
«
Ответ #6 :
Апрель 09, 2007, 12:34 »
Цитата: "bigirbis"
Есть ли возможность оптимизировать отображения динамики изменения сигналов?
Можно при старте делать:
initCurve( lKey );
setRawData( lKey, bufX, bufY, size );
А потом при динамическом изменении отрисовывать только то кол-во точек, которое изменилось через QwtPlot::drawCurve( lKey, startPoint, stopPoint ). Только размер bufX и bufY уже не должен динамически изменяться, надо на них сразу память выделять. Тогда при autoreplot перерисовывается не весь plot, а только ( stopPoint - startPoint ) точек.
( задача стояла похожая и в qwt 4.2 работает на ура ).
Записан
bigirbis
Гость
Qwt real time
«
Ответ #7 :
Апрель 09, 2007, 13:25 »
To Alex Forth
Спасибо.
А по второму варианту наметки есть?
Записан
Alex Forth
Гость
Qwt real time
«
Ответ #8 :
Апрель 11, 2007, 21:23 »
Про второй вариант я написал больше для порядка. Он конечно вполне работотспособен, но какой-то он половинчатый. С одной стороны он вроде как позволяет перерисовывать только нужные части курв, но копировать туда-сюда пиксмапы - єто не есть хорошо.
Если хочешь все-таки єто сделать, то смотри исходники qwt. Другого пути я, увы, не вижу :cry: .Там тебе надо будет о т QwtPlot пройтись к QwtPlotCanvas. насколько я помню, в последнем и будет пиксмап для кеширования. Тебе прийдется полностью разобраться в порядке отрисовки всего плоттера и, возможно, подхачить qwt.
Ankor
подсказал интересный вариант. ТОлько не стоит забывать про его недостатки;
- когда данные полностью заполнят курву, нам прийдется кудато девать вновь прибывшие данные. Я не вижу другого варианта кроме как полностью очитстит bufY, переинитить на следующий временной интервал bufX и начать заполнять bufY с начала. При єтом старые данные на плотере будут стерты.
- прийдется танцевать с бубном возле автоматической настройки шкалы по Y. Єто связанно с тем что при каждом переполнении bufY масштаб Y шкалы будет дико прыгать.
- У меня при подобном подходе отрисовка по autoreplot не работает.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...