Présentation
La bibliothèque de dessin de Smile vous permet de dessiner en PDF dans une graphic window, ou dans une graphic views. Le menu contextuel Superposer un dessin des graphic view est une solution simple pour ajouter des commentaires ou une illustration par-dessus un graphique.
-
pour définir un dessin à superposer au graphique d'une graphic view, déroulez son menu contextuel (ctrl-clic sur l'objet) et sélectionnez Superposer un dessin.
-
la fenêtre de script de la graphic view s'ouvre alors, définissant une fonction on OverlayDrawing(v) contenant en commentaire un script d'exemple. Cette fonction peut contenir des appels à des commandes de dessin, sans faire appel à BeginFigure()...EndFigure().
-
le paramètre v de la fonction on OverlayDrawing(v) est une référence à la vue. Vous pouvez utiliser la commande convert coordinates pour convertir des coordonnées utilisateurs (par exemple les coordonnées de points d'une courbe de la vue) en coordonnées en pixels. Le script donné en exemple écrit un texte au centre de la vue : enlevez les commentaires (* et *) puis sauvez la fenêtre de script pour voir cet exemple se dessiner sur la vue.
Exemple
Voici un exemple plus sophistiqué, traitant les données d'une courbe pour numéroter ses sommets. Ce script fait appel à une fonction calculant ces sommets, puis utilise la commande convert coordinates pour dessiner un point et un nombre à chaque sommet.
-
Définissez une courbe :
set y to randomarray 20 range {0, 100}
set c to QuickCurve(0, y, "randomized values")
-
Puis choisissez Superposer un dessin dans le menu contextuel de la vue. Remplacez le script proposé par le suivant :
on getmaxs(x, y)
set n to (count y)
set {xl, yl} to {extractarray x at 1 for (n - 2), extractarray y at 1 for (n - 2)}
set {xc, yc} to {extractarray x at 2 for (n - 2), extractarray y at 2 for (n - 2)}
set {xr, yr} to {extractarray x at 3 for (n - 2), extractarray y at 3 for (n - 2)}
set m to evalformula "(yc > yl) & (yc > yr)" with {yl:yl, yc:yc, yr:yr}
set {xx, yy} to maskarray {xc, yc} with m
return {xx as list of real, yy as list of real}
end getmaxs
on OverlayDrawing(v)
try
set c to curve 1 of v
set {xx, yy} to getmaxs(xdata of c, ydata of c)
repeat with k from 1 to (count yy)
set xi to (get item k of xx)
set yi to (get item k of yy)
set {i, j} to convert coordinates {xi, yi} in v
SetPenColor({1, 0, 0, 0.9})
SetPenWidth(3)
MoveTo({i + 6, j})
ArcPath({i, j}, 6, 0, 2 * pi, true)
DrawPath(2)
TextMoveTo({i, j})
SetTextSize(15)
DrawString("[br]" & k)
end repeat
TextMoveTo({200, 50})
SetTextSize(12)
SetFillColor({0, 0, 0, 1})
DrawString("(" & (count yy) & " maximums)")
on error strErr
postit strErr
end try
end OverlayDrawing
Importer le script
|
Un exemple de dessin superposé à une courbe.
|