Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: m_ax от Август 02, 2009, 19:31



Название: Light Plot2D
Отправлено: m_ax от Август 02, 2009, 19:31
Всем респект!  ;D

Понадобился тут мне компонент для построения 2D графиков... Раскуривать QwtPlot - здоровье уже не позволяет  :), к тому же мне достаточно простенький был нужен plotter. Так что вот, выкладываю что на днях удалось написать - фактически допилиный plotter из всеми нами известной (надеюсь) книжки Жасмина и Бланшета.

Да, он исчо не совсем готов, но основной функционал вроде как работает))) В общем зеленоват пока...

Так что отписывайтесь господа, если будут замечания или предложения  ;)
   

 



Название: Re: Light Plot2D
Отправлено: vipet от Сентябрь 28, 2009, 17:12
shapoclak,

Покажи товар лицом - залей картинки!


Название: Re: Light Plot2D
Отправлено: sne от Октябрь 26, 2009, 11:25
Большое спасибо, почти то что искал :)


Название: Re: Light Plot2D
Отправлено: havok от Октябрь 26, 2009, 12:16
Ой! Спасибо большое! Мне как раз что-то подобное надо делать. Буду изучать!


Название: Re: Light Plot2D
Отправлено: p166 от Январь 28, 2010, 11:09
из всеми нами известной (надеюсь) книжки Жасмина и Бланшета.
Вообще-то Жасмин Бланшет это один человек...   ;)
А Книгу написали Жасмин Бланшет и Марк Саммерфилд.


Название: Re: Light Plot2D
Отправлено: m_ax от Февраль 02, 2010, 15:10
Цитировать
Вообще-то Жасмин Бланшет это один человек...   Подмигивающий
А Книгу написали Жасмин Бланшет и Марк Саммерфилд.

Прошу прощения за мою безграмотность))

Кстати, если интересно могу выложить последнюю версию LightPlotа.. В настоящий момент изменено очень многое))   


Название: Re: Light Plot2D
Отправлено: kuzulis от Февраль 02, 2010, 15:40
1. Интересно!
2. Ждем исходников с комментариями в стиле Doxygen для полноценной и исчерпывающей документации!
3. Хорошо бы иметь ссылочку на ресурс!



Название: Re: Light Plot2D
Отправлено: panAlexey от Февраль 02, 2010, 16:33
Цитировать
Вообще-то Жасмин Бланшет это один человек...   Подмигивающий
А Книгу написали Жасмин Бланшет и Марк Саммерфилд.

Прошу прощения за мою безграмотность))

Кстати, если интересно могу выложить последнюю версию LightPlotа.. В настоящий момент изменено очень многое))   
Хости на гугле-коде и давай сцилку. Там и картинки фтыкать можно...
с нетерпением жду...


Название: Re: Light Plot2D
Отправлено: decodder от Февраль 11, 2010, 19:46
Ребят, так а где исходники взять-то можно? Очень надо! Хорошее дело делаете))


Название: Re: Light Plot2D
Отправлено: sne от Февраль 16, 2010, 22:24
Присоединяюсь, было бы очень интересно посмотреть изменившуюся версию.
Сам я на версию что выложил топикстартер тоже накатил довольно много изменений, все собраться не могу выложить результат.


Название: Re: Light Plot2D
Отправлено: m_ax от Февраль 17, 2010, 14:01
День добрый)

Так, меня тут долго не было :(
Всё времени нет сделать из него (LightPlot2D) удобный виджет со всеми настройками, легендами, возможностью всё редактировать с помощью соответствующих диалоговых окон..

Сейчас выкладываю, так сказать, демо версию без всяких наворотов..
Время писать подробный мануал, увы нэт  :(
Скоро, опять уезжаю и фиг знает когда же я его допилю до конца))

Кстати, вот выкладываю, ещё ну оч старую его версию, которая используется в одном проекте (FSFResearcher), но мне она совсем не нра... Но именно так, в плане интерфейса, я вижу новый LightPlot2D))

Так что, господа, раскуривайте))
Если возникнут вопросы, пишите)) Я пока ещё здесь))

Всего доброго!


Название: Re: Light Plot2D
Отправлено: m_ax от Февраль 17, 2010, 14:05
Хм.. Не могу прикрепить файл с проектом, где используется старая версия: файл слишком большой, типа((


Название: Re: Light Plot2D
Отправлено: m_ax от Февраль 17, 2010, 14:52
Вот оч старая версия, но рабочая))


Название: Re: Light Plot2D
Отправлено: decodder от Март 23, 2010, 11:24
Есть проблема. Подскажите, пожалуйста. Есть консольная программка(с++), в которой то и дело считается куча данных, находящихся в массивах. Подскажите как их можно отображать с помощью Light Plot, по возможности минимально изменяя код. Проблема еще в том, что программа тяжеленькая, считает долго... Пробовал сам - графики выводятся только после того, как программа закончит счет, хотя по логике должно работать. Заранее благодарен.


Название: Re: Light Plot2D
Отправлено: m_ax от Апрель 03, 2010, 17:05
Цитировать
Есть проблема. Подскажите, пожалуйста. Есть консольная программка(с++), в которой то и дело считается куча данных, находящихся в массивах. Подскажите как их можно отображать с помощью Light Plot, по возможности минимально изменяя код. Проблема еще в том, что программа тяжеленькая, считает долго... Пробовал сам - графики выводятся только после того, как программа закончит счет, хотя по логике должно работать. Заранее благодарен.

Ну эт не сложно)
Вам нужно создать объект класса CurveData, который имеет метод
Код:
void setData(const QVector<QPointF> &data);
В вектор data вы записываете точки, которые составляют ваши данные.
Пример:
Код:
    plotter = new Plotter;
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(plotter);

    CurveData cd;  // Создаём объект CurveData
    QVector<QPointF> v;  // Вектор с данными (пока пустой)
    for (int i = 0; i < 1000; ++i) { // заполняем его)
        double x = i * 0.001;
        double y = sin(10.0 * x);
        y *= y;
        v.append(QPointF(x, y));
    }
    cd.setData(v); // записываем наш заполненный вектор с данными (точками (x, y)) в объект cd
    cd.setColor(Qt::red); // цвет кривой
    plotter->plot()->setCurveData(cd, 1); // записываем объект cd в plotter

И всё)
 


Название: Re: Light Plot2D
Отправлено: m_ax от Апрель 03, 2010, 17:11
И вообще эта старая версия.. Там граблей стока))

Кому интересно, можете допилить вот енту новую его версию) Которая подверглась серьёзным изменениям, но до конца пока доводить её у меня нет времени((

 


Название: Re: Light Plot2D
Отправлено: Marat(Qt) от Апрель 14, 2010, 22:38
Не нашел копирайтов. Public domain?


Название: Re: Light Plot2D
Отправлено: m_ax от Апрель 19, 2010, 11:21
Цитировать
Не нашел копирайтов. Public domain?

Я вообще против всяких там копирайтов и всего подобного)
Так что да:  Public domain)


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 12, 2010, 12:03
День добрый)

На днях сел дописывать LithPlot2D, в общем, почти дописал всё что хотел, единственное возникло несколько вопросов..
1) Имеет ли смысл создавать отдельный ресурс для сего поприща?
2) Если имеет, то где наиболее правильно будет его создать?
3) Поскольку художник из меня никакой, не мог бы кто-нить, кому не сложно нарисовать несколько иконок для проекта? Не могу этим GIMPом рисовать, наверно руки не из того места растут))



Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 12, 2010, 12:26
Выкладывать обязательно надо, т.к. архив, прикрепленный в теме форума - не дело. Ежели нет времени/желания самому заниматься этим делом, то скинь мне последние исходники и я выложу их.


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 12, 2010, 12:46
Цитировать
Выкладывать обязательно надо, т.к. архив, прикрепленный в теме форума - не дело. Ежели нет времени/желания самому заниматься этим делом, то скинь мне последние исходники и я выложу их.
Океюшки) На днях постараюсь всё подпилить до конца) В таком случае, нужно ещё и документацию небольшую сделать.. Я планирую её в TeXе написать и в .pdf выложить. Oxigen ни разу не юзал просто..

