Het Graphical Kernel System geïmplementeerd in PEP :
beschrijving van de grafische software
Citation for published version (APA):
van Amen, D. R. (1987). Het Graphical Kernel System geïmplementeerd in PEP : beschrijving van de grafische software. Technische Universiteit Eindhoven.
Document status and date: Published: 01/01/1987 Document Version:
Publisher’s PDF, also known as Version of Record (includes final page, issue and volume numbers) Please check the document version of this publication:
• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.
• The final author version and the galley proof are versions of the publication after peer review.
• The final published version features the final layout of the paper including the volume, issue and page numbers.
Link to publication
General rights
Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain
• You may freely distribute the URL identifying the publication in the public portal.
If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:
www.tue.nl/taverne
Take down policy
If you believe that this document breaches copyright please contact us at:
openaccess@tue.nl
providing details and we will investigate your claim.
Ket 6raphical Karnel System
geïmplementeerd in PEP,
beschriJving van de grafische software
D.R. van Amen
Technisch rapport UDF/NO
87-05
Dit rapport is bedoeld als aanvullende
toelichting biJ de formele presentatie
gegeven in het afstudeerverslag
Inhoudsopgave
0.
1.2.
Samenvatting
Inleiding
De GKS-basisbibliotheek PM1:GKS6B.RAC
2.1. Werkstations
2.2. Schaling
2.3. Clipping
2.'L Lijnen
2.5. Markers
2.6. Vlakvulling
2.7. Teksten
2.8. Cirkels en ellipsen
3.
De applicatiebibliotheek PMl:GKSAPP.RAC
3.1. Grafische files
3.2. Aansturing van devices
3.3. Assen
3.~.
Het standaardplaatje frame
3.5. Splinecurves
3.6. Overige applicaties
~.
Vaste segmenten, de bibliotheek PMl:GKSSEG.RAC
5.
De soureetekst van polyline, de file PMl:POlYR.RAC
Referenties
Appendices
A.
Ket strippen van bibliotheken
B.l. Inhoudsopgavevan procedures uit PMl:GKS68.RAC
8.2. Programmatekst van PMl:GKS6B.RAC
C.l. Inhoudsopgavevan procedures uit PMl:GKSAPP.RAC
C.2. Programmatekst van PMl:GKSAPP.RAC
D.
Programmatekst van PMl:GKSSEG.RAC
E.
F.
Programmatekst van PMl:POlYR.RAC
Programmatekst van PM1:KRUIS.RAC
1 2 6 6 8 10
11
12
1~ 1523
25
25
26
27
29
31
32
33
35
36
37
37
38
~181
82
95
98 1050. Samenvatting
Het voortgezet implementeren van grafische faciliteiten in PEP
op
basis van het Graphical Karnel Sustem CG.K.S.)
heeft geleid
tot een
nogal drastische herziening en uitbreiding van de
door
Schelleman en Prins ontworpen software CSCH B6J, CPRI B6J.
Dit heeft
geleid tot een basisbibliotheek met
als filenaam
PM1:GKS6B.RAC,
welke geschikt is voor een QUME QVT-211 GX
termi-nal, een DIGITAL
VT2~0terminal en een HITACHI 672 Graph Plotter.
Deze bibliotheek mag niet worden opgevat als een volledige
imple-mentatie van het laagste niveau van GKS voor een aantal
werksta-tions.
Het
is wel
zo dat het voor de
gebruikers beschikbaar
gekomen gereedschap êênduidig geênt is op de GKS-voorschriften.
Daarnaast
is een applicatiebibliotheek geschreven,
met
als
filenaam
PMl:GKSAPP.RAC,
die gebruikt moet worden in combinatie
met de basisbibliotheek. Deze geeft de gebruikers extra
mogeliJk-heden zoals het bewaren van plaatjes,
cubic spline
interpolatie
en het eenvoudig in grafiek zetten van meetdata.
Voortzetting van dit werk kan geschieden langs
verschillende
wegen. We noemen hier:
-Optimalisering (compileren bijvoorbeeld)
-Verbreding (volledig in overeenstemming brengen met GKS)
-Uitbreiding Candere grafische apparatuur)
-Applicatiegerichte voortzetting Cfast fourier transform)
-Aanvulling Chet opvullen van polygonen biJ de plotter)
1. Inleiding
In dit rapport zullen de Ccomputer)programma's,
die zijn
ge-schreven voor grafische doeleinden,
zie afstudeerwerk CAME 87J,
nader worden toegelicht.
Deze programma's staan opgenomen in de
appendices.
Het afstudeerwerk zelf beschrijft o.a.
voorbeelden
uit de fysische praktijk.
Er
is bewust voor deze vorm van toelichten gekozen.
Het
ge-bruik van cammentregels in de programma's zelf heeft als
belang-rijke nadelen:
1)
In PEP kan per bibliotheek slechts 255 regels commentaar
op de standaard manier C%-teken) gegeven worden.
Dit is
voor grote bibliotheken te weinig. De grote
GKS-basisbi-bliotheek PM1:GKS68.RAC heeft nu al 68 blokken.
2)
Men
blijft binnen cammentregels noodgedwongen in
tele-gramstijl schrijven.
3)
Er
zijn geen mogelijkheden voor verklarende
illustra-ties.
~)
Het
totale geheugenbeslag wordt erg groot
zodat
men
steeds moeilijker kan saven of minimaliseren.
In navolging van CISO
B~Jhanteren we de volgende afkortingen:
WC • World Coordinates
DC • Device Coordinates
NOC • Normalized Device Coordinates
GDP - Generalized Drawing Primitive
-- <
x
<
+-K
<
x_dc
<
M
0
< x_ndc < 1
Alvorens
per hoofdstuk de bibliotheken te bespreken vermelden
we eerst enige belangrijke apparaateigenschappen van de
geïmple-menteerde werkstations. Het gaat om drie apparaten:
QUME QUT-211 GX terminal
Digital
UT2~0terminal
Hitachi 672 Graph Plotter
De
apparaten werken met een eigen instructieset gecombineerd
met
apparaatcoördinaten.
Alle genoemde apparaten zijn hierdoor
o.a.
in staat verschillende soorten lijnen te genereren, alsmede
hardware-matig gemaakte cirkels.
Ook verschillende
karakterhoog-tes en breedkarakterhoog-tes ziJn mogeliJk.
Belangrijke verschillen tussen de genoemde apparaten ziJn de
resolutie (oplossend vermogen,
het aantal zichtbare pixels in
X-en
V-richting),
de aspect ratio Chet aantal mogeliJke
apparaat-coöLdinaten
in de X-richting,
gedeeld door het aantal in de
V-richting) en de relatie hiertussen.
De
drie apparaten hebben alle de mogelijkheid om
het
adres-seerbereik van de DC in te stellen. Deze coördinaten komen in het
algemeen niet overeen met pixels.
Uoor
de
plotter is gekozen voor adressering in plotterunits
van 25 micron,
zodat de apparaatcoördinaten wel oveLeenkomen met
pixels,
zie Tabel 1.1. Uit dezelfde tabel lezen we af dat biJ de
UT2~0
de DC in de X-richting oveLeenkomen met pixels.
In de
V-richting blijkt iedere liJn (totaal
2~0lijnen) twee
opeenvolgen-de adLessen (totaal
~80adressen) te hebben.
BiJ de QUME ligt de zaak minder eenvoudig.
Het instellen van
een adresseerbaar veld moet hieL gebeuren
m.b.v.
6AIN-instLuc-ties.
De verhouding tussen de ingestelde GAIN's moet hieLbiJ 3:2
ziJn.
In dat geval is de aspect ratio eveneens 3:2 en dit heeft
tot gevolg dat het ciLkelcommando een geometrisch correcte ciLkel
(binnen resolutie grenzen) geeft.
BiJ een andere 6AIN-veLhouding
ontstaat een ellips.
Indien we nu in Tabel 1.1 de QUME veLgelijken met de
UT2~0dan
bliJkt de QUME ook twee adressen per liJn te hebben. Er is echter
geen correspondentie tussen het aantal liJnstukjes en het
adLes-seerbereik
in de X-richting.
C6~0lijnstukjes versus
86~als
maximum coördinaat).
station
~esolutie ad~essee~-ga in
(afmeting)
Cve~houding) be~eikinstelling
Caspeet
~atio) Cve~houding)Plotte~
A3
15200 x 10800
15200 x 10800
n.v.t.
(380 x 270 mm)
(38
:27)
(38
:27)
C270 x 380 mm)
(27
:38)
(27
:38)
Plotte~A'i
10800 x 6800
10800 x 6800
n.v.t.
C270 x 170 mm)
(27
:17)
C27
:17)
of
7000 x 10800
7000 x 10800
(175 x 270 mm)
(17.5
:27)
(17.5
:27)
UT2'i0
800 lijnstukken
800 x "!80
n.v.t.
(205 x 135 mm)
2"!0 lijnen
CS
:3)
gemeten
(10
:3)
QUME
6"!0 lijnstukken
86"! x 576
768X
(230 x 160 mm)
288 lijnen
(3
:2)
-512Y
gemeten
C20
:9)
(3
:2)
TABEL 1.1.
Ove~zicht
van
~esolutie,aspect
~atio,afmetingen,
ad~essee~ be~eiken gain van de
ve~schillende g~afischestations.
Indien we op een QUME de afmetingen van een
ka~akte~moeten
wijzigen,
dan moet
dit ook met de 6AIN-inste11ing
gebeu~en. Ue~g~otingvan de X-6AIN betekent
ve~b~edingvan de nog te
teke-nen
ka~akte~s.Het aantal
ad~essenin de
x-~ichting wo~dt hie~ doo~ echte~ ve~kleindm.a.w.
de aspect
~atio wo~dt kleine~. Ue~g~otingvan de Y-6AIN maakt de
ka~akte~s hoge~.De
ve~kleiningvan het aantal
ad~essenin
Y-~ichtingmaakt de aspect
~atioin
dit geval
g~ote~.Bij de positiebepaling van
ka~akte~smoeten we
hie~
dus
~ekeningmee houden.
E~ t~edennog een
paa~ ext~acom-plicaties op
t.g.v.
nulpuntsinstelling en mode-wisseling
maa~deze behandelen we bij de
p~og~ammabesp~eking.Algemene opmerkingen
De
te bespreken programma's worden zeer
frequent
gebruikt.
Mede
daarom is gepoogd de executie van procedures zo snel
moge-lijk te laten geschieden.
Hierdoor worden bepaalde constructies
langer dan strikt genomen noodzakelijk is, maar wel sneller.
De
editor genereert code voor de interpreter.
Code
behorend
bij het getal 1 is anders dan die van het getal 1.0, CERU 86J.
In de
praktijk zal de interpreter zeer vaak
conversies uit
moeten voeren van integer naar real.
We hebben geprobeerd dit te
beperken door getallen in de programma's reeds de gewenste
repre-sentatie te geven.
De procedures die zijn gecompileerd hebben ook niet altijd de
meest vooF de hand liggende vorm,
maar dit is vrijwel altijd een
gevolg van de beperkingen van de compiler.
In Figuur 1.1 staan de verschillende te bespreken bibliotheken
in de volgorde waarin zij geladen moeten worden.
Het gebruik van
segmenten
en kruisdraden is optioneel,
aangegeven door de
stip-pellijnen.
6:
5:
~:3:
2:
1 :rP~1~KRuÎs~R;c-
1
L---J
rP~l~G~S~E~.RA~
1
L---J
IPMl:GKSAPP.RAC
lPMl:GKS68.RAC
EDITOR
IPEP - Oparating Systeml
FIGUUR 1.1. De
ontwikkelde
grafische bibliotheken en
de
volgorde
waarin ze geladen moeten
worden.
De
stippellijn betekent dat deze pakketten
optio-neel zijn
2. De aKS-basisbibliotheek PM1:6KS68.RAC
Op
een gekozen werkstation kan pas een grafische figuur
ont-staan als een array met de juiste tekeninstructies
(ASCII-karak-ters) wordt gevuld Czie bijvoorbeeld Tabel 2.1 van [AME 87J).
De
procedures die het tekenarray vullen met de juiste
ASCII-karak-ters voor êên bepaald werkstation en dit array zelf,
zijn
onder-gebracht
in de aKS-basisbibliotheek PM1:6KS68.RAC.
Deze
biblio-theek wordt geladen in een M68000-computersysteem nadat eerst het
PEP-Oparating System en het EDITOR-programma geladen zijn.
De relevante procedures en globale variabelen,
die in de
aKS-basisbibliotheek voorkomen,
zullen worden ondergebracht in een
aantal rubrieken.
In deze rubrieken zal doel en werking van deze
procedures en variabelen worden toegelicht.
In appendix B.l zijn
van
de hier besproken procedures de
regelnummers
vermeld.
Uan
6KS-functies vermelden
we alleen de
implementatie-afhankelijke
bijzonderheden.
In
6KS68
en 6KSAPP komen een
aantal
machinetaal-procedures
voor die zijn gemaakt m.b.v.
de PEP-compiler. Ten behoeve van de
leesbaarheid van het programma zijn de souree-teksten ook
opgeno-men als aanroepbare procedures met als naam:
procedurenaam_onver-taald.
Voor
de vertaalde procedure polylina_compiled zou dit teveel
van het goede worden Czie listingin de appendix). Daarom
bespre-ken we deze procedure in een apart hoofdstuk.
2.1. Werkstations
In
deze rubriek behandelen we de procedures
die samenhangen
met
het instellen van de werkstations.
In het tekenarray moeten
instructies worden gezet die de gewenste grafische mode
kiezen,
of deze
mode weer verlaten.
Allerlei
default-settings worden
geldig gemaakt.
De geïmplementeerde werkstations krijgen ieder een unieke naam
die gedeclareerd wordt als constant string.
Het station dat actief
iskrijgt een nummer dat gegeven
wordt
door de procedure davica_numbar. Dit nummer zal worden bewaard in
de globale variabele werkstation.
Ieder werkstation heeft een adresseerbaar veld.
sat_devica_limits zet de grenzen van dit veld in
De
procedure
devicelimits.
Deze getallen komen niet automatisch overeen met pixels.
Uoor de
QUME-terminal geldt bijvoorbeeld een werkelijke resolutie van
6~0lijnstukjes bij 288 lijnen. De
UT2~0-terminalheeft een resolutie
van 800 lijnstukjes bij
2~0lijnen. Uoor de plotter geldt wel dat
de getallen overeenkomen met plotterunits van 25 micron,zie Tabel
1.1.
De getallen waarmee wordt geadresseerd zijn zo gekozen
dat
zij de resolutie volledig dekken en toch zo klein mogelijk zijn,
rekeninghoudend met de aspect ratio's Czie hoofdstuk 1). De
beno-digde
hoeveelheid
karakters om de terminals aan te sturen met
volledige benutting van de resolutie is dan ook minimaal.
Alle
apparaat-afhankelijke grafische instructies worden
be-waard in het array tek,
een afkorting van tekening. De variabele
tellar wijst altijd naar de eerstvolgende vrije plaats in tak.
De procedure raset_tek initialiseert zowel tak als tellar voor
een nieuwe reeks instructies.
Het
array
tak zou in principe een
maximale
grootte mogen
hebben
van 65535 bytes.
Indien echter de pointer in dit array,
teller, groter wordt dan 32767, dan wordt dit in sommige
machine-taal-procedures een negatief getal. Het eerste bit wordt namelijk
opgevat
als tekenbit.
De veilige grootte van 32767 bytes blijkt
in de praktijk goed te voldoen.
De procedure sat_colour_indax is een generalisatie van de
GKS-functies set_polyline_colour_index,
set_polymarker_colour_index,
set_text_colour_index,
etc.
Deze procedure heeft alleen zin bij
gebruik van de plotter,
deze kan n.l.
kiezen uit vier
verschil-lende pennen.
Als een fout optreedt,
of als de tekening klaar is,
moet een
werkstation
worden verlaten.
De plotter wordt in dezelfde
toe-stand gebracht als bij het aanzetten automatisch
gebeurt,
een
grafische terminal wordt in terminalmode gebracht en voorzien van
noodzakelijke defaultsettings.
Dit alles wordt verzorgd door de
procedure exit_graphics_mada.
Deze wordt o.a aangeroepen door de
foutmeldingsprocedure arr.
Hiermee wordt bereikt dat een
grafi-sche terminal
niet
in grafische mode blijft staan nadat
een
(mislukt)
plaatje is getekend.
Nieuw te implementeren stations
leiden noodzakelijkerwijze tot uitbreiding van deze procedure.
Binnen
activata_~rkstationworden de eerder besproken
proce-dures davica_number,
sst_davica_limits en rasat_tek aangeroepen.
Vervolgens wordt per station een adresseerbaar veld ingesteld en
een default waarde voor de afmeting van de markers in DC.
Bij de
terminals wordt het alfanumerieke scherm schoongemaakt.
Bij
de
plotstations 3
t/m 6 moet pen 1 geselecteerd worden met de
in-structie SPl.
Indien men dit achterwege laat,
omdat
bij
het
aanzetten de plotter automatisch pen 1 kiest,
dan blijft
gedu-rende het tekenen de pen omhoog,
zie CHIT
86J.De aanroep van
set_colour_index binnen activate_workstation voorkomt dit
pro-bleem.
De
overige procedures en statements verzorgen de
voor-geschreven opstart-condities.
De
GKS-functies claar_warkstation en
daactivata_~orkstationspreken verder voor zichzelf.
Voor de
plotstations
C3 t/m 6)
heeft
claar_~rkstationgeen betekenis omdat niet automatisch een
nieuw stuk papier kan worden ingelegd.
De GKS-functies activate_workstation en deactivate_workstation
moeten
t.b.v.
de
VT2~0in de toekomst zodanig worden gewijzigd
dat een grafisch plaatje bliJft staan.
Dit kan door het plaatje
vast te houden in de hardware,
zie CDIG
83J,of te werken
met
cursor besturing.
Nu
is het nog zo dat alleen al
de
melding
'Program executed' na het sturen van de grafische instructies de
bovenkant van het plaatje uit het scherm •scrolled'.
Het opnemen
van een readln-statement om de computer te laten wachten
is
slechts een mogelijke noodoplossing.
2.2. Schaling
De tekeninstructies hebben
na~2-variabelennodig om de gewenste
pixels van het gekozen werkstation aan te sturen. Er wordt echter
gerekend met wereldcoördinaten.
Deze coördinaten moeten dus
den
omgerekend
naar apparaatcoördinaten
Cnat2-variabelen
in
ASCII-representatie).
De
procedure point converteert twee reals naar nat2-ASCII
re-presentatie,
gescheiden door een comma.
Deze
procedure
gebruikt om de berekende apparaatcoördinaten af te ronden,
wordt
zodat
pixeladressen
Cnat2) worden verkregen.
Deze adressen worden dan
in het array met tekeninstructies ingevuld.
Uoorbeeld:
in: 100.235 en 253.798
uit:
'100,25~'De
procedure single converteert êên real op dezelfde
manier.
Beide
procedures geven problemen als negatieve getallen worden
opgegeven.
Zij
worden
echter vrijwel uitsluitend gebruikt om
apparaatcoördinaten
in te stellen en deze zijn bij de tot nu toe
geïmplementeerde apparaten nooit negatief.
De
procedures·point_alternatieF en single_alternatieF worden
nergens aangeroepen maar geven een in PEP geschreven analogon van
het voorafgaande. Bovendien leveren deze procedures een conversie
van real naar integer-ASCII representatie, zodat het volgende ook
is toegestaan:
De
ASCII
in: -2.3E6
uit: '-2300000'
procedure
real_nr converteert een real
naar
vijf bytes
representatie t.b.v.
de plotter.
Betallen groter dan 100
worden altijd weergegeven als '100.0', dit geeft geen problemen.
Uoorbeeld:
in: ·-5/3
uit: '-1.666'
Met
behulp
van de GKS-functies
set_~indo~en
set_viewport
kunnen
15
transformaties worden ingesteld.
Transformatie 0
is
gereserveerd,
overeenkomstig
de
BKS-standaard.
De
ingestelde
grenzen worden bewaard in
wir~o~en
vie~port.Uoor
alle twee-dimensionale arrays die grenzen
representeren
hanteren we de volgende regel:
(i,jJ betekent:
i•O-> x-as
i•1 -> y-as
j•O -> ondergrens
j•1 -> bovengrens
De
vertaalde procedure map rekent
wereldcoördinaten
om
in
apparaatcoördinaten op de wijze gegeven in map_onvertaald.
Indien een
bepaalde transformatie geldig is bevat het
array
scala voor de twee coördinaatrichtingen de schalingsfactoren. Het
array
oFFset bevat de verschuiving van de oorsprong
in device
coördinaten, DC. Het geldende transformatiegetal wordt bewaard in
curtn.
De
procedure select_narmalization_transFormation stelt
de
arrays scala en offset in. formeel is dit geen BKS-functie, omdat
in ons geval normalisatie transformatie en werkstation
transfor-matie worden samengenomen, zie ook CPRI B6J.
Set_~rkstation_~indo~
en
sat_~orkstation_vie~portzijn de
BKS-functies die de globale arrays
~s-~indowen ws_viawport
in-stellen.
Bij de plotter kunnen we er eenvoudig voor
zorgen
dat
buiten de werkstation viewport niets getekend wordt door gebruik
te maken
van de lW-instructie.
Met deze
instructie geven
we
namelijk
een rechthoek op die grenzen oplegt aan de penbeweging.
Er wordt dus hardwarematig geclipt indien noodzakelijk.
2.3. Clipping
Grafische output
die buiten het werkstation window ligt mag
niet worden getekend.
Indien de gebruiker dit wenst moet ook
de
grafische output
buiten het window
worden
verwijderd.
Indien
lijnen geheel of gedeeltelijk buiten een af te beelden rechthoek
vallen moet dus worden geclipt.
Deze rubriek behandelt de
proce-dures die betrekking hebben op het clippen.
De
BKS-functie set_clipping_indicator spreekt voor
zichzelf.
Als tegemoetkoming aan de gebruikers zijn clip en noclip
gedecla-reerd als constant string.
De gecompileerde procedure clipping heeft als souree de
dure clipping_onvartaald.
De vier uitvoerparameters
xl,yl,x2,y2
bevatten begin- en eindpunt van een lijn. Als deze liJn buiten de
rechthoek gegeven door xl,xr,yb,yt valt,
wordt door clipping de
waarde
false afgegeven.
In alle andere gevallen wordt
de
liJn
geclipt als beschreven in CSCH 86J.
Het door ons gehanteerde algorithme is in wezen hetzelfde, het
is alleen efficiënter omdat het werkt met booleans.
Bovendien is
het
in de gegeven vorm te vertalen met de meest recente
versie
van de PEP-compiler.
Er wordt te allen tijde geclipt op de grenzen van de
worksta-tien viewport.
Uanwege
afrondfouten worden de grenzen
van
de
werkstation viewport êên pixel naar buiten gelegd.
Op de grenzen
van het window wordt afhankelijk van de globale boclaan variabele
clipping_indicator geclipt.
2.~
LiJnen
De
procedures die te maken hebben met het tekenen van
rechte
lijnen worden in deze paragraaf behandeld.
BiJ
ieder station wordt gebruik gemaakt van het feit dat
het
laatst geadresseerde pixel wordt vastgehouden.
Ieder geïmplementeerd station heeft een conneet-procedure die
twee punten opgegeven in DC verbindt.
Bij
het
trekken
van lijnen wordt de laatste positie
in
WC
bewaard in lastx en lasty. De laatste positie in DC wordt bewaard
in lastx_dc en lasty_dc.
Ieder te implementeren werkstation krijgt een
move-procedure.
Deze procedure adresseert een pixel dat wordt opgegeven in WC. De
procedure
move_to doet
dit werkstation-onafhankelijk
door
te
kijken naar de geldende waarde voor werkstation.
Ieder station krijgt een line-procedure.
Deze trekt een
lijn
tussen
het
in WC gespecificeerde punt en het punt gegeven
door
lastx en lasty.
De procedure line_to doet dit weer
werkstation-onafhankeliJk.
Door
gebruik
te maken van de verkorte adresseermogelijkheid
van
de geïmplementeerde grafische terminals C'abbreviate
adres-sing'),
kan hier worden bespaard op grafische code. Indien
name-liJk slechts êên coördinaat verandert, dan behoeft de andere niet
opnieuw te worden opgegeven.
Ieder station heeft een linetype-procedure.
Uan deze
procedu-res moet linetype2, behorend biJ de
UT2~0grafische terminal, nog
worden
voorzien van de linetypes -1 en -2.
De linetypes 1 t/m
~zijn in overeenstemming met de standaard,
zie Tabel
2.1,
de
overige zijn implementatieafhankeliJk.
Met deze gegevens behoeft
de GKS-functie set_linetype geen verdere toelichting.
LINETYPE
12
3 ~-1
-2
QUME
-
- - -
...
-·-·-·-
--
--
--
erase line
UT2~0
- - -
-
I I I I I I I-·-·-·-PLOTTER
- -
-
-
I I I I I I I-·-·-·-
--
--
--
pen up always
TABEL 2.1. De geïmplementeerde linetypes
De
GKS-primitive polyline bestaat biJna geheel uit code
die
ontstaat door compileren van de file PM1:POLYR.RAC. De code wordt
afgehandeld
door de procedure palyline_compiled.
De
procedure
polyline_onvertaald doet precies hetzelfde als polyline,
maar is
een factor
~.5trager.
2.5. Markers
De procedures die te maken hebben met het weergeven van punten
(bijvoorbeeld meetpunten) worden hier toegelicht.
De point-procedures tekenen een in DC gegeven punt.
De
proce-dure
point_at doet dit werkstation-onafhankeliJk voor
een
punt
opgegeven in WC.
Ieder station heeft voor ieder marktype een mark-procedure. De
procedures mark_min2_2
en mark_min3_2 behorende bij
de
UT2~0hebben
nog niet de gewenste vorm.
De marktypes 1 t/m 5 zijn
in
overeenstemming met de standaard,
zie
Tabel 2.2. De marktypes -1
t/m -3 zijn implementatieafhankelijk.
MARKTYPE 1I
2I
3
I
~J
5I -
1I
-2
I
-3
CUME
+
•
0 )( 0•
•
VT2'f0
+
•
0 )( 0 0 0PLOTTER
+
•
0 )( 0•
•
TABEL 2.2. De geïmplementeerde marktypes
Bij
een mark-procedure worden positie en afmeting gegeven
in
reêle DC.
Onder afmeting verstaan
we
de straal van de omhullende
cirkel.
De
mark-procedure behorend biJ marktype- 3 heeft
twee
parameters voor de afmeting,
omdat hier twee markers over elkaar
heen getekend worden.
Set_marker_size_scale_Factor en sat_marker_tupe behoeven
geen
verdere toelichting.
De
gecompileerde
procedure set_polumarkar_Flags voorziet de
punten gespecificeerd in xarr en uarr van een vlag als ze
buiten
de opgegeven rechthoek vallen.
Van de GKS-functie polumarker vermelden
we
de volgende
bijzon-derheden:
a) Markers worden getekend met continue lijnen.
b) Afhankelijk van clipping_indicatar worden markers
buiten
het window wel of niet getekend.
c) De grootte van de markers wordt beïnvloed door
viewpart,
~s-~indow
en
~_viewport.Verkleining van
vie~arten van
~s_vi~port
werkt verkleinend,
verkleining van
~s-~inda~werkt Cuit)vergrotend.
d) Markers buiten de werkstation viewport worden niet
gete-kend.
2.6. Vlakvulling
GKS
biedt
geb~uike~sde mogelijkheid om vlakken te vullen
Cbijvoo~beeldhet
inkleu~envan
histog~ammen).De
voo~gesch~evenfuncties zijn in
bepe~kte vo~m geïmplementee~din
de
basisbiblio-theek.
De GKS-functie set_fill_area_interiar_style kan twee
vulpat~onen instellen, geen vulling of massief vullen.
De GKS-functie fill_area
we~ktniet
voo~de plotstations.
Een
massieve vulling van een polygoon zou geheel
softwa~ematigopge-lost moeten
wo~den.Bij
de
VT2~0-te~minal wo~dt geb~uikgemaakt van het
SKADE-commando, zie [PRI 86J. Dit geeft nog steeds
p~oblemen.De
QUME geeft
ove~het algemeen weinig
p~oblemen,tenzij
de
vulinst~uctiekomt als een
b~andendpixel is
gead~essee~d.In dat
geval
wo~denalle
aang~enzendeeveneens
b~andendepixels
uitge-zet. Dit
p~obleemontstaat nog al eens bij het tekenen van
gevul-de
ma~ke~s Cma~ktype-2 en -3),
als
ee~de~een polyline
doo~dezelfde punten is
get~okken.Deze punten staan dan
imme~s'aan'.
Bij
vulp~oblemenkan met AD de
vulinst~uctievan
de
QUME
wo~den afgeb~oken.Dit
is
voo~alhandig indien
g~otevlakken
wo~dengevuld als gevolg van een fout.
Voo~
een
implementatie volledig
in
ove~eenstemmingmet
de
standaa~dmoet
aan de zojuist
besch~evenGKS-functie nog
veel
wo~den ve~bete~d.Volgens [150
B~Jmoet als het te vullen
poly-goon gedeeltelijk buiten window of
wo~kstationwindow valt op de
voo~gesch~evenwijze
wo~dengeclipt.
De
softwa~edie dit alles
moet
ve~zo~genis tamelijk complex en zal
ge~uimetijd geen
~endementhebben.
Wannee~ g~ootschaligen
geävancee~dmet
GKS
ende~PEP
gewe~ktgaat
wo~denis
het zinnig om de
noodzakelijk
ve~bete~ingenaan te
b~engen.De
GKS-functie cell_array
definiëe~teen
~ooste~ Cg~id)en
afhankelijk van calaur_array
wo~dteen vakje
wee~gegevenin een
bepaalde
kleu~.De QUME tekent
voo~ iede~eindex ongelijk aan nul
een gevuld vakje.
Voo~de
VT2~0moet deze functie nog
geïmplemen-tee~d wo~den. Naa~ ve~wachtingzal dit weinig
p~oblemen opleve-~en.De plotstations hebben
vie~ kleu~en beschikbaa~.ove~eenko-mand met de indices 1 t/m
~.Het cell array wordt in onze
imple-mentatie niet geclipt, noch op het window, noch op de werkstation
viewport.
2.7 Teksten
In
een figuur moeten ook teksten geplaatst kunnen worden.
In
deze
rubriek zullen de
verschillende geïmplementeerde
GKS-functies die met het tekenen van teksten te maken hebben
worden
toegelicht.
Uoor
we
hieraan beginnen moeten we echter een
af-spraak maken.
De als leidraad gebruikte standaard,
CISO
B~J,veronderstelt
dat op een werkstation een bepaald standaard lettertype aanwezig
is. De drie te implementeren stations hebben echter een
karakter-set waarvan de
karakters continu variabel zijn in breedte en
hoogte. Bijgevolg moeten we zelf een standaard letter definiêren.
De keuze die we maken voor de vorm van een standaard karakter
is
de
volgende.
Een normalized device dat teksten bevat en dat
in
zijn geheel wordt afgebeeld op het gehele device,
levert op dit
device een letter op waarvan de breedte gelijk is aan 70% van
de
hoogte.
De
GKS-functie
set_charactar_height
stelt naast de
karakter-hoogte in WC ook een karakterbreedte in,
in overeenstemming
met
de standaardbreedte. De breedte in WC wordt dus zo gekozen dat de
breedte
in DC gelijk is aan 70% van de hoogte in DC.
De
vrije
ruimte tussen de karakters wordt ingesteld op 1/3 van de
breedte
in WC.
Tengevolge van deze default instelling zullen bij
afbeel-ding van het gehele genormaliseerde apparaat op het gehele device
teksten een aanvaardbare representatie hebben,
onafhankelijk van
de viewport, zie Figuur 2.1.
10 1
M
0
20
0
1 0K
WC
NDC
DC
fiGUUR 2.1. De afmetingen van karakters in WC, NDC en DC.
De
lange expressie in de statement voor
ch_~idthis een
cor-rectiefactor.
Het afbeelden van een deel van het genormaliseerde
apparaat (uitvergroten), of het afbeelden op een gedeelte van het
device,
of beide, zal nameliJk leiden tot (gewenste) vervorming.
Met
de
correctiefactor
in ch_width bereiken we
dat
het
niet
uitmaakt
of de gebruiker voor of na set_character_height met
de
functies set_workstation_window of set_workstation_viewport
vast-legt hoe
het genormaliseerde apparaat moet
worden
afgebeeld,
m.a.w.
we
hebben de standaardbreedte teruggerekend naar NOC.
BiJ de creatie van tekst bepalen uitsluitend de op dat moment
geldende gegevens voor werkstation window en werkstation viewport
de afwiJking van de default tekstrepresentatie. Hoogte en breedte
ziJn gerelateerd aan de Y- respectieveliJk de X-schaal van
het
window dat op dat moment geldig is.
De variabelen ch_haight,
ch_~idth,ch_exp_factor en ch_spacing
ziJn op
te vragen.
Indien gewenst kan dan met de
GKS-functies
set_character_expanaion_factor en set_character_spacing een
ande-re actuele bande-reedte en spatiêring worden ingesteld,
afwijkend van
de default instelling.
Met de GKS-functie set_text_path kan de schrijfrichting worden
ingesteld.
Naast de strings "left", "LEFT", "RIGHT" etc. kan dit
ook m.b.v.
de identifiers left,
right, up en
d~n.De heersende
schriJfrichting wordt bewaard in text_path.
Ten
behoeve
van de GKS-functie set_text_alignment zijn de
volgende identifiers toegevoegd:
normal, centra, bottom, base,
hal~.cap, top.
De opgegeven instructies worden gecodeerd bewaard in het array
taxt_alignment. In Figuur 2.2 staat de betekenis van een en ander
uitgelegd.
cap
line
+-
--left
haltline
I- - -+- -
boltomline
righl
FIGUUR 2.2.
De
verschillende Formele
pa-rameters die kunnen
worden
meegegeven aan de GKS-runctie
set text alignment,
aangege-ven in êên enkele letter.
Uoor
gebruik in de BKS-runctie sat_charactar_up_vactor is de
procedure
gae~_hoakgemaakt.
Deze procedure geert de werkelijke
hoek
in radialen die de opgegeven vector maakt met de
positieve
X-as
in een.orthonormaal assenstelsel.
De arcten-runetie geert
een hoek tussen
+~wen
-~wendit voldoet niet. De op deze manier
berekende
hoek die de character up vector maakt met de
horizon-taal wordt bewaard in ch_angla.
Dit betekent bijvoorbeeld dat de
aanroep set_character_up_vectorC-1,1) resulteert in een
ch_angle
gelijk aan
3w/~.De
GKS-runctie sat_taxt_indax wordt hier gebruikt om de
plot-stations met andere karaktersets te laten werken.
De
toegelaten
invoerparameter
komt
overeen met het getal dat de
karakterset
aanduidt in het manual, CHIT 86J.
De
UT2~0kent ook verschillende gestandaardiseerde
karakter-sets.
Indien
gewenst
kunnen deze ook in set_text_index worden
ondergebracht.
We
kunnen dan echter niet meer volstaan met
de
hier gegeven
eenvoudige implementatie,
maar moeten
een
tabel
implemente~en
in
ove~eenstemmingmet de
standaa~dCISO
B~J.Al-leen dan kan
appa~aatonafhankelijk wo~dengekozen door een
ge-bruike~.Het
inp~oduktvan
characte~up
vecto~en
cha~acterbase vector
is steeds gelijk aan nul,
d.w.z.
normale horizontaal
gesch~even lette~spassen in een
~achthoek.Aangezien de x- en u-coördinaat
in het algemeen
ve~schillendschalen zal de
rechthoek,
bepaald
doe~deze twee
vecto~en,die de te tekenen
st~ingomsluit,
veran-deren
in een
pa~allellog~ambij het schuin
plaatsen van een
tekst, zie
Figuu~2.3.
JHorizontaall
FIGUUR 2.3.
De invloed van
transfo~matiesbij het scheef
tekenen
van
een tekst.
Binnen de BKS-primitive text wordt de
p~ocedurecalc_char_pos
gedeclareerd. Na aanroep van deze procedure worden de
ar~ausxpos
en ypos gevuld met de apparaatcoördinaten van het punt linksonder
van ieder te tekenen karakter.
De
invoe~pa~amete~smoeten
wo~denopgegeven
in DC.
Daa~toemoeten x en y uit text,
alsmede
de
va~iabelench_height,
ch_~idth,ch_spacing en ch_angle worden
omgerekend en ingevuld bij x_dc,
y_dc,
hg_dc,
~d_dc,sp_dc en
Fi_dc.
Afhankelijk van de lengte van txt en de
invoe~parameterswordt
voor iedere text_path - taxt_alignment combinatie uitgerekend hoe
het
parallellogram er uit komt te zien.
De
schrijfrichting en
verplaatsing
in dit parallellogram worden bewaard in de
variabe-len x_shiFt en y_shiFt.
Het punt linksonder van het
eerste te
tekenen karakter wordt bewaard in x_init en y_init.
Er
wordt
in calc_char_pos geen onderscheid
gemaakt
tussen
'base' en 'bottom' en ook niet tussen 'cap' en 'top'.
De
proce-dure kan indien gewenst echter gemakkelijk worden uitgebreid. Een
dergelijke uitbreiding t.b.v.
top en bottam heeft overigens
al-leen nut voor de plotter.
De letters g en y bijvoorbeeld
hebben
alleen bij de plotter een gedeelte onder de character base line.
De
in totaal
~x~x6•96mogelijke text_path-text_alignment
com-binaties staan in zodanige structuur geprogrammeerd dat de
meest
waarschijnlijke combinaties het eerst aan bod komen in de
case-statements.
CEen
IF ... ELSIF ... ELSIF ... ELSIF ... Ft-statement
ge-draagt zich als een case-statement).
In
de body van text wordt eerst gekeken of er überhaupt tekst
is om te tekenen.
Uervolgens worden de projecties van de
charac-ter up
vector en de character base vector
uitgerekend
uit de
variabele ch_angla,
rekeninghoudend met het verschil in schaling
tussen de twee coördinaatrichtingen.
De projecties van de
genor-meerde character up vector zijn:
CcosCch_angle),O) en CO,sinCch_angle))
We
kunnen nu
ling gewijzigde,
tor uitrekenen.
dezelfde manier
eenvoudig de,
tengevolge van de ongelijke
scha-projecties van de genormeerde character up
vee-Deze projecties worden bewaard in dx2 en dy2. Op
berekenen we de projecties van
de
gewijzigde
character base vector, dx1 en dy1.
We hebben nu de gewenste vectoren. Bij aanroep van de
procedu-re calc_char_pos moeten we voor de hoek
~i_dc,die de gewijzigde
character up
vector
(vastgelegd met dx2 en dy2) maakt
met
de
horizontaal, de hoek opgeven die de vector loodrecht op de
gewij-zigde character base vector C-dyl,dxl) maakt met de
horizontaal.
De
procedure calc_char_pos werkt namelijk met DC die wel
gelijk
schalen,
m.a.w.
het
parallellogram uit Figuur 2.3 is voor
de
procedure calc_char_pos in iedere stand een rechthoek.
De
vecto-ren gevormd
door
Cdxl,dyl) en Cdx2,dy2) staan
immers
in het
algemeen niet geometrisch loodrecht op elkaar,
tenzij
toevallig
geldt:
ch_angle•k*w/2 met k een integer, zie Figuur
2.~.In deze
figuur
is
ook te zien dat,
indien mogelijk,
voor de tt tekenen
karakters een scheefstand moet worden ingesteld,
zodat de
karak-ters passen bij het parallellogram opgespannen door character
up
vecto~
en
cha~acte~base
vecto~.De scheefheid
wo~dtin de
figuu~gegeven
doe~de hoek tilt.
In de
linke~ figuu~staan de
vecto~en C-1.~)en
(~,1) algeb~aïschen
geomet~isch lood~echtop
elkaa~.In de
~echte~ figuu~staan deze
vecto~enalleen
algeb~aïsch lood~echt.Bijgevolg geldt
VOO~de
linke~ figuu~:fi_dc - ch_angle -
arctanC-~) + wen dus geldt: t i l t - 0
Uoor de rechter figuur geldt de uitdrukking:
t i l t -
a~ctanC-8)- arctanC-2) dus t i l t < 0
5
JO• TILT
4 8 3 6 2 4 2 0 2 3 0 2 3 4 5FIGUUR
2.~.De
invloed van een
ve~anderingvan de V-schaal
met
een
facto~twee op de
rep~esentatievan een schuin
geschreven tekst.
Nadat calc_char_pos de
a~~aysxpos en ypos heeft gevuld,
wo~dtgekeken welke
coö~dinatenbuiten het window
vallen, mits de
boclaan clipping_indicator true is.
Daa~toemoet het window eerst
in
Oe
bekend Zijn omdat de
karakte~positiesOOk in
Oe
Zijn
uitge-rekend.
De
bijbehorende geclipte
karakte~s wo~denvoorzien van
een vlag in
flags_~_dcen
wo~denniet getekend.
Nu
moet nog worden getest welke
ka~akte~sbuiten de
wo~kstation viewport vallen. Deze mogen nooit worden getekend.
Indien biJ
no~male ho~izontaleregels van
een
ka~akterde
rechterkant of de bovenkant gedeelteliJk buiten de werkstation
viewport
valt en de
ad~esseringChet punt
linksonde~)geschiedt
binnen de deviceli•itB, dan wordt gebruik gemaakt van de hardware
clip mogelijkheid van de plotstations.
Een
ka~akte~ wo~dtdan
zowel
links en rechts,als boven en onder op een correcte manier
geclipt, zie Figuur 2.5.
6ECI
I
F?l
TPl
FIGUUR 2.5.
Hardware clip
mogelijkhe-den van de plotstations.
Nu
moeten per werkstation de karakterhoogte en breedte worden
ingesteld.
Uoor de QUME betekent dit het instellen van XGAIN
en
YGAIN Czie hoofdstuk 1).
Vergroting van de GAIN betekent
vergro-ting van een karakter,
maar verkleining van het adresseerbare
veld.
De karakters kunnen slechts in taktranix alpha mode worden
getekend.
Dit betekent dat de oorsprong linksboven moet komen te
liggen en de YGAIN positief moet worden gekozen.
Doet
men
dit
niet dan worden de karakters ondersteboven getekend.
Bovendien
moet
voor
het positioneren voortdurend worden gewisseld
tussen
native mode en taktranix alpha mode,
omdat positioneren slechts
mogelijk
is in native mode.
Dit alles leidt tot de gegeven
con-structie in het programma Cregelnr 25500-25670).
De waarden
in
xpos en ypos zijn natuurlijk niet meer juist en moeten
worden
aangepast bij de nieuwe GAIN's. Dit gebeurt door de waarden op te
geven als in point.
De getallen 22.0 en 21.7 zijn
proefondervin-delijk vastgesteld.
Zij stellen breedte en hoogte voor
van
de
karakters
in DC in native mode als wordt overgegaan naar
taktra-nix alpha mode,
zonder verandering van GAIN.
Het zijn dus
afme-tingen
in DC die passen bij het adresseerbare veld gegeven
door
devicelimits.
De QUME kent alleen horizontale regels en geen
'!talies',
de
tekst is dus niet nauwkeuriger weer te geven.
Als alle karakters
getekend
zijn wordt het scherm weer in overeenstemming
gebracht
met de beginsituatie, zie ook activate_workstatian.
Bij de
UT2~0-terminalstellen we de karaktergrootte en breedte
in door het opgeven van een
character-~ace-en
een
character-Unit-cell.
De
factoren
8/7 en 10/7 zijn nodig omdat een
BxlO-matrix gevuld wordt met een karakter dat in een 7x7-BxlO-matrix
past.
De celgrootte correspondeert dus niet met de gewenste
karakteraf-metingen. Zonder deze factoren zouden de letters te klein
uitval-len.
Een
bijzonderheid van deze terminal is dat
de
karakters
passen
in
een matrix van rechthoekjes. Grotere karakters
implice-ren grotere blokjes en dus dikkere lijnen.
Indien de
karakters
een bepaalde hoogte-breedte verhouding overschrijden worden twee
of meer
tekens
naast elkaar getekend,
de
vereiste breedte
vullend,
zie Figuur 2.6.
De karakters hebben nu
de
gewenste
grootte en zitten in een cel van BxlO.
Om het karakter op
de
goede
plaats te krijgen moeten we het punt linksboven van
deze
cel adresseren.
Dit komt overeen met het linkerbovenpunt van êên
matrixrechthoekje geplaatst linksboven het karakter.
FIGUUR 2.6.
Het maken van
te brede
let-ters bij de
UT2~0.De
UT2~0heeft als extra mogelijkheid het schrijven op
niet-horizontale lijnen en !talies,
evenals de
plotter.
Uan
deze
mogelijkheid wordt nog geen gebruik gemaakt.
Bij
de plotstations worden karaktergrootte en breedte
inge-steld door deze op te geven
in
cm.
Een plotterunit komt
echter
overeen met
25 micron,
dus moeten de karakterafmetingen
in
oe
worden vermenigvuldigd met 0.0025.
Als de character base vector
niet horizontaal loopt wordt hij ingesteld m.b.v.
de
DI-instruc-tie. We
hebben daartoe
dxl
en
dut
reeds uitgerekend.
We moeten
hierbiJ
rekening houden met het feit dat de
procedure real_nr
alleen getallen waarvan de absolute waarde kleiner is dan
100
significant kan weergeven.
Hieraan is voldaan door te normeren.
De
character up vector maakt een hoek
tilt
met de vector
lood-recht op de character base vector Chet inprodukt van de
vectoren
dxl,dyl en -dyl,dxl is nul).
Door de tangens van deze hoek op te
geven
biJ
de St-instructie kunnen we de
character up
vector
instellen zodat de tekens cursief worden geplot. De twee
default-instructies DISL
zorgen voor rechtop-staande,
horizontaal
ge-schreven karakters, als
ch_angla- w/2.
Uoor
het positioneren tenslotte hebben xpos en ypos reeds
de
goede waarden.
2.8. Cirkels en ellipsen
Alle tot nu toe besproken werkstations kunnen zelf een
cirkel
genereren.
Het ligt dus voor de hand om dit gegeven te gebruiken
om een generalized drawing primitive te implementeren.
We moeten
echter
niet vergeten dat een cirkel getekend in een
willekeurig
window
vrijwel altijd transformeert naar een ellips in de
werk-station viewport. De QUME kan als enige ook ellipsen zelf
genere-ren.
Een
cirkel is dan een ellips waarvan de brandpunten
samen-vallen.
Uoor het maken van ellipsen moeten we, net als bij het
instel-len van karakterhoogte en breedte,
gebruik maken van
de
GAIN-instelling van
de QUME.
Een extra voorwaarde is bijgevolg het
horizontaal
of vertikaal lopen van de lange en korte as van
de
ellips.
Een
geroteerde ellips is dus alleen met
fill_area
te
benaderen Cd.m.v. een ellipsvormige veelhoek).
Indien wel aan deze voorwaarde is voldaan moet de aspect ratio
worden
gewijzigd m.b.v.
de GAIN-instructies zodat
een cirkel
overgaat
in een ellips met halve lange as a_dc en halve korte as
b_dc. We kiezen een oplossing waarbij de heersende GAIN's
gelijk-waardig worden gewijzigd,
zodat ze niet te sterk gaan
verschil-len. Daartoe krijgt
dafo~mationde waarde
die overeenkomt met de
wortel uit de gewenste afwijking van de aspect ratio.
Uervolgens
worden
de
twee heersend GAIN's tegengesteld
gewijzigd.
Hierna
kunnen
we
het centrum van de ellips uitrekenen en
instellen.
We
moeten dan coördinaten gebruiken die passen bij het
gemodificeer-de
veld,
net als bij het positioneren van de karakters uit een
tekst bij de QUME.
Uervolgens geven we het punt dat op de ellips
ligt en laten de ellips-creatie starten.
Indien mogelijk
wordt
gebruik
gemaakt van 'abbreviate addressing' om code te besparen
(zie ook
2.~.Lijnen).
Uiteindelijk worden de default
waardes
voor
de GAIN's ingevuld die passen biJ de devicelimits,
zie ook
text en activate_workstation.
We hanteren niet de voorgeschreven handelswijze voor de
imple-mentatie van een GDP, zie CISO
B~J.maar geven de
geïmplementeer-de functies een direct toegankelijke naam.
Als identifiers ziJn
gekozen: ellips, circle en set_arc_angle.
De
procedure set_arc_angle moet worden opgevat als een
attri-buut biJ ellips en circla. We laten de gebruiker niet twee punten
opgeven waartussen de kromme moet worden getrokken, zie EISO
B~J,maar we laten de booghoek instellen.
Op deze manier kan
biJvoor-beeld op de QUME een halve ellips worden getekend.
Deze krommes
worden altiJd tegen de klok in getekend, startend biJ het
opgege-ven punt. Gebruik van deze procedure heeft ook gevolgen voor de
cirkelvormige markers biJ de QUME.
Een gebruiker moet hier dus
rekening mee houden.
3. De applicatiebibliotheek PMl:GKSAPP.RAC
In een zestal rubrieken zullen de
p~oceduresvan de
applica-tiebibliotheek PMl:GKSAPP.RAC worden toegelicht. Deze bibliotheek
wordt
geladen na PM1:GKS68.RAC welke de GKS-basisfuncties levert
die werden beschreven in hoofdstuk 2.
De
applicatiebibliotheek
maakt
gebruik van globale declaraties uit deze
GKS-bibliotheek.
ZiJ
bevat een aantal
praktijkgerichte,
gebruikersvriendeliJke
tekenprocedures, die opgebouwd zijn uit de basisprocedures.
De
applicaties zijn ontstaan in een fysische werkomgeving
en
omvatten de meest voorkomende grafische handelingen in deze
omge-ving, zoals:
-g~afieken
tekenen (eventueel met teksten)
-meetpunten tekenen
-tekenen van
k~ommen-bewaren van tekeningen
Belangrijke identifiers zullen weer vet worden afgedrukt.
Uan
de verschillende procedures zullen we niet de
gebruiksmogeliJkhe-den
uitvoerig behandelen omdat dit reeds beschreven staat in het
handleidinggedeelte van CAME 87J.
3.1.
G~afischefiles
Het
array met tekeninstructies,
dat biJ
aanstu~ingvan
een
werkstation een plaatje
opleve~t,kan opgeslagen worden in een
file. · Om
met grafische files te kunnen werken zijn de
volgende
procedures geschreven.
De
voor
inte~actiefgebruik bedoelde procedure
sava_graphics
sch~iJft