• No results found

Visualisering av elektroniska kopplingsscheman

N/A
N/A
Protected

Academic year: 2021

Share "Visualisering av elektroniska kopplingsscheman"

Copied!
49
0
0

Loading.... (view fulltext now)

Full text

(1)

Institutionen f¨

or datavetenskap

Department of Computer and Information Science

Examensarbete

Visualisering av elektroniska

kopplingsscheman

av

Johan Bohlin

LIU-IDA/LITH-EX-G–09/008–SE

2009-09-29

Link¨opings universitet SE-581 83 Link¨oping, Sweden

Link¨opings universitet 581 83 Link¨oping

(2)
(3)

Examensarbete

Visualisering av elektroniska

kopplingsscheman

av

Johan Bohlin

LITH-IDA-EX-2009/EX-G–09/008–SE

2009-09-29

Handledare: Per Nilsson, AnSyn AB Examinator: Peter Fritzson

(4)
(5)

Sammanfattning

AnSyn AB ¨ar ett f¨oretag i Link¨oping som utvecklar programvara f¨or att optimera analog elektronik. I deras program Analog Dimensions finns en visualiseringsmodul som ritar upp de kopplingsscheman som elektronikkon-strukt¨oren arbetar med. Ansyn var inte n¨ojda med den l¨osningen de hade. Den gamla visualiseringsmodulen hade flera begr¨ansningar och i denna rap-port kan du f¨olja arbetet med att ta fram en ny visualiseringsmodul. Arbetet resulterade i en helt ny visualiseringsmodul som saknar de begr¨ansningar som den gamla visualiseringsmodulen hade. Visualiseringsmodulen ¨ar helt skriven i Java och anv¨ander sig av ett grafikbibliotek vid namn Netbeans Visual Library. Det ¨ar ett bibliotek med ¨oppen k¨allkod som bland annat kan anv¨andas f¨or visualisering av vektorgrafik. Rapporten inneh˚aller ¨aven en unders¨okning av programbibliotek f¨or Java som hanterar vektorgrafik. I unders¨okningen studerades totalt 15 olika bibliotek.

(6)
(7)

Inneh˚

all

1 Inledning 1 1.1 Bakgrund . . . 1 1.2 Syfte . . . 1 1.3 Avgr¨ansning . . . 1 1.4 Metod . . . 2 1.4.1 Milstolpar . . . 2 1.5 Kravspecifikation . . . 2 1.5.1 Obligatoriska krav . . . 2 1.5.2 Frivilliga krav . . . 3 2 Analys 5 2.1 N¨atlistan . . . 5 2.2 Koordinatsystemet . . . 7 2.3 Anv¨andarinteraktioner . . . 7 2.4 Externa programbibliotek . . . 7

2.5 Unders¨okta bibliotek . . . 8

2.5.1 Netbeans Visual Library . . . 8

2.5.2 JGraph . . . 9

2.5.3 JFDraw . . . 9

2.5.4 Batik SVG Toolkit . . . 9

2.6 Resultat av unders¨okningen . . . 9

3 Netbeans Visual Library 11 3.1 Widget . . . 11

3.2 Scene . . . 11

3.3 LayerWidget . . . 12

3.4 WidgetAction . . . 12

3.5 LookFeel . . . 13

4 Design och Implementation 15 4.1 Verktyg . . . 15

4.2 Koordinatsystemet i NVL . . . 15

4.3 Den nya visualiseringsmodulen . . . 16

4.4 schematicDisplay2 . . . 16

(8)

4.6 schematicWidget . . . 17 4.6.1 componentWidget . . . 17 4.7 Hantering av h¨andelser . . . 18 4.7.1 Selektionsverktyget . . . 19 4.7.2 Panoreringsverktyget . . . 19 4.7.3 Zoomverktyget . . . 20 4.8 LookFeel . . . 20 4.9 Manual . . . 20 5 Resultat 21 6 Diskussion 25 6.1 Framtida arbete . . . 25 Referenser 27 Bilagor:

A Lista ¨over alla klasser 29

(9)

Figurer

1 Exempel p˚a n¨atelement visualiserad av gamla visualiseringsmod-ulen . . . 6 2 Exempel p˚a tr¨ad med Widgets . . . 12 3 Klasshierarki av widgets . . . 18 4 Exempel p˚a meny som visas n¨ar anv¨andaren h¨ogerklickar p˚a

ett n¨atelement . . . 22 5 Exempel p˚a hur information kan visas bredvid ett n¨atelement 23 6 J¨amf¨orelse av f¨argscheman . . . 24

(10)
(11)

Kapitel 1

Inledning

Detta kapitel behandlar bakgrunden till arbetet, dess omfattning samt hur och varf¨or det genomf¨ordes. Kapitlet avslutas med kravspecifikationen.

1.1

Bakgrund

AnSyn AB utvecklar och marknadsf¨or ett program, Analog Dimensions, som anv¨ands av konstrukt¨orer av analog elektronik. Programmet automa-tiserar mycket av konstrukt¨orens annars manuella och tidskr¨avande jobb. I programmet kan de konstruktioner som konstrukt¨oren arbetar med visualis-eras. S.k. n¨atelement (komponenter, n¨at, pinnar och terminaler) p˚a ritnin-gen ritas upp p˚a sk¨armen, och anv¨andaren har m¨ojlighet zooma, panorera, markera komponenter med mera. AnSyn var inte n¨ojda med den befintli-ga l¨osningen som hade flera begr¨ansningar. De ville ha en ny och b¨attre visualiseringsmodul med b¨attre funktionalitet ¨an den gamla l¨osningen.

1.2

Syfte

Syftet med detta arbete var att utifr˚an en kravspecifikation ta fram en ny visualiseringsmodul som i slut¨andan skulle ers¨atta den gamla visualis-eringsmodulen.

1.3

Avgr¨

ansning

Ett antal avgr¨ansningar gjordes f¨or att begr¨ansa arbetets omfattning. Av alla de ¨onskem˚al som AnSyn hade p˚a den nya visualiseringsmodulen, valdes 14 av kraven ut. 12 av dessa blev obligatoriska krav, och tv˚a frivilliga krav som skulle genomf¨oras i m˚an av tid. En annan avgr¨ansning var att l¨osningen inte skulle inf¨oras i Analog Dimensions.

(12)

1.4

Metod

Det grafiska gr¨ansnittet i Analog Dimensions ¨ar skrivet i Java. Arbetet b¨orjade d¨arf¨or med att unders¨oka m¨ojligheterna att arbeta med vektorgrafik i Java. Java har inbyggda funktioner f¨or att rita upp enkla geometriska fig-urer, s˚asom linjer, cirklar med mera m.h.a. Graphics-klassen[1, s. 230]. Vi-sualiseringsmodulen kr¨aver dock mer ¨an att bara rita upp figurerna. Att implementera alla de funktioner som kravspecifikationen kr¨aver, ist¨allet f¨or att anv¨anda ett mjukvarubibliotek, skulle g¨ora utvecklingstiden l¨angre[2, s. 13]. D¨arf¨or gjordes en unders¨okning f¨or att hitta ett l¨ampligt Java-bibliotek som har mycket av den funktionalitet som ¨ar ¨onskad. I den gamla l¨osningen anv¨andes ett bibliotek som heter JGraph, men AnSyn var inte helt n¨ojda med det. JGraph anv¨andningsomr˚ade ¨ar fr¨amst f¨or grafteoretiska applikationer[4]. AnSyn trodde att det skulle finnas andra l¨ampligare bib-liotek f¨or denna uppgift.

Totalt unders¨oktes 15 olika Java-bibliotek, och i samr˚ad med AnSyn valdes det som ans˚ags l¨ampligast ut. Efter detta tog arbetet med att designa och implementera l¨osningnen vid.

1.4.1

Milstolpar

F¨or att se att utvecklingsarbetet fortl¨opte enligt planeringen sattes tre mil-stolpar upp:

1. Vecka 5: Kunna rita ut ett schema (Motsvarar krav 1)

2. Vecka 7: Kunna zooma och panorera i schemat (Motsvarar

ungef¨ar krav 2 och 3)

3. Vecka 10: Visualisering fungerar enligt kravspecifikation

1.5

Kravspecifikation

Kravspecifikationen bestod av totalt 14 krav.

1.5.1

Obligatoriska krav

1. Kopplingsschemats olika n¨atelement (komponenter, n¨at, terminaler och pinnar) skall visualiseras enligt indata

2. Anv¨andaren skall kunna zooma in, zooma ut, zoom to fit, zooma in p˚a markerat omr˚ade, zooma in p˚a vald komponent, n¨at, pin eller terminal, zooma till en viss area specifierad med koordinater

3. Anv¨andaren skall kunna panorera med musen samt piltangenterna 4. Markera komponenter, n¨at, terminaler, pinnar som ¨ar specifierade i en

(13)

5. Anv¨andaren skall kunna specificera vilka av objekten som ¨ar marker-bara

6. Anv¨andaren skall kunna extrahera koordinaterna f¨or den markerade arean samt nuvarande musposition

7. Olika menyer f¨or olika typer av objekt skall visas n¨ar anv¨andaren h¨ogerklickar p˚a objekten

8. Anv¨andaren skall kunna specificera om n˚agot/n˚agra objekt ej skall ritas upp

9. Anv¨andaren skall kunna f˚a en lista med de objekt som f¨or tillf¨allet ¨ar markerade

10. Texter skall vara vektoriserade, f¨or att undvika fula texter vid in-zoomning

11. Vald area skall kunna exporteras till en bild

12. Till objekten skall man kunna koppla information som visas bredvid komponenten

1.5.2

Frivilliga krav

1. Solder dots1skall visas

2. Anv¨andaren skall kunna ¨andra f¨argschema, mellan svart och vit bak-grund

(14)
(15)

Kapitel 2

Analys

I detta kapitel beskrivs hur kravspecifikationen analyserades, f¨or att kunna g˚a vidare med att l¨osa uppgiften.

2.1

atlistan

F¨orsta kravet p˚a kravspecifikationen var att alla n¨atelement skall visualis-eras enligt indata. Den indata som visualiseringsmodulen ska rita upp ¨ar en s.k. n¨atlista (eng. netlist). En n¨atlista best˚ar av flera olika n¨atelement av fyra olika typer: komponenter, n¨at, pinnar och terminaler. I Analog Di-mensions beskriver n¨atlistan f¨orutom hur de olika n¨atelementen ¨ar anslutna till varandra, ¨aven information som beh¨ovs f¨or att kunna rita upp dem ko-rrekt. Varje n¨atelement har tre olika delar av information som anv¨ands f¨or att visualisera den. F¨orsta delen ¨ar en x- och y-koordinat som beskriver vart elementet skall ritas ut. Andra delen ¨ar en speciellt kodad textstr¨ang som beskriver hur det ska ritas upp. Textstr¨angen best˚ar av ett antal olika geometriska former som tillsammans bildar en figur. Det finns totalt fem olika former som figuren kan best˚a av: rektangel, cirkelb˚age, ellipse, polygon samt polygont˚ag1. Figuren kan ocks˚a inneh˚alla vanlig text (etiketter) som

ska ritas upp. Exempel p˚a textstr¨ang som beskriver en figurs utseende:

label — [@partName] — R0 — 0.5 — -1.40625 — device — 231: label — [@instanceName] — R0 — 1.0 — -0.8125 — instance — 236: rect — 0.0 — -2.25 — 1.25 — -0.5625 — instance — 236:

label — AGND — R270 — 0.5 — -1.9625 — pin — 229: label — AVDD — R270 — 0.5 — -0.85 — pin — 229: label — Vn5 — R0 — 0.9625 — -1.1875 — pin — 229: label — Vn6 — R0 — 0.9625 — -1.3125 — pin — 229: label — Vn8 — R0 — 0.9625 — -1.4375 — pin — 229: label — Vn9 — R0 — 0.9625 — -1.5625 — pin — 229: rect — 0.0 — -2.0 — 1.0 — -0.8125 — device — 231: line — 0.5 — -2.25 — 0.5 — -2.0 — device — 231: line — 0.5 — -0.5625 — 0.5 — -0.8125 — device — 231:

(16)

line — 1.25 — -1.1875 — 1.0 — -1.1875 — device — 231: line — 1.25 — -1.3125 — 1.0 — -1.3125 — device — 231: line — 1.25 — -1.4375 — 1.0 — -1.4375 — device — 231: line — 1.25 — -1.5625 — 1.0 — -1.5625 — device — 231: rect — 0.475 — -2.275 — 0.525 — -2.225 — pin — 229: rect — 0.475 — -0.5875 — 0.525 — -0.5375 — pin — 229: rect — 1.225 — -1.2125 — 1.275 — -1.1625 — pin — 229: rect — 1.225 — -1.3375 — 1.275 — -1.2875 — pin — 229: rect — 1.225 — -1.4625 — 1.275 — -1.4125 — pin — 229: rect — 1.225 — -1.5875 — 1.275 — -1.5375 — pin — 229;

De olika formerna som tillsammans bildar n¨atelement ¨ar separerade med semikolon. En form best˚ar sedan av ett antal olika delar som ¨ar sepa-rerade med tre tecken: — . De olika delarna inneb¨ar olika saker beroende p˚a vilken form det ¨ar. En av formerna i figuren ovan ser ut s˚ah¨ar:

rect — 0.0 — -2.0 — 1.0 — -0.8125 — device — 231:

Den beskriver en rektangel, vars h¨orn har koordinaterna (0.0, -2.0) samt (1.0, -0.8125). Formen ligger i lagret device och den ska ha f¨arg nummer 231.

Hur hela n¨atelementet som beskrivs ovan ser ut n¨ar det visualiseras med den gamla visualiseringsmodulen ses i figur 1.

Figur 1: Exempel p˚a n¨atelement visualiserad av gamla visualiseringsmodulen Tredje delen som beskriver n¨atelementet ¨ar en textstr¨ang som best¨ammer om det skall roteras eller speglas p˚a n˚agot s¨att. Totalt finns ˚atta olika m¨ojliga s¨att f¨or n¨atelementen att rotera och/eller speglas:

• R0 - Rotation 0 grader

• R90 - Rotation 90 grader moturs • R180 - Rotation 180 grader

(17)

• MX - Spegling runt X-axeln • MY - Spegling runt Y-axeln

• MXR90 - Spegling runt X-axeln + Rotation 90 grader moturs • MYR90 - Spegling runt Y-axeln + Rotation 90 grader moturs

2.2

Koordinatsystemet

F¨or att visualisera indatan korrekt m˚aste man ¨aven k¨anna till vilket koordi-natsystem som anv¨ands. I indatan ¨ar alla positioner i kartesiska koordinater, d¨ar X-axeln v¨axer ˚at h¨oger fr˚an origo, och Y-axeln upp˚at. Koordinaterna ¨

ar flyttal med maximalt fyra decimalers noggrannhet. Koordinaten 1.275, -1.5375 befinner sig s˚aledes sydost om origo.

2.3

Anv¨

andarinteraktioner

M˚anga av kraven p˚a kravspecifikationen handlar om olika typer av anv¨andarinteraktioner. Anv¨andaren skulle t.ex. kunna markera objekt, zooma in p˚a markerat omr˚ade med mera. Dessa anv¨andarinteraktioner skulle kun-na ha l¨osts p˚a flera olika s¨att, dock hade Ansyn synpunkter p˚a hur de skulle fungera. De ville att anv¨andarinteraktionerna skulle likna de i ett annat program som anv¨ands tillsammans med Analog Dimensions. Detta f¨or att underl¨atta f¨or anv¨andarna av programmen.

2.4

Externa programbibliotek

Att l¨osa uppgiften utan externa programbibliotek skulle ha varit helt m¨ojligt. Java har inbyggda funktioner f¨or att rita upp de enkla figurer som skall ritas upp, m.h.a. Graphics-klassen[1, s. 230]. Det skulle dock har beh¨ovts mycket arbete f¨or att klara av hela kravspecifikationen. Ist¨allet har ett programbib-liotek anv¨ants som hade mycket av den funktionalitet som ¨onskades inbyggt. Att anv¨anda sig av externa programbibliotek har flera f¨ordelar:[2, s. 13]

• Kortare utvecklingstid • H¨ogre utvecklingskostnad

• Snabbt f˚a fram en fungerande prototyp

• Det externa programbiblioteket kan ibland ge extra funktionalitet som g¨or slutprodukten b¨attre

Det finns dock flera saker att ha i ˚atanke n¨ar externa programbibliotek tas in:[2, s. 14]

(18)

• Tillverkaren kan g˚a in konkurs

• Kvaliteten p˚a komponenten kan vara d˚alig • Risk att tappa kontroll ¨over funktionaliteten

2.5

Unders¨

okta bibliotek

Totals unders¨oktes 15 grafikbibliotek. Nedan presenteras endast de fyra bib-liotek som ans˚ags vara mest intressanta. De grafikbibliotek som unders¨oktes var:

• Netbeans Visual Library[3] • JGraph[4]

• JFDraw[5]

• Batik SVG Toolkit[6] • JGo[7]

• yFiles for Java[8]

• Tom Sawyer Visualization - Java Edition[9] • FreeHEP VectorGraphics[10]

• Graphical Editing Framework[11] • Piccolo2d[12]

• Mica Graphics Framework[13] • Diva[14]

• JHotDraw[15] • JDrawing[16] • JUNG[17]

2.5.1

Netbeans Visual Library

Netbeans Visual Library (i forts¨attningen ben¨amnt NVL) ¨ar ett bibliotek som ¨ar en del av Netbeans Platform som ¨ar ett helt ramverk f¨or att un-derl¨atta programutveckling p˚a Java-platformen[3] [18]. Biblioteket kan dock anv¨andas frist˚aende fr˚an Netbeans Platform. Biblioteket kan visualisera vek-torgrafik, men ¨aven graf-teoretiska problem. Det har st¨od f¨or zoomning, selektion av objekt, animeringar, lager med mera. Det finns mycket doku-mentation om biblioteket samt flera kodexempel som visar hur biblioteket kan anv¨andas. Det ¨ar ¨oppen k¨allkod.

