![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Mifody |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 5.8.2008 Репутация: нет Всего: 2 |
Всем доброго времени суток.
Требуется анимировать работу станка, точнее процесс реза делатей лазерным станком с ЧПУ. Если кто знаком с перьевыми плоттерами - принцип работы аналогичный. Есть плита по ней бегает лазерная головка и вырезает детали. Исходные данные - массив координатных параметров объектов (линия, дуга, окружность). Размерность масиива порядка 30 000 элементов (это то, что я уже видел, может быть и больше). Для рисования использую PaintBox в связке с GDI+. Все рисуется на TGPBitmap с использованием трансформации рисования и он потом устанавливается на канву. На данный момент, алгоритм работы с масивом и переменые следующие. переменные - есть счетчики "элемент массива" - cI, "итерация элемена массива" - cCurr, "на сколько итераций разбит элемент массива" - cMax - ну и несколько переменных для хранения приращения координат, что бы их вычислять только один раз алгоритм, работа алгоритма повешена на таймер 1. если cMax = -1 (у меня это означает, что еще не просчитан элемент масиива), вычисляются параметры элемента (количестов участков, на сколько разбивать; приращение координат и прочее), и рисуется первый участок (кусочек линии или дуги) 2. если cMax > 0 и cCurr < cMax, тогда рисуем следующий участок Собственно сама проблема: очень маленькая скорость рисования и дикое потребление ресурсов протца. Есть подозрение, что проблема в мольшом количестве шагов рисования (каждый участок обычно разбивается на более чем 5 участков) Может кто подсказать в какую сторону двигаться? Код оптимизировать (исходники, по необходимости, выложу)? Само рисование переписывать? Или вообще в OpenGL/DirectX уходить? UPD: Перечитал и понял, слишком много буквоф. Если в кратце - мне необходимо анимированно построить след от движения инструмента. Вроде как двигаеш карандаш по бумаге, за ним тянется линия. Это сообщение отредактировал(а) Mifody - 28.9.2011, 14:39 |
|||
|
||||
| Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: нет Всего: 4 |
Определи в каких участках кода процессор загружен больше всего. Также можешь воспользоваться функцией GetTickCount для определения времени выполнения той или иной функции.
Нужно смотреть код и разбираться в чем же причина. --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
| Mifody |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 5.8.2008 Репутация: нет Всего: 2 |
Процессор сильно нагружает прорисовка экрана. Почему так думаю? Потомы, что при выполнении всего кода в памяти и одной прорисовки (отображение только результата) время (без замера, сугубо предвзято) секунд 5-10. При постоянной прорисовке... скажем так, минут через 10 надоело ждать. Понятное дело, что перевыводить всю картинку не есть хорошо, вот и пытаюсь понять в какую сторону двигаться.
Предвидя предложение: "создавай маленькие участки, и их выводи" - у меня могут быть участки с паралельными линиями, допустим, 45 градусов. Эти линии рисуются - первая в начале, вторая в конце. Как тогда поступать? А тут еще приперло определять по какому участку линии щелчек мыши был... Похоже прийдется от TCanvas уходить вообще |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: нет Всего: 3 |
delphix - хорошая бесплатная библиотека, попробуй использовать её. представляет собой маленький directx, всё просто и логически понятно.
Это сообщение отредактировал(а) Proxin - 1.10.2011, 11:22 |
|||
|
||||
| CROTishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 30.7.2009 Репутация: нет Всего: 2 |
2D графика любой сложности не должна тормозить. (даже если вы не напрямую через GDI рисуете, а через канву) Если она тормозит, значит что-то вы делаете неправильно. Единственное, что может действительно тормозить, это если у вас 1000 надписей по экрану "летают"(Вывод текста сильно больше отъедает , чем линии рисовать).
Не берите пример с "GIS ГЕО кибернетика". Берите пример с PMetro. Это сообщение отредактировал(а) CROTishka - 25.10.2011, 11:12 |
|||
|
||||
| Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: нет Всего: 4 |
А пересчёт каждый раз идет при перерисовке? --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
| Mifody |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 5.8.2008 Репутация: нет Всего: 2 |
Пересчета нет как такового. Да уже и исходников нет как таковый, вопрос на данный момент не актуален. Решил конкретно эту задачу с помощью GLScene, там правда косяк вылез с максимальным количеством элементов...
Если развивать конкретно этот вопрос: 1. массив параметров элементов (тип - дуга/линия, координаты, вспомогательные переменные) 2. расчет основоной идет один раз на элемент 3. при последующих обращениях к элементам, вычисления элементарные +/-, и всего штуки две/три (к примеру линию длиной 500 точек разбиваем на участки по 10 точек, и добавляем каждый участок по таймеру для эффекта анимации) вот и все. Практически на 100% уверен что проблема на самом деле именно в обновлении формы (Redraw или как он там правильно называется), если запретить прорисовку экрана, то, по идее намного быстрее будет. Но тогда анимация исчезнет. Если решение этого вопроса актуально для кого, и понадобятся исходники - могу выдернуть сырцы, я в репозитарии вроде как их сохранил |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |