![]() |
Système de Composition
d'Applications Interactives Les exemples d'utilisation |
--ooOoo--
L'exposé sur l'application vient d'être réalisée. Démarre maintenant l'adaptation des programmes sous MinGW/Msys.
Par rapport à la version d'origine, cette adaptation peut conduire à quelques modifications et ajustements de la présente rubrique.
- Les différents composants de l'application
La liste des exemples des modules correspond à un ordre de conversion et de mise au point mais l'ordre réel sera établi au fur et à mesure de l'avancement à savoir :
1°) - le module ''scapin.c'' :
C'est le maillon principal d'enchaînement des modules de l'application SCAPIN. C'est le seul module qui reste en mémoire durant tout le traitement d'une page d'un support de composition.
2°) - le module ''sca_strt.c'' :
Le module démarrage de l'application par l'analyse de la commande lancée. Il effectue les initialisations générales primaires.
3°) - le module ''sca_init.c'' :
Le module prépare le traitement du support de composition. Il alloue les fichiers de travail de l'application. Il lance du premier module de traitement.
4°) - le module ''sca_fdpg.c'' :
Le module effectue le traitement du texte du fond de page. C'est donc le programme qui produira une première visualisation graphique de l'application comme celle ci-dessous :
Cette image visualise la seule page figurant dans le support de composition saisi dans le fichier ''sca_polices_01.sc'' dans l'encadré ci-dessous avec la commande
scapin ^a sca_polices_01.sc format=640,640
A noter | : | - | le descripteur ''zformat *,*'' demande à l'application d'ajuster la page du support seulement à la saisie du texte. |
- | le descripteur ''z h 0.8'' demande à l'application de tracer le texte de fond de page à 80% de la taille par défaut. | ||
- | les deux seules polices que j'avais pu récupérer ''couriers'' et ''times'' avaient été dessinées par un rédacteur du Central Documentation de Marignane en possession à l'époque (1985) de stations Apollo tournant indifféremment sous Domain/AEGIS - Unix SYS V et BSD 4.2. Aujourd'hui, avec MinGW/Msys sous Windows, elles demanderaient à être retouchées dans leur dessin ce que je ferais peut-être en fin de démonstration. |
5°) - le module ''sca_grns.c'' :
Le module détecte toutes les réserves marquées aux quatre coins d'un caractère ''*'' puis celles marquées d'un caractère ''#''. Il en détermine l'espace rectangulaire graphique qu'il remplit conformément à l'attribut correspondant donné.
Le premier exemple qui vient à l'esprit est d'afficher les 32 couleurs et les 32 grains (page 1) ainsi que les grains colorés (page 2) pris en compte par défaut par le noyau graphique avec le support de composition ci-dessous :
Avec le groupe des deux commandes ci-après, les couleurs et les grains sont affichés avec la page 1 du support de composition (la commande ''ng_erse'' ne sert qu'à afficher un fond coloré) :
ng_erse ^a i_tl ; scapin ^a sca_couleurs_grains.sc format=700,640 page=1
Les grains peuvent être colorés par combinaisons de couleurs. L'une parmi les multiples combinaisons est affichée par la commande suivante, page 2 du support de composition :
scapin ^a sca_couleurs_grains.sc format=700,640 page=2
6°) - le module ''sca_grls.c'' :
Le module détecte toutes les lignes marquées aux extrémités d'un caractère ''+''. Il en trace les segments conformément à l'attribut correspondant donné. En droite ligne de ce qui vient d'être fait, il est proposé un affichage des types de traits pris en compte par le Noyau Graphique dans la page 1 du support de composition ci-dessous :
scapin ^a sca_grilles.sc format=700,640 page=1
La page 2 du même support de composition affiche des grilles et des cadres qui se recouvrent avec possibilités de marquage de flèche.
scapin ^a sca_grilles.sc format=700,640 page=2
6°) - le module ''sca_chps.c'' :
Jusqu'à présent, on ne s'est attaché qu'à l'enrobage de la composition.
Avec les champs, on attaque la partie vraiment active et productive de l'application à savoir, l'enchaînement de programmes et d'applications affichant, dans un espace donné du support de composition, leurs éventuels résultats graphiques.
Le module détecte toutes les réserves marquées aux quatre coins d'un caractère ''£'' puis celles marquées d'un caractère ''$'' pour ce qui concerne les champs explicites. La description des champs implicites est fournie par des descripteurs appropriés.
- Un exemple simple "sca_compo_01.sc"
Le support de composition ci-dessous dont le nom est ''sca_compo_01.sc'' ne comporte qu'un seul champ de nom ''$a'' pour ne pas trop compliquer au début dans lequel on lance le shell ''compo1' 'qui a affiché dans la page ''Ouverture/Fermeture image'' de la rubrique ''Mise en oeuvre'' les dessins d'une maquette d'avion, d'une horloge et de la plus grande locomotive au monde ''Big Boy''.
Il est proposé ici de traiter ce support de composition pour afficher une image 600x800 points qui tient verticalement sur l'écran en attirant l'attention sur la définition du tracé pour cette résolution-écran.
scapin ^a sca_compo_01.sc format=600,800
Mais si l'on imprime ce même support de composition sur une imprimante à 200 points au pouce comme c'était le but principal dans le traitement de la documentation technique à Marignane dans les années 1980 avec une électrostatique Benson, l'image à imprimer sur un format A4 aurait la taille de 1650x2340 points.
Ici, puisque nous n'avons que l'écran, contentons nous d'afficher le support de composition sur une image 820x1200 points prenant la majeure partie de l'écran en horizontal dont la taille est de 1600x900 points avec les commandes suivantes :
1°) - Ouverture de l'image primaire ''^a'' faisant 1200x820 avec la commande ng_cnct ^a 19 8 1200 820 L'image est horizontale pour occuper le plus de place possible sur l'écran dans le rapport d'une feuille A4. 2°) - Ouverture de l'image ''^a/s'' faisant aussi 1200x820 pour effectuer une rotation de 90° avec la commande ng_open ^a/s p 0 1200 0 820 0 0 1200 820 1200 0 L'image est horizontale. 3°) - Lancement de la commande ''scapin'' pour traiter le support de composition scapin ^a/s sca_compo_01.sc format=820,1200 Il ne reste plus qu'à capturer l'image horizontale du support de composition et opérer avec un logiciel de traitement d'image comme ''Paint Shop Pro Photo'' par exemple pour obtenir l'image définitive qui suit.
La forme des lettres en particulier est améliorée même si, toujours sur l'écran, la taille du point est inchangée. On est cependant encore loin de la résolution d'une imprimante à 200 voire 300 ou 600 points au pouce où la taille du point, cause du crénelage, est beaucoup plus petite.
Je verrai un peu plus tard. Il est probable que je me déciderai à tenter le traitement de l'anticrénelage pour ne pas rester sur une impression un peu trop défavorable.
Il faut rappeler qu'à l'origine, l'application était destinée à imprimer des manuels papier, que l'affichage sur écran n'était qu'une aide à la composition et que les logiciels de traitement de texte ''WYSIWYG'' n'étaient pas encore sortis ou commençaient à peine de l'être..
- Un exemple récapitulatif "sca_compo_02.sc"
Le support de composition présenté ici sous le nom est ''sca_compo_02.sc'' reprend à peu près toutes les fonctionnalités de l'application ''scapin''.
Par ailleurs, ayant pu récupérer mon ancien PC, un ''Géricom'' sous XP qui ne servait plus à ma fille, j'ai donc pu réutiliser le logiciel MicroCadam. Cela m'a permis de reprendre les possibilités du langage hpgl version 2 offrant en particulier la possibilité de gérer des traceurs à plusieurs plumes donc à plusieurs couleurs ici comme sur le dessin de la ''Big Boy''.
L'image primaire choisie ici est un format paysage de 1100 points en largeur sur de 800 points en hauteur :
ng_cnct ^a 19 8 1100 800 ng_erse ^a ; scapin ^a sca_compo_02.sc format=1100,800
- Traitement des champs d'environnement débordant sur les marges pour chaque page du support de composition s'il y en a plusieurs :
- champ dorsal,
- champ haut de page,
- champ bas de page,
- champ gauche de page,
- champ droite de page,
- champ frontal.
- Traitement dans le fond de page :
- des champs codés en tenant compte de leurs priorités,
- des grains,
- des grilles.
- de l'utilisation de l'option 'X' (ou exclusif) avec du texte et des grains,
- Un exemple de manipulation des images vectorisées dans "sca_compo_03.sc"
Le support de composition ''sca_compo_03.sc'' reprend la page du support ''sca_compo_02.sc'' en utilisant la logique des calques (un par page à partir de la page 3), toutes les pages étant traitées par l'application ''scapin'' comme suit :
- La page 1 du support de composition est constitué d'un texte minimum et de champs qui positionnent les différents calques (de la page 3 jusqu'à la page 9) décrits ci-après et affiche en médaillon la page 2 à plat de tous les calques,
- La page 2 comporte un seul champ dans lequel on lance 7 fois l'application ''scapin' pour traiter les 7 calques à superposer. L'image globale est la même que celle sortie par le support ''sca_compo_02.sc'', à peu de chose près cependant car certains paramètres ont été adaptés pour respecter les échelles dans les cascades d'images,
- La page 3 comporte le calque du fond de texte dorsal,
- La page 4 comporte le calque des champs d'environnement, haut, bas, gauche et droite de page,
- La page 5 comporte le calque des grains,
- La page 6 comporte le calque des trois champs codés, la maquette d'avion, l'horloge et la locomotive,
- La page 7 comporte le calque des grilles,
- La page 8 comporte le calque du fond de page,
- La page 9 comporte le calque du fond de texte frontal.
L'image primaire choisie ici est toujours un format paysage de 1100 points en largeur sur de 800 points en hauteur :
ng_erse ^a ; scapin ^a sca_compo_02.sc format=1100,800
L'exemple ci-dessus met en évidence la fonctionnalité centrale de soumission d'une tâche à un système d'exploitation. Sous Unix, c'est la fonction 'run time' ''system()''.
Chaque champ du support de composition est associé à un descripteur dans lequel on spécifie le format de l'espace graphique dans lequel certaines tâches appelées pourront y accéder.
L'application ''scapin'' étant un programme comme un autre, elle peut s'appeler elle-même. On notera alors l'aspect récursif de son fonctionnement.
Mais la cohérence de l'image graphique résultat ne peut être assurée ici sans l'externalisation des structures d'images du Noyau Graphique dont la durée de vie est permanente tant que le fichier correspondant n'a pas été détruit.
On voit très bien que, dans le calque de la page 9, le produit des lois élémentaires linéaires de composition d'une lignée d'images n'est pas linéaire et qu'il faut parfois en tenir compte.
A noter aussi que, dans l'image ci-dessous de la console du déroulement du traitement du support ''sca_compo_03.sc'', le lancement sur l'image primaire ''^a'' en 1 de l'application ''scapin'' qui s'appelle elle-même peut très vite engendrer une cascade d'images-filles comme on peut le voir en 2 puis en 3.
- Des exemples de manipulation des images pixels
Jusqu'à présent, les images manipulées avaient la caractéristique d'être uniquement vectorielles. Dans les exemples qui vont suivre, il est montré la manipulation des images de pixels. Comme le Noyau Graphique a évolué vers les couleurs codées sur 32 bits, il est devenu possible d'accéder aux formats de fichiers ''.bmp'' traités en standard par la SDL et ''.png'', ''.gif'' et ''.jpg'' avec l'installation de la librairie SDL_image.
L'exemple proposé est tout ce qu'il y a de plus trivial. Bien des pages d'un manuel font appel à des illustrations dont seule la taille a été ajustée au texte. Les photographies sont intégrées dans l'image primaire du Noyau Graphique avec le service ''ng_getimg.c''.
Le support de composition ci-dessus affiche la page ci-après avec la commande maintenant habituelle :
ng_erse ^a ; scapin ^a sca_compo_05a.sc format=1100,800
La fonctionnalité appelle déjà quelques commentaires :
Les photographies traitées sont de tailles analogues. La plupart d'entre elles ont une largeur de 640 pixels sur 480 en hauteur. Le support de composition fait appel au service ''ng_getimg.c'' pour adapter la taille aux champs codés dans le texte. Au final, le traitement demande en gros de réduire les images de 60 à 70 %. Le service n'analysant pas la proximité de chaque pixel car je ne sais pas le faire, on peut remarquer que des effets indésirables parasitaires ressortent à l'affichage un peu comme des artéfacts beaucoup plus visibles avec les fichiers ''.gif'', ces derniers travaillant en 256 couleurs. J'avoue bien franchement que je ne m'attendais pas à ce résultat avec une programmation des plus basiques.
- Dans cet exemple, l'appel au service ''ng_getimg.c'' est codé dans sa forme la plus simple, sans paramètre de capture. L'image toute entière est alors prise en considération. En cas de capture d'une zone de l'image, la réduction étant plus importante, il faudra probablement s'attendre à plus de parasitage.
un exemple de page de manuel de vol pour bientôt !...
L'exemple proposé maintenant est un peu la ''cerise sur le gâteau''. Tout au long de la démonstration, il a été mentionné le caractère récursif du Noyau Graphique en indiquant qu'il était possible de simuler le phénomène de ''feedback'' quand une caméra filme dans une glace l'image qu'elle reproduit à l'infini. C'est ce que fait le shell appelé comme suit :
sca_compo_05b.prc ^a
Il produit l'image ci-dessous :
L'image ci-dessous est tout simplement la visualisation de la console peu avant le ''crash'' du programme ''scapin'' (en vert) quand il a tenté d'ouvrir une 12ème image dans le traitement du champ dorsal alors que seulement 11 images avaient été générées dans la structure ''^a'' par la commande ci-dessous :
ng_cnct ^a 10 32 1100 800
Soit dit en passant ... il y aurait comme un petit bogue dans le traitement de l'erreur (en rouge) !... Pas facile de mettre au point dans l'utilisation des derniers retranchements marginaux d'un logiciel où l'erreur est un peu délicate à reproduire. On en restera tout simplement là, le bogue ne gêne pas du tout, le logiciel n'est qu'un support didactique sur la manipulation des illustrations.
On pourra remarquer :
- les retours des différents niveaux de récursivité. Malgrè le bogue, le shell rend tout de même la structure dans le même état de propreté qu'il l'a trouvée au départ,
- que le shell présenté ici est une illustration à part entière dans la base de données et qu'il pourra éventuellement être appelé dans toute autre illustration.
Il sera très intéressant de voir l'image imprimée sur une imprimante à 300 ou 600 points au pouce comme celle que j'ai. La taille de la pixelmap devra alors avoir la résolution appropriée. Mais, par rapport à la visualisation sur l'écran, l'impression est équivalente à un grossissement. Si au niveau des images vectorielles, on peut s'attendre à une qualité exportable, il est fort prévisible que ce ne sera pas le cas des images sauf si leurs résolutions sont adaptées. Dans ce cas, il serait fort possible de voir l'affichage sur écran malmené.
Oh surprise !... que ça va vite ... Pourtant la programmation est plutôt ''Bulldoser'' et pas du tout recherchée !... Si j'avais eu ça à l'époque, je me serais épargné bien des critiques....
C'est finalement cela le progrès !...
--ooOoo--