(19)

2.5.2

JGraph

JGraph ¨ar det javabibliotek som anv¨andes i den gamla visualiseringsmod-ulen. Det ¨ar ett bibliotek som ¨ar gjort f¨or visualisering av grafer av olika slag, bland annat processdiagram, fl¨odesscheman, databasvisualisering och elek-troniska kretsar[4]. Biblioteket har m˚anga inbyggda funktioner, bland an-nat zoom-m¨ojligheter, selektion av objekt, gruppering av objekt, m¨ojlighet att skapa olika lager med mera. Det ¨ar ett v¨alanv¨ant bibliotek som ¨ar v¨aldokumenterat. JGraph ¨ar sl¨appt under LGPL-licensen, vilket inneb¨ar att det ¨ar gratis att anv¨anda och att k¨allkoden finns tillg¨angligt.

2.5.3

JFDraw

JFDraw ¨ar inte bara ett bibliotek man kan anv¨anda i sitt egna program, det ¨

ar ¨aven ett frist˚aende program f¨or ritning av vektorgrafik[5]. Biblioteket kan anv¨andas f¨or att visualisera mekanik, elektronik med mera. Det har inbyggt st¨od f¨or flera olika grafiska komponenter, tex rektanglar, parallellogram med mera. Alla komponenter kan grupperas, ligga i olika lager, roteras, speglas och skalas om. Biblioteket har ¨aven zoom-m¨ojligheter samt funktioner f¨or att exportera till flera olika bildformat. Priset, som varierar beroende p˚a antal utecklare samt om k¨allkod ¨onskar, ligger p˚a $299-$1329.

2.5.4

Batik SVG Toolkit

Batik ¨ar ett bibliotek f¨or att skapa och visa SVG-dokument2[6]. F¨or att visualisera den indata som finns, skulle en konvertering till SVG-formatet vara n¨odv¨andig. Biblioteket har flera inbyggda funktioner, t.ex. m¨ojlighet att zooma och panorera. Batik ¨ar sl¨appt under en ¨oppen k¨allkod-licens.

2.6

Resultat av unders¨

okningen

M˚anga av de biblioteket som unders¨oktes har inte de funktioner som efters¨oktes. Av de unders¨okta biblioteket var det endast en handfull som ans˚ags tillr¨ackligt kompetenta. Tillsammans med AnSyn togs beslutet att anv¨anda Netbeans Visual Library. Biblioteket ans˚ags vara det med st¨orst m¨ojligheter. Det fanns m˚anga exempel som visade hur det kunde anv¨andas och det fanns utf¨orlig dokumentation. Det var ¨aven licensierat som ¨oppen k¨allkod.

(20)
(21)

Kapitel 3

Netbeans Visual Library

I detta kapitel beskrivs Netbeans Visual Library (NVL) i stort och vilka huvudkomponenter som biblioteket best˚ar av. NVL ¨ar det omfattande vi-sualiseringbibliotek som best˚ar av ¨over 130 klasser[22]. I NVL ritas det upp ett antal objekt av datatypen Widget[23]. Dessa objekt ¨ar organiserade i en tr¨adstruktur och roten i detta tr¨ad ¨ar ett objekt av datatypen Scene, som ¨ar en underklass till basklassen Widget. Ett exempel p˚a ett tr¨ad med Widget-objekt som ska ritas upp visas i figur 2.

3.1

Widget

Widget¨ar en basklass f¨or allt som ska visualiseras[23]. En Widget har bland annat en x- och y-koordinat, samt en funktion som anropas n¨ar den skall ritas upp. Varje Widget sk¨oter allts˚a sin egen uppritning. Tillsammans med NVL kommer flera underklasser till Widget, t.ex. LabelWidget som anv¨ands f¨or att rita upp text och ImageWidget som anv¨ands f¨or att rita upp en bild. Det g˚ar ¨aven att g¨ora helt egna underklasser till Widget genom att ¨arva fr˚an klassen och implementera funktionen som anropas n¨ar den ska ritas upp.

3.2

Scene

Rot-widgeten i tr¨adstrukturen med alla Widget-objekt ¨ar av datatypen Scene, vilket ¨ar en specialisering av klassen Widget[23]. Den klassen har bland annat funktionalitet f¨or att ¨andra zoomning och s¨atta vilket verktyg som ¨ar aktivt, t.ex. zoom-verktyget eller panoreringsvektyget. Klassen Scene har funktionen getView() som returnerar den grafiska komponent som ri-tas upp i f¨onstret. ¨Aven Scene har en underklass, ObjectScene, vilket ¨ar en specialisering som underl¨attar om man vill g¨ora associationer mellan de widgets som ritas upp och andra objekt. Med ObjectScene finns det bland annat f¨ardiga funktioner f¨or att f˚a fram vilka objekt som ¨ar markerade.

(22)

Figur 2: Exempel p˚a tr¨ad med Widgets

3.3

LayerWidget

NVL har en speciell Widget som fungerar som ett lager, LayerWidget[23]. Standardinst¨allningen ¨ar att lagret ¨ar helt genomskinligt. Om ett lager d¨oljs s˚a kommer de Widget som ligger under i tr¨adstrukturen ¨aven att d¨oljas.

3.4

WidgetAction

En widget vet hur den ska ritas upp, och den vet vart den ska ritas upp, men den vet inte hur den ska agera[23]. En WidgetAction beskriver f¨or en widget hur den ska agera n¨ar anv¨andaren anv¨ander mus och tangentbord f¨or att interagera med den. En widget kan ha noll eller flera WidgetAction. NVL inneh˚aller ett antal WidgetAction, t.ex. m¨ojlighet att flytta en Widget. Det finns ¨aven m¨ojlighet att g¨ora helt egna genom att g¨ora en underklass till WidgetAction.

(23)

3.5

LookFeel

LookFeel ¨ar en abstrakt klass i NVL som kapslar in information om hur vissa saker skall ritas upp[23]. Bland annat s˚a beskriver ett LookFeel-objekt vilken ram en Widget ska ha n¨ar den ¨ar markerad. Det ¨ar Scene-objektet som har ett LookFeel-objekt.

(24)
(25)

Kapitel 4

Design och

Implementation

Utvecklingen av visualiseringsmodulen genomf¨ordes inte med n˚agon speciell utveckingsmetod. Arbetet delades upp i sm˚a iterationer d¨ar varje iteration, som bestod av ett eller flera av kraven, designades, implementerades och tes-tades. En s˚adan uppdelning av arbetet ¨ar vanlig inom agila utvecklingsmetoder[19, s. 291-295, 314-312]. Detta arbetss¨att skiljer sig fr˚an mer traditionell pro-gramvaruutveckling (t.ex. Vattenfallsmetoden) d¨ar man f¨orst designar hela systemet, sedan implementerar och sist testar systemet.

4.1

Verktyg

Det grafiska gr¨ansnittet i Analog Dimensions skrivet i Java, n¨armare best¨amt version 6. Som utvecklingsmilj¨o anv¨andes Netbeans IDE, vilket ¨ar en gratis utvecklingsmilj¨o som kommer fr˚an samma tillverkare som Java, Sun Microsystems[20][1, s. 5]. Netbeans IDE underl¨attar genom bland annat au-tomatisk kodkomplettering, auau-tomatisk generering av kod, debugm¨ojligheter och inbyggt st¨od f¨or versionshanteringssystem[20].

4.2

Koordinatsystemet i NVL

Koordinatsystemet som beskivs i kapitel 2.2 ¨ar inte samma koordinatsystem som NVL anv¨ander internt. I NVL v¨axer X-axeln ˚at h¨oger, men y-axeln v¨axer ned˚at i motsats till indatans koordinatsystem[23]. Koordinaterna i NVL specificeras i heltal, till skillnad fr˚an indatan d¨ar decimaltal med max-imalt fyra siffror till h¨oger om decimaltecknet anv¨ands. F¨or att konvertera koordinatsystemet fr˚an indatans koordinatsystem till det i NVL inverteras f¨orst y-koordinaten. Sedan multipliceras b˚ade y- och x-koordinaterna med

(26)

10000, vilket f˚ar alla decimalsiffror till h¨oger om decimaltecknet att ham-na p˚a v¨anster sida. P˚a detta s¨att f¨orloras ingen noggranhet. Om indatan s¨ager att en koordinat ¨ar (1.275, -1.5375) s˚a skulle den i NVL ha koordi-naten (12750, 15375). I NVL motsvarar en punkt i koordinatsystemet en pixel, vilket inneb¨ar att alla koordinater skulle bli v¨aldigt stora. L¨osningen p˚a detta problem ¨ar att skala om zoomnings-niv˚an. Det som f¨or anv¨andaren presenteras som 100%, ¨ar i sj¨alva verket mycket mindre, cirka 1%. Det som egentligen i NVL ¨ar 100% skulle s˚aledes f¨or anv¨andaren presenteras som cirka 10000%.

4.3

Den nya visualiseringsmodulen

Den nya visualiseringsmodulen best˚ar av ett drygt 30-tal klasser som tillsam-mans best˚ar av cirka 6000 rader kod. De viktigaste klasserna finns beskrivna i denna kapitel. En komplett lista ¨over alla klasser tillsammans med en kort beskrivning av vad klassen g¨or finns i Bilaga A.

4.4

schematicDisplay2

Trots att visualiseringsmodulen best˚ar av ¨over 30 klasser ¨ar det bara en klass som anropas utifr˚an, schematicDisplay2. Klassen fungerar som en fasad, vilket inneb¨ar att den fungerar som ett gr¨anssnitt mellan programmet och visualiseringsmodulen[21, s. 185-193]. Fasaden d¨oljer helt den underliggande strukturen och det faktum att ett helt bibliotek (NVL) anv¨ands. F¨or att anv¨anda nya visualiseringsmodulen beh¨over man allts˚a endast anv¨anda de publika funktioner som schematicDisplay2 erbjuder. Att gr¨anssnitt mellan Analog Dimensions och visualiseringsmodulen endast g˚ar via en klass g¨or att koppling mellan dem ¨ar enkel. Det skulle inte vara sv˚art att byta ut visualis-eringsmodulen tack vare denna enkla koppling. Att ha s˚adan enkel koppling mellan moduler anses vara bra praxis inom programmering[19, s. 79]. Nam-net p˚a den gamla visualiseringsmodulen var schematicDisplay, d¨arav har denna klass f˚att sitt namn schematicDisplay2.

schematicDisplay2 inneh˚aller ett objekt av datatypen ObjectScene som anv¨ands som rot i tr¨adet med Widget. Anledning att ObjectScene valdes ist¨allet f¨or Scene ¨ar att ObjectScene har funktionalitet f¨or att kop-pla ihop en Widget med ett objekt av vilken datatyp som helst. Det ¨ar schematicDisplay2 som tar emot indatan av datatypen netlist, vilket representerar en n¨atlista som inneh˚aller ett antal olika komponenter

(device), n¨at (net), pinnar (pin) och terminaler (terminal).

schematicDisplay2 skapar en Widget f¨or varje n¨atelement och registrerar ¨

aven associationen mellan Widget-objektet och motsvarande n¨ atelement-objektet.

(27)

4.5

Lager

Totalt finns det 11 olika lager som ligger direkt under roten i Widget-tr¨adet. • Bakgrundslager

• Interaktionslager - Alla interaktioner som anv¨andaren g¨or och som visas p˚a sk¨armen, t.ex. om en anv¨andare markerar flera komponenter genom att rita upp en rektangel, s˚a ritas rektangeln upp i detta lager • 4 olika lager f¨or de fyra olika n¨atelement-typerna

• 4 olika lager f¨or texter till de fyra olika n¨atelement-typerna • Ett lager d¨ar anteckningar visas

4.6

schematicWidget

Allt som ritas upp av visualiseringsmodulen ¨arver av klassen

schematicWidget, som i sin tur ¨arver av Widget. schematicWidget in-neh˚aller funktionalitet som beh¨ovs av alla de olika n¨atelement som kan ritas ut, t.ex. rotering och spegling av figuren. schematicWidget har tv˚a underklasser, textWidget och componentWidget. textWidget anv¨ands f¨or all text som ska skrivas ut. componentWidget ¨ar en abstrakt klass f¨or de olika n¨atelementen och har funktionalitet f¨or att avkoda den textstr¨ang som beskriver figuren. componentWidget har fyra underklasser f¨or de fyra olika typerna av n¨atelement: deviceWidget, netWidget, pinWidget och terminalWidget. Hierarkin ¨over alla Widget-klasser visas i figur 3.

4.6.1

componentWidget

componentWidget¨ar en abstrakt klass som ¨arver fr˚an schematicWidget och som inneh˚aller funktionalitet som alla de olika n¨atelementen beh¨over f¨or att kunna visualiseras. Klassen har funktioner f¨or att avkoda den textstr¨ang (mer om indatan i kapitel 2.1) som beskriver figuren. Avkodningen sker genom att textstr¨angen som beskriver ett antal olika former delas upp till ett antal nya str¨angar d¨ar varje str¨ang beskriver en form. Varje form avkodas sedan och ett objekt som beskriver formen skapas. Om textstr¨angen beskriv-er en ellipse skapas ett Ellipse-objekt, o.s.v. Det finns totalt fem olika klasser som beskriver olika former: Rect, Line, Ellipse, Arc och Polygon. Dessa fem ¨arver fr˚an en klass, Shape. De h¨ar klasserna har tv˚a uppgifter. Dels att beskriva sj¨alva formen, t.ex. bredd, h¨ojd, x-, och y-v¨arde f¨or en rektangel, och dels att rita ut formen.

Alla objekt som beskriver figurens alla former sparas sedan i en array. N¨ar ett objekt av typen componentWidget f˚ar i uppdrag att rita upp sig sj¨alv, itererar den igenom sin array med former, och ber varje form att rita ut sig sj¨alv.

(28)

Figur 3: Klasshierarki av widgets

4.7

Hantering av h¨

andelser

Visualiseringsmodulen klarar av ett antal olika h¨andelser som anv¨andaren kan generera genom att anv¨anda tangentbordet och musen p˚a olika s¨att. Vis-sa av h¨andelserna reagerar visualiseringsmodulen alltid p˚a, t.ex. om anv¨andaren trycker p˚a plus-tangenten p˚a tangentbordet sker en inzoomning. Andra h¨andelser reagerar visualiseringsmodulen p˚a n¨ar ett visst verktyg ¨ar aktivt. Totalt finns tre olika verktyg som anv¨andaren kan anv¨anda sig av.

• Selektionsverktyget • Panoreringsverktyget • Zoomningsverktyget

Det finns fyra olika WidgetAction som ¨ar globala, d.v.s. de reagerar p˚a anv¨andargenererade h¨andelser oavsett vilket av verktygen som ¨ar aktivt. Det ¨ar endast roten i Widget-tr¨adet, d.v.s. ObjectScene-objektet som har dessa WidgetAction.

mouseZoomAction

Om anv¨andaren h˚aller Ctrl-tangenten kan hon/han ¨andra zoomning med hjulet p˚a musen. Det ¨ar mouseZoomAction som hanterar denna h¨andelse.

(29)

wheelPanAction

Om anv¨andaren snurrar p˚a mushjulet utan att h˚alla nere Ctrl-tangenten s˚a panoreras bilden i sidled. F¨or att panorera i h¨ojdled h˚allet anv¨andaren Shift-tangenten nedtryckt. Allt detta hanteras av wheelPanAction. keyboardZoomAction

keyboardZoomAction reagerar om anv¨andaren trycker p˚a n˚agon av plus-eller minustangenterna och ¨andrar zoomningen.

updateCurrentMousePositionAction

updateCurrentMousePositionAction¨ar en WidgetAction som alltid ¨ar ak-tiv men som anv¨andaren inte m¨arker av alls. Den reagerar s˚a fort anv¨andaren flyttar mark¨oren och sparar muspositionen i en variabel. Denna variabel kan sedan presenteras f¨or anv¨andaren som d˚a ser vilken koordinat muspekaren befinner sig p˚a.

4.7.1

Selektionsverktyget

Detta ¨ar ett verktyg som anv¨andaren v¨aljer n¨ar han/hon vill markera ett eller flera n¨atelement. F¨or att visualiseringsmodulen ska reagera n¨ar anv¨andaren klickar finns tv˚a Widgetaction som aktiveras n¨ar verktyget markeras som aktivt.

selectAction

Alla Widget som ska vara selektionsbara f˚ar denna WidgetAction. Den-na WidgetAction k¨anner av om anv¨andaren klickar p˚a ett n¨atelement och ¨

andrar dess status till selekterad. Detta p˚averkar hur n¨atelementet ritas upp, beroende p˚a vilken typ av n¨atelement det ¨ar. Komponenter, pinnar och terminaler f˚ar en ram runt sig, medans n¨at ritas upp i en annan f¨arg. selectAction har ¨aven st¨od f¨or att markera flera Widget genom att anv¨andaren h˚aller nere Shift-tangenten.

rectangularSelectAction

Denna WidgetAction ¨ar kopplad till roten i Widget-tr¨adet, d.v.s. ObjectScene-objektet. Den m¨ojligg¨or f¨or anv¨andaren att markera flera Widget genom att klicka med musen, dra ut en rektangel, och sedan sl¨appa musknappen. Alla Widget-objekt inom rektangeln s¨atts som markerade.

4.7.2

Panoreringsverktyget

N¨ar detta verktyg ¨ar valt kan anv¨andaren panorera genom att klicka med

(30)

mousePanAction som sk¨oter denna h¨andelse. mousePanAction ¨ar kopplad till roten i Widget-tr¨adet.

4.7.3

Zoomverktyget

Anv¨andaren kan zooma n¨ar som helst, tack vare de globala WidgetAction som sk¨oter zoomning med hj¨alp av tangentbordet och musen. Men det finns ¨aven ett verktyg som kan anv¨andas f¨or att zooma. Den WidgetAction som tar hand om det heter rectangularSelectActionTwoClicks. Denna zoomning fungerar genom att anv¨andaren f¨orst klickar en g˚ang och sl¨apper sedan knappen, flyttar musmark¨oren och klickar sedan igen. Visualiser-ingsmodulen zoomar sedan in till den rektangel som anv¨andaren ritade upp. rectangularSelectActionTwoClicks¨ar kopplad till roten i Widget-tr¨adet.

4.8

LookFeel

Till klassen LookFeel har en abstrakt underklass schematicLookFeel ska-pats som beskriver ytterligare hur n¨atelement ska visualiseras. Den klassen beskriver ¨aven vilken f¨arg som en viss typ av Widget ska ha, beroende p˚a vilket tillst˚and den ¨ar i (t. ex. markerad). Tv˚a konkreta klasser som ¨arver fr˚an schematicLookFeel, darkLookFeel och lightLookFeel beskriver de tv˚a olika f¨argscheman som finns. Ett med vit bakgrund, och ett med svart bakgrund.

4.9

Manual

En enkel handledning finns tillg¨anglig som beskriver hur visualiseringsmod-ulen ska intregreras i Analog Dimension. Den ger en introduktion till hur den nya visualieringsmodulen fungerar och presenterar kortfattat de publika funktioner som finns tillg¨angliga f¨or programmeraren. I manualen finns ¨aven n˚agra kodexempel som visar hur de olika funktionerna anv¨ands. Manualen finns bifogad till denna rapport, se bilaga B.

(31)

Kapitel 5

Resultat

Nedan presenteras resultatet utifr˚an de totalt 14 kraven fr˚an kravspecifika-tionen.

Kopplingsschemats olika n¨atelement (komponenter, n¨at,

termi-naler och pinnar) skall visualiseras enligt indata

Fungerar enligt kravspecifikation. Alla typer av former, dvs. rektangel, cirkelb˚age, ellipse, polygon och polygont˚ag visualiseras korrekt. ¨Aven n¨atelementens etiketter visualiseras enligt indatan.

Anv¨andaren skall kunna zooma in, zooma ut, zoom to fit, zooma

in p˚a markerat omr˚ade, zooma in p˚a vald komponent, n¨at, pin

eller terminal, zooma till en viss area specifierad med koordinater Fungerar enligt kravspecifikationen. Anv¨andaren kan zooma in med musen och med tangentbordet. Anv¨andaren kan ocks˚a zooma in p˚a markerat omr˚ade. Visualiseringsmodulen har ¨aven funktioner f¨or att zooma in p˚a ett visst n¨atelement eller en viss koordinat.

Anv¨andaren skall kunna panorera med musen samt piltangenterna

Fungerar enligt kravspecifikationen.

Markera komponenter, n¨at, terminaler, pinnar som ¨ar specifierade i en lista

Fungerar enligt kravspecifikationen.

Anv¨andaren skall kunna specificera vilka av objekten som ¨ar

markerbara

(32)

Anv¨andaren skall kunna extrahera koordinaterna f¨or den mark-erade arean samt nuvarande musposition

Fungerar enligt kravspecifikationen. Visualiseringsmodulen har en funktion f¨or att ta reda p˚a vilket koordinat som mark¨oren befinner sig p˚a. Det g˚ar ocks˚a att f˚a en notifiering fr˚an modulen n¨ar koordinaten ¨andras (d.v.s n¨ar anv¨andaren flyttar mark¨oren).

Olika menyer f¨or olika typer av objekt skall visas n¨ar anv¨andaren h¨ogerklickar p˚a objekten

Fungerar enligt kravspecifikation. Se figur 4 f¨or exempel.

Figur 4: Exempel p˚a meny som visas n¨ar anv¨andaren h¨ogerklickar p˚a ett n¨atelement

Anv¨andaren skall kunna specificera om n˚agot/n˚agra objekt ej

skall ritas upp

Fungerar enligt kravspecifikation.

Anv¨andaren skall kunna f˚a en lista med de objekt som f¨or tillf¨allet ¨

ar markerade

(33)

Texter skall vara vektoriserade, f¨or att undvika fula texter vid inzoomning

Fungerar enligt kravspecifikation.

Vald area skall kunna exporteras till en bild

Det g˚ar inte att v¨alja en viss rektangel och sedan f˚a denna area exporterad till en bild, d¨aremot kan man exportera den synliga arean. Anv¨andaren m˚aste allts˚a f¨orst zooma in p˚a den area som hon/han vill ha exporterad, och sedan exportera f¨or att uppn˚a samma resultat som kravspecifikationen. Till objekten skall man kunna koppla information som visas bred-vid komponenten

Fungerar enligt kravspecifikation. Visualiseringsmodulen har funktioner f¨or

att visa b˚ade vanlig text, men ¨aven en JComponent bredvid ett

n¨atelement. Texten/JComponent kan placeras p˚a nio olika positioner rel-ativt till n¨atelementet: Nord, nord¨ost, ¨ost, sydost, s¨oder, sydv¨ast, v¨ast, nordv¨ast samt centrerat ¨over n¨atelementet. Ett exempel p˚a hur man kan visualisera extra information bredvid en komponent visas i figur 5.

Figur 5: Exempel p˚a hur information kan visas bredvid ett n¨atelement

Solder dots skall visas (frivilligt krav) Fungerar enligt kravspecifikation.

(34)

Anv¨andaren skall kunna ¨andra f¨argschema, mellan svart och vit bakgrund (frivilligt krav)

Fungerar enligt kravspecifikation. Hur det ljusa respektive de m¨orka f¨argschemat ser ur visas i figur 6.

(35)

Kapitel 6

Diskussion

Syftet med detta arbete var att ta fram en ny visualiseringsmodul enligt en kravspecifikation, och det ¨ar nu genomf¨ort. Den nya visualiseringsmodulen har fler funktioner ¨an den gamla, och saknar framf¨or allt de begr¨ansningar som fanns. En viktig framg˚angsfaktor i detta arbete var valet av grafik-bibliotek. NVL hade m˚anga inbyggda funktioner som underl¨attade utveck-lingen.

N˚agot som man skulle kunna g¨ora f¨or att ytterligare f¨orb¨attra ¨ar att arbeta p˚a att f˚a visualiseringsmodulen snabbare. Modulen ¨ar inte j¨attesnabb n¨ar riktigt stora scheman ritas ut. Det man kan g¨ora ¨ar att snabba upp sj¨alva uppritningen av figurerna. Vid varje omritning, t.ex. n¨ar en anv¨andare zoomar in, ritas en figur om genom att alla former som den best˚ar ritas upp en och en. F¨or att snabba upp skulle man kunna rita upp figuren p˚a en bild, och sedan rita om hela den bilden ist¨allet f¨or att rita upp flera former. De scheman som man arbetar med i Analog Dimensions ¨ar dock uteslutande s˚a pass sm˚a att visualiseringsmodulen fungerar utan n˚agra problem.

Koden skulle ocks˚a p˚a vissa st¨allen kunna f¨orb¨attras. Klassen schematicDisplay2 inneh˚aller n¨astan 2000 rader kod, vilket man kan tycka ¨

ar lite v¨al mycket. I klassen finns bland annat funktioner som tar n¨ atelement-objekt och skapar motsvarande Widget-atelement-objekt. Dessa funktioner skulle kun-na ligga i separata klasser d¨ar man anv¨ander n˚agot l¨ampligt designm¨onster som finns f¨or skapande av nya objekt.

6.1

Framtida arbete

Idag kan visualiseringsmodulen enbart visa kopplingsscheman gjorda i andra program, som importeras i Analog Dimensions. En ut¨okning som skulle vara m¨ojlig ¨ar att inf¨ora editeringsm¨ojligheter, d¨ar konstrukt¨oren direkt i Analog Dimensions kan designa de kretsar som hon/han arbetar med.

(36)
(37)

Referenser

[1] Skansholm, Jan (2002). Java direkt med Swing. Studentlitteratur. Tredje upplagan.

[2] Josefsson, Margareta & Oskarsson, ¨Osten (1999). Programvarukompo-nenter i praktiken - att k¨opa tid och prestera mer. Sveriges Verkstadsin-dustrier.

[3] Netbeans Visual Library. http://graph.netbeans.org/. 2009-08-11. [4] JGraph. http://www.jgraph.com. 2009-07-22.

[5] JFDraw. http://www.jfimagine.com. 2009-07-22.

[6] Batik SVG Toolkit. http://xmlgraphics.apache.org/batik/. 2009-07-22.

[7] JGo. http://www.nwoods.com/go/jgo.htm 2009-07-22.

[8] yFiles for Java. http://www.yworks.com/en/products/yfiles/

about.htm. 2009-07-22.

[9] Tom Sawyer Visualization, Java Edition. http://www.tomsawyer.com/ products/visualization/java/index.php. 2009-07-22.

[10] FreeHEP VectorGraphics. http://java.freehep.org/

vectorgraphics/. 2009-08-11.

[11] Eclipse Graphical Editing Framework. http://www.eclipse.org/ gef/. 2009-07-22.

[12] Piccolo2D. http://www.piccolo2d.org/. 2009-07-22.

[13] Mica Graphics Framework. http://www.swfm.com/mica/. 2009-08-11. [14] Diva. http://embedded.eecs.berkeley.edu/diva/demo/.

2009-08-11.

[15] JHotDraw. http://www.jhotdraw.org/. 2009-08-11.

(38)

[17] JUNG - Java Universal Network/Graph Framework. http://jung. sourceforge.net/. 2009-08-11.

[18] Netbeans Platform. http://platform.netbeans.org/. 2009-08-11. [19] Bell, Douglas (2005). Software Engineering for Students.

Addison-Wesley. Fourth edition.

[20] Netbeans IDE - Features. http://www.netbeans.org/. 2009-08-21. [21] Erich Gamma et al. (1995). Design Patterns - Elements of Resuable

Object-Oriented Software. Addison-Wesley.

[22] Netbeans Visual Library API. http://bits.nbextras.org/dev/

javadoc/org-netbeans-api-visual/. 2009-08-31.

[23] Netbeans Visual Library 2.0 Documentation. http://bits.netbeans. org/dev/javadoc/org-netbeans-api-visual/org/netbeans/api/ visual/widget/doc-files/documentation.html. 2009-08-31.

(39)

Bilaga A

Lista ¨

over alla klasser

Nedan f¨oljer en lista ¨over samtliga klasser samt en kort beskrivning av vad klassen g¨or.

Arc

Representerar en cirkelb˚age. ¨Arver av Shape. componentWidget

Abstrakt klass som ¨arver av schematicWidget. Representerar ett n¨atelement. Har fyra underklasser f¨or de fyra olika typerna av n¨atelement.

darkLookFeel

Definierar en LookFeel med svart bakgrund. ¨Arver fr˚an schematicLookFeel. deviceWidget

Representerar en komponent. ¨Arver fr˚an componentWidget. Ellipse

Representerar en ellips. ¨Arver fr˚an Shape. jComponentWidget

Widget som anv¨ands f¨or att rita ut vanliga JComponent-objekt. ¨Arver fr˚an schematicWidget.

keyboardZoomAction

Reagerar om anv¨andaren trycker p˚a plus- eller minustangenterna p˚a tangent-bordet och utf¨or ¨onskad zoomning. ¨Arver fr˚an WidgetAction (NVL-klass).

(40)

lightLookFeel

Definierar en LookFeel med vit bakgrund. ¨Arver fr˚an schematicLookFeel. Line

Representerar ett polygont˚ag. ¨Arver fr˚an Shape. marqueeDecorator

Skapar den widget som ritas ut n¨ar anv¨andaren ritar upp en rektangel f¨or att antingen zooma in p˚a rektangeln eller markera de objekt innanf¨or rek-tangeln. Implementerar RectangularSelectDecorator (NVL-interface). marqueeSelectProvider

Anropas n¨ar anv¨andaren har ritat upp en rektangel om selektionsverktyget ¨

ar valt. Klassen genomf¨or selektionen av de Widget som ligger i rektangeln. Implementerar RectangularSelectProvider (NVL-interface).

marqueeZoomProvider

Anropas n¨ar anv¨andaren har ritat upp en rektangel om zoomverktyget ¨ar valt. Klassen genomf¨or zoomning till den rektangel som anv¨andaren ritade upp. Implementerar RectangularSelectProvider (NVL-interface).

mousePanAction

Sk¨oter panorering som anv¨andaren panorerar med musen. ¨Arver av Wid-getAction (NVL-klass).

mousePositionAndZoomLevelUpdateListener

Ett interface som en klass kan implementera. Klassen kan sedan registrera sig som lyssnare hos schematicDisplay2 och kommer d˚a att f˚a notifieringar n¨ar muspositionen eller zoomniv˚an ¨andras. ¨Arver fr˚an EventListener (Java-klass).

mouseZoomAction

Sk¨oter zoomning n¨ar anv¨andaren zoomar genom att h˚alla Ctrl-tangenen nertryckt samtidigt som mushjulet snurras. ¨Arver av WidgetAction (NVL-klass).

netWidget

(41)

notesWidget

En widget f¨or anteckningar. ¨Arver av componentWidget. pinWidget

Representerar en pinne. ¨Arver av componentWidget. Polygon

Representerar en polygon. ¨Arver fr˚an Shape. Rect

Representerar en rektangel. ¨Arver fr˚an Shape. rectangularSelectAction

Anv¨ands n¨ar anv¨andaren vill markera flera Widget genom att rita upp en rektangel genom att klicka och dra ut rektangeln. ¨Arver fr˚an WidgetAction (NVL-klass).

rectangularSelectActionTwoClicks

Denna klass ¨ar lik klassen ovan, med skillnaden att rektangeln ritas upp genom att anv¨andaren markerar f¨orsta h¨ornet med ett klick och andra h¨ornet med ett andra klick. Anv¨ands av zoom-verktyget. ¨Arver fr˚an WidgetAction (NVL-klass).

schematicDemoWindow

Ett f¨onster som demonstrerar visualiseringsmodulens alla funktioner. schematicDisplay2

Klass som ¨ar gr¨anssnitt mot hela visualiseringsmodulen. schematicDisplay2Helper

Klass med funktioner som beh¨ovs av flera klasser, t.ex. funktioner f¨or att konvertera mellan indatans koordinatsystem och det koordinatsystem som NVL anv¨ander.

schematicException

Ett exception som kastas n¨ar n˚agot blir fel i visualiseringsmodulen. ¨Arver fr˚an Exception (Java-klass).

(42)

schematicLookFeel

Abstrakt klass som representerar en LookFeel som kan anv¨andas av visu-aliseringsmodulen. ¨Arver fr˚an LookFeel (NVL-klass).

schematicWidget

Abstrakt klass som anv¨ands f¨or alla Widget i visualiseringsmodulen. In-neh˚aller bl.a. funktioner f¨or att rotera. ¨Arver fr˚an Widget (NVL-klass). selectAction

Ser till att en Widget markeras n¨ar anv¨andaren klickar p˚a den. ¨Arver fr˚an WidgetAction (NVL-klass).

Shape

Abstrakt basklass f¨or olika former. Definierar vilka funktioner underklasser-na skall ha, exempelvis paint()-funktionen som anropas n¨ar en form ska ritas upp.

terminalWidget

Representerar en terminal. ¨Arver fr˚an componentWidget. textWidget

Anv¨ands f¨or all text som ska ritas upp, d.v.s. etiketter till n¨atelement. ¨Arver fr˚an schematicWidget.

updateCurrentMousePositionAction

Reagerar varje g˚ang anv¨andaren flyttar musmark¨oren. Den sparar undan muspositionen och ser till att alla lyssnare f˚ar en notifikation om att ny musposition finns att h¨amta. ¨Arver fr˚an WidgetAction (NVL-klass).

(43)

Bilaga B

Manual

Improved Schematic Display Johan Bohlin johan.bohlin@ansyn.com

Intro

F¨or att l¨agga till en display i ett f¨onster. Antag att det finns tv˚a JPanel. I f¨orsta ska schematic visas, och i andra visas ¨oversikts-vyn (Satellite view).

// s k a p a d i s p l a y e n s c h e m a t i c D i s p l a y 2 d i s p l a y = new s c h e m a t i c D i s p l a y 2 ( ) ; // l ¨a g g t i l l d i s p l a y e n i j p a n e l 1 . d i s p l a y . g e t V i e w ( ) r e t u r n e r a r en JComponent j P a n e l . add (new J S c r o l l P a n e ( d i s p l a y . g e t V i e w ( ) ) ) ; // l ¨a g g t i l l s a t e l i t t e v i e w i j p a n e l 2 j P a n e l 2 . add ( d i s p l a y . g e t S a t e l l i t e V i e w ( ) ) ; // a n g e r v i l k e n n e t l i s t som s k a l l r i t a s upp d i s p l a y . s e t N e t l i s t ( n e t l i s t ) ;

Verktygen

Displayen har fyra olika verktyg, ett av dem ¨ar alltid de aktuella. De fyra verktygen

1. Select tool: M¨ojlighet att markera en komponent i taget. M¨ojlighet att merkera flera komponenter genom att dra en rektangel runt dem. Detta verktyg ¨ar valt n¨ar displayen skapas.

2. Zoom tool: Zoomar in p˚a markerad rektangel 3. Pan tool: Panorerar

(44)

F¨or att ¨andra verktyg anv¨ands tre olika funktioner // S ¨a t t e r s e l e k t i o n s −v e r k t y g e t t i l l a k t i v t v e r k t y g d i s p l a y . s e t S e l e c t T o o l A s A c t i v e T o o l ( ) ; // S ¨a t t e r p a n o r e r i n g s −v e r k t y g e t t i l l a k t i v t v e r k t y g d i s p l a y . s e t P a n T o o l A s A c t i v e T o o l ( ) ; // S ¨a t t e r zoom−v e r k t y g e t t i l l a k t i v t v e r k t y g d i s p l a y . s e t Z o o m T o o l A s A c t i v e T o o l ( ) ;

Lager

Displayen best˚ar av ett antal lager, varav flera kan d¨oljas. F¨oljande lager kan d¨oljas:

• Lagret med etiketter f¨or komponenter • Lagret med etiketter f¨or n¨at

• Lagret med etiketter f¨or pinnar • Lagret med etiketter f¨or terminaler • Lagret med anteckningar

F¨or att d¨olja/visa dessa lager anv¨ands dessa funktioner:

// Visa / D ¨o l j l a g r e t med e t i k e t t e r f ¨o r komponenter

d i s p l a y . s e t D e v i c e L a b e l L a y e r V i s i b i l i t y ( boolean v i s i b l e ) ; // Visa / D ¨o l j l a g r e t med e t i k e t t e r f ¨o r n ¨a t d i s p l a y . s e t N e t L a b e l L a y e r V i s i b i l i t y ( boolean v i s i b l e ) ; // Visa / D ¨o l j l a g r e t med e t i k e t t e r f ¨o r p i n n a r d i s p l a y . s e t P i n L a b e l L a y e r V i s i b i l i t y ( boolean v i s i b l e ) ; // Visa / D ¨o l j l a g r e t med e t i k e t t e r f ¨o r t e r m i n a l e r d i s p l a y . s e t T e r m i n a l L a b e l L a y e r V i s i b i l i t y ( boolean v i s i b l e ) ; // Visa / D ¨o l j l a g r e t med a n t e c k n i n g a r d i s p l a y . s e t N o t e s L a y e r V i s i b i l i t y ( boolean v i s i b l e ) ;

// Visa / D ¨o l j a l l a l a g e r med e t i k e t t e r . Andra p a r a m e t e r n a n g e r om l a g r e t med a n t e c k n i n g a r ¨aven s k a l l d ¨o l j a s

d i s p l a y . s e t A l l L a b e l L a y e r s V i s i b i l i t y ( boolean v i s i b i l i t y , boolean i n c l u d e N o t e s L a y e r )

Panorering och zoom

Den nya displayen har flera olika s¨att att zooma och panorera. Man kan g¨ora det med musen, tangentbordet samt via funktionsanrop.

Panorering

Mushjulet kan anv¨andas f¨or att panorera i h¨ojdled. Om shift-tangenten ¨

ar nertryck sker panoreringen ist¨allet i sidled. ¨Aven piltangenterna kan anv¨andas f¨or att panorera.

(45)

Zoom

Mushjultet ¨andrar zoomniv˚an och Ctrl-tangenten samtidigt ¨ar nertryckt. Plus- och minus-tangenterna ¨andrar ¨aven zoomniv˚an. Det finns sedan ett antal funktioner som p˚a n˚agot s¨att ¨ar relaterade till zoomning:

// zooma i n ( z o o m l e v e l ∗= 1 . 1 ) d i s p l a y . zoomIn ( ) ;

// zooma u t ( z o o m L e v e l /= 1 . 1 ) d i s p l a y . zoomOut ( ) ;

//En ut− och i n z o o m n i n g t a r s˚a l e d e s u t v a r a n d r a ! //zoom t o f i t d i s p l a y . zoomToFit ( ) ; // zooma t i l l o b j e c t d e v i c e d = n e t l i s t . g e t D e v i c e ( ” b i a s N e t w o r k ” ) ; d i s p l a y . zoomToObject ( d ) ; // zooma t i l l s p e c i f i k a k o o r d i n a t e s i Cadence c o o r d i n a t s y s t e m ( N o t e r a : x och y ¨a r ¨o v r e v ¨a n s t r a h ¨o r n e t i r e k t a n g e l n som man s p e c i f i e r a r )

d i s p l a y . zoomToCadenceCoordinates (new R e c t a n g l e 2 D . Double ( x , y , w, h ) ) ;

// zooma t i l l c a d e n c e k o o r d i n a t e r med t v˚a p u n k t e r ( m o t s t˚a e n d e p u n k t e r i r e k t a n g e l )

d i s p l a y . zoomToCadenceCoordinates (new Point2D . Double ( x , y ) , new Point2D . Double ( x2 , y2 ) ) ;

// zooma t i l l k o o r d i n a t e r i d e t i n t e r n a k o o r d i n a t s y s t e m e t d i s p l a y . zoomToRectangle (new R e c t a n g l e ( x , y , w, h ) ) ;

// ¨Andrar v i l k e n maximal / minimal zoomniv˚a som ¨a r t i l l˚a t e n : d i s p l a y . setMaxZoomLevel ( 3 0 0 ) ; //max 300 \% zoom

d i s p l a y . setMinZoomLevel ( 1 0 0 ) ; //min 100 \% zoom // S ¨a t t e r nuvarande zoomniv˚a t i l l 100%

d i s p l a y . s e t C u r r e n t Z o o m A s 1 0 0 P e r c e n t ( ) . // S k r i v e r u t nuvarande zoomniv˚a

System . o u t . p r i n t l n ( ”Zoom : ” + d i s p l a y . g e t Z o o m L e v e l ( ) ) ;

F¨or att f˚a en notifikation om att zoom-niv˚an har ¨andrat kan man registrera en lyssnare hos displayen. L¨as mer under rubriken Musposition”.

Hantering av objekten som ritas ut

Standardinst¨allningen ¨ar all samtliga n¨atelement i n¨atlistan ritas ut, och att inget av dessa ¨ar selektionsbara. Funktioner f¨or att hantera objekten:

// S ¨a t t s e l e k t i o n s b a r h e t p˚a s a m l i n g o b j e k t d i s p l a y . s e t O b j e c t S e l e c t i o n A l l o w e d ( C o l l e c t i o n o b j e c t s , boolean s e l e c t i o n A l l o w e d ) ; // S ¨a t t e r om e t t o b j e k t s k a l l r i t a s upp e l l e r i n t e d i s p l a y . s e t O b j e c t V i s i b i l i t y ( C o l l e c t i o n o b j e c t s , boolean v i s i b l e ) ; // S ¨a t t e r t i l l o b j e k t som s k a l l v a r a markerade d i s p l a y . s e t S e l e c t e d O b j e c t s ( C o l l e c t i o n o b j e c t s ) ;

(46)

// s ¨a t t v i l k a o b j e k t som s k a h i g h l i g h t a s . Andra p a r a m e t e r n a v g ¨o r om t e r m i n a l e r p˚a en komponent s k a l l h i g h l i g h t a s s a m t i d i g t som komponenten . T r e d j e p a r a m e t e r n s ¨a g e r om nuvarande

h i g h l i g h a d e o b j e k t s k a f o r t s ¨a t t a v a r a h i g h l i g h t a d e . Med s i s t a p a r a m e t e r n kan man ange v i l k e n f ¨a r g o b j e k t e t s k a l l f˚a . d i s p l a y . s e t H i g h l i g h e d O b j e c t s ( C o l l e c t i o n o b j e c t s , boolean

h i g h l i g h t T e r m i n a l O n D e v i c e , boolean c l e a r C u r r e n t H i g h l i g h t s , C o l o r h i g h l i g h t C o l o r ) ;

// H¨amtar de o b j e k t som ¨a r markerade j u s t nu :

C o l l e c t i o n s e l e c t e d O b j e c t s = d i s p l a y . g e t S e l e c t e d O b j e c t s ( ) ; // H¨amtar de o b j e k t som ¨a r h i g h l i g h t a d e j u s t nu : C o l l e c t i o n h i g h l i g h t e d O b j e c t s = d i s p l a y . g e t H i g h l i g h e d O b j e c t s ( ) ; // H¨amtar a l l a o b j e k t som d i s p l a y e n h a n t e r a r C o l l e c t i o n a l l O b j e c t s = d i s p l a y . g e t A l l O b j e c t s ( ) ; //Hur man g ¨o r a l l a o b j e k t s e l e k t i o n s b a r a d i s p l a y . s e t O b j e c t S e l e c t i o n A l l o w e d ( d i s p l a y . g e t A l l O b j e c t s ( ) , true ) ;

Muspositon

Det g˚ar att f˚a fram vilken musposition som muspekaren befinner sig p˚a i displayen. Positionen ges i det koordinatsystem som Cadence anv¨ander sig av.

// H¨amtar m u s p o s i t i o n e n

Point2D . Double p o i n t 1 = d i s p l a y . g e t C u r r e n t M o u s e P o s i t i o n ( ) ; //om man a n v¨a n d e r zoom−v e k t y g e t e l l e r s e l e k t i o n s v e k t y g e t kan man

¨

aven f˚a fram v i l k e n h ¨o r n p o s i t i o n den u p p r i t a d e r e k t a n g e l n h a r . Andra h ¨o r n e t p˚a r e k t a n g e l n f˚a s fram v i a f u n k t i o n e n v i s a d ovan . Om man f˚a r t i l l b a k a n u l l , s˚a ¨a r i n t e n˚agon r e k t a n g e l u p p r i t a d .

Point2D . Double p o i n t 2 = d i s p l a y .

g e t C u r r e n t M a r q u e e S e l e c t i o n P o s i t i o n ( ) ;

Muspositionen ¨andrar ju sig n¨ar anv¨andaren flyttar mark¨oren. Man kan registrera en lyssnare hos displayen som f˚ar reda p˚a n¨ar muspositionen samt ¨aven zoomniv˚an har ¨andrats.

public J f r a m e testWindow implements

m o u s e P o s i t i o n A n d Z o o m L e v e l U p d a t e L i s t e n e r { private s c h e m a t i c D i s p l a y 2 d i s p l a y ; testWindow ( ) { // s k a p a d i s p l a y och s ¨a t t n ¨a t l i s t a d i s p l a y = new s c h e m a t i c D i s p l a y 2 ( ) ; d i s p l a y . s e t N e t l i s t ( g e t T h e N e t l i s t ( ) ) ; // R e g i s t r e r a t h i s som l y s s n a r e h o s d i s p l a y e n d i s p l a y . a d d L i s t e n e r ( t h i s ) ; } // d i s p l a y e n m e d d e l a r a t t d e t f i n n s ny m u s p o s i t i o n s −d a t a public void m o u s e P o s i t i o n U p d a t e d ( ) { d i s p l a y M o u s e P o s i t i o n ( d i s p l a y . g e t C u r r e n t M o u s e P o s i t i o n ( ) ) ; d i s p l a y Z o o m L e v e l ( d i s p l a y . g e t Z o o m L e v e l ( ) ) ; }

(47)

}

¨

Ovriga funktioner

Till ett objekt kan man koppla en popup-meny som visas n¨ar anv¨andaren h¨ogerklickar p˚a objektet:

JPopupMenu popupmenu = createAPopupMenu ( ) ; d e v i c e d = n e t l i s t . g e t d e v i c e ( ” b i a s N e t w o r k ” ) ; addPopupMenutoObject ( d , popupmenu ) ;

Den synliga delen av dispayen kan exporteras.

// E x p o r t e r a t i l l en B u f f e r e d I m a g e som s e d a n kan s p a r a s t i l l f i l B u f f e r e d I m a g e e x p o r t = d i s p l a y . e x p o r t V i s i b l e A r e a ( ) ;

Displayen har tv˚a olika f¨argscheman som man kan v¨axla mellan:

// S ¨a t t e r den l j u s a f ¨a r g s ¨a t t n i g e n t i l l a k t i v d i s p l a y . s e t L i g h t C o l o r S c h e m e ( )

// S ¨a t t e r den m¨orka f ¨a r g s ¨a t t n i g e n t i l l a k t i v d i s p l a y . s e t D a r k C o l o r S c h e m e ( ) ;

Bredvid uppritade objekt kan man rita upp information, antingen en vanlig textstr¨ang, eller en JComponent

// S k r i v e r u t ” I n f o r m a t i o n ” o v a n f ¨o r komponenten b i a s N e t w o r k i o r a n g e t e x t . d e v i c e d = n e t l i s t . g e t d e v i c e ( ” b i a s N e t w o r k ” ) ; S t r i n g i n f o = ” I n f o r m a t i o n ” ; C o l o r c = C o l o r .ORANGE; i n t p o s i t i o n = S w i n g C o n s t a n t s .NORTH; a d d A d d i t i o n a l I n f o r m a t i o n T o O b j e c t ( d , i n f o , c , p o s i t i o n ) ; // r i t a r u t en JComponent t i l l h ¨o g e r om en komponent d e v i c e d = n e t l i s t . g e t d e v i c e ( ” b i a s N e t w o r k ” ) ; JComponent component = c re a te J Co m po n e nt ( ) ; i n t p o s i t i o n = S w i n g C o n s t a n t s . EAST ; a d d A d d i t i o n a l I n f o r m a t i o n T o O b j e c t ( d , component , p o s i t i o n ) ;

(48)

P˚a svenska

Detta dokument h˚alls tillg¨angligt p˚a Internet - eller dess framtida ers¨attare - under en l¨angre tid fr˚an publiceringsdatum under f¨oruts¨attning att inga extra-ordin¨ara omst¨andigheter uppst˚ar.

Tillg˚ang till dokumentet inneb¨ar tillst˚and f¨or var och en att l¨asa, ladda ner, skriva ut enstaka kopior f¨or enskilt bruk och att anv¨anda det of¨or¨andrat f¨or ickekommersiell forskning och f¨or undervisning. ¨Overf¨oring av upphovsr¨atten vid en senare tidpunkt kan inte upph¨ava detta tillst˚and. All annan anv¨andning av dokumentet kr¨aver upphovsmannens medgivande. F¨or att garantera ¨aktheten, s¨akerheten och tillg¨angligheten finns det l¨osningar av teknisk och administrativ art.

Upphovsmannens ideella r¨att innefattar r¨att att bli n¨amnd som up-phovsman i den omfattning som god sed kr¨aver vid anv¨andning av doku-mentet p˚a ovan beskrivna s¨att samt skydd mot att dokumentet ¨andras eller presenteras i s˚adan form eller i s˚adant sammanhang som ¨ar kr¨ankande f¨or upphovsmannens litter¨ara eller konstn¨arliga anseende eller egenart.

F¨or ytterligare information om Link¨oping University Electronic Press se f¨orlagets hemsida http://www.ep.liu.se/

In English

The publishers will keep this document online on the Internet - or its possible replacement - for a considerable time from the date of publication barring exceptional circumstances.

The online availability of the document implies a permanent permis-sion for anyone to read, to download, to print out single copies for your own use and to use it unchanged for any non-commercial research and education-al purpose. Subsequent transfers of copyright cannot revoke this permission. All other uses of the document are conditional on the consent of the copy-right owner. The publisher has taken technical and administrative measures to assure authenticity, security and accessibility.

According to intellectual property law the author has the right to be mentioned when his/her work is accessed as described above and to be protected against infringement.

For additional information about the Link¨oping University Electron-ic Press and its procedures for publElectron-ication and for assurance of document integrity, please refer to its WWW home page: http://www.ep.liu.se/

c

(49)

Avdelning, Institution Division, Department Datum Date Spr˚ak Language  Svenska/Swedish  Engelska/English  Rapporttyp Report category  Licentiatavhandling  Examensarbete  C-uppsats  D-uppsats  ¨Ovrig rapport 

URL f¨or elektronisk version

ISBN ISRN

Serietitel och serienummer Title of series, numbering

ISSN Titel Title F¨orfattare Author Sammanfattning Abstract

AnSyn AB ¨ar ett f¨oretag i Link¨oping som utvecklar programvara f¨or att op-timera analog elektronik. I deras program Analog Dimensions finns en visualis-eringsmodul som ritar upp de kopplingsscheman som elektronikkonstrukt¨oren arbetar med. Ansyn var inte n¨ojda med den l¨osningen de hade. Den gamla visualiseringsmodulen hade flera begr¨ansningar och i denna rapport kan du f¨olja arbetet med att ta fram en ny visualiseringsmodul. Arbetet resulterade i en helt ny visualiseringsmodul som saknar de begr¨ansningar som den gam-la visualiseringsmodulen hade. Visualiseringsmodulen ¨ar helt skriven i Java och anv¨ander sig av ett grafikbibliotek vid namn Netbeans Visual Library. Det ¨ar ett bibliotek med ¨oppen k¨allkod som bland annat kan anv¨andas f¨or visualisering av vektorgrafik. Rapporten inneh˚aller ¨aven en unders¨okning av programbibliotek f¨or Java som hanterar vektorgrafik. I unders¨okningen stud-erades totalt 15 olika bibliotek.

IDA,

Dept. of Computer and Information Science 581 83 Link¨oping

2009-09-29

LIU-IDA/LITH-EX-G-09/008-SE

-2009-09-29

Visualisering av elektroniska kopplingsscheman

Johan Bohlin

× ×

References

Related documents

Dessa isolationsplagg lämpar sig även för kalla vinterdagar då du inte vill ha flera lager på dig utan bara behöver ett plagg att ta på sig t ex när du promenera till jobbet

Detta medförde att doftens förhållande till plats blev mer ostabil, men även mer personlig, då upplevelsen endast navigerades efter besökarens minnen, vilket kan jämföras

för icke en ”beredskapsuppgift” så god som någon att tillse, att icke till allt annat en stegring av tuberkulo sen i vårt land är att vänta. Detta kan ju tydligen f°'

Endast definitioner och trigonometriska r¨ aknelagar f˚ ar anv¨ andas utan att de f¨ orst bevisas. Sida 2

Bindemedel till PGJA skall vara SBS-modifierat och uppfylla krav i kap I enligt tabell I3.2-1, kolumn 50/100-75. Krav på materialkvalitet framgår av avsnitt F4.4 och typblad i

10 R4 Jag skulle säga att det finns två aspekter: när man pratar om automation och de digitala förändringarna så finns det ju en del som, som vi själva förstår är rädda

Ett exempel på detta kan vara att varje gång tillhör ett land, så när det kommer en order från ett visst land så behöver plockaren bara gå genom en gång istället för genom

Energiföretagen ser positivt på att några pilotprojekt har initierats för att i praktiken kunna utvärdera hur sådana marknader kan och bör vara utformade. • Projekten bör kunna