\documentclass[a4paper]{book}
\usepackage{hyperlatex}
\T \usepackage[pdftex]{color,graphicx}
\usepackage{makeidx}

\usepackage[latin1]{inputenc}
\usepackage[dutch]{babel}

\usepackage{hyperref}

\captionsdutch
\datedutch
\extrasdutch
\W \htmlpaneldutch

% Prepare macro
\newcommand{\drgeoImagePath}{../fr/figures}
\newcommand{\drgeoApiOutLocale}{Uitkomst}
\newcommand{\drgeoApiExampleLocale}{Voorbeeld}
% Include common definitions
\input{../drgeniusCommon.tex}


\makeindex

\htmltitle{Gebruikershandleiding van Dr. Geo} 

\htmladdress{\small Commentaar of opmerkingen~? \\
  Bent u vrijwilliger om delen van de handleiding te schrijven~?\\
  -> Contacteer Hilaire Fernandes op 
      OFSET \drgeniusImage{hilaire-email} of 
word lid van de mailing list van \drgenius.}%syn. mail.list?


\title{Gebruikershandleiding van \drgenius \\
\drgeniusImage{fig0}}
\author{Hilaire Fernandes \\ Tobias Verbeke \\
\textit{OFSET}\\
\texttt{http://www.ofset.org}}


\begin{document}

\W \begin{center}

\maketitle

\W \end{center}

\xname{inhoudstabel}
\tableofcontents

\chapter*{Copyright}
Copyright (c)  2000-2003  OFSET.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
copy of the license is included in the section entitled "GNU Free
Documentation License".
      
Other copyright apply to the respective owners of the modified
documentations. See the section history for the complet list.


\xname{inleiding}
\chapter{Inleiding}

\drgenius{} is het programma voor interactieve meetkunde 
van Gnome. Je kan er meetkundige figuren mee tekenen
en deze interactief manipuleren, rekening houdende met
hun meetkundige eigenschappen.
Het programma is bruikbaar in lessituaties zowel in het lager
als in het middelbaar onderwijs.

De gebruikersinterface van \drgeo\ werd ontworpen om eenvoud
in gebruik, ergonomie en  gevorderde functies op een harmonische
wijze met elkaar te verzoenen.

Door de grote eenvoud van de \drgeo-interface
raakt de beginner onmiddellijk uit de 
voeten met de basisfuncties. Naarmate hij
de uithoeken van de interface en de werking
van \drgeo\ verkent, dienen de voortgezette functies
zich aan~: verschillende constructiewijzen van eenzelfde
object\footnote{Met eenzelfde commando is het mogelijk een
bepaald type object op verschillende wijzen te creëren.
Wanneer je, bij voorbeeld, het commando `cirkel tekenen' gebruikt,
kan je een cirkel definiëren aan de hand van het middelpunt enerzijds
en een ander punt, een lengte (van de straal) of een lijnstuk (met
de lengte van de straal) anderzijds.}, 
macro-constructies, sessies, aanpassing
van de interface, scriptmogelijkheden en \drgeo{} Scheme figuren. 
De gevorderde
functies blijken de interface niet te beladen, zodat men
er aangenaam gebruik van kan maken in het lager onderwijs.
Ook in het middelbaar onderwijs is het gebruik een makkie.

In de gedeelten die volgen worden de basisfuncties uit de
doeken gedaan. Vervolgens worden de voorgezette functies
in detail behandeld.

\drgeniusFigureSize{Opstartscherm van \drgenius}{fig1}{8}

Om een meetkundige figuur te tekenen, kan je drukken op 
de eerste knop van de taakbalk. Een andere manier om 
dit te doen is via het menu
\drgeniusMenu{Bestand->Nieuwe...->Figuur}. 
Wanneer je een nieuwe figuur hebt gecreëerd, verschijnt een 
nieuwe taakbalk met zes iconen.
Op het einde van de balk staat een menu dat toelaat de 
schaal van de huidige meetkundige figuur aan te passen.

\drgeniusFigureSize{Een lege meetkundige figuur}{fig2}{8}

Via de zes iconen op de taakbalk krijg je toegang tot menu's
voor specifieke functies. In het volgende hoofdstuk
staan die functies beschreven.


\drgeniusFigureSize{Een \drgenius-figuur 
en zijn beschrijving}{fig50}{8}

Bij elke figuur hoort een beschrijving in een paneel. 
Dit paneel wordt standaard uiterst links geplaatst zodat
aanvankelijk enkel de tekening van de figuur zichtbaar is.
De gebruiker kan echter op elk moment het paneel naar rechts
opschuiven en zo de beschrijving zichtbaar maken.
Een beschrijving van een figuur is een boomstructuur waarin
alle elementen van de figuur een plaats krijgen.
Om de relaties tussen de elementen zichtbaar te maken, kan je
op het `+'-teken klikken. 
Zo zie je de elementen waarmee
een ander deel van de figuur werd opgebouwd.

\chapter{Basisfuncties}

Dit hoofdstuk beschrijft de instrumenten om een meetkundige
figuur te construeren. Op het einde wordt getoond hoe
de gebruiker zijn persoonlijke voorkeuren kan instellen.

\section{Tekeninstrumenten}

Deze instrumenten zijn in zes groepen onderverdeeld. Je krijgt
toegang tot die groepen op de tweede taakbalk van \drgenius.

\drgeniusFigureSize{De categorieën van de instrumenten 
van \drgenius{} en hun beschrijving}{fig3}{12}

Wanneer je op een icoontje klikt waar een klein groen driehoekje
opgetekend staat, komt ogenblikkelijk een nieuwe verticale taakbalk
te voorschijn. Zo'n balk bevat alle functies van dezelfde familie.

Van links naar rechts, hebben we toegang tot de verticale taakbalken
om punten en lijnen te construeren, om transformaties in het vlak uit
te voeren, om waarden te berekenen, macro-constructies te gebruiken
en zaken aan te passen --~\emph{Verschillende instrumenten} 
op de figuur.

Al deze functies zijn eveneens te selecteren via een contextueel
menu dat verschijnt wanneer je met de rechtermuisknop klikt
op de achtergrond van een figuur.

\xname{point_tools} 
\subsection{Instrumenten die punten betreffen}

\subsubsection{Willekeurig punt}
\drgeniusIcon{fig4}
\label{free_point} 
\drgeniusIndex{Punt}{Willekeurig}{}{}

Tekent een willekeurig punt in het vlak of 
op een eendimensioneel object.
In het eerste geval, kan men het punt achteraf 
overal verplaatsen in het vlak. Je tekent het punt 
door eenvoudigweg te klikken op gewenste plaats in het vlak.
In het laatste geval kan het punt enkel vrij bewegen op het
eendimensionele object (de rechte, etc.) waarop het punt
oorspronkelijk werd getekend~; het punt plakt er als het
ware aan vast. 
Om een dergelijk punt te tekenen, klik je op een
drager (i.e.\ een rechte, een halfrechte, een lijnstuk, 
een cirkel, een cirkelboog, etc.).

\subsubsection{Middelpunt}
\drgeniusIcon{fig5}

\drgeniusIndex{Punt}{Middelpunt}{}{}

Tekent het middelpunt ofwel tussen twee punten ofwel van 
een lijnstuk.
In het eerste geval, selecteert de gebruiker twee punten.
In het laatste geval, selecteer je eenvoudigweg het
gewenste lijnstuk.

\subsubsection{Snijpunt}
\drgeniusIcon{fig6}

\drgeniusIndex{Punt}{Snijpunt}{}{}

Tekent het of de snijpunten van twee lijnen (i.e.\ een rechte,
halfrechte, lijnstuk, cirkelboog, cirkel). De gebruiker dient
twee lijnen te selecteren.

\subsubsection{Punt gedefinieerd door zijn coördinaten}
\drgeniusIcon{fig7}
\label{coordinate_point}

\drgeniusIndex{Punt}{Gedefinieerd door coördinaten}{}{}

Tekent een punt, gedefinieerd door zijn coördinaten. 
De gebruiker voert twee getallen in, 
waarbij het eerste als abscis, en het tweede
als ordinaat van het punt geldt.

\xname{line_tools}
\subsection{Instrumenten die lijnen betreffen}

\subsubsection{Rechte}
\drgeniusIcon{fig8}

\drgeniusIndex{Rechte}{}{}{}
Tekent een rechte, door twee punten gedefinieerd. 
De gebruiker selecteert twee punten.

\subsubsection{Halfrechte}
\drgeniusIcon{fig9}

\drgeniusIndex{Halfrechte}{}{}{}

Tekent een halfrechte, bepaald door twee punten.
De gebruiker selecteert twee punten. Het eerste punt vormt
de oorsprong van de halfrechte, 
het tweede wordt 
een willekeurig punt op de halfrechte.

\subsubsection{Lijnstuk}
\drgeniusIcon{fig10}

\drgeniusIndex{Lijnstuk}{}{}{}

Tekent een lijnstuk, begrensd door twee punten.

\subsubsection{Vector}
\drgeniusIcon{fig11}
\drgeniusIndex{Vector}{}{}{}

Tekent een vector, bepaald door twee punten. 
De gebruiker selecteert twee punten, waarvan 
het eerste als aangrijpingspunt geldt en het tweede het grenspunt is.

\subsubsection{Cirkel}
\drgeniusIcon{fig12}

\drgeniusIndex{Cirkel}{}{}{}

Tekent een cirkel. Men kan op verschillende manieren 
een cirkel tekenen. Men maakt een van drie volgende selecties~:
\begin{enumerate}
 \item het middelpunt en een punt op de cirkel~;
 \item het middelpunt en een getal (de straal van de cirkel)~;
 \item de cirkel en een lijnstuk, dat de lengte van de straal bepaalt.
\end{enumerate}

\subsubsection{Cirkelboog}
\drgeniusIcon{fig13}

\drgeniusIndex{Cirkelboog}{}{}{}

Tekent een cirkelboog, bepaald door drie punten. Het eerste is het
beginpunt van de boog, het derde is het eindpunt van de boog, en het
tweede punt is een (willekeurig) punt op de boog.

\subsubsection{Meetkundige plaats}
\drgeniusIcon{fig14}

\drgeniusIndex{Meetkundige plaats}{}{}{}

Creëert een meetkundige plaats, bepaald door twee punten. 
De gebruiker selecteert twee punten. Het eerste punt is een punt
op een lijn. Het tweede punt staat in een welbepaalde relatie tot
het eerste punt, zodat het eerste punt voorwaarden stelt aan de
bewegingsvrijheid van het tweede (i.e.{} wanneer het ene punt beweegt,
beweegt het andere eveneens). 

\subsubsection{Veelhoek}
\drgeniusIcon{fig15}

\drgeniusIndex{Veelhoek}{}{}{}

Tekent een veelhoek, bepaald door $n$ punten. De gebruiker selecteert
$n+1$ punten die de hoeken van de veelhoek bepalen. Het eerst en laatst
geselecteerde punt moeten hetzelfde zijn. Zo weet \drgenius{} dat de
puntenselectie afgerond werd.
Het object veelhoek is geen object dat zich gedraagt als de andere
lijnen. Het is namelijk niet mogelijk om er een punt op te plaatsen
of om een snijpunt te tekenen met een andere lijn. Het is daarentegen 
wel mogelijk om het beeld van een veelhoek te tekenen onder een
meetkundige transformatie.

\xname{transformation_tools}
\subsection{Instrumenten die transformaties in het vlak betreffen}

\subsubsection{Evenwijdige rechte}
\drgeniusIcon{fig16}

\drgeniusIndex{Rechte}{Evenwijdige}{}{}

Tekent een rechte, evenwijdig aan een richting en door een
punt. De gebruiker selecteert een punt en een richting (zoals
die bepaald wordt door een rechte, een halfrechte, een lijnstuk
of een vector).

\subsubsection{Loodlijn}
\drgeniusIcon{fig17}                    

\drgeniusIndex{Rechte}{Loodlijn}{}{}

Tekent een rechte, loodrecht op een richting en door een punt.
De gebruiker selecteert een punt en een richting
(i.e.\ een rechte, een halfrechte, een lijnstuk of een vector).

\subsubsection{Spiegeling (om een as)}
\drgeniusIcon{fig18}

\drgeniusIndex{Transformatie}{Spiegeling}{om een as}{} 

Tekent het beeld van een object onder een spiegeling. 
De gebruiker selecteert het te spiegelen object en de spiegelas
(een rechte). 
Wanneer je een rechte wil spiegelen, geldt de eerste rechte als
de te spiegelen rechte.

\subsubsection{Puntspiegeling}
\drgeniusIcon{fig19}

\drgeniusIndex{Transformatie}{Spiegeling}{Puntspiegeling}{} 

Tekent het beeld van een object onder een puntspiegeling. 
De gebruiker selecteert het te spiegelen object en 
het centrum van de spiegeling (een punt). 
Wanneer de gebruiker een punt wil spiegelen, geldt het eerste punt
als het te spiegelen punt.

\subsubsection{Verschuiving}
\drgeniusIcon{fig20}

\drgeniusIndex{Transformatie}{Verschuiving}{}{}

Tekent het beeld van een object onder een verschuiving.
Wanneer de gebruiker het beeld van een vector wenst te tekenen, 
geldt de eerste vector als de te verschuiven vector. 

\subsubsection{Draaiing}
\drgeniusIcon{fig21}

\drgeniusIndex{Transformatie}{Draaiing}{}{}

Tekent het beeld van een object onder een draaiing. 
De gebruiker selecteert het te draaien object,
het centrum van de draaiing en de            
hoek van de draaiing.
Wanneer men het beeld van een punt onder een draaiing
wil tekenen, geldt het eerst gekozen punt als het te
draaien punt.

Aan de hoek kan men op drie verschillende manieren een 
waarde toekennen~:

\begin{itemize}
\item \textbf{getalwaarde}~: de hoek wordt in dit geval
uitgedrukt in radialen. 
Voorbeelden van getalwaarden zijn~: 
een willekeurige waarde, een afstand tussen twee punten, de
lengte van een lijnstuk, een coördinaat, een waarde die de
uitkomst is van een \drgenius-Guile-script, etc.~;
\item \textbf{de grootte van een meetkundige hoek, 
gevormd door drie punten}~: 
hier wordt de hoekgrootte uitgedrukt in graden. 
Opgelet, de grootte kan in dit geval enkel vallen in 
het interval [0~;~180]~;
\item \textbf{de grootte van een georiënteerde hoek tussen
twee vectoren}~: 
hier wordt de hoekgrootte uitgedrukt in graden. De grootte
van de hoek kan vallen in het interval ]-180~;~180].
\end{itemize}

\subsubsection{Homothetie}
\drgeniusIcon{fig22}

\drgeniusIndex{Transformatie}{Homothetie}{}{}

Tekent het beeld van een object onder een homothetie. 
De gebruiker selecteert een te transformeren object,
het centrum en de factor (i.e.\ een getal).         
Wanneer je het beeld van een punt wil tekenen, geldt
het eerste punt als het te transformeren punt.

\xname{numeric_tools}
\subsection{Numerieke instrumenten}

\subsubsection{Afstand, lengte \& getal}
\drgeniusIcon{fig23}
\label{numeric_tool}

\drgeniusIndex{Getal}{}{}{}
\drgeniusIndex{Rechte}{Richtingscoëfficiënt}{}{}
\drgeniusIndex{Rechte}{Afstand}{}{}
\drgeniusIndex{Cirkel}{Omtrek}{}{}
\drgeniusIndex{Lijnstuk}{Lengte}{}{}
\drgeniusIndex{Vector}{Norm}{}{}
\drgeniusIndex{Cirkelboog}{Lengte}{}{}
\drgeniusIndex{Getal}{Willekeurige waarde}{}{}

Creëert een getalwaarde. De getalwaarde kan naar keuze
ofwel berekend ofwel ingebracht worden~:
\begin{enumerate}
 \item twee punten~: de afstand tussen deze twee punten~;
 \item een lijnstuk~: de lengte van het lijnstuk~;
 \item een vector~: de norm van deze vector~;
 \item een cirkel~: de omtrek van de cirkel~;
 \item een cirkelboog~: de lengte van de cirkelboog~;
 \item een rechte~: de richtingscoëfficiënt van de rechte~;
 \item een rechte en een punt~: de afstand tussen van het punt
tot de rechte~;
\item wanneer je op het tekenvlak klikt, kan je een nieuwe
getalwaarde invoeren (i.e.\ een willekeurige waarde).
\end{enumerate}

\subsubsection{Hoek}
\drgeniusIcon{fig24}

\drgeniusIndex{Hoek}{Meetkundige}{}{}{} 
\drgeniusIndex{Hoek}{Georiënteerde}{}{}{}

Berekent de grootte van een hoek, gedefinieerd door
hetzij drie punten hetzij twee vectoren.
In het eerste geval wordt de hoek als niet-georiënteerd

beschouwd (i.e.{} als een hoek waarvan de grootte binnen het
interval [0~;~180] graden valt).
In het tweede geval wordt de hoek als een georiënteerde
hoek beschouwt en valt de hoekgrootte dus binnen het
interval ]-180~;~180].

\subsubsection{Coördinaten}
\drgeniusIcon{fig25}

\drgeniusIndex{Punt}{Coördinaten}{}{}
\drgeniusIndex{Vector}{Coördinaten}{}{}

Creëert de coördinaten (abscis en ordinaat) van een punt
of van een vector.

\subsubsection{\drgenius-Guile-script}
\label{script-tool}
\drgeniusIcon{fig49}

\drgeniusIndex{Script}{}{}{}

Maakt een \drgenius-Guile-script aan. Het script ontvangt
\emph{n} objecten als invoergegevens. 
Het kan, wanneer daarom gevraagd wordt, een getalwaarde
als uitkomst leveren, die dan wordt afgebeeld in de figuur.
Een script kan gebruikt worden 
omwille van de neveneffecten 
of voor de uitkomst die het levert.
De Guile-scripts van \drgenius{} worden in detail belicht
in het  \link{hoofdstuk voor gevorderde 
functies}[ (hoofdstuk \Ref)]{advancedFeatures} en 
met name in het \link{deel 
\drgenius-Guile-scripts}[ (deel \Ref, pagina \Pageref)]{script}.


\xname{macroconstruction_tools}
\subsection{Instrumenten voor macro-constructies}

\drgeniusIndex{Macro-constructie}{}{}{}

\subsubsection{Een macro-constructie aanmaken}
\drgeniusIcon{fig26}

Slaat de opeenvolgende stappen van de constructie van 
een meetkundige figuur op en vormt het geheel om tot
één enkele macro-constructie. 

\subsubsection{Een macro-constructie uitvoeren}
\drgeniusIcon{fig27}

Voert een vooraf aangemaakte macro-constructie 
uit (i.e.\ ``lanceert ze'' of ``laat ze afspelen'').  
De macro-constructie kan nieuw zijn (pas geconstrueerd) 
of opgeroepen zijn uit een bestand (waar ze vooraf 
werd opgeslagen).

\drgeniusNote{De macro-constructies worden voorgesteld in het
\link{deel gewijd aan
macro-constructie}[, deel \Ref, pagina \Pageref]{macroConstruction}.}

\xname{other_tools}
\section{Andere functies}

\subsection{Boomstructuur van de constructie}

\drgeniusIndex{Historiek}{Boomstructuur}{}{}

Elke figuur is verbonden met een boomstructuur van de 
constructie. De boom is chronologisch, d.w.z. dat hij
van boven naar beneden de verschillende stappen in de 
constructie van de figuur weergeeft.
Bepaalde takken aan de boom kunnen worden uitgeklapt 
om de antecedenten --~ de samenstellende 
objecten~-- zichtbaar te maken die gebruikt werden
om het (resulterende) object te definiëren.

De boom wordt standaard verscholen. Hij is eigenlijk 
dichtgeklapt tegen de linkerboord van het venster.
Om hem te voorschijn te toveren, moet je de boom
ontvouwen met behulp van de muis.
Beweeg hiertoe de muis naar de linkerrand van het
\drgeo-venster. Wanneer de muiscursor verandert in een``<->'',
druk dan de muisknop in en sleep de boom open (naar rechts).

\subsection{Een figuur verplaatsen}

\drgeniusIndex{Figuur}{Verplaatsen}{}{}

Je kan een figuur verplaatsen door de Control-toets in
te drukken samen met de eerste muisknop.

\subsection{Een object verplaatsen}
\drgeniusIcon{fig28}

\drgeniusIndex{Object}{Verplaatsen}{}{}

Je kan een object verplaatsen door het vast te nemen (eerste
muisknop) en te verschuiven naar de gewenste plaats. 
De figuur wordt ogenblikkelijk opnieuw getekend, rekening
houdende met haar eigenschappen.
Omzeggens alle meetkundige objecten kunnen verplaatst
worden. Als het nodig is verplaatst \drgenius\ eveneens
de willekeurige punten die in verband staan tot het object.
Wanneer je b.v.\ een rechte verplaatst, die gedefinieerd
werd door twee punten, zal \drgenius\ in eenzelfde beweging
deze punten meeverplaatsen.

\subsection{Een object verwijderen}
\drgeniusIcon{fig30}

\drgeniusIndex{Object}{Verwijderen}{}{}

Een object van een figuur kan verwijderd worden door dit
menu te activeren.
De gebruiker kan de verwijdering eventueel annuleren. Hij
kan daartoe ofwel de functie `Ongedaan maken' gebruiken op
de taakbalk, ofwel door dezelfde functie aan te klikken
in het menu. % evt. verduidelijken
Standaard zijn 10 opeenvolgende annulaties mogelijk, maar
dit aantal kan worden aangepast in het dialoogvenster
`Voorkeuren'.

\xname{editing_object_styles}
\subsection{Het uitzicht van een object aanpassen}
\drgeniusIcon{fig29}

\drgeniusIndex{Bewerken}{Uitzicht}{}{} 

\drgeniusIndex{Object}{Nieuwe naam geven}{}{} 
\drgeniusIndex{Nieuwe naam geven}{Object}{}{} 

\drgeniusIndex{Object}{Verbergen}{}{} 

Van elk meetkundig object kan je een aantal visuele eigenschappen 
(zoals zijn kleur, dikte, etiket, grootte en vorm) aanpassen. 
Bovendien is het mogelijk om tijdelijk een object te verbergen
zonder het te verwijderen. 
Het kan bij voorbeeld nuttig zijn om voorbereidende
constructies onzichtbaar te maken zonder ze 
daarom te verwijderen. 
Al deze eigenschappen kunnen worden aangepast via
het dialoogvenster dat verschijnt wanneer de gebruiker
op een object van de figuur klikt.
Om dit te doen, activeert men eerst de modus die toelaat
het uitzicht van een object aan te passen door 
\drgeniusMenu{Andere->Uitzicht}  te selecteren op het contextuele
menu van de figuur. Men kan enveneens op bovenstaand icoon klikken,
dat deel uitmaakt van de zesde iconenschuif.


\drgeniusIndex{Point}{Renommer}{}{}
 


Het dialoogvenster 
Uitzicht van een punt aanpassen% veranderen in Stijl van een punt !!!
betreft alle soorten punten. 
Het is mogelijk de kleur, de vorm, de grootte, de naam en 
de zichtbaarheid aan te passen. 
\drgeniusFigure{Dialoogvenster 
voor het uitzicht van een `punt'-object}{fig31}%TV objet weg tov. Fr. 

Het dialoogvenster Uitzicht van een lijn betreft
rechten, halfrechten, lijnstukken, vectoren, cirkels,
cirkelbogen en meetkundige plaatsen.
Het is mogelijk de kleur, de stijl, %TV ??
de naam en de zichtbaarheid aan te passen. 
Wanneer een rechte, halfrechte, vector of lijnstuk door
twee punten gedefinieerd zijn en die twee punten een 
naam werden toegekend, wordt de naam van de rechte, etc. 
automatisch afgeleid van de naam van de twee punten. 
In dit geval kan de gebruiker zelf aan de rechte, etc. 
geen nieuwe naam geven.

\drgeniusFigure{Dialoogvenster voor het uitzicht van een object
`lijn'}{fig32}

Het dialoogvenster Uitzicht van een getal of van 
een veelhoek betreft allerlei getalwaarden
(ingevoerd door de gebruiker, berekend
door een \drgenius-Guile-script of een grootte 
afgeleid van een meetkundige figuur) 
en de verschillende veelhoeken.

\drgeniusFigure{Dialoogvenster voor het uitzicht van getallen \& 
veelhoek-objecten}{fig33}

\T \clearpage

\subsection{De eigenschappen van een object aanpassen}
\label{property-item}
\drgeniusIcon{fig52}

\drgeniusIndex{Editer}{Eigenschappen}{}{}
\drgeniusIndex{Editer}{Punt}{}{}
\drgeniusIndex{Editer}{Script}{}{}
\drgeniusIndex{Editer}{Getalswaarde}{}{}

Van bepaalde eigenschappen van objecten kan de gebruiker
de parameters aanpassen. 
Wanneer je op een object klikt, verschijnt het
geëigende dialoogvenster. Op dit moment gaat het
over volgende objecten~:

\begin{enumerate}
 \item willekeurig punt~: abscis et ordinaat 
kan men wijzigen~;\\
 \drgeniusFigure{Aanpassingen voor de coördinaten van
een willekeurig punt}{fig34}

 \item willekeurige getalwaarde~: de waarde kan aangepast
worden~;\\
 \drgeniusFigure{Wijzigiging van een willekeurige 
getalwaarde}{fig36}

 \item script~: de code kan aangepast worden.\\
 \drgeniusFigure{Wijziging van een script}{fig35}

\end{enumerate}

\T \clearpage

\subsection{Een rooster weergeven}

\drgeniusIndex{Figuur}{Weergeven}{Rooster}{}
\drgeniusIndex{Rooster}{Weergeven}{}{}

Het is mogelijk een rooster met de eenheden weer te
geven op elke \drgeo-figuur via het menu
\drgeniusMenu{Editie->Rooster tonen of verbergen}. %FIXME
Je kan een rooster eveneens oproepen met de 
sneltoets \drgeniusMenu{Ctrl-G}. Wanneer men de functie
een tweede maal activeert, verdwijnt het rooster opnieuw.
Het betreft een unitair rooster~: elke onderverdeling
stelt een eenheid voor. Tenslotte, wanneer het rooster
zichtbaar is bij het opslaan, wordt het mee opgeslagen.

\section{Voorkeuren van de gebruiker}

\xname{default_behaviour}
\subsection{Standaardvoorkeuren}
\label{default_behaviour}

\drgeniusIndex{Bewerken}{Standaardvoorkeuren}{}{} 

De standaardinstellingen van \drgenius\ kunnen op
verscheidene manieren worden bijgesteld. 
Om zijn voorkeuren in te stellen, 
gaat de gebruiker naar het menu 
\drgeniusMenu{Bewerken->Voorkeuren...} 
om het dialoogvenster van de voorkeuren te openen.

\drgeniusFigureSize{Voorkeuren i.v.m. de meetkundige figuren}{fig38}{8}

Het dialoogvenster bevat twee delen~: 
\begin{enumerate}
  \item Het eerste deel betreft de voorkeuren in verband met
        de meetkundige figuren. Met de oortjes kan men de
        standaardinstellingen van elk soort object (meetkundig
        of numeriek) aanpassen. Men kan er met name het
        uitzicht van de figuren regelen.
  \item Het tweede deel betreft de algemene voorkeuren~:
   \begin{itemize}  
    \item Het aantal niveaus voor het Ongedaan maken/Herstellen~;
    \item De standaardnaam bij creatie van een nieuwe figuur. 
      De \%d wordt vervangen door een geheel getal dat 
      \drgenius\ bijhoudt. Bij elke nieuwe figuur wordt 
      dit getal met een eenheid verhoogd~;
    \item De standaard internetbrowser --~bladeraar~-- om
          de on-line-hulp weer te geven~;
    \item De standaardnamen bij het opslaan van een figuur
          of een sessie~;
    \item De standaardnamen voor bestanden met
         figuren die naar een \LaTeX- of PostScript-formaat
         worden geëxporteerd~;
 \end{itemize}
\end{enumerate}

\drgeniusIndex{Wijzigen}{Standaarduitzicht}{}{}
\drgeniusIndex{Wijzigen}{Standaardinstellingen}{Ongedaan maken/Herstellen}{}
\drgeniusIndex{Wijzigen}{Standaardinstellingen}{Namen}{}
\drgeniusIndex{Hulp}{Standaardvoorkeuren}{Bladeraar}{}

\subsection{Andere voorkeuren}

\drgeniusIndex{Figuur}{Nieuwe naam geven}{}{}

Naast de standaardinstellingen van \drgenius, 
kan de gebruiker ook de naam van een figuur
aanpassen via het menu
\drgeniusMenu{Bewerken->Nieuwe naam geven}.

\drgeniusFigure{Naam van een figuur wijzigen}{fig39}

\chapter{Gevorderde functies}%?
\label{advancedFeatures}

In dit hoofdstuk stellen wij functies voor die toelaten
de mogelijkheden van \drgenius{} uit te breiden of
het programma aan te passen aan een gegeven lessituatie.

De eerste functie is de macro-constructie. 
Hiermee kan je verschillende opeenvolgende stappen
in een constructie opslaan. Achteraf kan je deze 
constructie (opname) automatisch opnieuw laten bouwen
(laten afspelen) of ze bewaren in een bestand.

De \drgenius{}-Guile-scripts --~DGS~-- vormen een
andere uitbreidingsmogelijkheid voor \drgenius. 
Deze scripts zijn werkelijk onderdelen van een 
figuur net als de meetkundige onderdelen. 
Zo'n script krijgt een of meer meetkundige 
items als input, en geeft als output een getalwaarde
die in de figuur wordt geplaatst.

De Guile scripts in \drgenius\ zijn nuttig
omdat ze een waarde berekenen en weergeven of 
omwille van hun `pedagogisch surplus'.
Alles hangt af van wat de gebruiker wil
realiseren.

Tenslotte is er de aanpassing van de gebruikersinterface
van \drgenius. Deze stelt een leraar in staat stelt een
sessie voor te bereiden met documenten waarin bepaalde
functies geblokkeerd zijn en beveiligd met een paswoord.

\xname{using_macro}
\section{Macro-constructie}
\label{macroConstruction}

\drgeniusIndex{Macro-constructie}{Inleiding}{}{}

Een macro-constructie gelijkt een beetje op een 
procedure waarbij je zelf onderdelen van de figuur
aangeeft, en de macro-constructie vervolgens op
basis van die gegevens nieuwe elementen automatisch 
toevoegt aan de figuur. 
Macro-constructies verrichten hun bouwwerk
volgens het model dat werd aangereikt door
de gebruiker. 
Dit betekent dat hij de opeenvolgende stappen in 
het constructieproces zelf een eerste keer
toepast op een bepaalde figuur, om \drgenius\
vervolgens te vragen die opeenvolgende stappen 
als één geheel op te slaan in een macro-constructie. 
Om een constructie-proces te kunnen opslaan 
moet \drgenius\ een beeld hebben van de items
die van in het begin aanwezig zijn én van de items
die op het einde van de rit zichtbaar moeten zijn.
Het spreekt voor zich dat de items in de eindconstructie 
\textit{enkel en alleen} getekend kunnen worden %\/ ?
aan de hand van de items die van bij de start 
aanwezig waren. Anders kan \drgenius\ de 
eindconstructie niet stap voor stap afleiden
uit de elementen in de beginsituatie.

Op die manier leidt \drgenius\ dus de logica 
van het constructie-proces af en slaat die op in 
een macro-constructie. Achteraf kan de gebruiker
deze macro-constructie het werk laten doen. De
macro-constructie vraagt dan enkel om de begingegevens 
(van het juiste type) aan te duiden en construeert zelf
alle onderdelen van de eindfiguur.

\drgeniusNote{De items van voorlopige of onzichtbare 
constructies worden eveneens geconstrueerd door
de macro-constructie. Ze zijn noodzakelijk om het
eindresultaat te bekomen.} % verduid. dat ze onzichtb. blijv.

Als illustratie van een macro-constructie, vertrekken
we van het voorbeeld waarbij een gebruiker de constructie
van een cirkel door drie punten samen met zijn
middelpunt wil opslaan.

\drgeniusFigureSize{De beginfiguur}{fig40}{4}

\drgeniusIndex{Macro-constructie}{Aanmaken}{}{}

Om een macro-constructie aan te maken, moet de 
gebruiker eerst zelf de eindfiguur construeren~:
deze figuur fungeert als model voor de macro-constructie.

\drgeniusFigureSize{De figuur met de gewenste eindconstructie}{fig41}{4}

\subsection{Aanmaken van de macro-constructie}

Op dit moment, zijn de opeenvolgende stappen in de
constructie doorlopen. De gebruiker dient nu \drgenius\
duidelijk te maken dat hij een macro-constructie wil
maken, vertrekkende van deze voorbeeldconstructie. 
Daartoe moet hij beroep doen op de functie
\drgeniusMenu{Een macro aanmaken} die men op de taakbalk
vindt
\drgeniusIcon{fig26} of via het 
contextueel %uitleg toevoeg. = recht. muiskn. voor cont. menu
menu van het beeld in zijn geheel.

Een dialoogvenster zal de gebruiker 
bijstaan tot op het einde. Je selecteert
de invoerparameters en de uitvoerparameters. 
Vervolgens kies je de naam en voeg je eventueel een 
beschrijving van de macro-constructie toe.

\drgeniusFigureSize{Eerste pagina van het dialoogvenster dat
de aanmaak van een macro-constructie begeleidt}{fig42}{6}

Op de tweede pagina van het dialoogvenster kan men
de invoerparameters kiezen. In ons voorbeeld gaat het
om de drie punten die de cirkel definiëren.
Het enige wat de gebruiker moet doen is naar die tweede
pagina gaan en de drie punten op de figuur aanklikken.
Als items correct geselecteerd worden, 
flikkeren ze op het scherm.

\drgeniusFigureSize{De tweede pagina, de drie punten
zijn geselecteerd}{fig43}{6}

Op de derde pagina kiest de gebruiker de
uitvoerparameters.
In ons voorbeeld willen we de cirkel en zijn
middelpunt als resultaat van de macro-constructie. 
De uitvoerparameters worden op dezelfde manier gekozen
als de invoerparameters.

\drgeniusFigureSize{De derde pagina, de cirkel en zijn
middelpunt zijn geselecteerd}{fig44}{6}

Op de vierde pagina kan de gebruiker een naam en
een beschrijving toekennen aan de macro-constructie.
Die informatie zal weergegeven worden, telkens je 
de bewuste macro-constructie uitvoert. 
Op die manier zijn macro-constructies overigens
makkelijk te onderscheiden van mekaar.

\drgeniusFigureSize{De vierde pagina, de naam en de 
beschrijving van de macro-constructie}{fig45}{6}

Op de vijfde en laatste pagina van het dialoogvenster
wordt de aanmaak afgerond, zodra
de gebruiker op de knop
\texttt{Beëindigen} drukt. 
Als hij dat wil, kan hij ook op zijn stappen
terugkeren en de parameters van de macro-constructie
aanpassen.

\drgeniusNote{Als de keuze van invoerparameters en 
van uitvoerparameters niet coherent is
(\drgenius{} vindt geen logica in de constructie), 
kan de macro-constructie niet aangemaakt worden.
In dat geval, bekijkt de gebruiker zijn selectie
van invoer- en uitvoerparameters best nog
eens van dichterbij. Hij kan altijd terug naar de
tweede of derde pagina van het dialoogvenster
om die keuze te veranderen.}

In deze fase is de macro-constructie aangemaakt
en steekt hij in het geheugen van 
\drgenius. In het volgende deel, zien we hoe
er gebruik van te maken.

\subsection{Uitvoeren van een macro-constructie}

\drgeniusIndex{Macro-constructie}{Uitvoeren}{}{}

Om een macro-constructie uit te voeren, doet de
gebruiker beroep op de functie
\drgeniusMenu{Een vooraf gebouwde 
macro uitvoeren} 
vanop de taakbalk \drgeniusIcon{fig27} 
of via het contextueel menu
van het beeld in zijn geheel.

In het dialoogvenster dat verschijnt, kiest de
gebruiker de gewenste macro-constructie. 
Op de tweede pagina selecteert hij de macro-constructie
uit de lijst bovenaan het dialoogvenster. 
Eens hij de macro gekozen heeft, kan hij
onmiddellijk klikken op de invoerparameters
op de figuur. 
Van zodra alle invoerparameters geselecteerd zijn,
wordt de macro-constructie uitgevoerd en 
wordt het eindresultaat (de uitvoerparameters) zichtbaar.

\drgeniusFigureSize{De gebruiker selecteert de
invoerparameters op de figuur}{fig46}{6}

In ons voorbeeld had de macro-constructie drie 
invoerparameters nodig (drie punten), waarna
de cirkel door die punten en zijn middelpunt
worden geconstrueerd. 
Om de macro-constructie te kunnen uitvoeren, moeten
er dus al drie punten staan op de figuur 
(waar we op aan het werken zijn).

\drgeniusFigureSize{Een figuur met drie punten}{fig47}{4}

Wanneer we de macro-constructie toepassen op die
drie punten, verschijnt de gewenste cirkel
met zijn middelpunt.

\drgeniusFigureSize{De eindfiguur, met de cirkel en zijn
middelpunt}{fig48}{4}

\T \clearpage

\xname{drgenius_guile_script}
\section{\drgenius{} Guile scripts}
\label{script}

\drgeniusIndex{Script}{Inleiding}{}{}

\drgenius{} is compatibel met 
Guile. 
Dit betekent dat het mogelijk is Guile scripts uit
te voeren met \drgenius. Maar wat is Guile~? 
Volgens het Guile-handboek~:

\begin{quote}{\em
Guile is een interpreter voor de programmeertaal
Scheme,
en werd ontworpen voor gebruik in een grote hoeveelheid
omgevingen.
}
\end{quote}

Volgende citaten beschrijven precies hoe
Guile gebruikt wordt in \drgenius~:

\begin{quote}{\em
    Net als een shell, kan Guile op 
interactieve manier gebruikt worden, 
expressies %alternatief ?
ontvangen van de gebruiker, ze evalueren
en de resultaten weergeven. Guile kan ook, 
net als een interpreter van scripts, code
lezen en uitvoeren die in een bestand bewaard werd. 
Guile is eveneens beschikbaar als een bibliotheek
die toelaat op eenvoudige wijze 
een volwaardige Scheme interpreter in te bouwen
in andere toepassingen.
Een toepassing kan Guile gebruiken als een
uitbreidingstaal, 
als een krachtige taal voor de eigen configuratie
of als een multifunctionele ``lijm'', die
de primitieven % verklarende voetnoot toevoegen ?
van de toepassing verbindt.  }
\end{quote}

Een API is beschikbaar in \drgenius\ via
de Guile interpreter. 
Het is een verzameling ``haakjes'' % niet gesnapt; nog aanpassen
in de meetkundige motor.
Dat is de reden waarom een gebruiker
scripts kan schrijven om de (meetkundige 
of numerieke) items van een figuur
te manipuleren. 
Omdat scripts onderdelen zijn van een figuur
net als andere onderdelen, is het niet
nodig ze in een afzonderlijk bestand
op te slaan~: ze worden bewaard
in het bestand van de figuur. 
In wat volgt gebruiken we de afkorting DGS om
een ``\drgenius-Guile-script'' aan te duiden.

\subsection{DGS a.d.h.v.\ voorbeelden} 

\drgeniusIndex{Script}{Voorbeelden}{}{}

Het instrument om een DGS te schrijven is
bereikbaar via het numerieke onderdeel van 
het contextueel menu
of van de gereedschapskist. 
Een DGS kan tussen de 
0 en \textit{n} invoerparameters 
te verwerken krijgen. 

Nadat men het instrument gekozen heeft,
volstaat het de in te voeren objecten 
aan te klikken en vervolgens ergens op de
achtergrond van de figuur.
Op die laatst aangeklikte positie zal
het script geplaatst worden.

In wat volgt stellen wij voor op enkele
DGS-voorbeelden te werken, zodat men
er de kracht en functionaliteit
makkelijker van kan inzien. 
Net als de macro-constructies, geven
de DGS een speciale dimensie
aan \drgenius.
Ze laten je toe --~elk met een andere 
aanpak\footnote{Macro-constructies hebben
een meetkundige invalshoek. DGS daarentegen 
werken vanuit een numerieke invalshoek
maar laten vooral ook toe te prutsen en
de dingen fijn te stellen (te ``hacken'' in het Engels).}~-- 
paden te bewandelen die de auteurs van 
het programma niet bewandeld hebben
of niet wensen te bewandelen.

Het is belangrijk bewust te zijn
dat het leeuwendeel van de funtionaliteit
van de GNU-Guile-interpreter 
aanspreekbaar is via de DGS. 
Dit is met name zo voor de 
functiebibliotheken\footnote{In het
bijzonder,  de wiskundige functies}, die
we uiteraard intens zullen gebruiken.


\paragraph{DGS zonder invoerparameters}

Klik, na \link{het instrument voor scripts}[(Cf. deel \Ref, pagina
\Pageref)]{script-tool} te hebben gekozen, 
direct op de achtergrond van de figuur, op de plaats
waar je het script wil zetten. 
Klik vooral op geen enkel object van de 
figuur. Als je dat wel zou doen, denkt \drgenius\ 
dat je dit object als invoerparameter
van het script aanklikt\footnote{Als je per toeval
toch op een object zou klikken, selecteer dan
opnieuw het instrument voor scripts. Dit zal 
de selectie van een object ongedaan maken.}. 
Als het script een plaats gekregen heeft,
ziet u de tekens ``Dr.~Genius'' verschijnen. 
Elk nieuw script bevat standaard het 
commando om die tekenreeks af te beelden,
maar dit kan je uiteraard aanpassen
met behulp van \link{het instrument m.b.t.\ de eigenschappen
van een object}[ Deel \Ref, pagina
\Pageref]{property-item}. 
Klik na de selectie van voornoemd instrument
op het script
--~of preciezer~: op zijn waarde~-- 
dat u wil bijstellen op de figuur. 
Een dialoogvenster met het script zal
verschijnen.
In de rest van dit deel, zullen
we de scripts in dit dialoogvenster 
invoeren.

\subparagraph{Een generator van willekeurige en andere
getallen} % niet al te vlot

\drgeniusIndex{Script}{\texttt{random}}{}{}

Niets is eenvoudiger dan willekeurige getallen
genereren. Voer volgende code in~:
\begin{verbatim}
(random 10)
\end{verbatim}

Bij elke update van de figuur, zal het 
script een  willekeurig geheel getal
voortbrengen dat valt in het
interval [0~;~10[.

Wanneer u een reëel getal (float) wenst % is reëel precies
in het interval [0~;~1[,                % genoeg
maak dan gebruik van volgend script~:
\begin{verbatim}
(random:uniform)
\end{verbatim}


\drgeniusNote{Enkele precizeringen~:

  \begin{itemize}
  \item De uitkomst van het script is de waarde die
op de laatste regel berekend werd. 
In dit voorbeeld, gaat het om een waarde
die de uitkomst is van een functie waar 
we beroep op deden~;
  \item De laatste regel van het script moet een 
reëel getal als uitkomst hebben.
    Anders zal \drgenius{} de boodschap ``Niet af te drukken
resultaat'' weergeven~; % checken interface adhv vb.
  \item Wanneer men de waarde van een veranderlijke wenst
als uitkomst, volstaat het om de naam van de variabele op
de laatste regel te plaatsen.
  \end{itemize}
}

\subparagraph{Veelgebruikte waarden berekenen}

Om een benaderde waarde van $\pi$ te berekenen~:
\begin{verbatim}
(acos -1)
\end{verbatim}

of van $e$~:
\begin{verbatim}
(exp 1)
\end{verbatim}


De uitkomst van een DGS kan vervolgens gebruikt worden
op dezelfde manier als alle andere getalwaarden
die \drgenius\ kan voortbrengen.  
Voor dit soort kleine zaken, zijn de DGS dus
uw bondgenoten. Maar ze kunnen veel 
interessanter dingen wanneer
je hen laat werken met invoerparameters.

\paragraph{DGS met minstens een invoerparameter}

\drgeniusIndex{Script}{Parameters}{}{}
 
De procedure om een DGS met invoerparameters te creëren
is bijna identiek. Het volstaat om, onmiddellijk 
na het instrument voor scripts te 
hebben geselecteerd, het object aan te klikken dat je
als invoerparameter wenst te gebruiken. 
Klik vervolgens op de achtergrond van de figuur, op
de plaats waar je het script zetten wil.

In het script wordt verwezen naar de 
invoerparameter met de veranderlijke $a1$. 
Hadden we twee invoerparameters gedefinieerd, dan
zou de volgorde van selectie van die parameters
weerspiegeld zijn in de naamgeving van de
veranderlijken~: $a1$ en $a2$. 
Hetzelfde gaat op voor drie, vier 
of meer invoerparameters.

Naargelang het type object waarnaar men verwijst, zijn
er verschillende methoden om de getalwaarde te bekomen,
om de coördinaten te bekomen, etc.
Het overzicht van de methoden kan men nalezen in het
deel \link{Verwijzingsmethoden van de DGS}[(Deel \Ref, pagina 
\Pageref)]{api-dgs}.

In wat volgt, zullen we stapsgewijs de constructie
uiteenzetten van een (deel van een) kromme en zijn
tangens in een punt dat we zullen kunnen bewegen
over dat deel van de kromme.

De eindfiguur wordt meegeleverd met \drgenius. 
Zij heet \xlink{/usr/share/drgeo/examples/figures/slope.fgeo}{/usr/share/drgeo/examples/figures/slope.fgeo}.
 


\drgeniusFigureSize{De figuur die we zullen bekomen}{fig55}{8}


\subparagraph{Een waarde definiëren 
in een gegeven interval}

\drgeniusIndex{Script}{Interval}{}{}

Om te beginnen plaatsen we twee punten in een nieuwe
figuur, en tekenen we het lijnstuk
dat begrensd wordt door deze twee punten. 
Op dit lijnstuk plaatsen we een punt
dat we ``Move me!'' noemen. 
Dit punt zal als ijkpunt fungeren~;
de juiste afmetingen zal het script ons leveren. 
We creëren nu een script met als
enige invoerparameter dit bewuste punt.

Als $a1$ verwijst naar het punt ``Move me!'', 
dan geeft het script dat volgt als uitkomst
een reëel getal binnen het interval [-10~;~10]~:

\begin{verbatim}
(define x (getAbscissa a1))
(* 20  (- x 0.5))
\end{verbatim}

Wat uitleg is nodig. In 
de eerste regel, laat de aanroep
\texttt{(getAbscissa a1)} toe
de abscis % ? op de kromme ?
te bekomen van het object
waarnaar $a1$ verwijst\footnote{Deze abscis
ligt in het interval [0~;~1], en dit voor
om het even welke soort lijn.} --~namelijk
het punt ``Move me!''.  
De waarden van deze abscis 
worden toegekend aan een 
nieuwe veranderlijke $x$.  
Op de tweede regel passen we
vervolgens de schaal aan. 
Deze uitdrukking zou in 
algebraïsche notatie 
overeenstemmen met 
$20 \times ( x - 0.5)$. 
Omdat dit de laatste regel
is, is de
uitkomst van het script de
uitkomst van die regel
en wordt die uitkomst
afgebeeld in de figuur.


Laat ons dit script, tenslotte, Xo noemen.


\subparagraph{Een representatief gedeelte van een kromme
afbeelden}

\drgeniusIndex{Meetkundige plaats}{Script}{}{}

We zullen ons bedienen van de uitkomst van het
eerste script om met een tweede script de
ordinaat te berekenen in een punt
onder de functie $x \rightarrow
cos(x)$~:

\begin{verbatim}
(define x (getValue a1))
(cos x)
\end{verbatim}

De aanroep \texttt{(getValue a1)} laat
toe de getalwaarde te bekomen van het
object waarnaar we verwijzen met $a1$. 
Hier willen we de uitkomst van het vorige
script gebruiken in een nieuw script.
We zullen het Yo noemen. 

In een volgende stap creëren we het 
punt Mo met coördinaten (Xo~;~Yo). 
Het gaat om een willekeurig punt op de kromme
$x \rightarrow cos(x)$. 
Om een representatief gedeelte 
van de kromme af te beelden 
dat zich b.v.\ uitstrekt over
het interval
[-10~;~10], creëren we de plaats van het
punt Mo, wanneer het punt ``Move Me!'' 
het lijnstuk beschrijft. 
Zo, nu hebben we een kromme~!

\subparagraph{De raaklijn aan een kromme 
berekenen en afbeelden}

\drgeniusIndex{Script}{Raaklijn}{}{}

Om de raaklijn in het punt Mo te tekenen, 
hebben we vooreerst de richtingscoëfficiënt
in dat punt nodig, waarvoor we dus
zowel de afgeleide functie $x \rightarrow
-sin(x)$ nodig hebben als Xo. 
We schrijven dus een script met als
invoerparameter het script Xo~:

\begin{verbatim}
(- 0 (sin (getValue a1)))
\end{verbatim}

De prefixnotatie 
die Scheme/Guile gebruikt kan
verwarrend werken, maar is een 
kwestie van gewoonte. 
Laat ons dit script ``richtingscoëfficiënt 
in Mo'' noemen.
Op die manier zal, telkens wanneer Mo verplaatst wordt, 
de richtingscoëfficiënt opnieuw berekend worden.

Er rest ons nog de raaklijn te tekenen. 
Daartoe berekenen we eerst de coördinaten
van een tweede punt --~M1~-- 
van deze rechte. 

Laat ons beginnen met de abscis, b.v.\ 
$X1 = Xo + 2$. 
Om die te berekenen, schrijven we
een script met als invoerparameter
het script Xo~:

\begin{verbatim}
(define x1 (getValue a1))
(+ x1 2)
\end{verbatim}

Dit script noemen we X1.

Nu nog de ordinaat van M1 te pakken krijgen. 
Hiervoor hebben we hetvolgende nodig~:

\begin{itemize}
\item Mo (waarnaar we verwijzen met $a1$)~;
\item de richtingscoëfficiënt in Mo ($a2$)~;
\item de abscis van X1 ($a3$).
\end{itemize}

In dit script berekenen we de ordinaat van
M1 op de volgende manier
$Yo + m \times (X1 - X0)$~:

\begin{verbatim}
(define x0 (car (getCoordinates a1)))
(define y0 (cadr (getCoordinates a1)))
(define m (getValue a2))
(define x1 (getValue a3))
(+ (* m (- x1 x0)) y0)
\end{verbatim}

Enkele woorden commentaar bij de 
aanroep \texttt{(getCoordinates a1)}.
Bij deze aanroep moet $a1$ verwijzen naar
een object van het type `punt'. Deze methode
geeft als output een lijst met de coördinaten
van het punt --~hier Mo. 
Met \texttt{car} kan men het eerste element uit
de lijst nemen, en met
\texttt{cadr} het tweede. 
De rest van het script zou geen 
problemen mogen stellen.

Laat ons dit script Y1 noemen. Nu kunnen
we het punt M1 construeren, met coördinaten
(X1~;~Y1) en tenslotte de raaklijn (MoM1).


Het was natuurlijk mogelijk om maar
twee of drie scripts te schrijven in 
plaats van deze panoplie. 
Maar we hopen dat u met deze kleine voorbeelden
de smaak te pakken krijgt en zelf 
met DGS aan de slag gaat.


\subsection{Methodes van verwijzen voor \drgeo-scripts}
\label{api-dgs}
% DGS API is exposed here

De volgende delen  beschrijven de methodes die
beschikbaar zijn voor de \drgeo-scripts. % FIXME aangep. >< FR!!
Ze zijn geordend naar het type meetkundig
of numeriek object.

\subsubsection{Punt}

\drgeniusIndex{Script}{\texttt{getAbscissa}}{}{}{}

\begin{drgeoApi}{waarde (getAbscissa punt)}
 \drgeoApiIn{punt}{Verwijzing 
naar een willekeurig punt         
op een lijn}
 \drgeoApiOut{De abscis van dit punt op de lijn. 
De waarde ligt in het interval [0~;~1]}
 \drgeoApiExample{(define x (getValue a1))\\ 
(* x 10)}                            
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{setAbscissa}}{}{}{}
\begin{drgeoApi}{(setAbscissa punt x)}
  \drgeoApiIn{punt}{Verwijzing naar een willekeurig punt
op een lijn}
  \drgeoApiIn{x}{De decimale waarde binnen het interval 
[0~;~1], die de nieuwe abscis voorstelt}
  \drgeoApiExample{(setAbscissa a1 0.5)}
\end{drgeoApi}


\drgeniusIndex{Script}{\texttt{getCoordinates}}{}{}

\begin{drgeoApi}{lijst (getCoordinates punt|vector)}
Geeft als output de coördinaten van 
een punt of een vector.\\
  \drgeoApiIn{punt|vector}{Verwijzing naar een punt
of een vector}
  \drgeoApiOut{Lijst die de coördinaten van het punt
of van de vector bevat}
  \drgeoApiExample{(define c (getCoordinates a1))\\
(define x (car c))\\
(define y (cadr c))\\
(+ (* x x) (* y y))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{setCoordinates}}{}{}
\begin{drgeoApi}{(setCoordinates punt coörd)}
Legt de coördinaten van een punt vast\\
  \drgeoApiIn{punt}{Verwijzing naar een willekeurig
punt in het vlak}
  \drgeoApiIn{coörd}{Lijst van twee decimale getallen}
  \drgeoApiExample{(define l (list 1.4 (random 5)))\\
(setCoordinate a1 l)}
\end{drgeoApi}


\subsubsection{Rechte, Halfrechte, Lijnstuk, Vector}

\drgeniusIndex{Script}{\texttt{getSlope}}{}{}{}
\begin{drgeoApi}{waarde (getSlope richting)}
  \drgeoApiIn{richting}{Verwijzing naar een
object van het type rechte, halfrechte, lijnstuk
of vector}
  \drgeoApiOut{De richtingscoëfficiënt van deze
richting}
  \drgeoApiExample{(define p (getSlope a1))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getNorm}}{}{}
\begin{drgeoApi}{waarde (getNorm vector)}
  \drgeoApiIn{vector}{Verwijzing naar een vector}
  \drgeoApiOut{De norm van deze vector}
  \drgeoApiExample{(define n (getNorm a1))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{waarde (getLength lijnstuk)}
  \drgeoApiIn{lijnstuk}{Verwijzing naar 
een lijnstuk}
  \drgeoApiOut{De lengte van dit lijnstuk}
  \drgeoApiExample{(define l (getLength a1))}
\end{drgeoApi}

\subsubsection{Cirkel, Cirkelboog}

\drgeniusIndex{Script}{\texttt{getCenter}}{}{}
\begin{drgeoApi}{lijst (getCenter cirkel|cirkelboog)}
  \drgeoApiIn{cirkel|cirkelboog}{Verwijzing naar
een cirkel of naar een cirkelboog}
  \drgeoApiOut{Lijst die de coördinaten van het
middelpunt van de cirkel of 
van de cirkelboog bevat}
  \drgeoApiExample{(define c (getCenter a1))\\
(car c)}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getRadius}}{}{}
\begin{drgeoApi}{waarde (getRadius cirkel|cirkelboog)}
  \drgeoApiIn{cirkel|cirkelboog}{Verwijzing naar een
cirkel of naar een cirkelboog}
  \drgeoApiOut{Straal van de cirkel 
of van de cirkelboog}
  \drgeoApiExample{(define r (getRadius a1))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{waarde (getLength cirkel|cirkelboog)}
  \drgeoApiIn{cirkel|cirkelboog}{Verwijzing naar een 
cirkel of naar een cirkelboog}
  \drgeoApiOut{Omtrek van de cirkel of lengte
van de cirkelboog}
  \drgeoApiExample{(define l (getLength a1))}
\end{drgeoApi}

\subsubsection{Getal}

\drgeniusIndex{Script}{\texttt{getValue}}{}{}
\begin{drgeoApi}{waarde (getValue getal)}
  \drgeoApiIn{getal}{Verwijzing naar een getal}
  \drgeoApiOut{Waarde van dit getal}
  \drgeoApiExample{(define a (getValue a1))\\
(define b (getValue a2))\\
(+ a b)}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{setValue}}{}{}
\begin{drgeoApi}{(setValue getal v)}
  \drgeoApiIn{getal}{Verwijzing naar een getal}
  \drgeoApiIn{v}{Decimale getalwaarde}
  \drgeoApiExample{(define v (getValue a1))\\
(setValue a2 v)}
\end{drgeoApi}

\subsubsection{Hoek}

\drgeniusIndex{Script}{\texttt{getAngle}}{}{}
\begin{drgeoApi}{waarde (getAngle hoek)}
  \drgeoApiIn{hoek}{Verwijzing naar een meetkundige of
                    georiënteerde hoek}
  \drgeoApiOut{De hoek uitgedrukt in graden. Om de
               hoek in radialen te bekomen, dient men
               de methode \texttt{getValue} te gebruiken}
  \drgeoApiExample{(define angle1 (getAngle a1))\\
     (define angle2 (getAngle a2))\\ %FIXME in het FR
     (define angle3 (getAngle a3))\\
     (+ angle1 angle2 angle3)}
\end{drgeoApi}

\subsubsection{Overige}


\drgeniusIndex{Script}{\texttt{move}}{}{}
\begin{drgeoApi}{(move item t)}
  \drgeoApiIn{item}{Verwijzing naar een 
object van de figuur}
  \drgeoApiIn{t}{Vector met twee dimensies}
  \drgeoApiExample{(define v (vector .1 0))\\
(move a1 v)}
\end{drgeoApi}


\section{De instrumenten in de gebruikersinterface aanpassen}
\label{ui-lock}

\drgenius\ biedt de mogelijkheid sessies\footnote{Sessies zijn
bestanden
die verschillende \drgeo-documenten  (i.e.\ figuren 
en/of teksten) bevatten.} voor te bereiden
waarbij de leraar voor bepaalde figuren
kan beslissen de toegang tot bepaalde instrumenten
te blokkeren. 
De beveiliging gebeurt per figuur afzonderlijk, en
dit telkens met een verschillend paswoord. 
Op die manier heeft een leraar de volle vrijheid
om een activiteit met verschillende figuren
voor te bereiden en die op gepaste wijze te beveiligen.


\subsection{Instrumenten vergrendelen}

\drgeniusIndex{Instrumenten}{Vergrendelen}{}{}

De beveiliging gebeurt figuur per figuur.
Om een figuur te beveiligen, ga je
naar het menu 
\drgeniusMenu{Bewerken->Gebruikersinterface aanpassen}. 
Er verschijnt een groot dialoogvenster 
waarin de gebruiker de verschillende icoontjes
herkent, die men op de tweede taakbalk
van \drgenius{} terugvindt. 
Om een instrument te activeren of
vergrendelen, volstaat het op het
gepaste icoontje te drukken. 
Als een instrument vergrendeld
werd, ziet het overeenkomstige icoontje
er iets grijzer uit. 
Het is eveneens mogelijk een hele
reeks instrumenten in één keer
uit te schakelen door te klikken
op het icoontje van de hele
groep (i.e.\ met een 
groen driehoekje)

\drgeniusFigureSize{Het dialoogvenster om 
instrumenten te vergrendelen.}{fig53}{8}

Wanneer de gebruiker de te beveiligen instrumenten
geselecteerd heeft, kan hij overgaan tot
de eigenlijke vergrendeling door 
in het dialoogvenster op 
de knop
\drgeniusMenu{Vergrendelen} te drukken.
\drgenius{} vraagt dan om een paswoord.

\drgeniusNote{Bij het opslaan van een figuur of een
sessie met vergrendelingen in de gebruikersinterface
worden de paswoorden mee opgeslagen in het bestand. 
Ze zijn weliswaar gecrypteerd.}

\subsection{Instrumenten ontgrendelen}

\drgeniusIndex{Instrumenten}{Ontgrendelen}{}{}

Het spreekt vanzelf dat je een interface 
daarna ook kan ontgrendelen, hetzij
om geleidelijk aan toegang te verschaffen
aan instrumenten --~wanneer leerlingen op 
een sessie werken b.v.~-- 
of om een figuur bij te werken. 
Om dit te doen moet je naar het menu 
\drgeniusMenu{Bewerken->Gebruikersinterface aanpassen} 
gaan en in het dialoogvenster de knop
\drgeniusMenu{Ontgrendelen} aanklikken. 
\drgenius{} vraagt dan het correcte paswoord opnieuw
in te voeren.

\drgeniusFigure{Het dialoogvenster om de interface van
een figuur te ontgrendelen.}{fig54}

\chapter{\drgeo-Scheme-figuren}

\drgeniusIndex{\drgeo-Scheme-figuren}{Inleiding}{}{}

De \emph{\drgeo-Scheme-figuren} -- (DSF) -- zijn figuren
die in een relatief natuurlijke taal beschreven worden.
Het gaat er dan niet langer om een figuur te  construeren
via de grafische interface van \drgeo, maar veeleer om de
figuur te beschrijven in de taal Scheme. Wij hebben gepoogd
om de syntaxis zo licht en gemakkelijk mogelijk te maken.
Alle sleutelwoorden om een eenvoudige figuur te tekenen
kunnen in verschillende talen gesteld zijn. Zo kan men
een figuur beschrijven in het Frans, in het Engels, 
in het Spaans, in het Nederlands, etc. % Ndl. toegevoegd
(Een mengeling van talen is ook mogelijk, maar niet
aan te raden).

\section{Enkele voorbeelden}

\drgeniusIndex{\drgeo-Scheme-figuren}{Voorbeelden}{}{}

Scheme is als dusdanig een taal op hoog niveau. Wanneer
we een figuur definiëren, kunnen we bijgevolg van zijn kracht
gebruikmaken om dit of dat deel van de figuur op recursieve
wijze te definiëren, of om bepaalde objecten op toevallige wijze
op de figuur te plaatsen zodat de figuur er telkens lichtjes 
anders uitziet wanneer men ze opnieuw opent. De DSF zijn kortom
bevrijd uit het kader van de grafische interface en winnen
aan kracht dankzij Scheme. Een DSF is dus een bestand dat met
een tekst-\emph{editor} wordt aangemaakt en dat in \drgeo{} wordt
geopend met de opdracht \drgeniusMenu{Bestand->Evalueren}.

\drgeniusIndex{\drgeo-Scheme-figuren}{Evalueren}{}{}

Laat ons een eenvoudig voorbeeld van de DSF bestuderen~:

\drgeniusIndex{\drgeo-Scheme-figuur}{Nieuwe figuur}{}{}

\begin{verbatim}
(nieuwe-figuur "Mijn figuur")
\end{verbatim}

Dit is de kleinste DSF die we konden definiëren. Wanneer
we het bestand laden in \drgeo, wordt er louter een nieuwe,
lege figuur gecreërd onder de naam ``Mijn figuur''. Hadden
we verschillende commando's in de lijn van
\texttt{(nieuwe-figuur "Mijn figuur")} ingebracht, dan zouden
er evenveel nieuwe figuren gecreëerd zijn.

Laat ons een tweede voorbeeld bekijken~:

\begin{verbatim}
(nieuwe-figuur "Mijn figuur")
(weze Punt "A" willekeurig 1.2 -2)
\end{verbatim}

Deze DSF definiëert een figuur met een willekeurig punt $A$
met coördinaten $(1,2~;~-2)$. De syntaxis is kennelijk
relatief aangenaam, te meer omdat zij in de moedertaal
gesteld is. Laat ons dieper ingaan op de tweede regel.
De syntaxis is immers dezelfde voor alle commando's die
objecten definiëren. Een dergelijk commando kan als
volgt worden opgesplitst~:

\begin{enumerate}
 \item We beginnen steeds met het sleutelwoord \texttt{weze},
       dat aangeeft dat we een nieuw object in het leven
       willen roepen.
 \item Onmiddellijk daarop volgt de categorie van het object,
       \texttt{Punt} in dit geval \texttt{Punt}.
 \item Vervolgens volgt de naam van het object, $A$, die we
       steeds tussen aanhalingstekens plaatsen. Zelfs als we
       geen naam willen geven aan het object, moet men een 
       lege naam "" geven.
 \item Daarna geven we het type object aan --~het type punt
       in ons voorbeeld~-- hier \texttt{willekeurig}. Het
       punt $A$ is dus een willekeurig punt.
 \item Na het type object volgt een lijst met specifieke
       argumenten. Die lijst bestaat in ons voorbeeld uit
       twee getallen, de coördinaten van het willekeurige
       punt $A$.
\end{enumerate}

Laat ons verder gaan met een derde voorbeeld~:

\begin{verbatim}
 (define (driehoek p1 p2 p3)
   (Lijnstuk "" uiteinden p1 p2)
   (Lijnstuk "" uiteinden p2 p3)
   (Lijnstuk "" uiteinden p1 p3))

(define (toeval)
  (- 8 (* 16 (random:uniform))))

(nieuwe-figuur "Mijn figuur")

(weze Punt "A" willekeurig (toeval) 0)
(weze Punt "B" willekeurig 5 0)
(weze Punt "C" willekeurig (toeval) 5)

(driehoek A B C)
\end{verbatim}

Dit voorbeeld is bijzonder interessant omdat
het drie belangrijke zaken demonstreert~:

\begin{enumerate}
 \item Het gebruik van constructies op
       hoog niveau. We definiëren een functie \texttt{driehoek}
       die aan de hand van drie gegeven punten, een driehoek
       door die punten construeert. Deze manier van handelen
       is vergelijkbaar met de macro-constructies, maar we
       hebben een veel grotere vrijheid van beweging.
 \item De definitie van bijkomende functies. Hier hebben we
       de functie \texttt{toeval} gecreëerd, die ons een decimaal
       getal bezorgt dat tussen -8 en 8 ligt. We gebruiken de functie
       om bepaalde punten van onze figuur op toevallige wijze te
       positioneren. Op die manier zal een figuur lichtjes anders
       zijn telkens zij geopend wordt.
 \item Het gebruik van het sleutelwoord \texttt{weze} is eigenlijk
       niet verplicht. Enkel als we een verwijzing (een naam) van
       een object willen bewaren, maken we er gebruik van. Bij de
       functie \texttt{driehoek} kozen we er bij voorbeeld voor
       om de lijnstukken geen namen te geven. De punten $A$, $B$
       en $C$ daarentegen kregen verwijzingen met dezelfde naam.
\end{enumerate}

Merk op dat als we geen naam geven bij het definiëren van 
de lijnstukken, \drgeo\ zelf een standaardnaam toekent
aan de hand van de uiteinden. De drie lijnstukken zullen
dus in ons geval de namen $[AB]$, $[BC]$ en $[AC]$ dragen.

Laat ons dit gedeelte met een laatste voorbeeld beëindigen~:

\begin{verbatim}
(weze Punt "A" willekeurig 1 0)
(weze Punt "B" willekeurig 5 0)
(weze Rechte "r1" 2punten A B)

(zend A kleur geel)
(zend A vorm rond)
(zend A grootte groot)
(zend B verbergen)
(zend d1 dikte streepje)
\end{verbatim}

De drie eerste commando's creëren twee punten en 
een rechte. Hier belangt ons vooral de reeks 
\texttt{geef}-commando's aan. Met dit commando
kunnen we communiceren met een object waarvan
we een symbool hebben opgeslagen. In ons geval
hebben we de symbolen \texttt{A}, \texttt{B} en
\texttt{r1}. We zenden telkens een boodschap aan
een object. In het eerste argument geven we aan
met welk object we communiceren en in het tweede
argument de boodschap die we willen meegeven. Het
derde en de volgende argumenten hangen af van de 
aard van de boodschap in het tweede argument.
Met de zin \texttt{(zend A kleur geel)} stuur je
het punt A de boodschap kleur met als parameter 
\texttt{geel}. De andere \texttt{geef}-commando's
zijn zo gemakkelijk te begrijpen. Ze zullen uitgelegd
worden in het volgende gedeelte.

Wij hebben onze kleine begeleide wandeling doorheen
de \emph{Dr. Geo Scheme Figuren} afgerond. In wat volgt, zullen
wij alle beschikbare commando's om DSF'en te definiëren
uit de doeken doen. 

\section{Verwijzingsmethoden voor de \drgeo\ Scheme Figuren}

Het definiëren van objecten in een DSF-document gebeurt
via prototypes. Prototypes zijn om zo te zeggen objecten
die wij kunnen bevragen en aanpassen zoals zal blijken.

Vooraleer echter objecten te definiëren binnen een figuur
moeten wij die figuur zelf tot leven wekken met het commando
\texttt{nieuwe-figuur}.

\subsection{Algemene commando's}

\begin{drgeoApi}{(nieuwe-figuur naam)}
  \drgeoApiIn{naam}{Tekenreeks}
  \drgeoApiOut{Geeft geen waarde als resultaat. 
    De functie-aanroep heeft enkel een zijdelings effect,
    namelijk het creëren van een nieuwe figuur. Alle
    objecten die volgen worden in deze figuur gecreëerd, tot
    we de functie-aanroep opnieuw gebruiken}
  \drgeoApiExample{(nieuwe-figuur "Mijn 1ste figuur")}
\end{drgeoApi}

\subsection{Definitie van nieuwe objecten van een figuur}

\drgeniusIndex{\drgeo\ Scheme figuur}{Creatie van objecten}{}{}

Een object kan op syntactisch verschillende wijzen worden
gedefiniëerd.

\begin{itemize}

\item \texttt{(weze Punt "p1" type args)}

  Het punt wordt aangemaakt en zijn verwijzing wordt
  opgeslagen in de variabele \texttt{p1}. Deze syntaxis
  gebruikt een Scheme-macro.

\item \texttt{(Punt "Naam" type args)}
  
  Het punt wordt aangemaakt maar geen enkele verwijzing
  naar het punt wordt bewaard.

\item \texttt{(set! p1 (Punt "Naam" type args))}

  Het punt wordt aangemaakt en zijn verwijzing wordt
  gekopiëerd naar de reeds bestaande variabele \texttt{p1}.

\end{itemize}

Wanneer objecten worden gecreëerd vanuit een functie, 
gebruik dan ofwel de vorm \texttt{set!} ofwel de speciale
Scheme-vorm \texttt{let}. Het is belangrijk op te merken
dat de basisaanroep een functie is die een verwijzing naar
het aangemaakte object als uitkomst geeft.

\subsubsection{Punt}

\drgeniusIndex{\drgeo\ Scheme figuur}{Creatie van objecten}{Punt}{}

\begin{drgeoApi}{prototype (Punt naam willekeurig x y)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{x}{De abscis van het punt}
  \drgeoApiIn{y}{De ordinaat van het punt}
  \drgeoApiOut{Verwijzing naar een willekeurig punt in het vlak
    met coördinaten \texttt{x} en \texttt{y}.}
  \drgeoApiExample{(define p1 (Punt "A" willekeurig 1.2 (acos -1)))}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Punt naam op-kromme lijn x)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{lijn}{Verwijzing naar een lijn (rechte, halfrechte,
    lijnstuk, etc.)}
  \drgeoApiIn{x}{Kromme-abscis van het willekeurig punt, de waarde
    behoort tot het interval [0~;~1]} % FIXME
  \drgeoApiOut{Verwijzing van een willekeurig punt op een lijn.}
  \drgeoApiExample{(Punt "M" op-kromme s1 0.5 )}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Punt naam midden-2ptn p1 p2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p1}{Verwijzing naar een punt}
  \drgeoApiIn{p2}{Verwijzing naar een punt}
  \drgeoApiOut{Verwijzing naar het midden van twee punten.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 1)\\
(weze Punt "B" willekeurig 4 4)\\
(Punt "I" midden-2ptn A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Punt naam midden-lijnstuk s)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{s}{Verwijzing naar een lijnstuk}
  \drgeoApiOut{Verwijzing naar het midden van twee punten.}
  \drgeoApiExample{(weze Punt "L" midden-lijnstuk s)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Punt naam snijpunt l1 l2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{l1}{Verwijzing naar een lijn}
  \drgeoApiIn{l2}{Verwijzing naar een lijn}
  \drgeoApiOut{Verwijzing naar het snijpunt van twee lijnen.}
  \drgeoApiExample{(Punt "I" snijpunt rechte lijnstuk)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Punt naam snijpunt2 l1 l2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{l1}{Verwijzing naar een lijn}
  \drgeoApiIn{l2}{Verwijzing naar een lijn}
  \drgeoApiOut{Verwijzing naar het tweede snijpunt van twee lijnen
    als een van de twee een cirkelboog of een cirkel is.}
  \drgeoApiExample{(Punt "I" snijpunt2 rechte cirkel)}
\end{drgeoApi}

\subsubsection{Rechte}

\drgeniusIndex{\drgeo{} Scheme Figuur}{Creatie van objecten}{Rechte}{}

\begin{drgeoApi}{prototype (Rechte naam 2punten p1 p2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p1}{Verwijzing naar een punt}
  \drgeoApiIn{p2}{Verwijzing naar een punt}
  \drgeoApiOut{Verwijzing naar een rechte door twee punten}
  \drgeoApiExample{(weze Punt "A" willekeurig 0 0)\\
(weze Punt "M" willekeurig 1 2)\\
(Rechte "" 2punten A M)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Rechte naam evenwijdig p r)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p}{Verwijzing naar een punt}
  \drgeoApiIn{r}{Verwijzing naar een richting (rechte, lijnstuk, 
    vector, ...)}
  \drgeoApiOut{Verwijzing naar een rechte evenwijdig met de 
    richting \texttt{r} en door het punt \texttt{p}.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Rechte "r1" evenwijdig A r)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Rechte naam loodrecht p r)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p}{Verwijzing naar een punt}
  \drgeoApiIn{r}{Verwijzing naar een richting (rechte, lijnstuk,
    vector, ...)}
  \drgeoApiOut{Verwijzing naar een rechte loodrecht op de 
    richting \texttt{r} en door het punt \texttt{p}.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Rechte "r1" loodrecht A r)}
\end{drgeoApi}

\subsubsection{Halfrechte}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Halfrechte}{}

\begin{drgeoApi}{prototype (Halfrechte naam 2punten o p)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{o}{Verwijzing naar een punt, grenspunt van de halfrechte}
  \drgeoApiIn{p}{Verwijzing naar een ander punt, op de halfrechte}
  \drgeoApiOut{Verwijzing naar een halfrechte gedefiniëerd door zijn
               grenspunt en een tweede punt.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Punt "O" willekeurig 0 0)\\
(weze Halfrechte "dd1" 2punten A O)}
\end{drgeoApi}

\subsubsection{Lijnstuk}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Lijnstuk}{}

\begin{drgeoApi}{prototype (Lijnstuk naam grenspunten p1 p2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p1}{Verwijzing naar een punt}
  \drgeoApiIn{p2}{Verwijzing naar een punt}
  \drgeoApiOut{Verwijzing naar een lijnstuk gedefiniëerd door
               zijn grenspunten.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Punt "B" willekeurig 10 4)\\
(weze Lijnstuk "" grenspunten A B)}
\end{drgeoApi}

\subsubsection{Cirkel}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Cirkel}{}

\begin{drgeoApi}{prototype (Cirkel naam 2punten m p)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{m}{Verwijzing naar een punt, middelpunt van de cirkel}
  \drgeoApiIn{p}{Verwijzing naar een punt op de cirkel}
  \drgeoApiOut{Verwijzing naar een cirkel gedefiniëerd door zijn 
               middelpunt en een punt}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Punt "B" willekeurig 10 4)\\
(weze Cirkel "C1" 2punten A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Cirkel naam middelpunt-straal m r)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{m}{Verwijzing naar een punt, middelpunt van de cirkel}
  \drgeoApiIn{r}{Verwijzing naar een lijnstuk, de straal van 
                 de cirkel}
  \drgeoApiOut{Verwijzing naar een cirkel bepaald door zijn 
               middelpunt en straal}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Getal "r" willekeurig 10)\\
(weze Cirkel "C1" middelpunt-straal A r)}
\end{drgeoApi}

\subsubsection{Cirkelboog}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van 
               objecten}{Cirkelboog}{}

\begin{drgeoApi}{prototype (Cirkel naam 3punten p1 p2 p3)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{p1}{Verwijzing naar een punt, 1$^{e}$ grenspunt van
                  de boog}
  \drgeoApiIn{p2}{Verwijzing naar een punt op de boog}
  \drgeoApiIn{p3}{Verwijzing naar een punt, 2$^{de}$ grenspunt van
                  de boog}
  \drgeoApiOut{Verwijzing naar een cirkelboog gedefiniëerd door
               zijn grenspunten en een punt.}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 5)\\
(weze Punt "B" willekeurig 0 5)\\
(weze Punt "C" willekeurig -1 -2)\\
(weze Cirkelboog "boog" 3punten A B C)}
\end{drgeoApi}

\subsubsection{Veelhoek}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Veelhoek}{}

\begin{drgeoApi}{prototype (Veelhoek naam npunten args)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{args}{Een lijst met verwijzingen naar punten, 
             hoekpunten van de veelhoek}
  \drgeoApiOut{Verwijzing naar een veelhoek gedefiniëerd door zijn
               hoekpunten}
  \drgeoApiExample{(weze Veelhoek "quad" npunten A B C D)}
\end{drgeoApi}

\subsubsection{Meetkundige transformaties}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van 
  objecten}{Meetkundige transformaties}{}

De prototypes van meetkundige transformaties laten toe
objecten te tekenen onder een transformatie. Men kan
transformaties toepassen op verwijzingen naar objecten
van het type punt, lijnstuk, rechte, halfrechte, vector,
cirkel, cirkelboog en veelhoek.

\begin{drgeoApi}{prototype (ObjectType naam draaiing object
                 middelpunt hoek)}
  \drgeoApiIn{ObjectType}{Punt, Lijnstuk, Rechte, Halfrechte, 
              Vector, Cirkel, Cirkelboog, Veelhoek}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{object}{Verwijzing naar het te transformeren object}
  \drgeoApiIn{middelpunt}{Verwijzing naar een punt, middelpunt van 
              de draaiing}
  \drgeoApiIn{hoek}{Verwijzing naar een getalwaarde, hoek van de 
                    draaiing}
  \drgeoApiOut{Verwijzing naar een getransformeerd object}
  \drgeoApiExample{(weze Punt "I1" draaiing I C a)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (ObjectType naam homothetie object 
                 middelpunt k)}
  \drgeoApiIn{ObjectType}{Punt, Lijnstuk, Rechte, Halfrechte, 
              Vector, Cirkel, Cirkelboog, Veelhoek}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{object}{Verwijzing naar het te transformeren object}
  \drgeoApiIn{middelpunt}{Verwijzing naar een punt, middelpunt van
              de homothetie}
  \drgeoApiIn{k}{Verwijzing naar een getalwaarde, factor 
                 van de homothetie}
  \drgeoApiOut{Verwijzing naar een getransformeerd object}
  \drgeoApiExample{(weze Veelhoek "P1" homothetie P C k1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (ObjectType naam puntspiegeling object
                 middelpunt)}
  \drgeoApiIn{ObjectType}{Punt, Lijnstuk, Rechte, Halfrechte, 
              Vector, Cirkel, Cirkelboog, Veelhoek}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{object}{Verwijzing naar het te transformeren object}
  \drgeoApiIn{middelpunt}{Verwijzing naar een punt, middelpunt van
              de puntspiegeling}
  \drgeoApiOut{Verwijzing naar het getransformeerde object}
  \drgeoApiExample{(weze Lijnstuk "L1" puntspiegeling L m)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (ObjectType naam spiegeling object
                 spiegelas)}
  \drgeoApiIn{ObjectType}{Punt, Lijnstuk, Rechte, Halfrechte, 
              Vector, Cirkel, Cirkelboog, Veelhoek}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{object}{Verwijzing naar het te transformeren object}
  \drgeoApiIn{spiegelas}{Verwijzing naar een rechte, de spiegelas}
  \drgeoApiOut{Verwijzing naar het getransformeerde object}
  \drgeoApiExample{(weze Veelhoek "V1" spiegeling V r1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (ObjectType naam verschuiving 
                 object vector)}
  \drgeoApiIn{ObjectType}{Punt, Lijnstuk, Rechte, Halfrechte, 
              Vector, Cirkel, Cirkelboog, Veelhoek}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{object}{Verwijzing naar het te transformeren object}
  \drgeoApiIn{vector}{Verwijzing naar een vector}
  \drgeoApiOut{Verwijzing naar het getransformeerde object.}
  \drgeoApiExample{(weze Cirkel "C1" verschuiving C v)}
\end{drgeoApi}

\subsubsection{Meetkundige plaats}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van een object}{Plaats}{}

\begin{drgeoApi}{prototype (Plaats naam 2punten m c)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{m}{Verwijzing naar een beweeglijk punt op een lijn}
  \drgeoApiIn{c}{Verwijzing naar een vast punt dat afhangt van 
                 het punt \texttt{m}}
  \drgeoApiOut{Verwijzing naar een plaats.}
  \drgeoApiExample{(Plaats "plaats1" 2punten M I)}
\end{drgeoApi}

\subsubsection{Vector}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Vector}{}

\begin{drgeoApi}{prototype (Vector naam 2punten o g)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{o}{Verwijzing naar een punt, oorsprong van de vector}
  \drgeoApiIn{g}{Verwijzing naar een punt, grenspunt van de vector}
  \drgeoApiOut{Verwijzing naar een vector.}
  \drgeoApiExample{(weze Punt "B" willekeurig 0 5)\\
(weze Punt "C" willekeurig -1 -2)\\
(Vector "" 2punten C B)}
\end{drgeoApi}  

\subsubsection{Getal}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van objecten}{Getal}{}

\begin{drgeoApi}{prototype (Getal naam vrij x y v)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiIn{v}{De beginwaarde van het getal}
  \drgeoApiOut{Verwijzing naar een willekeurig getal.}
  \drgeoApiExample{(weze Getal "pi" willekeurig 5 5 (acos -1))}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Getal naam lengte-lijnstuk x y l)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiOut{l}{Verwijzing naar een lijnstuk.}
  \drgeoApiExample{(weze Getal "l" lengte-lijnstuk 5 5 S)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Getal naam norm-vector x y v)}
  \drgeoApiIn{naam}{Tekensreeks die de naam van het object aangeeft}  
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiIn{v}{Verwijzing naar een vector}
  \drgeoApiOut{Verwijzing naar een getal, norm van de vector.}
  \drgeoApiExample{(weze Getal "l" norm-vector 5 5 V)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Getal naam norm-vector x y p c)}
  \drgeoApiIn{naam}{Tekensreeks die de naam van het object aangeeft}  
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiIn{p}{Verwijzing naar een punt}
  \drgeoApiIn{c}{Verwijzing naar een cirkel}
  \drgeoApiOut{Verwijzing naar een getal, afstand tussen het punt
               en de cirkel}
  \drgeoApiExample{(weze Getal "l" punt-cirkel 5 5 P C)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Getal naam punt-rechte x y p r)}
  \drgeoApiIn{naam}{Tekensreeks die de naam van het object aangeeft}
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiIn{p}{Verwijzing naar een punt}
  \drgeoApiIn{r}{Verwijzing naar een rechte}
  \drgeoApiOut{Verwijzing naar een getal, afstand tussen het punt en
               de rechte}
  \drgeoApiExample{(weze Getal "a" punt-rechte 5 5 M D1)}
\end{drgeoApi}

\begin{drgeoApi}{prototype (Getal naam punt-punt x y p1 p2)}
  \drgeoApiIn{naam}{Tekensreeks die de naam van het object aangeeft}
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van het getal}
  \drgeoApiIn{p1}{Verwijzing naar een punt}
  \drgeoApiIn{p2}{Verwijzing naar een punt}
  \drgeoApiOut{Verwijzing naar een getal, afstand tussen 
               de twee punten.}
  \drgeoApiExample{(weze Getal "a" punt-punt A B)}
\end{drgeoApi}

\subsubsection{Hoek}

\drgeniusIndex{\drgeo-Scheme-figuren}{Creatie van objecten}{Hoek}{}

\begin{drgeoApi}{prototype (Hoek naam meetkundig A B C)}
  \drgeoApiIn{naam}{Tekensreeks die de naam van het object aangeeft}
  \drgeoApiIn{A}{Verwijzing naar een punt}
  \drgeoApiIn{B}{Verwijzing naar een punt, het hoekpunt} %FIXME
  \drgeoApiIn{C}{Verwijzing naar een punt}
  \drgeoApiOut{Verwijzing naar een meetkundige hoek.}
  \drgeoApiExample{(weze hoek "h" meetkundig A B C)}
\end{drgeoApi}

 
\begin{drgeoApi}{prototype (Hoek naam georiënteerd x y v1 v2)}
  \drgeoApiIn{naam}{Tekenreeks die de naam van het object aangeeft}
  \drgeoApiIn{x,y}{De coördinaten voor de plaatsing van de hoek}
  \drgeoApiIn{v1}{Verwijzing naar een vector}
  \drgeoApiIn{v2}{Verwijzing naar een vector}
  \drgeoApiOut{Verwijzing naar een georiënteerde hoek, gevormd door
               twee vectoren}
  \drgeoApiExample{(define v1 (Vector "" 2punten A B))\\
(define v2 (Vector "" 2punten A C))\\
(Hoek "a" georiënteerd 1 1 v1 v2)}
\end{drgeoApi}


\subsubsection{Attributen van objecten aanpassen}

\drgeniusIndex{\drgeo\ Scheme-figuur}{Creatie van 
               objecten}{Attributen van objecten}{}

Om attributen aan te passen van een reeds gecreëerd object, 
gebruiken we een systeem dat direct boodschappen zendt aan
het prototype dat het object in kwestie vertegenwoordigt.
De aanpassing van attributen gebeurt dus steeds a posteriori.

\begin{drgeoApi}{(zend object kleur waarde)}
  \drgeoApiIn{object}{Verwijzing naar een object}
  \drgeoApiIn{waarde}{De kleur~; mogelijke waarden zijn \texttt{zwart,
              donkergrijs, grijs, wit, donkergroen, groen, donkerblauw,
              blauw, rood, bordeaux, geel, oranje}}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 2)\\
(zend A kleur groen)}
\end{drgeoApi}

\begin{drgeoApi}{(zend lijn dikte waarde)}
  \drgeoApiIn{lijn}{Verwijzing naar een lijn (rechte,
              halfrechte, cirkel, plaats, etc.)}
  \drgeoApiIn{waarde}{De dikte~; mogelijke waarden zijn 
                     \texttt{streepje, normaal, dik}}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 2)\\
(weze punt "B" willekeurig 0 0)\\
(weze Rechte "r" 2 punten A B)\\
(zend d dikte streepje)}
\end{drgeoApi}

\begin{drgeoApi}{(zend punt grootte waarde)}
  \drgeoApiIn{punt}{Verwijzing naar een punt}
  \drgeoApiIn{waarde}{De grootte van het punt~; mogelijke waarden
              zijn \texttt{klein, normaal, groot}}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 2)\\
(zend A grootte klein)}
\end{drgeoApi}

\begin{drgeoApi}{(zend punt vorm waarde)}
  \drgeoApiIn{punt}{Verwijzing naar een punt}
  \drgeoApiIn{waarde}{De vorm van het punt~; mogelijke waarden zijn
              \texttt{rond, kruisje, rond-leeg, rec, rec-leeg}}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 2)\\
(zend A vorm rond)}
\end{drgeoApi}


\begin{drgeoApi}{(zend object verbergen)}
  \drgeoApiIn{object}{Verwijzing naar een te verbergen object}
  \drgeoApiExample{(weze Punt "A" willekeurig 1 2)\\
(zend A verbergen)}
\end{drgeoApi}

 
\section{Galerij met voorbeelden}
\drgeniusIndex{\drgeo-Scheme-figuren}{Voorbeelden}{}{}

Om het gebruik van de \drgeo-Scheme-figuren te illustreren,
stellen we een kleine voorbeeldenreeks voor.
Deze voorbeelden tonen belangrijke voorbeelden en wij hopen
dat ze inspirerend werken.
Voor elk voorbeeld geven wij de Scheme-broncode, gevolgd
door het resultaat. De broncode kan in een tekst-\emph{editor}
gekopiëerd en opgeslagen worden om ze vervolgens te evalueren
met \drgeo.


\subsection{Regelmatige veelhoek}
\drgeniusIndex{\drgeo-Scheme-figuren}{Voorbeelden}{Regelmatige veelhoek}{}

Een regelmatige veelhoek met een willekeurig 
aantal zijden kan men met behulp van een 
recursieve Scheme-functie construeren.
% moet dit niet vertaald worden in het Frans ?
\begin{verbatim}
(define pi (acos -1))
(define n 15)
(define x0 0)
(define y0 0)
(define p1 0)

(define (polygon center p a n)
  (if (> n 0)
      (begin
        (set! p1 (Point "" rotation p center a))
        (send p1 masked)
        (Segment "" extremities p p1)
        (polygon center p1 a (- n 1)))))

(new-figure "Regular Polygon!")
(lets Point "C" free x0 y0)
(lets Numeric "a" free 0 0 (* 2 (/ pi n)))
(send a masked)

(set! p1 (Point "I" free 5 0))

(lets Segment "S" extremities C p1)
(Segment ""  rotation S C a)

(polygon C p1 a n)
\end{verbatim}

\drgeniusFigureSize{Een regelmatige veelhoek met 15 zijden}{fig59}{6}


\subsection{Fractaal}
\drgeniusIndex{\drgeo-Scheme-figuren}{Voorbeelden}{Fractaal}{}

De constructie van een fractaal in boomvorm is erg eenvoudig.
De broncode van de figuur is wonderlijk compact, vooral wanneer
men ze vergelijkt met een ``handmatige'' constructie via de
grafische interface.
% moet nog vertaald worden

\begin{verbatim}
(new-figure "Baum")
(lets Numeric "A1" free 2 2 +3.4)
(lets Numeric "A2" free 2 3 -3.7)
(lets Numeric "S1" free 2 4 +0.5)
(lets Numeric "S2" free 2 5 +0.9)

(define (dec n)
  (- n 1))
(define (inc n)
  (+ n 1))
(define (invisible p)
  (send p masked)
  p)
(define (scalerot oP C a s)
  (let* ((sP (invisible (Point "" scale oP C s)))
         (rP (invisible (Point "" rotation sP C a))) )
    rP))
(define (Zweig p0 p1 n)
  (Segment "" extremities p0 p1)
  (let* ((left-scale (if (odd? n) S1 S2))
         (left-angle A1)
         (right-scale (if (odd? n) S2 S1))
         (right-angle A2) )
    (if (> n 0)
      (begin
        (Zweig p1 (scalerot p0 p1  left-angle  left-scale) (dec n))
        (Zweig p1 (scalerot p0 p1 right-angle right-scale) (dec n))))))
        
(lets Point "A" free -3 0)
(lets Point "B" free -3 2)
(Zweig A B 6)
\end{verbatim}

\drgeniusFigureSize{Een fractaal die een boomvorm simuleert}{fig60}{8}




\chapter{Bestanden en documenten}

Constructies kunnen op twee manieren 
worden opgeslagen. Ofwel sla je één constructie
op in één bestand, ofwel sla je een verzameling 
constructies op in één bestand
(i.e.\ een zgn.\ \drgenius-sessie).

\section{Opslaan van een constructie}

\drgeniusIndex{Figuur}{Opslaan}{}{}

Via het menu \drgeniusMenu{Bestand->Opslaan} 
of \drgeniusMenu{Bestand->Opslaan als...}, 
wordt de figuur die op dat moment zichtbaar is
opgeslagen.

\drgeniusNote{\drgenius\
  kan met verschillende figuren tegelijkertijd
werken. Je kan van figuur veranderen door op
het overeenkomstige oortje te klikken.}    

Via het tweede menu 
kan de gebruiker de naam wijzigen 
van het document dat men opslaat.

\drgeniusNote{De 
standaard bestandsnaam kan je veranderen
via het menu 
\drgeniusMenu{Bewerken->Voorkeuren...}. 
Meer informatie vindt men in het \link{deel over
standaardinstellingen}[ (Deel \Ref,
  pagina \Pageref)]{default_behaviour}.}

\section{Opslaan van een sessie}

\drgeniusIndex{Macro-constructie}{Opslaan}{}{}
\drgeniusIndex{Sessie}{Opslaan}{}{}

Een sessie is een verzameling \drgenius-gegevens
die de gebruiker in een keer verlangt
op te slaan in een bestand. 
Zo kan een leraar een verzameling
gegevens (figuren, macro-constructies, 
aantekeningen) organiseren in een enkel bestand,
zodat hij het geheel gemakkelijk opnieuw kan gebruiken.

Via het menu 
\drgeniusMenu{Bestand->Samenvoegen en opslaan}, 
opent de gebruiker het dialoogvenster
in verband met een sessie.

\drgeniusFigureSize{Het dialoogvenster 
i.v.m.\ een \drgenius-sessie}{fig51}{8}

In dit dialoogvenster verschijnt een 
tabel met alle actieve gegevens. 
In de eerste kolom staat de respectieve 
soort aangeduid van de gegevens 
die in \drgenius{}
actief zijn. In de tweede kolom staan
de namen van die gegevens.

\drgeniusNote{Op dit moment kan een sessie 
drie soorten gegevens bevatten~: 
een interactieve 2D-figuur, 
een macro-constructie of een tekst.}

De gebruiker kan de gewenste gegevens
één voor één selecteren in de lijst
en ze dan opslaan door op de knop
\drgeniusMenu{Selectie opslaan} te drukken. 
Hij kan ook alle gegevens in een klap
opslaan door de knop
\drgeniusMenu{Alles opslaan} in te drukken.

\drgeniusNote{Het menu 
\drgeniusMenu{Bestand->Samenvoegen en opslaan}
is de enige manier om een macro-constructie op te slaan
in een bestand.}

\section{Een bestand openen}

\drgeniusIndex{Macro-constructie}{Openen}{}{}
\drgeniusIndex{Sessie}{Openen}{}{}
\drgeniusIndex{Figuur}{Openen}{}{}

Of de gebruiker nu een enkele figuur
of een sessie met verschillende soorten
documenten heeft opgeslagen,
de procedure om een bestand te openen
blijft dezelfde~: via het menu
\drgeniusMenu{Bestand->Openen...}. 
Als de geopende sessie macro-constructies
bevat, kunnen die onmiddellijk worden
uitgevoerd door het gepaste instrument
aan te klikken. 
Macro-constructies zijn beschikbaar vanop elke
geopende figuur.

\section{Een figuur exporteren}

\drgeo\ biedt de mogelijkheid om een meetkundige figuur te
exporteren naar een \LaTeX- of PostScript-document.
Beide formaten zijn van het vectoriële type. Dit betekent
dat ze een betere afdrukkwaliteit zullen hebben dan beelden
die in een bitmap-formaat worden opgeslagen.
Men kan een figuur exporteren via het sub-menu
\drgeniusMenu{Figuur->Exporteren naar...} % FIXME ldots ?

\subsection{Exporteren naar \LaTeX}
\drgeniusIndex{Figuur}{Exporteren}{\LaTeX}{}

Wanneer men naar \LaTeX\ wil exporteren, heeft men het
\texttt{pstricks}-pakket nodig. Over het algemeen wordt
dit pakket verspreid samen met \LaTeX\ zelf.
Een figuur die men naar \LaTeX exporteerde kan je
vanzelfsprekend in een \LaTeX-document opnemen, maar
je kan het ook direct als een op zich staand document
compileren~:

\begin{verbatim}
latex figure.tex
dvips figure.dvi 
\end{verbatim}

Als men deze twee commando's invoert, bekomt men
het document figure.ps. Dit kan dan op het scherm
weergegeven worden met het programma 
GhostView\footnote{GhostView is een programma dat 
zowel PostScript-documenten (.ps of .eps) 
als PDF's op het scherm kan weergeven} \texttt{gv}.

\subsection{Exporteren naar PostScript}
\label{exporter-ps}
\drgeniusIndex{Figuur}{Exporteren}{PostScript}{}

Exporteren naar het PostScript-formaat biedt het voordeel
dat je de documenten makkelijk kan gebruiken in andere
programma's\footnote{Het formaat wordt herkend door TeXmacs,
OpenOffice.org, LyX, \LaTeX, Xfig, The Gimp en vele andere
programma's}.

Het EPS-formaat is de facto eigenlijk min of meer de standaard
waar het vectoriële beelden aangaat.
Om dit soort beelden snel weer te geven gebruiken we het
programma GhostView. Zijn commando is \texttt{gv}.

\subsection{De zone bepalen die men exporteert}
\drgeniusIndex{Figuur}{Exporteren}{Zone bepalen die men exporteert}{}

\drgeo\ zal standaard de zichtbare zone van de figuur exporteren.
Om dus een precieze zone van een figuur te exporteren, kunnen
we de grootte van het \drgeo-venster aanpassen, tot we de
gewenste zone bekomen\footnote{Men kan eventueel het zijpaneel
met de boomstructuur openvouwen om de zone die men wil
exporteren nog kleiner te krijgen.}.

Hoewel die methode snel en eenvoudig kan werken, is ze
niet altijd even soepel. Bovendien wordt de zone die
men exporteert niet automatisch mee opgeslagen met de figuur zelf.
Een andere manier van werken bestaat erin het commando
\drgeniusMenu{De te exporteren zone afbakenen} te gebruiken.
Gebruik hiervoor het menu \drgeniusMenu{Bestand->Instellingen m.b.t.
exporteren}.

Eens dit commando actief is, kan je op de figuur een rechthoek
afbakenen, die dan kan worden geëxporteerd. Die rechthoekige
zone kan men nadien zoveel bijstellen als men wil. Hij zal
in het lichtgrijs getekend worden. 
Wanneer men achteraf de figuur opslaat, zal de afgebakende
zone nu wel mee worden opgeslagen.
Tenslotte kan men de bewuste zone altijd verwijderen via
het commando \drgeniusMenu{De te exporteren zone verwijderen}.

\drgeniusFigureSize{Een figuur waarin een te exporteren zone werd afgebakend}{fig56}{7}

\drgeniusFigureSize{De zone werd geëxporteerd naar een 
PostScript-document en weergegeven met GhostView}{fig57}{7}

\chapter{Receptenboek}

Dit hoofdstuk is een steuntje in de rug voor
wie meetkundige figuren wenst te tekenen
met \drgenius. In tegenstelling tot de vorige
hoofdstukken, is de aanpak hier concreet en op
precieze situaties toegespitst. 
De inhoud van dit hoofdstuk werd tot stand gebracht
aan de hand van de reacties van de 
gebruikers van \drgenius.

\section{Constructies}

\subsection{Een punt plaatsen met gegeven coördinaten}

De meest eenvoudige manier bestaat erin een willekeurig
punt te plaatsen --~via het instrument \link{Willekeurig
Punt}[(Deel \Ref, pagina \Pageref)]{free_point}~--
en dan de eigenschappen van het punt aan te
passen --~via het instrument \link{Eigenschap}[ (Deel \Ref, pagina
\Pageref)]{property-item}~-- 
en met name de gewenste coördinaten in te voeren.

Een andere mogelijkheid --~minder soepel 
voor dit voorbeeld~-- is om twee
willekeurige getalwaarden in de figuur te 
plaatsen --~via het instrument \link{Getal}[
(Deel \Ref, pagina \Pageref)]{numeric_tool}~-- 
en dan een punt te construeren met beide
waarden als coördinaten~-- 
instrument \link{Punt gedefinieerd door 
zijn coördinaten}[ (Deel \Ref, pagina
\Pageref)]{coordinate_point}. 
Een voordeel echter, ten opzichte van de vorige
methode is dat een punt dat zo werd geconstrueerd
niet direct met de muis kan worden verplaatst.
Het is als het ware vastgeketend aan zijn positie.

\subsection{Een punt plaatsen 
a.d.h.v.\ zijn coördinaten} 

Deze functie wordt veelvuldig gebruikt wanneer men 
b.v. de meetkundige plaats van een punt wil
construeren. 
Deze constructie veronderstelt het bestaan van twee
waarden. Het punt wordt geplaatst met het
instrument \link{Punt bepaald door 
zijn coördinaten}[ (Deel \Ref, pagina
\Pageref)]{coordinate_point}.

\section{Andere truken}

\subsection{Een figuur afdrukken}

\drgeniusIndex{Figuur}{Afdrukken}{}{}
\drgeniusIndex{Afdrukken}{Figuur}{}{}

De meest eenvoudige manier is om de figuur 
naar het PostScript-formaat te 
exporteren -- \link{Exporteren naar PostScript}[ Section \Ref, page
\Pageref]{exporter-ps}. Gebruik vervolgens een
programma dat PostScript-documenten kan weergeven
en afdrukken. Zo'n document zal met vectoriële
kwaliteit worden afgedrukt. De programma's
GhostView, Gnome GhostView of K GhostView zijn
daar perfect geschikt voor.

\subsection{Een paragraaf met tekst in een figuur plaatsen}

\drgeniusIndex{Weergeven}{Tekst}{}{}
\drgeniusIndex{Figuur}{Weergeven}{Tekst}{}

Hiervoor kan je voordelig gebruik maken van scripts, zij het
op een wat afwijkende manier. Activeer de modus om een script te
schrijven -- \link{het instrument voor scripts}[ (Deel \Ref, 
pagina \Pageref)]{script-tool} --
en klik onmiddellijk op de achtergrond van het scherm. Zo
maak je een script aan zonder invoerparameter.
Daarna dien je de eigenschappen van het script -- 
\link{eigenschappen van een object}[ (Deel \Ref, pagina \Pageref)]{property-item} -- aan te passen.
In de tekstzone waar de Scheme-code normaal wordt geschreven
kan je nu de tekst plaatsen. De tekst moet tussen aanhalingstekens
staan en worden voorafgegaan door een apostrof. 
Bij voorbeeld~:

\begin{verbatim}
'"Animatie en waarnemingen
================
Verplaats de punten op de figuur en beantwoord volgende vragen.

 1. Waar moet men het punt A' plaatsen zodat men het niet meer kan onderscheiden van A ?
 2. Waar moet men het punt A plaatsen zodat men het punt A' niet meer kan onderscheiden van het punt B ?
 3. Hoe moet men het punt I plaatsen zodat de punten B', C' en I op dezelfde lijn liggen ?
 4. Wat is het spiegelpunt van I ? Wat is het spiegelpunt van A' ?"
\end{verbatim}

\drgeniusFigureSize{Voorbeeld van een paragraaf met tekst in een figuur}{fig58}{10}

Zoals dat geldt voor elk script, kan men ook hier het kleur van 
de tekst aanpassen.


\W \chapter*{Index} 
\W \htmlprintindex

\W \begin{iftex} 
\appendix 
\listoffigures 
\printindex 
\W \end{iftex}

\chapter{GNU Free Documentation License}
\input{../fdl}

\end{document} 


% LocalWords:  Guile Homothétie homothétie macro-construction glisser-déposer
% LocalWords:  redessinée

