Vektorová grafika, zoom a scroll   otázka

VB.NET

Přeji hezky den,

potřeboval bych prosím poradit. Mám aplikaci ve které používám grafickou plochu PictureBoxu na kterou si kreslím. Vše fungovalo bezva až do teď. Přibylo mi víc hodnot v ose x i y a nyní jsem narazil na problém že mi nestačí maximální rozlišení obrazovky k tomu aby vše bylo čitelné.

Až doteď jsem to totiž řešil bez zoomu a scrollu tak, že jsem vycházel z PictureBox.Width a PictureBox.Height, z čehož jsem si spočítal přepočtový koeficient podle počtu požadovaných zobrazených hodnot a bylo to.

Tím že mi teď přibylo cca 3krát tolik hodnot, koeficient je tak malý, že se mi začínají ztrácet detaily.

Potřeboval bych vědět jestli je možné nějak vytvořit grafickou plochu která bude tak 3krát větší v obou osách než co mi dává e.PictureBox.PaintEventArgs a potom jak donutit PictureBox aby se choval jen jako okénko které se bude umět po této grafické ploše pohybovat a přes kliknutí myší na kolečko bude umět v místě kurzoru myši vyvolat zoom, který podle otočení kolečka myši buď grafiku zvětší nebo zmenší.

PictureBox není samozřejmě podmínkou, jen zatím nevím jaká jiná komponenta by byla např. vhodnější a nebo protože jsem amatér, jestli se to běžně řeší třeba úplně jinak.

Poradil by mi prosím někdo jakým způsobem to uchopit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použijte WPF. Budete chrochtat blahem co to všechno umí (zoomování, scrollování, animování, všechno je vektorové, hardwarově akcelerované a všechno co vykreslíte jsou objekty které není třeba neustále překreslovat). WPF lze integrovat do existující Windows Forms aplikace. Na graficky intenzivní věci dokonalé, na běžné aplikace nepoužitelné.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc za tip.

Přiznám se, že jsem už o WPF něco málo zaslechl ale neměl jsem odvahu se do toho ponořit :-) asi blbost, že?

Popravdě teď používám Visual Basic 2005 Express Edition a WinXP

Asi pravěk že? No ale když mi to funguje? Máte ale pravdu, že možná by stálo za hřích po 5ti letech přesedlat :-)

Máte s WPF osobní zkušenost? Jde mi o ten přechod protože nevím jak to v reálu vypadá co si za tím představit a co to žere a obnáší, no a taky kde a jak se to dá pořídit. Free to asi nebude, že?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den, stačí si stáhnout novější verzi vývojového prostředí Visual Basic 2008 Express Edition (WPF doufám podporuje i express verze).

WPF jsem jen tak naťuknul a je to celkem zajímavá věc, budete se potřebovat naučit XAML, což je značkovací jazyk který WPF používá, ale to by neměl být nějáký zásadní problém. Lze nalézt celkem pěkné tutoriály.

Malinko problém ale bude v editoru pro XAML. Ten je sice přímo ve Visual Studiu, ale není moc použitelný. Microsoft vydal ještě jeden produkt, který je pro psaní grafického prostředí v XAML nesrovnatelně lepší (myslím že se jmenuje Microsoft Expression Blend 3) ale ten je placený. Nicméně si můžete vyzkoušet jeho trial verzi a posoudit sám.

Docela jsem zvědav, jaký editor bude v novém Visual Studiu (mám doma staženou RC verzi, ale zatím jsem se k tomu něják nedostal. Nové Visual Studio ale vypadá docela zajímavě.)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ak môžem trošku odbočiť od témy zaujímalo by ma na akej úrovni, prípadne akým spôsobom je vo WPF urobená hardwarová akcelerácia vektorovej grafiky (čiary, texty, výplne) vykreslovanej napr. do pictureboxu ? Za odpoveď vopred Ďakujem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Všechno se vykresluje pomocí DirectX (pro vývojáře je to zcela transparentní). WPF má vlastní ovládací prvky, takže nelze použít ty z Windows Forms (PictureBox). Všechny základní grafické prvky (čáry, polygony, obdélníky, elipsy) jsou objekty, které se po vytvoření přidají do nadřazeného kontejneru (např. Canvas) a odtud jsou kdykoliv přístupné. Rovněž je není potřeba překreslovat jako v GDI+.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na graficky intenzivní věci dokonalé, na běžné aplikace nepoužitelné.

Záleží, co myslíte běžnou aplikací, ale zase a opět - je to váš osobní názor, ale prezentujete ho tady jako jedinou a správnou pravdu a když napíšu, že to tak není, budete se zase hádat a přeformulovávat svoje tvrzení, aby to vypadalo, že máte pravdu. No nic, tak do toho.

