Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Вниз

Как лучше рисовать карту?   Найти похожие ветки 

 
Andrey007   (2002-04-16 17:36) [0]

В принципе, пробовались 2 варианта:
1. На Canvas формы (и обновление по FormPaint),
2. На TImage.Canvas.
Первый вариант неудобен тем, что когда над формой с картой таскаешь другие окна, то карта перерисовывается (а это 1-2 секунды), что при частом переносе окон раздражает. Во втором варианте перерисовка карты происходит только при перемещении, увеличении/уменьшении, добавлении/удалении слоёв. Но почему-то при этом сами эти операции (перемещение, увеличение/уменьшение, добавление/удаление слоёв) происходят медленно. Хотелось бы узнать насчёт рисования с использованием вычислительных ресурсов видеоплаты,- DirectX, OpenGL. Какие нужны компоненты? DelphiX? И если кто пробовал, поделитесь впечатлениями насколько это получается быстрей.


 
Ник   (2002-04-16 21:26) [1]

Есть отличные VCL компоненты для рисования карт -
CartoVCL Pro, но платные.


 
Лёша   (2002-04-17 04:12) [2]

Наверника, все тормоза связаны с перерисовкой/перестройкой самой карты.
Даже, если не так, используй виртуальный битмап. Который всегда будет размером с твою канву (вернее с то, к чему канва принадлежит, допустим PaintBox). И рисуй всё на этом битмапе. Когда процедура прорисовки закончена, просто ляпай нужный прямоугольник на канву. Так, приблизительно и TImage устроен.
И никогда не перерисовуй части карты больше, чем необходимо, тем более всю карту.
Использование виртуального битмапа полезно как раз для твоего случая: чтобы перемещать посторонние окна. А также для того чтобы избегать мерцаний. И если захочешь сделать скролинг карты, просто сдвигаешь битмап сам на себе какой-нибудь быстрой процедурой (хотя можно и CopyRect), а в "освободившейся полоске" битмапа перестраиваешь карту, и в конце ляпаешь весь целиком на канву.

Теперь, исходя из этого, чтобы быстро перерисовывалось на OnPaint и OnResize.

Объявляешь сообщение для PaintBox:
WMPaint(var Message: TWMPaint);
В его теле пишешь:
GetUpdateRect(Self.Handle,UpdateRect,True);
UpdateRect - глобальный, это там где нужна перерисовка.
Теперь, в теле обработчика OnPaint перерисовываем виртуальный битмап только в прямоугольнике UpdateRect.
И далее, например:
Canvas.CopyRect(UpdateRect, MyBitmap.Canvas, UpdateRect);


PS. У меня так работает одновременно File Maping и векторная графика. Тормозов нет.


 
Andrey007   (2002-04-17 15:58) [3]

2Ник: А можно ссылку?

2Лёша: Ну, с перемещением это может и решает вопрос, а вот как быть с увеличением/уменьшением, добавлением/удалением слоёв? Я вот что хотел выяснить. Правильно ли я понимаю, что DirectX и OpenGL используют вычислительные ресурсы видеоплаты, а не процессора. Если да, то их использование должно дать выигрыш в производительности.


 
Ник   (2002-04-17 16:30) [4]

www.cartoworld.com



 
Лёша   (2002-04-18 02:25) [5]


> DirectX и OpenGL используют вычислительные ресурсы видеоплаты,
> а не процессора. Если да, то их использование должно дать
> выигрыш в производительности.


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

Только догадываюсь, что ты подразумеваешь под слоями, но использовать DirectX или OpenGL выйдет себе дороже. Разумеется, если только ты не строишь карту с использованием всех мыслимых примочек 3D и поддержанием всего этого чуда не менее чем в 30 fps.

На своём опыте знаю, что всё быстодействие основывается не на алгоритмах прорисовки (тем более для 2D графики), а в структуре представления и манипуляции графическими примитивами или слоями. А это никакой DirectX не заменит. И упаси бог тебя представлять каждый из слоёв объектом.


 
handra   (2002-04-18 12:59) [6]

www.esri.com - там есть MapObjects 2.0/2.1, можно скачать урезанную Lights-версию


 
v2a   (2002-07-17 16:21) [7]

2 handra: И где ж он там бесплатный?


 
handra   (2002-07-18 11:19) [8]

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


 
ЮЮ   (2002-07-19 03:15) [9]

>Лёша:И упаси бог тебя представлять каждый из слоёв объектом.

В Graphics32 TImage32 может содержать Layers (слои), причем наследники от TLayer самые различные. И всё это отлично смотрелось даже на P133 c S3(2M)
http://g32.org


 
int64   (2002-07-19 07:22) [10]

Надо полагать, слои у автора вопроса, могут быть и не тем, что, TLayer В Graphics32 TImage32. Это может быть любой примитив на карте, который понижается/повышается над другими. А если их надо держать постоянно загруженными и их 200т, то намного производительнее не держпть их в виде объектов.


 
Карелин Артем   (2002-07-22 12:27) [11]

DelphiX - хорошая вещь, однако на некоторых компах надо убирать видеоускорение. 25 FPS на нескольких десятках рисунков вполне держит. Даже со сложными примочками.


 
Ваня   (2002-10-18 10:35) [12]

Посдкажите как отрисовывать шрифты на карте, чтобы они были векторными и масштабируемыми. Т.е. как например шрифт размера 5.056 задать?



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-4846
sdram
2003-01-24 15:34
2003.02.03
Как узнать установленный в


1-4919
Armageddon
2003-01-25 00:35
2003.02.03
Как програмно добавить символ с определенным кодом в Richedit(нап


14-5145
Шишкин Илья
2003-01-17 14:41
2003.02.03
Просьба проверить


6-5100
Mixir
2002-12-07 19:38
2003.02.03
RAS HELP!!!


1-4974
Fill
2003-01-27 08:24
2003.02.03
Уважаемые мастера, помогите, ворос по Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский