Základy programování 4 - C# - 7. cvičení Radek Janoštík Univerzita Palackého v Olomouci 26.3.2018 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 1 / 12
Reakce na úkoly TextBox vlastnost AcceptsReturn Délka řetězce (započítání odřádkování) Vícenásobný dialog při zavření souboru Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 2 / 12
Kreslení ve WPF Canvas Panel umožňuje absolutní pozicování prvků kreslící plátno Počátek souřadnic levý horní roh Osa x souřadnice rostou zleva doprava Osa y souřadnice rostou odshora dolů Shape Nadtřída pro grafické objekty Fill Výplň objektu Stroke Okraj objektu StrokeThickness Tloušt ka okraje Mají základní události (MouseDown, MouseUp, Drag,...) Mají základní vlastnosti (Cursor, ToolTip,...) Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 3 / 12
Základní objekty Rectangle obdélník Height, Width výška šířka RadiusX, RadiusY poloměry zakulacení rohů (elipsa) Pozice až při vkládání do Canvasu Ellipse elipsa Height, Width výška šířka Pozice až při vkládání do Canvasu Polygon polygon Points seznam bodů Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 4 / 12
Přidání objektů do plátna Úsečka Line line = new Line(); line.stroke = Brushes.Red; line.x1 = 50; line.y1 = 50; line.x2 = 150; line.y2 = 50; line.strokethickness = 5; line.tooltip = "Nějaký tooltip"; line.cursor = Cursors.Hand; canvas.children.add(line); Obdélník Rectangle rect = new Rectangle(); rect.height = 100; rect.width = 150; rect.fill = Brushes.Blue; rect.stroke = Brushes.Black; rect.radiusx = 30; rect.radiusy = 15; canvas.children.add(rect); Canvas.SetTop(rect, 300); Canvas.SetLeft(rect, 150); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 5 / 12
Nastavení událostí Přidávání delegátů na událost line.mousedown+= delegate { MessageBox.Show("Bylo kliknuto na úsečku!"); }; Přístup k argumentům události: line.mousedown += delegate (object sender, MouseButtonEventArgs e) { MessageBox.Show($"Kliknuto na {sender.gettype()} na souřadnice: {e.getposition(this).x},{e.getposition(this).y}, tlačítkem: {e.changedbutton}"); if (e.changedbutton==mousebutton.right){ // do something } }; Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 6 / 12
Kreslení textu Třída TextBlock TextBlock tb = new TextBlock(); tb.text = "Toto je nějaký napsaný text"; canvas.children.add(tb); Canvas.SetLeft(tb, 270); Canvas.SetTop(tb, 60); Vlastnosti: FontSize FontFamily Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 7 / 12
Uložení canvasu do PNG try { RenderTargetBitmap rtb = new RenderTargetBitmap((int)canvas.RenderSize.Width, (int)canvas.rendersize.height,96, 96, PixelFormats.Default); rtb.render(canvas); BitmapEncoder encoder = new PngBitmapEncoder(); encoder.frames.add(bitmapframe.create(rtb)); using (var fs = File.OpenWrite(@"E:\7\canvas.png")) { encoder.save(fs); } }catch (Exception ex){ MessageBox.Show("Nepovedlo se uložit soubor"); } Případně ořez na 1 4 : CroppedBitmap crop = new CroppedBitmap(rtb, new Int32Rect(0, 0, (int)canvas.rendersize.width/2,(int)canvas.rendersize.height/2)); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 8 / 12
Úkol (1/3) varianta 1 Vytvořit jednoduchý grafický zobrazovač konceptových svazů Načte soubor.xml soubor s definicí svazu a vykreslí Hasseův diagram Pří najetí myší nad uzlem se změní kurzor myši a po kliku se zobrazí výčet objektů a atributů uzlu Definice svazu viz. web (lat.xml) Pro definici tříd z XML je možné použít Edit Paste Special Paste XML as Classes Možnost uložit obsah canvasu do PNG (volba souboru přes FileSaveDialog) Na cvičení 4 body, doma 3 body Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 9 / 12
Úkol (2/3) varianta 1 Struktura definice svazu (příklad): <?xml version="1.0"?> <ordered_set> <elements> <element id="1"> <x>250</x> <y>20</y> <objects></objects> <attributes>a,b,c</attributes> </element> <element id="2"> <x>130</x> <y>130</y> <objects>1,2,3</objects> <attributes>a,b</attributes> </element> </elements> <orders> <order bigger="1" smaller="2" /> </orders> </ordered_set> Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 10 / 12
Úkol (3/3) varianta 1 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 11 / 12
Úkol varianta 2 Jednoduché malování pro několik základních tvarů (čára, obdélník, polygon, kružnice) Umožnění uložit do PNG Za 4 body kdykoliv Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.2018 12 / 12