WPF se samozřejmě dá použít i na "běžné aplikace" a uděláte v něm jakoukoliv okenní aplikaci, jenom je o něm potřeba něco vědět. Není to jak u WinForms, kde aplikaci nakliká každý (i když špatnou). Některé věci ve WPF, jako třeba velmi pěknou podporu data bindingu, širší a bohatší škálu komponent, můžete velmi dobře upotřebit a grafické vymoženosti používat můžete, ale nemusíte. Já osobně na WPF oceňuji třeba customizovatelnost ListBoxu - lze si nadefinovat vlastní šablonu vzhledu jedné položky, takže položka seznamu může mít nadpis, odstavec textu, obrázek a já nevím co ještě. To ve WinForms uděláte jen velmi obtížně.

To, že WPF mnoho lidí používá špatně a nesprávně, je samozřejmě pravda, naštěstí není to chyba té technologie, ale těch lidí. To je stejné jako s AJAXem a stovkou dalších věcí, které se taky z 90% používají špatně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pak ale vyvstává otázka, zda-li s technologií, kterou 90% lidí používá špatně, není něco v nepořádku. Říct "všichni jste blbci, jen já jsem letadlo a moje technologie je nejlepší a vy to jen nechápete" je poměrně snadné. Technologie jsou dělané pro lidi, ne naopak.

Tím nemám na mysli zrovna WPF, je to spíš taková obecnější úvaha. To, že WPF je krok správným směrem je zřejmé, ale ten návrh až moc podle mého názoru podporuje ultra-cool aplikace, kde je animované snad i psaní textu, a spousta programátorské energie se věnuje cool-vzhledu (který v konečném důsledku znesnadňuje nebo aspoň zpomaluje používání) místo rozumné funkcionality. Krom VS2010, kterou jen navíc testval jen velice zběžně, jsem zatím nenarazil na rozumně použitelnou a nepřeplácanou aplikaci (Expression nástroje jako příklad tohoto tvrzení).

Proč každá aplikace musí mít své vlastní cool rozhraní a skin a vypadat jinak? Vždyť se to snad nemůže líbit ani reálným uživatelům, maximálně to může vypadat pěkně na předváděčce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ti, kteří museli dělat cool rozhraní a vlastní skiny i ve WinFoms aplikacích, je stejně a vždy budou dělat. Ti, kteří kladli ve WinForms důraz na použitelnost a konzistenci uživatelského rozhraní, ten důraz budou klást i ve WPF, takže mnoho škody nenadělají. A ono to tam zas tak jednoduše taky nejde.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pánové,

díky všem za názory. Já sám jsem zatím WPF nepoužil takže vím prd na to abych mohl hodnotit. Tím spíš jsem rád za vaše postřehy. Je pravda že mi to nedalo a po vygooglování pár printscreenů na téma jak vlastně vypadá to WPF :-) na mě koukaly fakt celkem graficky pěkné věci. Berte "graficky pěkné" jako že vycházím ze svého současného stavu tj. VB 2005 :-) v nahaté podobě.

Jestli bych se mohl ještě vrátit k původnímu dotazu, nejde mi ani o to nějak "vytunit" to co mám, ale opravdu jen pohnout s kresbou v grafu který kreslím přes GDI+ a už mu nějak přestává stačit grafická plocha kterou mu nabízí PictureBox.

Vím něco málo o transformacích v GDI+ (rotace,posun) ale právě ještě nedokážu to všechno nějak mentálně pospojovat do celku a použít ve formě optimálního řešení.

Mám jen obavu aby můj případný přechod k VS2008 a WPF nezpůsobil to že budu muset vše přepisovat a tím pádem začínat od "nuly"

Je mezi VS 2005 a WPF nějaká přenositelnost kódu a nebo je to úplně o něčem jiném. Ta moje stávající aplikace pracuje tak, že si stáhne data z MySQL, trochu je "přerovná" a naplní nimi kolekci objektů. Každý člen kolekce vychází z mé vlastní třídy která mimo jiné má i metodu Show. Jakmile je celá kolekce naplněná, vyvolá se refresh a v PictureBoxPaintu se zavolá tato metoda u všech členů které se mají zobrazit. No a problém mi nastává v tom, jak jsem psal výše, že bych potřeboval celou plochu zvětšit a potom mít možnost v ní se pohybovat "kukátkem".

To je celé. Nejsem profi-programátor takže nemám všeobecný přehled o tom co by se na toto mohlo použít. Pokud je to opravdu zralé pro WPF no tak mi potom nezbude nic jiného než se do toho pustit, protože to potřebuju dotáhnout do konce a zbývá mi už jen tento "pidikrůček"...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud se Vám jedná vyloženě o grafy, ve Visual Studiu 2010 (v současné době je možné si stáhnout RC verzi) je už komponenta chart přímo v toolboxu ve windows forms. Bohužel Vám neřeknu nic bližšího, protože jsem ji doposud nepotřeboval. Jen jsem ji přetáhnul na form abych viděl jak to vypadá a na první pohled vypadá použitelně. Ale jak říkám, zatím jsem ji netestoval.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

to: Honza Dědek

díky za tip, jo jde o graf ale bohužel se nejedná o běžný typ.

Co se grafů týče testoval jsem OpenSource komponentu ZedChart a je to opravdu masakr. Opravdu vymazlená věc. Krásné grafy všech možných druhů, jen ne ten co bych potřeboval :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to pozor. Já nikdy nepřeformulovávám nic, pouze obhajuju svoje tvrzení. Že je WPF pro běžné aplikace nepoužitelný je pravda, podívejte se kolik aplikací je v něm napsáno. Kromě Visual Studia 2010 a Expression věcí téměř nic. Kdyby to byla tak dokonalá technologie jak tvrdíte, určitě by byla mnohem více rozšířená. Databinding ve WPF kterým se neustále oháníte je sice celkem dobrá věc, ale rozhodně nepřispěje k celkové nepoužitelnosti. Vezměte si třeba jakýkoliv text renderovaný ve WPF, to je tak nečitelný hnus že spousta vývojářů od toho upustilo už jen kuli tomuto, dočíst se to můžete kdekoliv na Internetu. Sám jsem ve WPF nějaký čas zkoušel dělat a skutečně humus, zlaté Windows Forms. Mohu vám tady vyjmenovat minimálně deset věcí proč je WPF humus a Windows Forms lepší. WPF je dobré leda tak pro (zanedbatelně rozšířený) Silverlight, nebo jako alternativa pro GDI+. Zdá se mi, že se za každou cenu snažíte obhajovat jakoukoliv technologii vyvinutou Microsoftem, byť ta je naprosto k ničemu.

Zkuste udělat anketu:

Jakou technologii používáte k tvorbě uživatelského rozhraní aplikací?

1) Windows Forms

2) Windows Presentation Foundation (WPF)

3) Co je to WPF?

4) Vyvíjím webové aplikace

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používanost a rozšíření WPF nemá nic společného s tím, zda-li je to dobrá technologie nebo ne. Windows Forms jsou tady 10 let, WPF kolem 5 let, WinFormy jsou logickým pokračovatelem MFC, formulářů ve VB6, v Delphi atd., jsou velmi podobné, a celý koncept WinForms je starý kolem 20 let. WPF je věc nová, úplně jiná, navíc není tak jednoduchá a není divu, že když má každý spoustu kódu ve WinForms, ještě ho do WPF neráčil přepsat.

Vyjmenujte schválně těch 10 důvodů, proč je WPF humus. Já vím o dvou - font rendering (na XP strašný, na Vistě a Win7 už se to dá a v .NETu 4 je to daleko lepší) a blbý designer ve VS.

To, že ho nikdo nepoužívá, není argument. BMW taky není špatná značka aut, přestože oproti Fábii není tak používané.

Přijde mi, že jste si v poslední době oblíbil slovíčka humus, hnus a hnůj a jediné věci, které tak netitulujete, jsou ty, které vy sám používáte už několik let. Všechno novější je prostě podle vás na nic, protože to neumíte a nechce se vám to učit. Díky tomu, že to, co neumíte, odsoudíte, pořád vypadáte jako guru, který umí všechno. Což ale při vší úctě nejste.

Neříkám, že všechno nové je dobré, ale tvrdím, že ve WPF se dá napsat použitelná běžná aplikace. Není to tak lehké jako u WinForms, ale díky tomu máte například promakaný databinding, bohatší a customizovatelnější sadu komponent a snadný přechod k aplikaci běžící v browseru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsou mi ale žvásty. Na to že pokud něco odsuzuju tak s tím neumím jste přišel jak? Vše co píšu píšu na základě svých vlastních zkušeností s danou technologií a s přihlédnutím k názoru ostatních. To také neznamená, že s tím musí všichni souhlasit nebo že je to obecné tvrzení (mám snad za každým svým komentářem psát "jedná se o můj názor"?). WPF, Silverlight a WF jsou skutečně politováníhodné hovadiny, které používá a propaguje leda sám Microsoft, nebo lidé s ním nějak spolupracující. Nadruhou stranu třeba WCF je naprosto dokonalá věc která se skutečně povedla. Samozřejmě že neumím všechno, například o webových aplikacích nevím téměř nic a proto se k problematice na toto téma také nevyjadřuji. Ovšem v oblasti desktopových aplikací si troufám říct že toho vím skutečně dost na to, abych mohl některé věci odsuzovat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nezlobte se na mě, ale z některých vašich vět, jako třeba "Sám jsem ve WPF nějaký čas zkoušel dělat a skutečně humus, zlaté Windows Forms." to tak opravdu vypadá a mimochodem není to jen můj názor.

Těch 10 důvodů, které jste sliboval, bude?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Silverlight a WF jsou skutečně politováníhodné hovadiny

například o webových aplikacích nevím téměř nic a proto se k problematice na toto téma také nevyjadřuji.

:-)

Mohu se otázat, jak by to vypadalo, kdyby jste se o webové aplikace zajímal a tedy se k nim i vyjadřoval?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím proč je Silverlight (webová technologie) tučně, ale pokud vás zajímá můj názor na Silverlight: Zbytečnost která se nikdy nerozšíří tak jako Adobe Flash a kdyby Microsoft věnoval svoje úsilí do produktů které za to stojí místo vymýšlení kvazikonkurenčních pitomostí, udělal by lépe.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak to ste mu dal gratulujem :D =D xD

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback