Programutveckling för Tekniska Tillämpningar Arbetsblad 5

Relevanta dokument
Programutveckling för Tekniska Tillämpningar Arbetsblad 4

Manual för ett litet FEM-program i Matlab

Klasser och objekt, referenser Grundkurs i programmering med Python

Övning 1 - Abstrakta datatyper

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Språket Python - Del 2 Grundkurs i programmering med Python

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15

Sätt att skriva ut binärträd

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Föreläsning 5-6 Innehåll

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

Lab5 för prgmedcl04 Grafik

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

Objektorienterad programmering Föreläsning 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grafik i DrRacket AV TOMMY KARLSSON

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Detaljbeskrivning av Player

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Laboration 4: Digitala bilder

Föreläsning 3: Händelsestyrda program och användargränssnitt

Grafiska användargränssnitt i Java

Malmö högskola 2007/2008 Teknik och samhälle

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

TDP005 Projekt: Objektorienterat system

Föreläsning 2, vecka 8: Repetition

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

FactoryCast HMI. Premium & Quantum PLC. Applets

Kapitel 15: Data/Matrix Editor

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Grafiska användargränssnitt i Java

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Laboration 3 GUI-programmering

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programmering (TDDC77)

Datorövning 1. int sgd(int m, int n) { int rest; while ( n!= 0 ) { rest = m % n; m = n; n = rest; return m;

Grundläggande datalogi - Övning 4

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL

Vad är programmering Jonas Lindemann

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

729G04 Programmering och diskret matematik. Föreläsning 7

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

Tentamen i Objektorienterad programmering

Föreläsning 3-4 Innehåll

JAVA Mer om klasser och objektorientering

Windows Forms Winstrand Development

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Övning 6. Ali Tofigh 24 Oktober, 2006

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Laboration 15 Grafiskt användargränssnitt

Lektion 2 Del 1 Kapitel 6

Uppgift 1a (Aktiekurser utan poster)

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

3.5 Visuell programmering

Objektorienterad programmering i Java

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Programmering för språkteknologer I, VT2012. Rum

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Kort om programmering i Python

Konvexa höljet Laboration 6 GruDat, DD1344

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Uppgift 1 (grundläggande konstruktioner)

kl Tentaupplägg

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Övningsuppgifter kapitel 8

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

729G04 Programmering och diskret matematik. Python 3: Loopar

Laborationsinformation

Tentamen i Objektorienterad programmering

Föreläsning 4: Poster

Föreläsning 6: Introduktion av listor

Lektion 2: Sökagenter. Robin Keskisärkkä

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland

Transkript:

Programutveckling för Tekniska Tillämpningar Arbetsblad 5 I detta arbetsblad innehåller följande moment: 1. Skapa metod för att spara indata till fil. 2. Skapa användargränssnitt för noder, linjer, föreskrivna variabler och laster. 3. Lägg till komponent för visualisering av nodvärden. Skapa en metod för att spara indata till fil Vi har sedan tidigare en metod för inläsning av indata från en fil. En användare måste också kunna ändra och sedan spara indata till en fil igen. Skriv en metod, writetofile(), i modellklassen som skriver geometridefinitionen, laster och föreskrivna värden till en fil. Formatet skall vara samma som definierats för metoden, readfromfile(). I pycalfem_utils finns 4 metoder, writesinglefloat(), writesingleint(), writefloatlist() och writeint List() för att skriva värden och listor till fil. Nedan visas ett kort exempel på hur dessa används: outputfile = open(self.filename, 'w') # Skriv koordinater writesingleint(outputfile, self.vertices.shape[0]) for row in self.vertices: writefloatlist(outputfile, row) Meny för indata För att kunna hantera indata i programmet skapas en meny, Indata, med följande innehåll: Menynamn Beskrivning Metod Konstanter Visar fönster med generella parametrar onshowkonstants() för problemet. Noder Visar fönster för redigering av noder. onshownodewindow() Linjer Visar fönster för redigering av linjer. onshowlinewindow() Laster Visar fönster för redigering av laster. onshowloadwindow() Föreskrivna variabler Visar fönster för redigering av föreskrivna variabler. onshowbcwindow()

Fönster för inmatning av koordinater Koordinaterna för geometrin skall hanteras av ett speciellt fönster. Fönstret kan se ut som i följande bild: Hierarkin i wxglade visas i följande figur: Figur 1 Koordinatredigeringsfönster Figur 2 Objekthierarki för koordinatredigeringsfönstret Tabellen nedan visar viktiga egenskaper för olika objekt i fönsterklassen, NodeWindow. Objekt Egenskap Värde nodewindow Class NodeWindow mainpanel Proportion 1 Border 0 wxall Alignment wxexpand verticeslistbox Size 371, 201 Border 5 wxall Alignment wxexpand Style wxlb_single

EVT_LISTBOX onselect hsizevertices Proportion Alignment wxexpand xlabel Border 5 wxleft, wxright, wxbottom Label x (m) ylabel Border 5 wxleft, wxright, wxbottom Label y (m) xvalue Border 5 wxbottom yvalue Border 5 wxbottom hsizerbuttons Proportion 0 Alignment wxalign_center_horizontal addbutton Border 5 wxall EVT_BUTTON onadd removebutton Border 5 wxall EVT_BUTTON onremove changebutton Border 5 wxall EVT_BUTTON onchange closebutton Border 5 wxall EVT_BUTTON onclose För att hantera initieringen av fönstret skapas en metod, _initwindow(), som anropas från klassens initieringsmetod. I metoden definierar vi variabeln, self.vertices, som tilldelas motsvarande variabel i modell klassen. class NodeWindow(wx.Frame): def init (self, *args, **kwds): # begin wxglade: NodeWindow. init # < Bortklippt kod > self.bind(wx.evt_button, self.on, self.changebutton) self.bind(wx.evt_button, self.onclose, self.closebutton) # end wxglade self._initwindow() def _initwindow(self): self.model = None Innan fönstret visas måste listboxen uppdateras med verkliga värden. Skapa en metod, filllistbox(), som fyller listboxen med värden ur self.model. Använda metoden Append() för listbox instansen för att lägga till strängar till listboxen. För att skapa NodeWindow från huvudfönstret läggs följande import direktiv till i MainWindow klassen: from model import * from ReportWindow import * from NodeWindow import *

Fönstret visas sedan från händelsemetoden onshownodewindow(). def onshownodewindow(self, event): # wxglade: MainWindow.<event_handler> self._nodewindow = NodeWindow(self, 1) self._nodewindow.model = self._model self._nodewindow.filllistbox() self._nodewindow.show() Implementera sedan händelsemetoderna, onadd, onremove, onchange och onclose, för knapparna i fönstret. Nyttiga metoder: {listbox}.getselection() {listbox}.clear() {listbox}.append({sträng}) {textkontroll}.getvalue() {textkontroll}.setvalue() append(arr, values, axis) Returnerar index för markerat alternativ i listbox. Rensar allt i listboxen. Lägger till en sträng till listboxen. Returnerar aktuell textsträng i textkontrollen. Tilldelar textkontrollen en sträng. Returnerar en ny matris utökad med values. Axis=0 lägger till rad på slutet, axis=1 lägger till kolumn. a = zeros([20,2], float) newrow = array([1,2],float).reshape(1,2) a = append(a, newrow, 0) delete(arr, index, axis) Lägger till en rad med värdena [1,2] på slutet av a. Returnerar ny matris när raden/kolumnen index har tagits bort Metoderna append och delete är numpy metoder och kräver att man lägger till from numpy import * i början av modulen. Fönster för inmatning av linjetopologi Fönstret för inmatning av linjetopologi implementeras på samma sätt koordinatfönstret med skillnaden att istället för textrutor för x och y anges nu topologin för varje element i 2 textutor och randmarkören i en textruta. Fönster för inmatning av laster Lastinmatningsfönstret skall visa en listbox med alla laster definierade på strukturen. Textrutorna skall innehålla: randmarkör, lastvärde. För plan spänning anges lastvärdet som två komponenter i x och y riktning.

Fönster för inmatning av föreskrivna värden Fönstret för föreskrivna variabler skall innehålla en listbox med alla föreskrivna variabler. Fönstret skall också ha textrutor för definition av randmarkör, föreskrivet värde. Fönstret måste också innehålla kryssrutekontroller för att kunna ange vilka riktningar som skall föreskrivas. Uppritning av nodvariabler och förskjutningar med ElementView Pycalfem_classes innehåller en speciell uppritningsklass, ElementView, som skall användas för att visa förskjutningar och nodvariabler. För att använda klassen importeras den i MainWindow modulen: from model import * from ReportWindow import * from NodeWindow import * from pycalfem_classes import ElementView Visning av fönstret görs sedan i händelsemetoden, onshownodalvalues. def onviewnodalvalues(self, event): # wxglade: MainWindow.<event_handler> self._elementview = ElementView(self, 1) self._elementview.ex = self._model.ex self._elementview.ey = self._model.ey self._elementview.ed = self._model.ed self._elementview.show() Vad som skall visas styrs med ett antal egenskaper: ex ey ed dofspernode magnfac showmesh shownodalvalues showdisplacements x koordinater för element. y koordinater för element. Elementförskjutningar. Antal frihetsgrader per nod. Förstoringsfaktor. True = visar elementnät True = visar nodvariabler True = visar förskjutningar Det går också att komplettera diagrammen med textannoteringar och extra uppritning genom att tilldela ElementView en metod för detta: def onviewnodalvalues(self, event): # wxglade: MainWindow.<event_handler> self._elementview = ElementView(self, 1) self._elementview.ex = self._model.ex self._elementview.ey = self._model.ey self._elementview.ed = self._model.ed self._elementview.drawannotations = self.drawannotations self._elementview.show() self.drawannotation är en metod som kan definieras i MainWindow klassen på följande sätt: def drawannotations(self, view, width, height): view.drawstroketext("hello", 50, 50, 50)

view är den aktuella ElementView instansen. Width och height är bredden och höjden på fönstret. För uppritning av text finns metoden view.drawstroketext som kan användas för att rita vektorbaserad text i fönstret. Syntax för metoden är: def drawstroketext(self, text, x=0.0, y=0.0, fontsize=1.0, color=[0.0, 0.0, 0.0], font=glut_stroke_roman) All uppritning måste ske med hjälp av OpenGL uppritningskommando. Tidigare wxpython baserade ritkommandon fungerar inte i ElementView. Konvertering till skärmkoordinater kan göras med metoden view.worldtoscreen(x, y) vilken returnerar x, y i skärmkoordinater (för ElementView fönstret.) För temperatur och grundvattenströmning implementeras en färgskala för nodvariabelplotten. För plan spänning implemteras en skalpil för förskjutningarna. Redovisning Redovisningen av uppgiften skall innehålla: Programlista Skärmdumpar (Alt+Print Screen)