Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Нужна помощь мирового сообщества! Стоит задача визуализировать большое количество точек средствами RAD Studio C++ builder. Допустим это граф. Вопрос не во взаимном расположении точек, а в используемых методах/компонентах для отрисовки. Главное: каждая точка должна быть не просто пятном, а изображением и обладать интерактивностью (при нажатии всплывает описание/есть возможность перемещать). Первое, что пришло мне на ум: динамическое создание TImage. Отвечает всем заявленным требованиям (разве что быстродействие не самое лучшее, хотя и терпимо), НО... При создании нескольких тысяч объектов (~10 тыс.) вылетает ошибка "canvas does not allow drawing". Кластеризация не подходит, т.к. даже при мелком масштабе должны быть видны все объекты и отвечать условию интерактивности. Больше идей пока нет! А у Вас?! В интернете куча визуализаций больших графов на веб движках. Да и без веб в той же картографии выводят кучу геометок на карту. Как же это сделать на C++ в builder? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 01:08 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
TPaintBox я бы лично использовал. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 01:44 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а дальше? Не накладывать объекты, а рисовать их? Мне уже предложили использовать Canvas->CopyRect, а потом запоминать и отслеживать координаты объектов, но возник вопрос: что будет если несколько объектов попали в одни координаты, а потом я начал сдвигать верхний? Правильно ли я понял, что нижний мы уже закрасили и, следовательно, при каждом смещении придется перерисовать все объекты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 01:50 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000Не накладывать объекты, а рисовать их?Именно так. Если это долгий проект с перспективами, советую разделить программу на части: - слой данный. Завести класс, который отвечает за "точку", координаты, состояния и прочее - слой отображения, который имеет доступ к массиву "точек" и рисует их. Если пытаться сэкономить на коде, используя TImage для каждой точки, то это приведёт к чрезмерному использованию ресурсов, тормозам и прочему, что уже наблюдается. Кроме того, отсутствие привязки данных к системе отображения позволяет легко переходить на другую отрисовку данных. Но даже если это проект "сдать и забыть", я бы посоветовал сделать всё аккуратно. Во-первых, потому что вышеописанное делается довольно быстро. Во-вторых, на финальных моментах отладки и сдачи проекта тормоза и внезапные баги, типа "canvas does not allow drawing", не будут мешать. Блочная архитектура легче в исправлениях и модификации, а так ты заточился на TIMage, а оно не взлетело, и тебе придётся разбирать весь код обратно и прикручивать к чему-то другому... Так что лучше день потерять, потом за пять минут долететь Polaris2000что будет если несколько объектов попали в одни координаты, а потом я начал сдвигать верхний?Ну он сдвинется, остальные останутся на месте. В чём там проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 05:45 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000, классика же, ещё лет 15 назад была и "RAD Studio C++ builder" тут совершенно не при чём гуглим: двойная буферизация, отсечение невидимых объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 08:27 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000Правильно ли я понял, что нижний мы уже закрасили и, следовательно, при каждом смещении придется перерисовать все объекты? Ну, это зависит от того насколько кривые у тебя руки. Обычно для большого числа объектов, отрисовка которых в OnPaint занимает значительное время, делают так: 1) Создают битмап на котором рисуют видимые объекты (можно в фоновом потоке); 2) Этот битмар рисуют на канве в OnPaint. Соответственно при "каждом перемещении" можешь делать так: отрисовать на битмапе все объекты кроме перемещаемого, а в OnPaint рисовать этот битмап и перемещаемый объект поверх. После перемещения возвращаешься к обычной схеме. И таки да, заново отрисовывать все объекты при этом не обязательно: достаточно "битмап-1" + перемещённый объект отрисовать на новом битмапе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 13:18 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000НО... При создании нескольких тысяч объектов (~10 тыс.) вылетает ошибка "canvas does not allow drawing Почти наверняка это ограничение в винде на общее кол-во, э-э-э, забыл, GDI , GDC (~графический контекст) ?.. Оно как раз 10 тыс. У них всегда ограничения в 10 тыс, и на postmessage ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 14:45 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000 В интернете куча визуализаций больших графов на веб движках. Да и без веб в той же картографии выводят кучу геометок на карту. Так там нарабатывалось десятилетиями, а Вы хотите впрыгнуть в поезд на Си++ и с нуля. Готовьтесь к длительности в пару лет. Надо хоть бы библиотеки сторонние поискать, хотя совместимо с билдером ... сомнительно. И я думаю, именно "Кластеризация" и масштабирование нужны, иначе как вам их будут кликать если их больше чем точек на экране? выбирать поиском из списка? Ну и всё что выше советовали ... ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 14:56 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000, Не знаю насколько применимо к твоей задаче, но у себя сделал такую фигню (интерактивную) с помощью 2-х битмапов и GDI+. При наведении курсором на любой район выделяется группа районов к которой он принадлежит одним цветом и сам район другим. Специально уменьшил размер окна до нечитаемого вида, интерактивность сохранилась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 15:08 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 15:21 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000, Там нет никакой сложности. Просто надо всё сделать правильно, аккуратно, и руками. В том числе, интерактивность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 18:26 |
|
||
|
Визуализация большого количества точек
|
|||
|---|---|---|---|
|
#18+
Polaris2000Нужна помощь мирового сообщества! Стоит задача визуализировать большое количество точек средствами RAD Studio C++ builder. Допустим это граф. Вопрос не во взаимном расположении точек, а в используемых методах/компонентах для отрисовки. Главное: каждая точка должна быть не просто пятном, а изображением и обладать интерактивностью (при нажатии всплывает описание/есть возможность перемещать). Первое, что пришло мне на ум: динамическое создание TImage. Отвечает всем заявленным требованиям (разве что быстродействие не самое лучшее, хотя и терпимо), НО... При создании нескольких тысяч объектов (~10 тыс.) вылетает ошибка "canvas does not allow drawing". Кластеризация не подходит, т.к. даже при мелком масштабе должны быть видны все объекты и отвечать условию интерактивности. Больше идей пока нет! А у Вас?! В интернете куча визуализаций больших графов на веб движках. Да и без веб в той же картографии выводят кучу геометок на карту. Как же это сделать на C++ в builder? Данный вопрос можно просто категоризировать. Тебе нужен ГИС-движок? Так и надо спрашивать. Просто в форум часто заходят студенты которые часто делают лабы смысл которых - демонстрация алгоритма. Для них можно советовать RTree/Quad-Tree и всякие алгоритмы раскраски, триангуляции и прочие. Вобщем тебе что? Самому разобраться или готовый продукт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 00:58 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017982]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 132ms |

| 0 / 0 |