кстати, по поводу иконок:
Вот картинка, там иконки позаимствованы из QtiPlot'а, хотелось бы свои иметь, поскольку диалог не один и в другом также те же иконки используются.. Хотелось бы нарисовать что-нить индивидуальное)

 


Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 12, 2010, 13:20
С рисовальщиками худо :(


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 20, 2010, 23:09
Вечер добрый)
Не всё успел дописать, ибо занят был другим)
Выкладываю, то что есть:  превью, так сказать)

Надеюсь уже скоро всё же добью его до конца)) Хорошо бы с иконками кто помог..

Вообщем, тестируйте... Конструктивная критика, предложения и пожелания приветствуются)
Цитировать
Ежели нет времени/желания самому заниматься этим делом, то скинь мне последние исходники и я выложу их.

Я уже создал репозитарий на гугле соде. Пока выкладывать туда рано, на мой взгляд.
?

 
 



 


Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 21, 2010, 08:23
Бодрое утро!

Предполагаемые баги:
- при увеличении масштаба до определенного размера все нормально, при дальнейшем увеличении ось абсцисс исчезает, ось ординат - передвигается за подпись оси (влево) на самый край виджета;
- всплывающая подсказка для "Grid details" иногда показыается на половину;
- в настройках осей(Axis), названия графика (Title) смещено вправо и видно не полностью;

Предложения:
сделать возможность просматривать (передвигать) график с помощью мыши, когда увеличен масштаб (когда график не помещается в виджет).



Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 21, 2010, 08:39

Предложения:
сделать возможность просматривать (передвигать) график с помощью мыши, когда увеличен масштаб (когда график не помещается в виджет).


Спорное предложение. Обычно левая кнопка служит для увеличения (увеличил, потом еще увеличил), правая кнопка для извлечения из стека предыдущего масштаба. Какой кнопкой двигать график?


Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 21, 2010, 09:39
Sancho,
имелось в виду, чтобы, нажав левую кнопку мыши, передвигать графиг, когда он не помещается в виджете. Например, как в Google maps мы же можем перемещать карту, нажав левую кнопку мыши.


Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 21, 2010, 11:56
Sancho,
имелось в виду, чтобы, нажав левую кнопку мыши, передвигать графиг, когда он не помещается в виджете. Например, как в Google maps мы же можем перемещать карту, нажав левую кнопку мыши.
Соответственно увеличивать мышью не сможем? Или предлагаете переключать режимы?
Я бы поигрался с переключением.


Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 21, 2010, 12:28
О переключении режимов даже не думал, но, возможно, это вариант :)


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 21, 2010, 14:04
Guten Tag!

Спасибо за пожелания и предложения)
terlan
Цитировать
Предполагаемые баги:
- при увеличении масштаба до определенного размера все нормально, при дальнейшем увеличении ось абсцисс исчезает, ось ординат - передвигается за подпись оси (влево) на самый край виджета;
Да, есть такой баг(( Пока не разбирался, но думаю эт поправимо)

Цитировать
- всплывающая подсказка для "Grid details" иногда показыается на половину;

Такое тож было, пока не перешёл на версию 4.6.2. А вообще такое поведение возникало из-за того, что на QToolTip повешен Style Sheet и если его убрать (закоментировать в lightplot2d.css) то баг пропадёт) Так что это вопрос не ко мне))

Цитировать
- в настройках осей(Axis), названия графика (Title) смещено вправо и видно не полностью;
Ну это не баг) Просто там иконки нет.

Цитировать
Предложения:
сделать возможность просматривать (передвигать) график с помощью мыши, когда увеличен масштаб (когда график не помещается в виджет).

Вначале я не хотел это делать, думал: нафига? Всё же Light plot.. Идея сделать его таким, чтоб не было ничего лишнего и в то же время чтоб не чувствовать ущербность что ли..
Но, поскольку, Вы тут с Sancho_s_rancho считаете что это тема))
Короче сейчас его можно скроллировать нажатием клавиш стрелка влево, вверх, вправо и вниз)) (←↑→↓ )

 








Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 21, 2010, 15:17
Ну не надо так близко принимать про фичи разные. Лучше что-то работающее,чем полудопиленный комбайн.


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 21, 2010, 15:39
Цитировать
Ну не надо так близко принимать про фичи разные. Лучше что-то работающее,чем полудопиленный комбайн.
Не надо трагедий)) Я как раз сейчас над этим работаю)
Кстати, Вы не могли бы выложить исходники в репозитарий? Там походу нужно каждый файл в отдельности загружать и описание вбивать к нему :( 
Я Вам пришлю пароль ежели чего)


Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 21, 2010, 16:11
Цитировать
Ну не надо так близко принимать про фичи разные. Лучше что-то работающее,чем полудопиленный комбайн.
Не надо трагедий)) Я как раз сейчас над этим работаю)
Кстати, Вы не могли бы выложить исходники в репозитарий? Там походу нужно каждый файл в отдельности загружать и описание вбивать к нему :( 
Я Вам пришлю пароль ежели чего)
Сегодня трудюсь на работе, завтра вечером могу сделать.
электропочта: toekimov@gmail.com


Название: Re: Light Plot2D
Отправлено: _voron2 от Июнь 22, 2010, 11:11
По поводу перемещения / масштабирования и т.п.
А почему бы не использовать кнопки Alt Ctrl Shift?
Например, перемещение графика можно реализовать если пользователь удерживает клавишу Shift, а масштабирование - клавишу Ctrl.

К тому же есть средняя кнопка мыши с колесиком, на которую тоже можно много чего повесить.


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 22, 2010, 11:36
Цитировать
По поводу перемещения / масштабирования и т.п.
А почему бы не использовать кнопки Alt Ctrl Shift?
Например, перемещение графика можно реализовать если пользователь удерживает клавишу Shift, а масштабирование - клавишу Ctrl.
А чем этот вариант лучше, предложенного и реализованного ранее? А если одна рука занята чем нить другим?)) (нет, не тем чем вы подумали))
Цитировать
К тому же есть средняя кнопка мыши с колесиком, на которую тоже можно много чего повесить.
Ну во-первых не у всех она есть, а во-вторых там скролл будет только по одной оси :(

Но всё равно спасибо за идеи))

Sancho_s_rancho
Я Вам сегодня ближе к вечеру тогда на ящик скину)

 


Название: Re: Light Plot2D
Отправлено: kuzulis от Июнь 22, 2010, 11:53
m_ax,

не знаю , есть это или нет, а что если добавить это:
1. Масштаб графика сделать скроллом (колесиком мыши)
2. Если график не помещается  - то сделать его перемещение "кликом" и удержанием колесика мыши и перемещением самой мыши.

т.е. по аналогии тому как сделан просмотр чертежей в Autocad

Это конечно не панацея, т.к. помимо этого можно желающим предоставить возможность самим настраивать (биндить) клавиши и т.п.  т.е. добавить какой нить элемент интерфейса (GUI) где показывался бы виджет в котором были привязки к клавишам и где можно было бы их изменить на лету при просмотре..
К примеру это  элемент появлялся бы при клике на графике правой клавишей мышки (типа меню) в котором помимо других параметров предоставлялась бы возможность настроить под себя и режимы масштабирования/просмотра/и т.п.)


Название: Re: Light Plot2D
Отправлено: _voron2 от Июнь 22, 2010, 12:02
Цитировать
По поводу перемещения / масштабирования и т.п.
А почему бы не использовать кнопки Alt Ctrl Shift?
Например, перемещение графика можно реализовать если пользователь удерживает клавишу Shift, а масштабирование - клавишу Ctrl.
А чем этот вариант лучше, предложенного и реализованного ранее? А если одна рука занята чем нить другим?)) (нет, не тем чем вы подумали))
Цитировать
К тому же есть средняя кнопка мыши с колесиком, на которую тоже можно много чего повесить.
Ну во-первых не у всех она есть, а во-вторых там скролл будет только по одной оси :(

Но всё равно спасибо за идеи))

1. Мышой навигацию проще осуществлять, чем стрелками. А вообще, это ИМХО)) Просто один из вариантов))
2. Почему же по одной? По оси X - колесико, по оси Y - колесико + Alt


Название: Re: Light Plot2D
Отправлено: _voron2 от Июнь 22, 2010, 12:04
m_ax,

не знаю , есть это или нет, а что если добавить это:
1. Масштаб графика сделать скроллом (колесиком мыши)
2. Если график не помещается  - то сделать его перемещение "кликом" и удержанием колесика мыши и перемещением самой мыши.

т.е. по аналогии тому как сделан просмотр чертежей в Autocad

Это конечно не панацея, т.к. помимо этого можно желающим предоставить возможность самим настраивать (биндить) клавиши и т.п.  т.е. добавить какой нить элемент интерфейса (GUI) где показывался бы виджет в котором были привязки к клавишам и где можно было бы их изменить на лету при просмотре..
К примеру это  элемент появлялся бы при клике на графике правой клавишей мышки (типа меню) в котором помимо других параметров предоставлялась бы возможность настроить под себя и режимы масштабирования/просмотра/и т.п.)

Мне почему-то кажется что тогдаLightPlot придется переименовывать)))


Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 22, 2010, 12:08
да, вот еще что пришло в голову:
Как вариант можно сделать слайдер, который бы уменьшал/увеличивал масштаб графика. С помощью нажатой левой кнопки мыши можно было бы двигать график, непомещающийся в виджет.
Ну это так :)


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 24, 2010, 17:16
Приветствую)

Всем спасибо за участие)
Выкладываю первую альфа версию :)







Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 25, 2010, 11:26
SVN репозиторий
Цитировать
svn checkout http://light-plot2d.googlecode.com/svn/trunk/ light-plot2d-read-only


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 25, 2010, 11:37
Цитировать
svn checkout http://light-plot2d.googlecode.com/svn/trunk/ light-plot2d-read-only

Sancho_s_rancho
Большое спасибо! Ваша помощь неоценима)

А как мне изменения туда залить?


Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 25, 2010, 12:36
Цитировать
svn checkout http://light-plot2d.googlecode.com/svn/trunk/ light-plot2d-read-only

Sancho_s_rancho
Большое спасибо! Ваша помощь неоценима)

А как мне изменения туда залить?
Для разработчика по протоколу https с указанием имени пользователя и пароля.
Подробности у вас в почте.


Название: Re: Light Plot2D
Отправлено: daimon от Июнь 26, 2010, 15:43
Здравствуйте! Я скачал альфа версию и имею ряд замечаний:
1. нет кнопки добавления новой кривой (только есть удаление)
2. если нет кривых,остается след от легенды - пустой квадрат (наверное нужно убирать в этом случае)
3. когда нет кривых с прогой творятся чудеса - с настройками (выход за предел вектора).
4. это я написал всё мелочи, а так проект замечателен!!!!

И думаю надо переводить на QGLWidget может быстрее пахать будет
Проблема вечная - тормоза при больших данных
 ;D


Название: Re: Light Plot2D
Отправлено: Sancho_s_rancho от Июнь 26, 2010, 18:16
Вы делаете скоропалительные выводы по поводу тормозов. Если они есть. то не значит что надо переписать все на библиотеке ABC. Долгоиграющий код надо найти и изнечтожить.
пи.си. Первое. что сказал профилировщик, так это то. что большое время занимает qrgb и qimage. Для рисования графиков лучше держаться QPixmap и то, что не требует изменений внешнего вида держать в памяти в том же pixmape.
Такие пассажи не оптимальны по производительности

Код:
QImage img(_pixmap.size(), QImage::Format_ARGB32);
                QImage img2 = _pixmap.toImage();
                QRgb clr0 = img2.pixel(0, 0);

                for (int n = 0; n < img.width(); ++n) {
                    for (int m = 0; m < img.height(); ++m) {
                        QRgb clr = img2.pixel(n, m);
                        if (clr == clr0) {
                            clr = qRgba(255, 255, 255, 0);
                        }
                        img.setPixel(n, m, clr);
                    }
                }
Как я понимаю это делаете для для прозрачности. QPixmap сам вроде как умеет делать прозрачность через QPixmap::mask, но подробностей я не знаю/не помню.


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 27, 2010, 13:19
Приветствую)

Выкладываю следующую альфа версию.

К вопросу о некоторых изменениях:
1) Пофиксен баг с масштабированием (сейчас оси никуда не уползают)
2) Класс AbstractPlot2D переименован в Plotter (Всё же он не абстрактный, а вполне самодостаточный.)
3)
Вы делаете скоропалительные выводы по поводу тормозов. Если они есть. то не значит что надо переписать все на библиотеке ABC. Долгоиграющий код надо найти и изнечтожить.
пи.си. Первое. что сказал профилировщик, так это то. что большое время занимает qrgb и qimage. Для рисования графиков лучше держаться QPixmap и то, что не требует изменений внешнего вида держать в памяти в том же pixmape.
Такие пассажи не оптимальны по производительности

Код:
QImage img(_pixmap.size(), QImage::Format_ARGB32);
                QImage img2 = _pixmap.toImage();
                QRgb clr0 = img2.pixel(0, 0);

                for (int n = 0; n < img.width(); ++n) {
                    for (int m = 0; m < img.height(); ++m) {
                        QRgb clr = img2.pixel(n, m);
                        if (clr == clr0) {
                            clr = qRgba(255, 255, 255, 0);
                        }
                        img.setPixel(n, m, clr);
                    }
                }
Как я понимаю это делаете для для прозрачности. QPixmap сам вроде как умеет делать прозрачность через QPixmap::mask, но подробностей я не знаю/не помню.

Да, это было, действительно очень не оптимально и сделано только для того, чтобы добиться прозрачности QLabel и  RotatedLabel после их рендеринга.. Как сделать такое с QPixmap я не знаю( С маской у меня не получилось..  
Сейчас Этот фрагмент выглядит так:
Код
C++ (Qt)
   _img = QImage(_label.size(), QImage::Format_ARGB32);
   _label.render(&_img);
 
   QRgb clr0 = _img.pixel(0, 0);
 
   for (int n = 0; n < _img.width(); ++n) {
       for (int m = 0; m < _img.height(); ++m) {
           QRgb clr = _img.pixel(n, m);
           if (clr == clr0) {
                 _img.setPixel(n, m, 0x00ffffff);
           }
       }
   }
 
Т. е. сейчас буфер является непосредственно QImage вместо QPixmap. Это позволяет избежать дополнительного создания лишних QImage и преобразований QPixmap.toImage(...)

Идея сделать буферизацию для легенды очень хороша, я тож об этом думал. В ближайшее время реализую.
Здравствуйте! Я скачал альфа версию и имею ряд замечаний:
1. нет кнопки добавления новой кривой (только есть удаление)
2. если нет кривых,остается след от легенды - пустой квадрат (наверное нужно убирать в этом случае)
3. когда нет кривых с прогой творятся чудеса - с настройками (выход за предел вектора).
4. это я написал всё мелочи, а так проект замечателен!!!!

И думаю надо переводить на QGLWidget может быстрее пахать будет
Проблема вечная - тормоза при больших данных
 ;D

1) Хорошо, а откуда мне эту кривую потом брать? Предположим есть там эта кнопка "addCurve" и что должно происходить при нажатии на неё?
2) Да есть такое, легко подправить.. К тому же есть в меню есть пункт : show legend
3) Можно подробней где именно в настройках?

Спасибо за участие))
 


Название: Re: Light Plot2D
Отправлено: daimon от Июнь 27, 2010, 15:53
Данные- модель таблицы (я пока только под QTableWidget сижу)
Потом создать кнопку построения графика-при нажатии диалог c такими кнопками добавить и удалить кривую, и следовательно там выбор колонок под х y (из таблицы)

qt commercial 4.5.0 VS2008

код кому надо выложу!
Она только начальная:
очень много проблем с реализацией.

Проблемы:
1. таблица - модель, где хранить данные таблицы (контейнер или постоянно считывать из файла)...для меня самая важная

Я думаю надо начинать с таблицы в таких проетах!!!



Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 27, 2010, 16:46
Данные- модель таблицы (я пока только под QTableWidget сижу)
Потом создать кнопку построения графика-при нажатии диалог c такими кнопками добавить и удалить кривую, и следовательно там выбор колонок под х y (из таблицы)

Я думаю надо начинать с таблицы в таких проетах!!!

Я думаю, мы думаем о разном))

LightPlot2D - это оболочка (интерфейс) для Plotter'а (изначально наз. AbstractPlot2D). Создан для удобства редактирования данных, т.е. тех данных, которые Plotter в себе содержит.
О том где и как брать эти данные (CurveData) это уже решает сам разработчик.
Интерфейс LightPlot2D и без того слишком навязан, и самое главное сохранить баланс между удобством редактирования и навязанным интерфейсом (не переборщить не туды - ни сюды)  ;D

Кстати, у меня не запускается ваша Demo.exe  :(
Не из-за того, что у меня Линь (у меня и хрень тож есть, ворованная, тока тссс))), а  она (Qt, не windows) собрана мингвшным компилятором. Вы бы тогда и dll предоставили в таком случае или сразу исходники..
    


Название: Re: Light Plot2D
Отправлено: daimon от Июнь 27, 2010, 19:00
Я Вас понял, просто меня интерисует именно вопрос по модели
и как Вы составили класс настроек графика?

код


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 27, 2010, 20:42
Я Вас понял, просто меня интерисует именно вопрос по модели
и как Вы составили класс настроек графика?

Что-то я не соображу, что именно имеется ввиду под классом настроек графика?
Есть класс CurveData, который содержит информацию о кривой: цвет, символ, легенда ... ну и сами данные, которые представимы как QVector<QPointF> _data
Если Вам нужно отображать данные из таблицы (у меня просто все данные высчитываются в отдельном потоке и уже автоматически посылаются в plotter, но эт так..)  создаёте соответствующую модель (две колонки "x", "y"), данные в млдели я бы хранил в том же QVector<QPointF> и сделал бы метод, который бы возвращал этот вектор. Затем создаёте объект CurveData:
Код
C++ (Qt)
QVector<QPointF> data = yourModel->vectorOfPoints(); // QVector<PointF>
CurveData cd(data, "curve 1");
lightPlot2D->plotter->setCurveData(cd);
 
   
Всё...
Мы друг друга понимаем?  :)

Да, у меня что-то не собирается Ваш проект.. куча ворнингов и код ошибки 3 (не знаю, что бы это могло значить)


Название: Re: Light Plot2D
Отправлено: daimon от Июнь 27, 2010, 21:05
Я Вас понял, просто меня интерисует именно вопрос по модели
и как Вы составили класс настроек графика?

Что-то я не соображу, что именно имеется ввиду под классом настроек графика?
Есть класс CurveData, который содержит информацию о кривой: цвет, символ, легенда ... ну и сами данные, которые представимы как QVector<QPointF> _data
Если Вам нужно отображать данные из таблицы (у меня просто все данные высчитываются в отдельном потоке и уже автоматически посылаются в plotter, но эт так..)  создаёте соответствующую модель (две колонки "x", "y"), данные в млдели я бы хранил в том же QVector<QPointF> и сделал бы метод, который бы возвращал этот вектор. Затем создаёте объект CurveData:
Код
C++ (Qt)
QVector<QPointF> data = yourModel->vectorOfPoints(); // QVector<PointF>
CurveData cd(data, "curve 1");
lightPlot2D->plotter->setCurveData(cd);
 
 
Всё...
Мы друг друга понимаем?  :)

Да, у меня что-то не собирается Ваш проект.. куча ворнингов и код ошибки 3 (не знаю, что бы это могло значить)
просто генерил про файлы Visual Studio 2008

через некоторое время выложу весь проект под Visual Studio 2008 с qt dll 4.5.0


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 30, 2010, 14:51
Приветствую!

Выкладываю третью альфа версию. Что нового:
1) Для легенды реализована буферизация;
2) Исправлен мелкий недочёт:
2. если нет кривых,остается след от легенды - пустой квадрат (наверное нужно убирать в этом случае)
3) И тому подобные крошки на кровати))

Best regards, m_ax  :)


Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 30, 2010, 15:40
1. Если увеличивать масштаб графика из верхнего левого квадрата сетки - никаких действий не происходит (ни прямоугольника выделения, ни увеличения масштаба фрагмента графика).

2. Игрался с графиком и как-то при развернутом на весь экран окне программы график уменьшился до четверти размера плота и оказался в левом верхнем углу. Вот только воспроизвести это никак не могу))

Qt 4.6.1, Windows 7


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 30, 2010, 15:51
1. Если увеличивать масштаб графика из верхнего левого квадрата сетки - никаких действий не происходит (ни прямоугольника выделения, ни увеличения масштаба фрагмента графика).

2. Игрался с графиком и как-то при развернутом на весь экран окне программы график уменьшился до четверти размера плота и оказался в левом верхнем углу. Вот только воспроизвести это никак не могу))

Qt 4.6.1, Windows 7

Спасибо за баги))

1) подправлено))
2) Интересно) Над тож будет поиграться))



Название: Re: Light Plot2D
Отправлено: Karl-Philipp от Июнь 30, 2010, 16:09
Не знаю, можно ли считать это багом)) но заметил, что при увеличении масштаба не до конца прорисовывается график.


Название: Re: Light Plot2D
Отправлено: m_ax от Июнь 30, 2010, 16:59
terlan
Ваши замечания оч ценны)

Да, такое есть, но это не баг - эт следствие оптимизации. Дело в том, что при масштабировании для отображения кривой точки заносятся в QPolygonF:
Код
C++ (Qt)
if (show) {
           const QVector<QPointF> &data = cd.data();
           QPolygonF polyline;
 
           foreach(QPointF p, data) {
               double x = a11 * p.x() + a12;
               double y = a21 * p.y() + a22;
               if ((p.x() >= _curScaleX.min()) &&
                   (p.x() <= _curScaleX.max()))
                   polyline << QPointF(x, y);
           }
 
и заносятся лишь те точки, которые лежат в пределах minX <= x <= maxX. Так вот, если расстояние между точками окажется больше, возникнет показанный Вами эффект.
Я сейчас подправил это дела, просто раздвинув диапазон: minX-width*0.25 <= x <= 0.25 * width + maxX
Код
C++ (Qt)
if (show) {
           const QVector<QPointF> &data = cd.data();
           QPolygonF polyline;
 
           foreach(QPointF p, data) {
               double x = a11 * p.x() + a12;
               double y = a21 * p.y() + a22;
               if ((p.x() >= _curScaleX.min() - 0.25*_curScaleX.width()) &&
                   (p.x() <= _curScaleX.max() + 0.25*_curScaleX.width()))
                   polyline << QPointF(x, y);
           }
 


Стало лучше, но при дальнейшем увеличении масштаба это всё равно проявляется.. Просто не хочется в лоб все точки запихивать в polyline  :(

Если предложите вариант лучше, буду благодарен))

Спасибо) 


Название: Re: Light Plot2D
Отправлено: _Vitaliy_ от Июнь 30, 2010, 20:25
Отслеживаю Ваше "творение", нужное дело делаете.
Нескромный вопрос: не планируете ли Вы добавить возможность перетаскивания графика? т.е. при наведении на график и при нажатом каком-нибудь модификаторе (пусть к примеру будет Alt) можно было перетаскивать один из графиков функций например по оси ОУ.

З.ы. Один из вариантов применения, когда графиков необходимо выводить более 10-15 при этом у многих графиков свои размерности оси ОУ поэтому удобно их комбинировать для удобства, путем временного перемещения оси ОУ.


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 01, 2010, 11:00
Цитировать
З.ы. Один из вариантов применения, когда графиков необходимо выводить более 10-15 при этом у многих графиков свои размерности оси ОУ поэтому удобно их комбинировать для удобства, путем временного перемещения оси ОУ.

Если я правильно понял, то такая штука уже есть. График перемещается при нажатии на клавиши ←↑→↓.

З.ы. Более 10-15 графиков.. Это для каких практических применений?)) С таким числом кривых вся информативность и полезность, на мой взгляд, быстро улетучится)   


Название: Re: Light Plot2D
Отправлено: kuzulis от Июль 01, 2010, 12:27
Итак, что заметил в версии которую вы приаттачили в посте №54

Собирал в WinXP Pro SP3 + Qt SDK 2009.04 (т.е. Qt 4.5.3)

1. При наведении мышкой на тулбар с кнопочками-шестеренками всплывающая подсказка (хинт)  появляется наполовину, т.е. срезан по горизонтали, и прочитать содержимое хинта невозможно. Проявляется это при первом наведении курсора на кнопку! При дальнейшем наведении - все нормально. Но стоит курсор убрать с кнопки (например на график) - а потом снова на кнопку - то опять подсказка обрезается.

2. Я не понял как после манипуляций с зумом, перемещением и т.п. графика сделать так чтобы вновь просмотреть его первоначальное положение.

3. Хорошо бы сделать так чтобы при перемещении курсора (да и не только при перемещении) - центр курсора пересекали две перпендикулярные тонкие линии (по горизонтали и вертикали) и двигарись вместе с центром курсора. Типа мишени :)

4. Нужно обязательно сделать документацию к исходникам (сделать коментарии в стиле доксигена к примеру), которая включала бы:
 - описание каждого класса и модуля, т.е. зачем он , его функции и т.п.
 - описание каждого метода интерфейса класса
 - примеры использования
 - и т.п.

 А то я открыл исходники - а там пусто! А разбираться что зачем времени нет.

5. При перемещении курсора по графику в некоторых местах графика курсор меняет свой вид с "+" на "руку" . Я не знаю, баг это или нет.
6. Зачем перемещать график бесконечно влево/вправо/вверх/вниз если у него в исходных данных (массивы координат) есть ограничения!!!???
Имхо, нужно сделать возможность перемещения ТОЛЬКО если график не помещается! При этом должны быть пределы перемещения, ограниченными начальными и конечными значениями массивов координат. Имхо.

7. Циферки текущего значения координат (которые изменяются при изменении положения курсора) можно было бы также привязать к "прозрачному виджету" который был бы "привязан" к курсору и перемещался синхронно с ним.  

8. Также  заметил что в тех местах графика где курсор становится "рука" - пропадают цифирки координат!!!

9. При увеличении масштаба графика почему-то линии и точки графика исчезают!! Я понимаю конечно, что ножно больше точек для детализации - НО должна быть экстраполяция!! Имхо.

То же и относится к графикам в виде маркеров - точек (например красный график). Если я его детализирую - то почему то растут расстояния между точками составляющими график! Этого не должно быть.
Нужно сделать так - что как бы я не детализировал график (даже и в нормельном/исходном  его виде без масштаба) - расстояния между точками не должны меняться!

---

Вот, пока все! :)

 



Название: Re: Light Plot2D
Отправлено: _Vitaliy_ от Июль 01, 2010, 12:45
Цитировать
График перемещается при нажатии на клавиши ←↑→↓.
З.ы. Более 10-15 графиков.. Это для каких практических применений?)) С таким числом кривых вся информативность и полезность, на мой взгляд, быстро улетучится)
Правильно Вы заметили ВЕСЬ график функций, а хотелось бы возможность каждого по отдельности графика функции.
Есть такая игра ФлайтЖир (опен сорс симулятор полетов) так вот, в ней есть возможность сохранять в файл параметры полета, т.е. высоту, скорость, перегрузки (3 шт.), ручки (3 шт.), курс, крен, тангаж, и еще куча авиационной ерунды :-)...
Весь полет, порядка 40-50 мин (если частота опроса 4 раза в секунду) может достигать несколько десятков тысяч строк параметров (за один опрос одна строка всех значений параметров). Все это надо выводить на графике в одном окне. Поэтому было бы удобно накладывать график переменной на другой график... Надеюсь пояснил...
З.ы. есть еще ряд тонкостей но я их опускаю за ненадобностью.


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 01, 2010, 15:48
День добрый)

kuzulis
Спасибо за Ваши замечания)

1) Это известный баг) В версии 4.6.2 троли его уже пофиксили. Это возникает из-за того, что на QToolTip повешен Style sheet. Если закомментировать в файле lightplot2d.css следующую штуку:
Код
CSS
QToolTip {
background-color: rgb(200,200,255);
   border-color: darkslategray;
   border-width: 1px;
   border-style: solid;
   padding: 3px;
   font: bold;
   /*border-radius: 3px;*/
   opacity: 200;
}
 
 
то баг пропадёт.

2) Если использовался только лишь зум, то Ctrl +, Ctrl - вернёт всё в изначальное состояние.
Ежели использовалось перемещение графика, то никак))

3) Сделано ( слот void showCross(bool show); )

4) Да, это верно, сейчас работаю над этим. (правда в TeXе, потом в pdf конвертну)

5) Исправлено

6) Думаю Вы правы.. Возьму на заметку))

7) Циферки отображаются на QLabel, а её можно воткнуть куда угодно. Т.е. у plotterа есть метод
Код
C++ (Qt)
void setCurrentPointLabel(QLabel *label);
 
 
в который передаётся указатель на QLabel, в котором и отображается текущие координаты.

8) Подправлено. Исключение составляет, когда курсор попадает на легенду. Не думаю, что при её перетаскивании необходимо отображать текущие координаты.

9) Не совсем согласен. А вот мне нужно отображать экспериментальные данные. Я их отображаю символами (кружочками, крестиками и т.п.) И когда я изменю масштаб,  по вашей логике, я должен добавлять новые точки.. Это мне не нужно((
Или же, что если данные в принципе не ложатся на плавную кривую?
В общем не знаю.. Я делал по идеологии Origina и QtiPlot, если эти проекты Вам известны.

_Vitaliy_
Цитировать
Правильно Вы заметили ВЕСЬ график функций, а хотелось бы возможность каждого по отдельности графика функции.
Есть такая игра ФлайтЖир (опен сорс симулятор полетов) так вот, в ней есть возможность сохранять в файл параметры полета, т.е. высоту, скорость, перегрузки (3 шт.), ручки (3 шт.), курс, крен, тангаж, и еще куча авиационной ерунды :-)...
Весь полет, порядка 40-50 мин (если частота опроса 4 раза в секунду) может достигать несколько десятков тысяч строк параметров (за один опрос одна строка всех значений параметров). Все это надо выводить на графике в одном окне. Поэтому было бы удобно накладывать график переменной на другой график... Надеюсь пояснил...
З.ы. есть еще ряд тонкостей но я их опускаю за ненадобностью.
Тогда появляется необходимость создания нескольких осей OY..
И тогда думать, как привязывать конкретную кривую к конкретной оси. Мой опыт показывает, что такие кренделя обычно не очень информативны и народ старается избегать ситуаций, где требуется отображать более двух масштабов по оси Y.

Спасибо исчо раз за участие. Вечерком выложу исходники..

Ауфидерзэйн)


Название: Re: Light Plot2D
Отправлено: kuzulis от Июль 01, 2010, 16:01
Цитировать
9) Не совсем согласен. А вот мне нужно отображать экспериментальные данные. Я их отображаю символами (кружочками, крестиками и т.п.) И когда я изменю масштаб,  по вашей логике, я должен добавлять новые точки.. Это мне не нужно((
Символы - кружочки и т.п. целесообразнее сделать для различения графиков. Т.е. сам график рисовать точками/сплошной линией (любого цвета) , а уже на этой линии рисовать кружочки и т.п. с каким - то шагом.
Т.е. при увеличении масштаба точки входных данных на графике должны быть соединены линиями (в упрощении - прямыми) .
А у вас сам график состоит из кружочков! Это, имхо, не нужно. Лучше график делать сплошной линией - а уже всякие кружочки и крестики накладывать на график в качестве отличия от других графиков, например если кончились цвета или оператор дальтоник! Имхо.

Цитировать
Или же, что если данные в принципе не ложатся на плавную кривую?
В общем не знаю.. Я делал по идеологии Origina и QtiPlot, если эти проекты Вам известны.
Не, не известны. Зато мне известны MatLab и OrCad. Вот там графики фроде ничо так, строились! :)

Цитировать
Спасибо исчо раз за участие. Вечерком выложу исходники..

Ауфидерзэйн)

Лучше выложите не сюда - а в ваш SVN!


Название: Re: Light Plot2D
Отправлено: lit-uriy от Июль 01, 2010, 18:12
>>9) Не совсем согласен.
я тоже не согласен. т.к. это маркеры данных, а не их интерполяция


Название: Re: Light Plot2D
Отправлено: _Vitaliy_ от Июль 01, 2010, 18:35
m_ax
Цитировать
Тогда появляется необходимость создания нескольких осей OY..
именно это я и имел в своем
Цитировать
З.ы. есть еще ряд тонкостей но я их опускаю за ненадобностью.
Просто видел это у "своих конкурентов" по разработке таких систем.
Если к левой части графика параметра прицепить свою ось У это отлично выглядит, просто поверьте на слово, сам видел, сам пробовал - понравилось. т.е. любой график функции можно двигать только по оси ОУ, если масштабировать по ОХ то все графики масштабируются одновременно это удобно, наглядно и информативно.
З.ы. Просто почему здесь постю, потому-что мне тоже надо будет выводить графики а Вы львиную долю уже реализовали и выложили для пользования, а я сейчас другой "кусок работы" разруливаю, поэтому про свою специфику я Вам и задаю вопросы... 


Название: Re: Light Plot2D
Отправлено: daimon от Июль 08, 2010, 00:07
Маленькое замечание: в настройках кривых, перемещение по кривым меняет настройку кривой только при двойном клике (удобнее одним)


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 08, 2010, 12:21
День добрый)

Выкладываю первый релиз кандидат библиотеки lightplot2d

Для установки набираем:
qmake
make
make install

В виндовс библиотека будет установлена в c:/lightplot2d-1.0.0
В linux в /usr/local/lightplot2d-1.0.0

Если необходимо изменить путь установки, то правим переменную INSTALBASE в файле lightplot2d.pro

После сборки библиотеки заходим в папку example  и собираем пример Plotter

Документация дописывается, скоро выложу.

оф. сайт: http://code.google.com/p/lightplot2d (http://code.google.com/p/lightplot2d)


Название: Re: Light Plot2D
Отправлено: daimon от Июль 20, 2010, 09:57
я думаю нужно отказатся от QPoint и создать свой класс, где будут храниться математические и виджет координаты


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 20, 2010, 10:41
Цитировать
я думаю нужно отказатся от QPoint и создать свой класс, где будут храниться математические и виджет координаты

Мне не совсем ясна мотивация? Что это даст?

Кстати, выложил версию 1.0.1

Документацию всё времени нет дописать  :(


Название: Re: Light Plot2D
Отправлено: daimon от Июль 21, 2010, 22:07
Цитировать
я думаю нужно отказатся от QPoint и создать свой класс, где будут храниться математические и виджет координаты

Мне не совсем ясна мотивация? Что это даст?

Кстати, выложил версию 1.0.1

Документацию всё времени нет дописать  :(

Это даст скорость работы вектора и меньше будет занимать памяти (зачем нужны лишние методы QPoint)


Название: Re: Light Plot2D
Отправлено: daimon от Июль 21, 2010, 22:23
Какие основные изменения в новом релизе?


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 21, 2010, 22:36
Цитировать
Это даст скорость работы вектора и меньше будет занимать памяти (зачем нужны лишние методы QPoint)

На счёт скорости - весьма сомнительно (ну во всяком случае, Вы этот прирост не заметите), а память.. незнаю..
Возможно Вы правы) И как законный вопрос: оно того стоит?

Цитировать
Какие основные изменения в новом релизе?


Смеяться будете))

пара чисто орфографических ошибок)) Ничего существенного)

Кстати, кто-нить пробывал её (библиотеку) собрать? Баги при сборке есть?

 


Название: Re: Light Plot2D
Отправлено: daimon от Июль 21, 2010, 23:26
Пока только пытаюсь скачать с сайта


Название: Re: Light Plot2D
Отправлено: daimon от Июль 21, 2010, 23:27
Пока только пытаюсь скачать с сайта
А на счёт своего класса точки, есть резон - сразу математические координаты и на виджете (может пригодиться)


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 22, 2010, 10:18
Цитировать
А на счёт своего класса точки, есть резон - сразу математические координаты и на виджете (может пригодиться)
Не совсем понял, что есть математические координаты на виджете? И как класс Point это будет реализовывать?


Название: Re: Light Plot2D
Отправлено: daimon от Июль 22, 2010, 12:14
Цитировать
А на счёт своего класса точки, есть резон - сразу математические координаты и на виджете (может пригодиться)
Не совсем понял, что есть математические координаты на виджете? И как класс Point это будет реализовывать?

Просто упрастить, типа
Код
C++ (Qt)
class Point
{
  double math_x;
  double math_y;
  double widget_x;
  double widget_y;
.........
}:
Если нужно узнать математические координаты точки, то не нужно преобразовывать заново просто нужно забить структуру.
Вот простой пример:


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 22, 2010, 13:23
diamon

