Une collection principale pour contenir les éléments de dessin voire une collection de collection si vous voulez gérer les calques et autant d'objets que de types de formes de dessin comme les lignes, les arcs ou les courbes spline*002. Ce n'est pas le choix adopté par Denis-Draw car chaque dessin peut lui même contenir tous ces éléments à la fois.
J'ai rencontré un ami qui m'a demandé comment faire un ray-tracer, ces structures peuvent être les mêmes dans le cas de la 3D. Une fois ces structures en place, un choix d'outil dans la palette de dessin parmi plusieurs permet de créer chaque «morceau» du dessin. Il suffit d'ajouter l'objet choisi dans la collection à partir de la position du curseur de pointage de la souris Son tracé demande bien sur de s'afficher en temps réel pour visualiser immédiatement sa position.
Sachant que le dessin des splines détermine un segment de droite si seuls deux de ces points
existent, que le dessin de point de spline successif dessine une courbe et
que vous pouvez faire en sorte de les positionner pour obtenir un arc de cercle, on peut se demander si seul cet élément (la courbe spline) peut suffire à tous les autres avec une seule équation !
Il faut aussi parler des attributs, comme ceux des couleurs de tracé des courbes.
Mais si vous connaissez Persistence Of Vision
il suffit tout simplement de faire référence à la texture
qui peut se décrire de la même façon dans une boîte de dialogue.
Le dessin de l'écran consiste à parcourir la collection d'éléments de dessin, puis d'appeler la méthode d'affichage de chaque élément en tenant compte de ces attributs de dessin. Vous pouvez aussi, comme le fait Denis-Draw, vérifier que le rectangle d'encadrement de chaque élément de dessin est bien inscrit dans le rectangle d'affichage (clipping). De même quand vous cliquez avec la souris sur un élément de dessin avec l'outil de sélection, il suffit de parcourir cette même collection pour extraire celui qui correspond à la position de la souris, en partant du dernier dessin ajouté si vous voulez gérer un ordre de priorité.
Chaque élément est circonscrit dans un rectangle en une fonction du GDI*003 PtInRect*004 permet de savoir si un point (celui de la position de la souris) est à l'intérieur du rectangle d'encadrement du dessin examiné. Il suffit de le marquer «sélectionné» ou de l'ajouter à une liste d'éléments sélectionnés avec leurs indexs. Une liste d'éléments sélectionnés distincte permet de parcourir seulement 3 entrées si seulement trois objets sont sélectionnés plutôt que l'ensemble de la collection mais dans ce cas faites attention aux éléments que vous effacez.
Les attributs (comme la couleur du pinceau) affectés alors s'appliquent à la sélection qu'il suffit de parcourir pour la mettre à jour et de demander l'affichage de tout le document, ou si vous êtes optimiseurs, du cadre des éléments modifiés.
L'élément Groupe est un élément particulier avec lui aussi une liste d'éléments de dessin, quand sa méthode d'affichage est appelée, il parcourt sa propre collection pour appeler les méthode d'affichage de ceux-ci.
Pour revenir sur le sujet du ray-tracer qui demande à être expliqué, celui-ci lance des rayons partant de l'il d'observation ou de la caméra pour parcourir chacun des pixels de l'écran. Quand le rayon rencontre un objet de la scène, il mémorise la longueur du rayon de la caméra à la surface de l'objet pour continuer avec tous les autres objets de la scène et garder le plus proche, le rayon le plus court de l'il à la surface de cette objet. La couleur de ce pixel prend alors la couleur de l'objet touché. On peut aussi calculer la normale à la surface pour déterminer l'angle de celle-ci avec une source de lumière et de la colorer en fonction.
Le prototype serait le suivant:
une liste des calques = ( une liste de Collection )
Collection = (liste de dessin...,...)
(des méthodes de parcours de cette collection pour afficher, localiser, affecter des attributs)
Actif = (la collection en cours, celle sur lequel les nouveaux éléments de dessin s'ajoutent )
Sélection = (liste indice sur un ou plusieurs dessin )
un dessin = ( (une liste de segment, d'arc ou de spline )
( avec un rectangle d'encadrement )
( des attributs... )
( une méthode d'affichage )
( une méthode de localisation ) //celle-ci demande à être précisée
( des méthodes d'affectation des attributs ) ).
des attributs = ( couleur du pinceau, du remplissage, épaisseur de tracé, relief, ombre ou lumière voir texture etc...)
Liste des références :
Denis Bertin le 21-23.07.2009