Diskuze: Komponenta pro vykreslení "diagramu"
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
No klasický graphics bych nato nepoužíval. Použil bych D3D. Objekty můžeš uchovávat asi normálně v nějaké kolekci, držet pozici, velikost a nějakou zoom konstantu, která se bude měnit.
Uchovávat celou bitmapu ... Nato .NET nevystačí s op. pamětí, takže bys i vždycky připravil bitmapu, která by reprezentovala to místo, na které se aktuálně díváš a ptal se všech objektů, zda jsou viditelná, když je vynásobíš tou zoom konstantou. Pak bys je jednoduše vykreslil.
Btw 65536(šířka) * 65536(výška) * 32(barva) = ... = 16777216KB = 16384 MB = 1,6GB ... Při tom, že .NET VM povoluje max 2GB.
Ještě jsem zapomněl dodat, že by se mělo jednat o WPF aplikaci.
Uchovával bych to v kolekci a jak píšeš pozice a zoom by se měnily.
Mohlo by to být vizuálně něco podobného jako na tomto obrázku:
http://www.genopro.com/…arriages.png
Jen teoreticky ... Proč být omezený velikostí ? Takové rozlišení stejně nikdy nerozbrazíš, byl bys rád v dnešní době za 4k, což je myslím už tak dost. Jsou to jednoduché objekty, takže by to neměl být problém. Omezil bych se maximálně na zoom a pak si vlastně omezený dost. Kdyžtak se ti můžu poptat, kámoš vykresloval 3D grafy pomocí D3D a zvládal vpohodě osy, které měly interval <-109; 109>. Sice to byly jen jednoduché čáry, ale to je v tvém případě taky.
No ve WPFku začínám, takže nevím čeho je schopno a jestli by to
zvládlo, ale vzhledem k tomu, že to akceleruje grafika, tak by mohlo
Vykresluj jen ten výřez, co potřebuješ vidět, a stačí ti pár MB, je zbytečné zabírat 16 GB paměti, a mít tam uložený celý obrázek.
Tak to by bylo krásný, ještě to mít jako komponentu použitelnou ve WPF aplikaci. To jsem na tom webu nenašel...
Myslím, že není potřeba připravovat si celý obraz, stačil by mi výřez např. 20x20 bodu z té plochy. Jde mi ale o to, že než otestuju viditelnost v té ploše třeba 20000 objektů, tak pokud to budu dělat ve vlastní režii, mám strach, že to bude pomalé, proto se ptám na zkušenosti s něčím podobným...
Spočítat viditelnost 20 000 objektů je naprosto v pohodě.
Díky za rady, zkusil jsem si udělat pár pokusů, skutečně testovat
viditelnost 100000 objektů v kolekci je v pohodě. Dělit není třeba na
menší oblasti.
Uvažoval jsem, že bych použil komponentu odvozenou od ScrollView, které bych
nastavil onu plochu 65536 x 65536 bodu a na ní vykreslil jen ty objekty
diagramu, které jsou viditelné.
Dalo by se to využít takovým způsobem? A nebo uvažuju úplně špatně a je
třeba si na to napsat od píky vlastní UserControl?
Nevím jak funguje ScrollView, ale je zbytečné uchovávat v paměti takové množství dat. Vždyť jsme ti i řekli, kolik by to zabíralo paměti...
Asi jsem to špatně napsal - nepotřebuju uchovávat v paměti vše jako bitmapu. potřebuju jen plochu, kde bude umístěno řádově desítky tisíc objektů, nad výřezem plochy se budu pohybovat a chtěl bych dynamicky zobrazit jen řádově desítky, možná stovky objektů (komponent), které jsou vidět.
Zobrazeno 13 zpráv z 13.