Ваша идея ясна) Но я, пожалуй, не соглашусь и вот почему:
1) Тот кто создаёт данные (это может быть какая либо левая программа или данные берутся из файла, например) не важно откуда они берутся, откуда нам (ему: тому кто создаёт данные ) знать, какая точка на виджете widget_x(y) будет соответствовать точке относящейся к "чистым" данным math_x(y)?
2) Если у меня изменится геометрия виджета или даже банальный зум, необходимо будет прошерстить весь вектор и пересчитать widget_x(y). Отлов и обработка этого события - эт лишний геморрой и возможный источник ошибок в дальнейшем. А если кривая на графике не одна?
3) Предложенный Вами вариант удваивает память)

В общем, с точки зрения архитектуры, такое решение я бы не принял..

P.S. Ваш проект собрался)) Правда пришлось подправить несколько строчек)

Дополнение:
Да, когда мы меняем зум или ресайзим виджет, пересчёт координат неизбежен в любом случае. Я хочу сказать, что информация о точке на виджете widget_x(y) может оказаться вскоре не актуальной. Например Вы получаете значение widget_x(y), а в следующий момент у Вас изменяется геометрия плотера: вот будет облом то...
Вы меня понимаете?        


Название: Re: Light Plot2D
Отправлено: daimon от Июль 22, 2010, 13:42
Можете описать Вашу концепцую - точки та всё равно надо пересчитывать под виджет?!


Название: Re: Light Plot2D
Отправлено: daimon от Июль 22, 2010, 13:56
Я думаю в Ваш проект ещё нужно добавить сигнал изменения настроек- полезно для settings widget и создать отдельный класс или пространство имен всех настроек графика под settings widget


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 22, 2010, 14:57
Цитировать
Можете описать Вашу концепцую - точки та всё равно надо пересчитывать под виджет?!

Давайте я лучше выложу мануал (правда не до конца дописанный, так что не бить канделябром по голове :))

Цитировать
Я думаю в Ваш проект ещё нужно добавить сигнал изменения настроек- полезно для settings widget и создать отдельный класс или пространство имен всех настроек графика под settings widget
Да, наверное, добавить сигналы будет не лишним.
По поводу создания отдельного класса настроек:

У Вас, как я понял роль его выполняет Settings2DGraph.
Я бы не стал так делать..
Во-первых, он у Вас довольно большой (чего там только нет)). Если мне понадобиться изменить только лишь, ну скажем, double stepX, то получается я должен создать объект класса Settings2DGraph, изменить в нём данное поле и затем записать его в plotter, воспользовавшись функцией:
Код
C++ (Qt)
void set_plot_settings(Settings2DGraph &opt_graph);
 
 
Кстати, при этом не произойдёт высылка сигнала
Код
C++ (Qt)
void modified(bool);
 
поскольку все поля у Вас открыты и их изменение не вызывает сигнала.. (а это не хорошо))

Это не рационально - всё мешать в одну кучу. И делать члены класса открытыми - ну эт тож вчерашний день)

Я надеюсь, всё же допишу в ближайшее время документацию. Руки пока до неё не доходят) 

   


Название: Re: Light Plot2D
Отправлено: lit-uriy от Июль 22, 2010, 15:05
В доке:
"Где достать библиотеку"
СССРовское слово "достать" лучше заменить, например, на "взять"


Название: Re: Light Plot2D
Отправлено: daimon от Июль 22, 2010, 15:13
Хорошо на счёт класса настроек графика Вы правы, а вот пространство имен с константами надо создать, чтобы проще потом было использовать для settings widget


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 22, 2010, 15:19
В доке:
"Где достать библиотеку"
СССРовское слово "достать" лучше заменить, например, на "взять"
:) Спасибо, подправлю)

Хорошо на счёт класса настроек графика Вы правы, а вот пространство имен с константами надо создать, чтобы проще потом было использовать для settings widget
Вы имеете в виду это:
Код
C++ (Qt)
enum Symbol{NoSymbol = 0, Cross, Circle, Square, TriangleUp, TriangleDown, Rhombus};
 
Предлагаете его перенести в сам класс CurveData?
Или что Вы имеете в виду?)



Название: Re: Light Plot2D
Отправлено: daimon от Июль 22, 2010, 15:27
Не просто хочу, чтобы было похоже на пространство  имён Qt там всё есть, чтобы к этому пространству имён
был доступ везде. Если будет класс виджет настроек передавать указатель на весь класс графика? (Ваш проект)


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 22, 2010, 18:27
Цитировать
Не просто хочу, чтобы было похоже на пространство  имён Qt там всё есть, чтобы к этому пространству имён
был доступ везде.
На счёт namespace, я подумаю))

Цитировать
Если будет класс виджет настроек передавать указатель на весь класс графика? (Ваш проект)
Если создать некий класс (аналог Вашего Settings2DGraph) и передавать указатель на объект этого класса в метод класса plotter?
Ну это уже походит больше на костыль, дабы не переписывать уже имеющийся код :) Короче не убедительно..
Чем Вам не нравится реализация и архитектура lightplot2d?
 


Название: Re: Light Plot2D
Отправлено: daimon от Июль 25, 2010, 16:46
Если попытаться ввести потоки при расчётах координат?


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 25, 2010, 20:06
Цитировать
Если попытаться ввести потоки при расчётах координат?
А если попытаться поставить винду на ламповый компьютер?  ??? :)


Название: Re: Light Plot2D
Отправлено: daimon от Июль 25, 2010, 23:21
Цитировать
Если попытаться ввести потоки при расчётах координат?
А если попытаться поставить винду на ламповый компьютер?  ??? :)
Чем больше точек, тем больше тормоза - надо разпоточить


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 26, 2010, 14:59
-Ну и запросы у Вас:
сказала база данных
и повисла))

Цитировать
Чем больше точек, тем больше тормоза - надо разпоточить

Я так понял, под расчётом координат понимается следующее преобразование:

X = a11x + a12;
Y=a21y +  a22;

где x, y - координаты (физические) точки, те которые нам извне приходят;
X,Y - координаты на виджете, ai,j - матрица преобразования.

Так вот, ai,j высчитываются только один раз перед рисованием графика (кривых там, осей и т.п.), а дальше для каждой точки мы просто вычисляем X и Y.

Вы хотите засунуть в отдельный поток, для расчёта X,Y, два умножения и два сложения?  :-\
Ну бог в помощь))

Источник тормозов, (хотя я их не наблюдал) - эт сама отрисовка кривых, методом drawPolyline. Чем больше там точек (в QPolygonF) тем больше времени нужно для отрисовки.

Хотите ускориться: есть два(?) варианта:
1) выкинуть лишние точки, перед отрисовкой (можно в отдельном потоке)  
2) использовать OpenGL
3) использовать пункты 1 и 2 совместно.  


Yours sincerely
m_ax    


Название: Re: Light Plot2D
Отправлено: daimon от Июль 26, 2010, 19:56
Самое простое закинуть в QGLWidget - слышал там paintEvent работает в 2 раза быстрее.
И ещё, если вектор точек будет велик - эти 2 умножения и 2 сложения будут долго делаться (надо разбить вектор на количество потоков и отдельно считать, а потом - в один всунуть).

С ув.


Название: Re: Light Plot2D
Отправлено: Igors от Июль 26, 2010, 20:11
И ещё, если вектор точек будет велик - эти 2 умножения и 2 сложения будут долго делаться (надо разбить вектор на количество потоков и отдельно считать, а потом - в один всунуть).
Разбиение не требуется, можно просто дать каждой нитке считать N точек начиная со своего индекса. Однако, как уже сказал m_ax, при таком малом числе вычислений затея никуда не годится (2 и более процессоров будут медленнее чем 1). А вот рисовать параллельно - было бы интересно проверить. Ну не на экран а в QPixMap или QImage


Название: Re: Light Plot2D
Отправлено: daimon от Июль 26, 2010, 20:43
Тут же проблема как разбить QPixmap для рисования и как создать ту универсальную функцию (поток) для отрисовки информации, а дальше экспериментировать с количеством потоков (для лучшего результата). И ещё подсчёт координат точек логично разпоточить, если вектор будет содержать более 1000 точек (отловить ифом).


Название: Re: Light Plot2D
Отправлено: Igors от Июль 26, 2010, 21:44
Тут же проблема как разбить QPixmap для рисования и как создать ту универсальную функцию (поток) для отрисовки информации, а дальше экспериментировать с количеством потоков (для лучшего результата). И ещё подсчёт координат точек логично разпоточить, если вектор будет содержать более 1000 точек (отловить ифом).
Оптимальное количество ниток давно известно: это кол-во ядер процессора(ов) + 1 (главная нитка). 1000 (1K) точек - это просто несерьезно при таких малых операциях над ними. Возможно положительный эффект начнется с 50-100К точек, да и то с компилятором Intel. Разбивать QPixMap никак не надо, просто пусть каждая нитка рисует свои линии (на том же QPixMap) - интересно что из этого получится


Название: Re: Light Plot2D
Отправлено: daimon от Июль 26, 2010, 22:04
Тут же проблема как разбить QPixmap для рисования и как создать ту универсальную функцию (поток) для отрисовки информации, а дальше экспериментировать с количеством потоков (для лучшего результата). И ещё подсчёт координат точек логично разпоточить, если вектор будет содержать более 1000 точек (отловить ифом).
Оптимальное количество ниток давно известно: это кол-во ядер процессора(ов) + 1 (главная нитка). 1000 (1K) точек - это просто несерьезно при таких малых операциях над ними. Возможно положительный эффект начнется с 50-100К точек, да и то с компилятором Intel. Разбивать QPixMap никак не надо, просто пусть каждая нитка рисует свои линии (на том же QPixMap) - интересно что из этого получится
Тут же  надо не забывать про потокобезопасность - ведь один пикмеп рисуется!


Название: Re: Light Plot2D
Отправлено: Igors от Июль 26, 2010, 22:15
Тут же  надо не забывать про потокобезопасность - ведь один пикмеп рисуется!
Так вот именно - на этом форуме я слышал, что, мол, рисовать на экране - только из главной нитки. Это не вызывает сомнений. А вот рисовать в буфер - пожалуйста из любой нитки. Здесь не знаю. m_ax имеет хорошую возможность проверить


Название: Re: Light Plot2D
Отправлено: daimon от Июль 27, 2010, 22:18
Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).


Название: Re: Light Plot2D
Отправлено: m_ax от Июль 27, 2010, 22:46
Цитировать
Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).

Да не)) Всё проще)
1) Пишете класс вашего потока (унаследованный от QThread)
2) Данный класс, ясен пень, будет лишь эмитеть сигналы, в конкретном случае только один, с аргументом QPixmap (смотрим пример с Мандэльбротом)
3) При событиях, провоцирующих перерисовку вызываем метод start нашего потока, а в конструкторе (plottera) соединяем сигнал окончания выполнения потока с update..
Это так: в общих чертах..

Теперь, реализовав всё это смотрим что получается:
1) Вариант без потоков:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - замирает, пихмап перерисовывается) -> отрисованный пиксмап появляется (GUI оживает) Мы радуемся)))

2) Вариант с потоками:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - НЕ замирает, хотя пиксмап перерисовывается) -> отрисованный пиксмап появляется. Мы радуемся)))

Это вариант с одним ядром)

Ради интереса, такое замутить можно (с потоками), но ответим себе на такой вопрос - правильное ли это будет решение? То бишь оно того стоит?

P.S. Я, наверное из любопытства это сделаю, но пока занимаюсь другим - то что нужно очень срочно написать, и заниматься lightplot2d пока времени особо нет((   

     


Название: Re: Light Plot2D
Отправлено: daimon от Июль 28, 2010, 00:57
Цитировать
Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).

Да не)) Всё проще)
1) Пишете класс вашего потока (унаследованный от QThread)
2) Данный класс, ясен пень, будет лишь эмитеть сигналы, в конкретном случае только один, с аргументом QPixmap (смотрим пример с Мандэльбротом)
3) При событиях, провоцирующих перерисовку вызываем метод start нашего потока, а в конструкторе (plottera) соединяем сигнал окончания выполнения потока с update..
Это так: в общих чертах..

Теперь, реализовав всё это смотрим что получается:
1) Вариант без потоков:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - замирает, пихмап перерисовывается) -> отрисованный пиксмап появляется (GUI оживает) Мы радуемся)))

2) Вариант с потоками:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - НЕ замирает, хотя пиксмап перерисовывается) -> отрисованный пиксмап появляется. Мы радуемся)))

Это вариант с одним ядром)

Ради интереса, такое замутить можно (с потоками), но ответим себе на такой вопрос - правильное ли это будет решение? То бишь оно того стоит?

P.S. Я, наверное из любопытства это сделаю, но пока занимаюсь другим - то что нужно очень срочно написать, и заниматься lightplot2d пока времени особо нет((  

    
Да но один поток должен быть, чтобы не умирал GUI. А за потоки - даже на Nokia 5530 XM заметна разница в быстродействии - один поток и 3 потока сразу в 25%(так была проверка под Qt Symbian)


Название: Re: Light Plot2D
Отправлено: m_ax от Октябрь 19, 2010, 11:56
Выкладываю пример использования lightplot2d. (эдакий форк на  на одну из первых реализаций)
Пример требует предустановленного lightplot2d, разумеется.

С иконками, опять же туговато, так что кто может: буду признателен, если нарисуете)


Название: Re: Light Plot2D
Отправлено: nixman05 от Ноябрь 04, 2010, 23:43
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.


Название: Re: Light Plot2D
Отправлено: m_ax от Ноябрь 05, 2010, 13:21
Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   


Название: Re: Light Plot2D
Отправлено: nixman05 от Ноябрь 05, 2010, 23:38
Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   
Ось WinXP. ошибки на этапе выполнения. Валится при запуске.


Название: Re: Light Plot2D
Отправлено: m_ax от Ноябрь 05, 2010, 23:59
Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   
Ось WinXP. ошибки на этапе выполнения. Валится при запуске.

Подправил.
Перед тем как будете компилировать, убедитесь, что путь указанный в plotter.pro, а именно
Код
C++ (Qt)
LP2D_LIB = c:/lightplot2d-1.0.1/lib
LP2D_INCLUDE = c:/lightplot2d-1.0.1/include
 
действительно указаны правильно.
После компиляции, если всё правильно сделано, должен получиться exe шник, в папке bin. Но, он не запуститься, поскольку линковщик не сможет найти либы от lightplot2d. Не расстраивайтесь: нужно к экзешнику просто кинуть получившуюся dll (lightplot2d1.dll) и запустить Plotter заново.
Всё должно получиться)
 


Название: Re: Light Plot2D
Отправлено: nixman05 от Ноябрь 06, 2010, 00:16
Я так и делал. Попробую с новой версией.


Название: Re: Light Plot2D
Отправлено: m_ax от Ноябрь 06, 2010, 00:22
А ещё хотел спросить:
Цитировать
Сама библиотека скомпилировалась кое-как.
В смысле кое-как? Как вы её компилировали?