घर
Top.Mail.Ru Yandeks.Metrika
मंच: "मीडिया";
वर्तमान संग्रह: 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]

संभवतया, प्रश्न के लेखक की परतें नहीं हो सकती हैं कि टीलेयर इन ग्राफिक्स 32 TImage32। यह मानचित्र पर कोई भी आदिम हो सकता है जो नीचे चला जाता है / दूसरों के ऊपर जाता है। और अगर उन्हें लगातार लोड करने की आवश्यकता होती है और उनके 200t, तो यह बहुत अधिक उत्पादक है कि उन्हें वस्तुओं के रूप में न रखें।



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

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



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

मुझे बताएं कि नक्शे पर फ़ॉन्ट कैसे बनाएं ताकि वे वेक्टर और स्केलेबल हों। उन। एक फ़ॉन्ट आकार 5.056 सेट के रूप में?



पन्ने: 1 पूरी शाखा

मंच: "मीडिया";
वर्तमान संग्रह: 2003.02.03;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.59 एमबी
समय: 0.036 c
8-5077
MasterVovan
2002-10-18 13:50
2003.02.03
माइक्रोफोन के माध्यम से ध्वनि रिकॉर्ड करें।


1-4887
जूनियर प्रोग्रामर
2003-01-24 19:25
2003.02.03
अगर मैं एक डबल वैरिएबल का उपयोग करता हूं और बिल्कुल इसे राउंड अप करता हूं


3-4781
chsv
2003-01-12 19:06
2003.02.03
अस्थायी निर्देशिका


3-4742
Gero-आदमी
2003-01-14 19:06
2003.02.03
डेल्फी में लेनदेन का उपयोग कैसे करें


14-5226
INEW
2003-01-16 10:39
2003.02.03
Win3k Adv Server के लिए SP2 इंस्टॉल किया गया। फ़ोल्डर में C: WINNT दिखाई दिया





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский