Common nouns | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | Index Berger's Works
Proper nouns A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z| HOME DICCAN

Roxame. Presentation and user guide

Work and translation in progress

This text is published only as descriptive of functions, without any warranty of proper operation. 1. General presentation, aims, installation.
2. Use by command line
3. Use of macros, suffixes, lists
4. Geometric basic forms
5. Colors and palettes
6 . Filters and gradations
7. Geometric and morphogeometric operations.
8. Classification and segmentation (regions)
9. Loading and reservin an image
10. Text
11. Evaluation and critic
12. Random, autonomy, generativity
13. External interfacing with Arduino
14. Generators
15. Macros
16. Scipts and presentations
17. The Processing code, spirit.
18. Uses for diccan
19. References

1.General presentation, aims

 

Historical introduction

Installation

Il faut installer : Processing dans un répertoire c:\Roxame et Open CV dans un répertoire c:\Roxame\OpenCV, éventuellement Arduino. Le tout dans un répertoire c:\RoxameTous ces logiciels sont libres et fonctionnent sous tous les systèmes d’exploitation courants.

Ensuite il faut recopier :

- le dictionnaire, (c’est un .txt) dans le même répertoire que Roxame
- les polices de caractères si elles n’y sont pas (voir celles qui existent dans le dictionnaire, il faut moins Arial)
- des sous-répertoires c:\data\... pour les documents et un sous-répertoire c\Roxame\Texts
- ouvrir des sous-répertoires c:\Roxame\data\Dustbin  et c:\Roxame\data\Works pour les œuvres,  …data\Reports pour les analyses et critiques.

Pour faire fonctionner, il n’y a plus alors qu’à lancer l’application avec le petit triangle en haut à droite dans l’écran Processing.

2. Utiliser Roxame au mot à mot

Le logiciel Roxame, qui est  essentiellement un peintre autonome, et même "une" peintre. Très autonome par tempérament, elle ne vous permet pas de lui prendre la main et de faire les choses à sa place, par exemple avec une souris. Il faut lui parler, ou plus exactement lui faire part de vos désirs en tapant des "lignes de commande". A son grand regret, pour l'instant, elle ne parle pratiquement que l'anglais. Et elle ne comprend que les mots qui font partie de son dictionnaire. Si vous tapez un autre mot, elle ne se fâchera pas, mais vous dira "word not found".

Noter sur cet écran :
- au centre, l’image sur laquelle on travaille
- à gauche depuis le haut, les actions qui ont été exécutées
- à gauche, à la hauteur du bas de l’image, la ligne de commande
- à droite en haut, un certain nombre de variables courantes, notamment le numéro de l’œuvre
- à droite plus bas, la pile des actions à exécuter
- sous l’image, à gauche, le contenu de l’image auxiliaire (imgx)
- une visualisation de la segmentation (les couleurs n’ont pas de signification)
- dans certains cas, affichage d’un histogramme
- tout en bas, des commentaires issus du dictionnaire ou, en version « jeux », des indications pour le joueur.

Vous pouvez toujours aller voir ce dictionnaire en tapant dico  (On revient dans le programme avec TAB).  Vous pouvez aussi avoir quelques explications sur n'importe quel mot existant, en tapant ce mot suivi de .c . Enfin, le dictionnaire étant en format .txt, vous pouvez aller le lire directement. Et vous pouvez en faire une présentation plus plaisante en HTML avec dicoHTML  . Le résultat est dans le sous-répertoire Reports.

Pour tester les résultats, nous avons mis quelques images à votre disposition :

(un peu plus compliqué si vous voulez mettre les vôtres)

Vous pouvez taper plusieurs mots sur une seule ligne. Mais l'ordre n'est pas indifférent. Il faut mettre les paramètres avant le mot d'action à la fin

Enfin, si vous êtes programmeur, ce voyage vous permet aussi d'aller voir au coeur du code (Processing et Java) comment on peut programmer tout cela (mais Roxame n'a aucune prétention à se prendre comme un modèle de bonne et belle programmation).

Une petite promenade pour faire connaissance 

Soyez sympa avec Roxame, laissez-là s’amuser un peu, en tapant simplement  les deux mots  any line. Refaites-le plusieurs fois, car Roxame est fantaisiste et parfois elle fera un caprice, par exemple en imprimant blanc sur blanc, et vous aurez l’impression qu’elle n’a rien fait.

Maintenant, au travail. Tapez one pour revenir aux choses sérieuses. 

Commençons par dessiner une forme simple : tapez square. Vous voyez s’afficher, à peu près au centre, un carré sépia. Vous pouvez essayer quelques autres formes, par exemple  circle ou line. Notez que h et v tirent des horizontales et des verticales.

Changez de couleur : tapez par exemple  red (blue, yellow, green, black), puis un nom de forme : blue ellipse, par exemple.

Faites des formes pleines au lieu de simples contours : taper paint (attention, Roxame est un peu plus lente quand elle doit colorier toute une surface), puis une forme : par exemple : paint yellow triangle

Maintenant, chargez une image : tapez Manh. Vous pouvez passer à la suivante, dans le même répertoire, en tapant next. Ou, si votre webcam est branchée, faites simplement cam

Appliquez lui un filtre : blue_toning (attention à l'orthographe, il faut bien le souligné entre blue et toning, et le tout en minuscules) , par exemple  ou encore contours

Enfin, pour sauvegarder l’œuvre immortelle que vous venez de créer, faites nww et allez voir dans le sous-répertoire dustbin, vous l’y trouverez et pourrez l’envoyer par mail à vous vos amis ! Et Roxame vous a préparé une belle page toute blanche !

Maintenant vous êtes prêt pour une exploration plus détaillée, et vous pourrez plonger de plus en plus profondément dans Roxame et développer vos capacités de création avec elle : d’abord les emplois mot par mot, plus les macro-instructions, y compris la génération automatique d’une série d’œuvres, puis le développement du dictionnaire, la préparation de présentations et, top du top, modifier ou mieux, continuer à perfectionner le code même de Roxame. Dans ce dernier cas, j’espère bien que vous ferez profiter de vos travaux la communauté des développeurs, et même que vous adhérerez à l’association Les Algoristes.

Modes de présentation à l’écran

Outre le mode normal, Roxame peut fonctionner en mode HD, avec l’image occupant tout l’écran. Il suffit de taper s_HD. Mais alors on n’a plus moyen de savoir ce que l’on tape (ceci pourrait être arrangé à l’avenir avec des fenêtres pop-up.

Nota : pour avoir vraiment la totalité de l’écran, sans les barres de Windows (non vérifié pour les autres systèmes d’exploitation), il faut appuyer sur Control + Maj au moment où on lance Roxame avec le petit triangle.

On revient au mode ordinaire avec la touche TAB

3. Utilissation par macros. Suffixes, lists.

 

Les macros figurent dans le dictionnaire avec la catégorie macro_ . Elles y persistent

Une ligne comprenant plusieurs termes est traitée comme une macro_

Suffixes

lb. branch label
nx. nearest
tx. text

dans les listes:

if (! (SUF.equals("ly"))) Rread(str1);

ac definition change
ar all regions. present version not OK
lb is dealt with in the do function
ly inlayFile
nm repetition
nx nearestword in dico
plpalette setting
rdrandom selection in the list
sh works only with tubes
sp loads tne next palette
sw , "sweep" sequence choice in a list, according to work number
tb tubeset setting
trtree. in fact
ts")) int1 = 208;
"tx write on page bottom

Fonctionnement du programme.
Si une commande se termine par .xx (deux caractères après un point), ce mot ne peut (doit) pas exister dans dico. Une des premieèrs choses que fait alors Roxame, c'est alors de rechercher s'il y a un suffixe et de l'identifier.
Si elle trouve cette structure, elle cherche alors le mot racine (mot d'origine moins 3 caractères dans dico). Si elle ne le trouve pas

4. Formes de base

En mode ligne de commande, au lancement de Roxame, rien de plus simple pour obtenir une forme. Tapez simplement son nom. Par exemple square.

En tapant forms.c vous aurez quelques exemples des principaux types de formes que Roxame sait générer. Il suffit de taper leur nom. Vous noterez que toutes ces formes sont linéaire, non pleines, à peu-près au centre, et couleur terre-de-sienne...

Vous pouvez changer cela en utilisant différentes paramètres. Pour chacun d'eux, vous avez la liste des valeurs de base en tapant le nom suivi  de .c . Quelques observations :

- les valeurs de paramètres doivent toujours être tapées avant le nom de la forme (ce peut être sur la même ligne de commande ou sur des lignes consécutive) 

- position (position) : place le centre de la forme. SPL et SPR sont les "points forts" à droite et à gauche,  HLC, HRC, LLC et LRC sont les quatre coins, position.rd tire une position au hasard. Valeur par défaut : center ; on peut aussi définir une position relativement à la forme qui vient d'être tracée, avec at_right, at_left, above, under , ou encore avec tpg , qui fonctionne "typographiquement" : quand on arrive à la fin de la ligne, on passe au début de la suivante, jusqu'à couvrir toute la page. 

- orientation (orient)  : est importante surtout pour tracer une ligne, qui peut monter (ascend) ou descendre (descend). Valeur par défaut : ascend.

- creux/plein (modeg) , fournit une forme linéaire (draw) ou pleine (paint). Valeur par défaut : draw.

- taille  (size) donne la dimension globale de la forme (diagonale du rectangle où elle s'inscrit) ; noter que bord_a_bord étend la forme d'un bout à l'autre de l'image, soit horizontalement, soit verticalement, en fonction de la proportion. Valeur par défaut : big.

- proportion (prop) donne les proportions de la forme, depuis horizontal jusqu'à vertical . Valeur par défaut :  isocele indique que hauteur et largeur sont identiques (sauf exception). isocele rectangle est équivalent à square, et isocele ellipse à circle

- épaisseur (e) ; very_thin donne une épaisseur de 1 pixel ;  very-thick de 10pixels; Valeur par défaut : thin.

- style (style) tente d'aller plus loin que le mode courant , rigid .  sensitive tente de recréer les hésitations de la main du dessinateur (l'effet n'est sensible que si Roxame n'est pas d'humeur cold, mais un peu échauffée, ce que vous obtenez avec alive ou drunk, par exemple).  soft fait varier l'épaisseur en donnant une sorte de coupure. Dans ce domaine, l'imagination pourrait aller beaucoup plus loin.

- couleur (color) ; essayez olive, par exemple, pour vous changer.

- mode de mélange (blend) vous propose trois valeurs. imperative pose la forme en écrasant ce qu'il y avait précédement ; additive et subtractive (attention à l'orthographe de ce mot, l'anglais ne mettant pas de s après sub)  font les deux types de mélange.

- clipping  (clip) n'a vraiment d'effet utile que s$ur une image segmentée ; valeur par défaut clip_touch, qui reporte seulement la forme engendrée ;

Vous pouvez toujours revenir aux valeurs par défaut avec one. Vous pouvez aussi tirer hasard l'ensemble des paramètres avec any, ou la valeur d'un paramètre déterminé en faisant suivre son nom de .rd , par exemple forms.rd . Attention : dans certains cas, il ne se passera rien, par exemple si le hasard ajoute une forme blanche en mélange soustractif.

Mais Roxame sait dessiner d'autres formes que les quelques exemples donnés par forms.c . Pour les découvrir, il faut procéder en deux étapes. Avec form_.c vous obtenez une liste des différentes types de formes disponibles. Attention à l'orthographe, pour éviter des ambiguïtés, les noms de types comportent souvent un caractères souligné à la fin. Pour chacun de ces types, vous obtenez les formes en tapant ce type suivi de .c  par exemple, line_.c. Attention à l'orthographe, pour éviter des ambiguïtés, les noms de types comportent souvent un caractères souligné à la fin. 

Nota : une bonne partie de ces forme ont un intérêt mineur pour une utilisation en ligne. elles sont en revanche assez pratique pour varier les constructions automatiques de Roxame.

Quelques commentaires sur ces types :

line_  :  line est la ligne simple, lines une série de quatre lignes, h et v tracent des horizontales ou des verticales bord à bord, hhhh et vvvv répètent l'opération quatre fois

triangle_ :  triangle trace un triangle à peu près quelconque ; la série triangle_up, triangle_down, triangle_left, triangle_down trace des triangles toujours appuyés sur une ligne de base (définie par les paramètres ci-dessus) et complète par un triangle dont le sommet est en bord d'image,  respectivement en haut, en bas, à gauche et à droite ;

arrow_ : la série arrow_left, roof, arrow_right, stake donne aussi une série de triangles, ceux-ci isocèles et avec une base verticale ou horizontale

rectangle_ : juste rectangle, comme plus haut, et square

quadrilateral_ (quad_quad trace un quadrilatère à peu près quelconque (mais convexe) ; la série  quad_up, quad_down, quad_left, quad_right trace des quadrilatères comme les séries précédentes : appuyées sur la ligne de base, et se prolongeant jusqu'à un des bords.  myQuad est définit par les coordonnées de ses quatre sommets ; vous pouvez les modifier vous-mêmes en changeant la définition de myQuad dans le dictionnaire (troisième colonne); 

polygon_ : pentagon, hexagon, octagon, octagon_regular

ellipse_ : ellipse, circle . circle est équivalent à isocele ellipse

pixel_ :  nous n'avons pas implémenté le pixel unique ; pixels crée un nuage de pixels sur toute l'image, à la densité de 1% ; pixelsn fait de même,  à la densité indiquée par le nombre précédent ; par exemple  100  pixelsn couvre toute l'image de la couleur en cours. pixel_cloud fait un petit nuage de pixels (à améliorer).

Les deux types suivants sortent du concept normal de formes, mais peuvent être utiles ou amusant.

write_ :  letters fait un semis de lettres, phrases un semis de phrases

CF_ : CF_portrait et CF_landscape tracent des cadres pour une bande dessinée (pour s'en servir aisément, il faut ensuite segmenter, voir le chapitre ad hoc). 

Nous vous proposons une promenade au royaume des couleurs, en partant du plus simple.

Vous pouvez toujours aller voir ce dictionnaire en tapant dico  (On revient dans le programme avec TAB).  Vous pouvez aussi avoir quelques explications sur n'importe quel mot existant, en tapant ce mot suivi de .c

Pour tester les résultats, nous avons mis quelques images à votre disposition :

(un peu plus compliqué si vous voulez mettre les vôtres)

5. Colors and palettes

See colors.  

6. Filters

See filters.

7. Opérations géométriques

Morphogéométrie

Roxamedispose d'une panoplie élémentaire de fonctions "morphogéométriques", c'est-à-dire appliquant un motif déterminé à chaque pixel. Les résultats peuvent être assez suprenants, mais utiles.

Les fonctions de base sont conçues pour travailler sur fond blanc. On n'obtiendra en général rien d'intéressant avec une photographie. Commencer par se ramener à des contours ou au moins à une image noir et blanc avec BW. On a des résultats intéressants aussi en passant par quadri.pl

X  et  Z remplacent le pixel par le losange (respectivement le rectangle) qui le contiennent. On a donc un grossissement des zones non blanches. x et z remplacent par le même losange ou rectangle, mais creux. Ce qui donne en pratique des effets de contours, ou de contours multiples.

XXX et ZZZ répètent trois fois l'opération.

Les mêmes fonctions avec un 2 ajouté in fine (par exemple x2, X2...) donnent les mêmes résultats, mais avec expansion des blancs au dépit des couleurs.

Symétries

Des symétries (liste en sym.c) sont disponibles en trois séries, chacune avec une variante verticale, horizontale et diagonale :

sym_h , sym_v  et sym_d opèrent autour du milieu de l'image.
symG_h,  symG_v, et symG_d  opèrent autour du nombre d'or.
symR_h, , symR_v  et symR_d opèrent autour de lignes choisies au hasard.

Ces symétries ne sont pas un simple "flip", mais mélangent l'image et l'originale et sa symétrique, en mode additif ou soustractif selon la densité de l'image.

8. Classes et régions

Régions

 

Une région est un sous-ensemble connexe de pixels présentant une caractéristique commune (en pratique, pour Roxame, la couleur). La détermination des régions, ou segmentation, s'obtient aussi en notant pour chaque point la région à laquelle il appartient.

Attention : la segmentation prend beaucoup de temps (souvent plus d'une minute sur une image de 640.480 pixels).

On peut segmenter une image brute sans autre préparation, avec segment0  Mais, sutout avec une image "naturelle", on aura presque autant de régions de que de points et l'opération est sans intérêt. Il y a donc intérêt à procéder préalablemnet à une classification ou à une réduction du nombre des couleurs.

Roxame peut utiliser à cet effet toute sa panoplie de palettes et ses fonctions de classification. segment1 utilise la fonction classify ci-dessus, à caractère un peu sémantique. segment2 a  un caractère plue neutre, basée sur une partition en 8 classes, définies pour chaque image par une division équitable des trois pararmètre ton, saturation et valeur. Cette dernière fonction ne donne en général pas de bons résultats avec une image en à-plats.

Un grand intérêt créatif des régions est que l'on peut ensuite appliquer des opérations à chaque région, notamment des filtrages, dégradés et applications de formes géométriques.

Le résultat de la segmentation est affiché, avec des couleurs arbitraires, dans la deuxième petite icone en dessous de l'image principale.

On peut supprimer une segmentation existante avec deseg (ou bien en faisant une autre segmentation).

9. Chargement d’une image, mise en réserve, écran auxiliaire

Rien de plus simple, il suffit de taper le nom de l’image voulue…. Mais attention, il faut que ce nom ait été entré dans le dictionnaire (en première colonne), avec doc dans la colonne catégorie et le sous-répertoire dans définition. L’image doit être au format .JPG (attention, il y a des problèmes si l’extension est en minuscules).

Si les proportions de l’image ne sont pas exactement celles du format de travail de Roxame (en général 640.480 pixels, ou la taille du plein écran), son chargement doit l’y adapter. Il y a trois solutions, que l’on choisira en indiquant préalablement le mode choisi

- l’image est étendue bord à bord dans les deux sens, ce qui en général la déforme (mais ce n’est pas toujours gênant) ( mode clip_no)
- une partie de l’image est émargée (horizontalement ou verticalement selon les formats)(mode crop)
- l’image est chargée en totalité et Roxame rajoute des rectangles gris sur les côtés ou en haut et en bas (mode complement).

L’image affichée à l’écran peut être mise en réserve en dix endroits différents, il suffit de taper une des fonctions reserve1, reserve2…. reserve9.

L’image ainsi mise de côté sera rechargée avec la fonction correspondante  reload1, reload2… reload9.

On peut aussi recopier l’image en cours dans un fichie auxiliaire par la fonction tabix (dont une icône s’affiche en bas de l’écran). On peut ensuite la récupérer et la combiner avec l’image à l’écran par une des fonctions

tabim3 : mélange soustractif
tabim4 : mélange additif
tabim0 : simple remplacement

Attention : ce fichier auxiliaire peut aussi être utilisé par Roxame et il ne faut donc pas y garder des images au-delà d’une opération simple.

Sauvegarde des œuvres

On peut sauvegarder une œuvre existante avec la fonction save. Mais il y a des risques de confusion.

Si l’on sauvegarder définitivementl’œuvre, le mieux est de faire nww, qui donnera à l’œuvre un numéro unique, la sauvegardera dans le répertoire dustbin, et réinitialisera le systme pour l’œuvre suivante, avec une page blanche et les paramètres standard (tracé en sépia, au centre, de taille moyenne, etc.).

 

10. Textes

Un certain nombre de fonctions ont été développées spécialement pour les index de diccan, mais pourraient servir à tout autre chose. L'idéal serait de pouvoir générer les indexes directement à partir du texte du dictionnaire. Pour l'instant, je ne suis pas en mesure de le faire, et je mets donc à jour, manuellement, un fichier de base, Artistes.txt (dans le répertoire Roxame). A partir de ce texte sont effectués des tris et des éditions de plusieurs index.

10.1. Affichage et intégration de texte dans des images

A la base, l'affichage d'un texte par Processing se fait avec la fonction processing text (string, x, y) : chaine à afficher, coordonnées du départ en pixels, après paramétrage
- en taille size(100, 100, P3D);
- en police PFont font; font = loadFont("FFScala-32.vlw");
- en couleur
Dans Roxame, par défaut, la police est Arial, la couleur blanc, la taille ...

Ecriture directe d'un petit texte à partir du clavier
Taper le texte avec le suffixe tx : exemple : Elles.tx . Par défaut, s'affiche en haut à gauche, en noir.
On peut faire varier :
- la couleur : redtext,, greentext, bluetext, blacktext, whitetext, yellowtext, siennatext, sepiatext (paramètres 180 à 187)

- la police

aharoni,
angsana, angsana_bold, angsana_bold_italic, angsana_italic
angsana_new, angsana_new_bold , angsana_new_bold_italic
arabic , arabic_bold
arial , arial_black , arial_bold , arial_bold_italic, arial_italic , arial_narrow
tahoma

Utilisation dans des macro-fonctions
Utilisation dans des scriptts

10.2. Analyse d'une ligne de texte et traitements

void Rread(String lignealire)

- void toTextitems() appelée en interne par txtLoad
- void textSort(int column, char sort_order, int columnSup) appelée par tsort ou ssort
- void textFilter() appelée par tfilter

10.3. Chargement de fichiers de texte

- void txtLoad(String txtAch) appelée par tload (syntaxe : nom du texte, tload)

Le chargement fonctionne comme pour les images. Mais pas pour l’affichage
Fonctions existant auparavant :
void nextTextFile()
void precedTextFile()
void firstTextFile()
void lastTextFile()
void randomTextFile()

10.4. Génération de (fichiers .txt ou .html) textes


- void textDate() appelée par tdate
- void textIndex(int indexColumn)
- void textSave(String textTosave, int column, int columnSup)
- void textEdit() appelée par tedit
- void txtConcat(String txtTobecopied) appelée par tconcat

 

String nextWord(int int1, int int2)
//int 1, type of operation, int2 line number
int1 : 0 loading the text, 1 random phrase 2 phrase succession


int textLocate(String wordtobefound){

catégorie text appelée dans le ddo

Servicees :
case 12 : tstx
case 27 : //nbRegText
case 110 : txtLoad(refDirectory + "data\\" + refTextSubdirectory + "\\" + refText + ".txt" ); break; //loadT
case 111 : firstTextFile(); break;
case 112 : nextTextFile(); break;
case 113 : precedTextFile(); break; //precedT
case 114 : lastTextFile(); break;
case 115 : randomTextFile(); break;

case 131 : refLine = 1; ; refWord = 2 ; Scroll(textLine[refLine]); break; //firstL
case 132 : refLine = (min (refLine+1, refTextLength)) ; Scroll(textLine[refLine]); break; //nextL
case 133 : refLine = (max (refLine-1, 0)); Scroll(textLine[refLine]); break; //precedL
case 134 : refLine = refTextLength; Scroll(textLine[refLine]); break; //lastL
case 135 : refLine = ( (int) random(refTextLength +1 )); Scroll(textLine[refLine]); break; //random_L

case 141 : refWord = 2; Rread(textLine[refLine]); Scroll(readword[refWord]); break; //firstW
case 142 : refWord = 1 +(min (refWord+1, readwordscount)) ; Rread(textLine[refLine]); Scroll(readword[refWord]); break; //nextW
case 143 : refWord = (max (refWord-1, 2));Rread(textLine[refLine]); Scroll(readword[refWord]); break; //precedW
case 144 : refWord = 1 + readwordscount;Rread(textLine[refLine]); Scroll(readword[refWord]); break; //lastW
case 145 : refWord = 2 +(int) random(readwordscount-1 ); Rread(textLine[refLine]); Scroll(readword[refWord]); break; //random_W

case 146 : refChar = 0; Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //firstC
case 147 : refChar = (min (refChar+1, readword[refWord].length()-2 )) ; ... //nextC
case 148 : refChar = (max (refWord-1, 2));Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //precedC
case 149 : refChar = 1 + readwordscount;Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //lastC
case 159 : refChar = 2 +(int) random(readwordscount-1 ); Rread(textLine[refLine]); Scroll(String.valueOf(refChar) .... //random_C
case 202 : //dicoHTML
case 204 : //presentHTML
//Write parameters
case 1340 : refText = scriptWord[3]; break; //text
case 1341 : refFontName = scriptWord[3]; break; //font
case 1342 : refTextX = Integer.parseInt(scriptWord[3]);break; //text_x
case 1343 : refTextY = Integer.parseInt(scriptWord[3]); break; //text_y
case 1344 : refFontSize = Integer.parseInt( scriptWord[3]); break; //font_size
case 1345 : //text_color


case 1376 : refTextX = number; break; //textc_x
case 1377 : refTextY = number; break; //textc_y


case 1403 : //tsort
case 1404 : //rsort : en ordre inverse
case 1405 : //ssort, sans suppression de la colonne choisie
case 1406 : //tconcat
case 1407 : //tload
case 1408 : //tedit
case 1409 : //tfilter
case 1410 : //tfilter

 

dico environ 13
dico string_ dico = new String[5000][3];
dico.l list dicoLoad dicoSave dicoLocate dicoSort dicoSupp dicoInsert
dico// service 1693
dicoFile string dicoFile ;
dicoHTML service 202
dicoLenght int number of words in the dictionary
dicoLine string = new String[5000] ;
dicoLocation string ???String dicoLocation ;
dicoString string dicoString; int nbchar = 0;
dicoload service 10
dicomots text Texts
dicomots_T text Texts
dicoq service 1694
dicosave service 4

nextC service 147
nextL service 132
nextR service 122
nextT service 112
nextW service 142

precedC service 148
precedL service 133
precedR service 123
precedT service 113
precedW service 143

random_C service 159
random_F service 105
random_L service 135
random_R service 125
random_T service 115
random_W service 145

rdwrite form 210
rdwrite_v form 1516

redtext parameter 180
whitetext parameter 184

text service 1340
text_ list Garcilaso 7_pierres Algoristes Theater Ronsard1
text_color service 1345
text_x service 1342
text_y service 1343
textedate text Texts

write_ list letters phrases. letters fait un semis de lettres, phrases un semis de phrases
letters service 2004
phrases generator 12

dans le dico, catégories
- font
- text
- list

if(SUFFIX.equals("tx")) {textText = strlocloc ;
Scroll("intx");
text (strlocloc ,10 + cornerx, (wheight*9)/10 + cornery) ; }

case 90 : refFontSize = number ; break; //fontsize

case 170 : if (refFontName.equals("arial")) refFontSize = 12 ; else refFontSize = 24 ; textSize(refFontSize); break ; //H0
case 171 : if (refFontName.equals("arial")) refFontSize = 48 ; else refFontSize = 96 ; textSize(refFontSize); break ; //H1
case 172 : if (refFontName.equals("arial")) refFontSize = 36 ; else refFontSize = 72 ; textSize(refFontSize); break ; //H2
case 173 : if (refFontName.equals("arial")) refFontSize = 24 ; else refFontSize = 48 ; textSize(refFontSize); break ; //H3

 

 

 

11. Evaluation et critique

Roxame dispose d'un système de mesure, et s'en sert dans différentes phases de ses processus

La plus utilisée est la "complexité" (nom de code difg) prise ici dans un sens tout à fait élémentaire mais, à l'expérience, fort efficace : le nombre de pixels qui sont différents du pixel à gauche et/ou du pixel au dessus.  
- difh int the proportion of pixels differing from the upper one
- difv int the proportion of pixels differing from the left one
- dgen est le nombre de points non blancs
- dnsR, dnsG et dnsB donnent le pourcentage de points comportant un peu de chacune de ces couleurs ; noter que, pour une image blanche, ces trois valeurs sont de 100
- dsat est la valeur moyenne de la saturation (ssat)
- dval est la valeur moyenne de la luminosité (vval) 

Toutes ces valeurs peuvent être affichées (à gauche) en tapant affeval . Bien qu'il ne s'agisse pas à proprement parler d'une mesure, on lit aussi le nombre de régions, qui a son importance pour l'évaluation d'une image.

12. Hasard,  autonomie, génétique, création, émotion

Réalisations avec Primeval et Alkwarel

 

moodSynth : calcule l’humeur de Roxame
Emot : modifie l’humeur de Roxame

Hello met opnn à 2

13. Projets avec Arduino

On summer 2014: slleping.

 

 

14. Générateurs

Image of a filter

nbsp;

nbsp;

nbsp;

nbsp;

nbsp;

nbsp;

15. Macros, dictionnaire, présentations, scripts

 

Dictionnaire

Pour un bref accès au dictionnaire, taper dico, qui remplace l’œuvre en cours par le début du dictionnaire.

On peut ensuite s’y déplacer avec les touches Right, Left, Up, etc. Et modifier la définition des termes existants.

F1 trie le dictionnaire sur la première colonne (termes). Attention, le tri de Processing ne correspond pas à l’ordre lexicographique habituel. Les majuscules viennent en tête, les lettres accentuées en queue.

F2 trie le dictionnaire sur la deuxième colonne (catégorie), et F3 sur la troisième (définition)

F4 insère une ligne nouvelle pour ajouter un nouveau terme. L’endroit choisi est de peu d’importance, et l’on pourra toujours demander à nouveau un tri. Il est cependant prudent de trier d’abord sur les termes, pour éviter un double emploi (dans ce cas, c’est le premier terme trouvé, en commençant par le début, qui sera exécuté).

F5 supprime une ligne

Pour que cette création est un effet il faut

- que la catégorie soit une catégorie existance (éventuellement, voir ci-après la prorammation), rien n’empêche d’en créer de nouvelles ; si la catégorie n’existe pas, le mot est ignoré et Roxame passe au terme suivant

- que la définition corresponde au traitement de la catégorie ; sinon, il y a risque d’erreur.

Pour certaines catégories, il est facile de modifier ou de développer le dictionnaire :

- color :  le nom de la couleur et en définition les trois entiers correspondant à la définition RGB

- doc : le nom de l’image et le sous-répertoire où elle figure

- macro_  (noter le caractère souligné, indispensable car macro est un mot réservé) ; mettre en définition la suite des mots à exécuter

- text : comme doc

- present  comme doc

- script comme doc

En revanche, les autres catégories exigent de développer le code correspondant au sein du programme de Roxame. Voir la partie correspondante plus bas.

Présentation

Ce mode de fonctionnement a été conçu pour permettre d’utiliser Roxame « à la powerpoint ». Il faut pour cela rédiger un texte, au format .txt, et prévoir l’appel dans le dictionnaire, avec le sous-répertoire en définition. Quand on tape ce mot, Roxame se met automatiquement dans le mode adéquat. On fait ensuite dérouler avec les touches du curseur :

//figure

Les règles d’écriture sont les suivantes :
- tout le vocabulaire de Roxame peut être employé (en principe…)
- mettre un seul terme de Roxame par ligne (pour l’instant)
- on peut indiquer le langage ( french ou english, par défaut, french)
- on peut préciser la po
- une nouvelle page commence par NP
- on affiche le fond
- on précise la couleur de texte
- on précise la dimension
- ensuite on peut mettre des lignes de texte,
. si elles commencent par < elles ne seront affichées que dans le mode « french »
. si elles commencent par > elles ne seront affichées que dans le mode « english »
. si elles commencent par | elles seront affichées dans les deux cas (si elles ne commencent par aucun de ces caractères, Roxame tentera de les traiter comme des macro_)
-  il y a différentes positions pour afficher les images
- il y a moyen de faire des boucles itératives (encore un peu aléatoire…)
- terminer par les lignes
:
End
NP

Script

A l’étude, en se servant du travail fait pour la présentation

Perspectives de développement

 

 

16. Le code Processing

Conception générale de la programmation

Actuellement le code est organisé en plusieurs pages (« tags ») de Processing. Cette répartition n’a pas la prétention d’être complètement rationnelle, d’ailleurs. Les noms ont été en partie choisis pour obtenir un ordre pas trop mauvais dans l’affichage du code dans l’éditeur

La répartition entre pages n’est pas totalement rationnelle non plus. Mais comme Processing a parfois des réactions bizarres quand on change les pages, le code reste tel pour l’instant.

On notera que, comme toujours en Processing, il y a deux fonctions de base, setup et draw. Elles sont toutes les deux dans la page zMain. La fonction draw est réduite à la plus simple expression, avec l’instruction  Ddo(wordtobedone) qui invoque le parser pour exécuter le « prochain mot à traiter ». Ce mot venant soit d’une frappe au clavier, soit de la pile word_on_stack (indexée par l’entier stkl).

Son exécution est conditionnée par le fait qu’on ne soit pas en pause et qu’on doit dans un mode de dialogue qui autorise l’automatisme.

Le mode théorique normal de fonctionnement de Roxame, conçue pour être un « peintre » aussi autonome que possible, est que cette boucle tourne indéfiniment.

Toutes les autres fonctions sont appelées par ce parser. En principe le parser ne fait rien d’autre que de piloter les autres fonctions. Il y a de menues exceptions. Nous précisons son fonctionnement ci-après (page zDdo).

Bugs et perspectives de développement

Classes et régions

 

Ce sont des valeurs données à chaque pixel, et qui permettent des opérations différenciées, en appliquant différentes fonctions (filtres, dégradés) à l’ensemble

Les régions sont numérotées à partir de 1.  Au départ d’une œuvre, ou après une désegmentation, il y a une seule région. La sélection d’une région se fait toujours par apppel à la fonction R, qui notamment calcule les coordonnées du rectangle circonscrit à la région.  La région zéro renvoie toujours à l’ensemble de l’œuvre.

Au maximum, on pourrait avoir autant de régions que de pixels.  Les bonnes segmentations sont typiquement de quelques milliers de régions.

Principales variables

int[][]region
int regone, nnbreg
int nbregutil : nombre de régions effectivement opérationnelles à un moment donné
boolean[] regocc
int cardreg,
int xd,yd, xf, yf : coordonnées des cotés du rectangle circonscrit à la région 

L’humeur de Roxame

 Les fonctions correspondantes ne sont pas vérifiées en ce moment, et ne sont pas utilisées. Mais il suffirait de s’y mettre.

 Principales variables

Int opnn,hapn,enrg,ptnt

Voici maintenant le contenu des différentes pages Processing.

Roxame : declaration de variables, quelques fonctions à caractère général

Principales variables 

Int number :  variable temporaire pour envoyer un entier à une fonction à partir du parser (par le clavier ou une macro)

On remarquera le caractère peu orthodoxe de cette programmation, avec un grand nombre de variables globales. Cela est dû notamment à la nécessité de pouvoir facilement accéder à tous les paramètres depuis n’importe quelle partie du code.

Nota  les noms de variable commençant par ref désignent les paramètres « courants » : couleur, région, etc.

PImage  img, imgx, imgy, imgz
int[][] classe
int[][]classeTab
int[][]cmassecard

Fonctions :

 preInit : initialisations de quelques variables au départ

Reserve : copie en mémoire de l’œuvre (affichée à l’écran) en cours de travail
Reload : récupération et réaffichage d’une de ces images
Scroll :Affichage à gauche de l’écran des opérations effectuées
R : sélection d’une région et calcul des paramètres correspondants (notamment les coins du rectangle correspondant,  xd, yd, xf, yf.
Les régions sont en général obtenues par segmentation, mais un certain nombre de régions ont été précalculées (numérotées à partir de 1000000 pour ne pas risque de confusion), notamment pou faciliter la préparation de présentations.
Log : établit un fichier des opérations effectuées, pour l’édition ultérieure de rapports

Bugs et perspectives de développement

A_Measure : mesure et évaluation

Cette page regroupe plusieurs fonctions, que l’on pourrait globalement qualifier de « descriptives »
-  de simples fonctions de mesure
-  des fonctions de reconnaissance (des formes, la reconnaissance des couleurs est dans la pge couleur)
- les fonctions de classification et de segmentation, qui affectent à chaque pixel un numéro de classe et/ou un numéro de région
-  une fonction globale d’évaluation 

Principales variables 

  int cardreg ;
  int  regmax,  nbregutilx ;
  int xd = 0;  int yd = 0;  int xf= wwidth -1 ;  int yf= wheight - 1 ; 
  int lobpix, hobpix;
  int[][] semclass ; //= new int [wwidth][wheight]; 
  int MaxHue, MinHue, MaxSat, MinSat, MaxVal,MinVal;
int HueDom,  ValHueDom  ;
  float[] minCoul = new float[3]; float[] maxCoul = new float[3];
  int dval,dgen,difh,difv,difg, dsat, dnsR, dnsG,dnsB , totdifcoul
  int  dwrm, dvif ;
  int[] histo = new int[360];
  int totval, tothistob;
  int nbvalhisto, nbvalhistoh, nbvalhistos, nbvalhistov;
  int[][] bhi = new int[360][48];
  int quadType;
int[][] winnerregion = new int[3][2];

 //analyses after face_detect
int cpxGain = 0 ;
int szeGain = 0 ;
int dsRGain = 0 ;
int satGain = 0 ;
int valGain = 0 ;
int focDepx = 0 ;
int focDepy = 0 ;
int skinHue = 0 ; 
int skinVal = 0 ;
String workTypename

Fonctions :

M : série de mesures sur l’image affichée .
Histo : calcul d’histogrammes sur l’image affichée
Averagecolreg : calcul de la couleur moyenne d’une région
Averagecolclasse : calcul de la couleur moyenne d’une classe
Segment0 : segmentation sur l’image affichée. Nota : pour obtenir des résultats valables, il est recommandé de ne pas appliquer cette segmentation à une image complexe. On peut donc s’en servir soit pour des images simples, soit en simplifiant préalablement l’image, par exemple avec un filtre
Segment1 : commence par un calcul de classes et l’alignement des pixels sur leurs classes, puis applique Segment0
Segment2 : commence par répartir les couleurs en huit catégories puis applique Segment0
Desegment : remet la région de chaque pixel à 1

Classify : affecte une classe à chaque pixel
showClasses : modifie la valeur de chaque pixel, créant une teinte uniforme pour chaque classe, et l’affiche

Segment6 : segmentation après une classification conçue spécialement pour le portrait

Rec_Quad(regloc) : recherche’un quadrilatère schématisant la région regloc
Rc_Oct : recherche d’un octogone pour une région donnée
Rec_TypQuad : reconnaissance du type d’un quadrilatère
Rec_Sky : reconnaissance du ciel (intéressant pour les paysages)
Rec_Face : reconnaissance des contours d’un visage (fait avant d’avoir découvert OpenCV)
Rec_Eyes : reconnaissance des yeux

FaceRegion : ??
FaceEyes : ??

 

grainGen : générateur de grain
Longuet : comparaison d’images fait pour Alain Longuet
Evaluation : fonction d’orientation à partir du parser, et quelques petites fonctions exécutées sur place

Bugs et perspectives de développement

Colors: gestion de la couleur

Principales variables 
String[] colorName, refColName
int refHue, refSat, refVal, refRed, refGrn, refBlu
color refCol
String paletteName

 Fonctions 

Rgbhsv : fournit les valeurs hue saturation value d’une couleur donnée
Hsvrgb : fournit les valeurs RGB correspondant aux valeurs h,s,v  courantes
C : ??
setPalette : construit une palette
cPalettealign :  aligne une couleur sur la palette en cous
paletteAlign : aligne les points de l’image en cours sur la palette désignée en utilisant la fonction cPalettealign
setTubeset : construit une palette de « tubes »
cTubesetalign aligne une couleur sur le tube
tubesetAlign : aligne les points de l’image en utilisant cTubesecalign
tubesetFiller : pour tests, met toute l’image sur une valeur du tube
tubeShow : appelé par tube name + .sh, montre la gamme des couleurs du « tube »

Bugs et perspectives de développement

 Dico

Gestion du dictionnaire, notamment son chargement, sa mise à jour
Le dictionnaire est chargé en mémoire au moment du lancement, la structure du fichier .txt étant traduite dans un tableau de chaînes à trois colonnes.

C’est ce fichier qui est utilisé en cours de travail, avec mise à jour du fichier externe assez fréquemment, notamment à chaque fin d’œuvre et après toute intervention directe au clavier en mode dialogue dico

Principales variables 

String dicoFile
int dicoLength

Fonctions :

dicoLoad : charge le dictionnaire (en début de session)
dicoSave : met à jour le dictionnaire (chaque fois qu’on le modifie, notamment le numéro d’œuvre en cours
dicoLocatenearest : recherche du mot le plus proche (ne marche pas bien)
dicoLocate : cherche le numéro de ligne pour le mot demandé (essentiel pour le parser notamment)
dicoEnter : changement de mode de dialogue, pour permettre en ligne la modification du dictionnaire (voir keypress)
dicoSort : trie le dictionnaire, soit par termes (F1), soit par catégories (F2) soit par définitions (F3)
dicoSupp : supprime un mot du dictionnaire (F5)
dicoInsert : ajoute une ligne au dictionnaire pour introduire un nouveau mot (F4)
dicomotsLocate : ?
dicoToHTML : prépare un fichier HTML à partir du dictionnaire
evalStore : ?

Bugs et perspectives de développement

 Généralisation de la référence à des textes extérieurs :
- le dictionnaire proprement dit est réduit à noyau avec les termes majeurs
- les documents et autres textes sont appelés par un dictionnaire annexe
- les macro_ peuvent être remplacées par des « scripts » externes, à la limite de vrais programmes, dont les présentations ne sont qu’un cas particulier.

Cela conduit à réfléchir sur ce que pourrait être idéalement le langage de Roxame, question largement ouverte et aux implications à la fois artistiques et psychologiques, sinon neuro-scientifiques…

File

Accès aux fichiers d’images et de textes

Principales variables 

String fileTobeloaded
boolean fileLoading pour éviter des interruptions
boolean loadedDoc. Utile pour la génération de la critique

Fonctions :
txtLoad : charge un texte
fileNumberlocate : cherche le rang d’un fichier dans son sous-répertoire
jpgLoad : charge une image et la cadre en fonction du paramèter refClip
nextFile : charge l’image suivante dans le répertoire (important quand on travaille en série)
precedFile : charge l’image précédente dans le répertroire
firstFile : charge le premier fichier du répertoire
lastFile : charge le dernier fichier du répertoire
randomFile : charge un fichier du réperoire choisi au hasard
nexTextFile : charge le texte suivant
precedTextFile
firstTextFile
lastTextFile
randomTextFile

Bugs et perspectives de développement

Filters 

La plupart des filtres peuvent s’appliquer exclusivement à une région donnée.

Exemples de filtrages

Le document original

graying

smart_graying

blue_toning

negative

gradient

 

contours

etching

blur blur blur

ranfuzz

Principales variables 

Les filtres (en tous cas ceux figurant ici) n’ont pas de mémoire en dehors de leur exécution. Les variables sont donc locales.

Fonctions 

H : assigne une valeur au paramètre refHue
S : assigne une valeur au paramètre refSat
V : assigne une valeur au paramète refVal

F : série de filtres
f : série de filtres, opérant pixel par pixel sur l’image affichée, sur les valeurs HSV, avec conversion à partir des valeurs RGB du pixel, et restitution in fine des valeurs RGB
FP1 : filtres avec un paramètre
FPN : filtres par quatre paramètres

Contours : fournit les contours (différents types de calcul, avec des paramètres)

Ranfuzz : « flou aléatoire »
Ranfuzzh : comme Ranfuzz, mais n’opère que horizontalemnet
Ranfuzzv : comme Ranfuzz, mais n’opère que verticalement

Pixelize : découpe l’image en petits carrés, en calculant la couleur moyenne  pour chaque carré
medianNum : amène (ou essaye d’amener) l’image à une complexité donné en appliquant répétitivement le filtre médian

colorWheel : pour mémoire, actuellement cette foncdtion est obtenue par chargement d’une image

Filter : fonction d’orientation dans les fonctions précédentes à partir du parser

Bugs et perspectives de développement

Forms : générateurs de formes

Exemle de quelques formes, générées par :

rectangle,  yellow paint circle, any lines, any lines 

Principales variables 

int  x1cont, y1cont, x2cont, y2cont, x3cont, y3cont, x4cont, y4cont , x5cont, y5cont, x6cont, y6cont, x7cont, y7cont, x8cont, y8cont;
int locwidth = 0; int locheight = 0;
int workStep = 30;
int xp,xt, yp, yt, xc, yc , r;
int xorig, yorig, xtarg, ytarg ;
int alx, aly, xcref, ycref ;
int rx, ry;
int[][] rex

Fonctions :

A1 : calcule les paramètres de génration à partir d’un rectangle donné
A :  affecte un numéro de posiion et lance la fonction AA
AA : calcule le rectangle de position à partir des paramètres (notamment refSize et refProp)
T : affecte une valeur à refSize et lance AA
Q : affecte une valeur à refProp et lance AA
Regtabmix : segmentation sur le « calque » rex
Do-Form : construit effectivement la forme en utilisant les fonctions xMoveTo et xLineTo . La forme est tracée dans imgx, puis reportée par la fonction Report
sMoveTo : fixe les valeurs xp et yp
xLineTo : trace une ligne depuis xp.yp en utilisant la fonction mLineTo
mLineTo : trace une ligne en utilisant la fonction mkLine
mkLine : trace le motif pour mLineTo
Report : reporte une forme en fonction du mode de mélange et de clipping
Parameter : assignation de paramètres en provenance du parser
Position : assignation de positons en provenance du parser
Form : lancement du calcul d’une forme à partir du parser

Comment modifier le code, rajouter des fonctions :

- dans Do-DForm : ouvrir un nouveau case, et trace des segments de la même manière que les autres formes
- dans mkLine, faire d’autres motifs (il faudra ensuite gérer le chemin d’accès)
- dans Report : ouvrir un nouveau case ; on peut imaginer indéfiniment des modes de mélange

Bugs et perspectives de développement

Gen_gen : générateurs plus complexes

Fonctions :

backGround : arrière plans pour générateurs automatiques
segApla : à partir d’une image et d’une segmentation, calcule la couleur moyenne dans chaque région et l’applique à chaque pixel de la région
Gen_reg_gen : fonction générale de génération (fonctionnement peu sûr dans l’état actuel)

AG : générateur d’images « abstraites »
Generator : fonction d’appel des fonctions à partir du parser, et un certain nombre de fonctions détaillées dans les case

- 1. Background, ci-dessus
- 2. Segapla ci-dessus, après paramétrage
- 3. AG ci-dessus
- 4. Binim ; une sorte de ver
- 5. Champery
- 6. Synth2 : formes sur un espace minimal ( ?)
- 7. Synth 3. Comme 2
- 8. Synth 4. Image à partir de textes
- 9. Synth5 . « a machine language »
- 10. Génération d’un nuage à partir du centre
- 11. Permutation d’espace ; différentes formules en fonction de « number »
- 12. Affichage de phrases
- 13. Essai de Chrismas. Ne marche pas
- 14. Titre
- 15. Autre titre
- 16. Ecriture d’un texte dans une région
- 17 classe-texture. Générateur plaçant des textures dans une image précédemment classifiée
- 18. Ecriture d’un texte

presentationToHTML : transformation d’un présentation en un texte HTML

CB : générateur d’un fonds « bande dessinée » et segmentation associée

Bugs et perspectives de développement

Geom : géométrie, morphogéométrie

Principales variables 

Pas de variables persistantes en dehors de l’exécution des fonctions

Fonctions 

Sym : symétries, avec toute une gamme de variétés
Geom : fonctions morphogéométriques, avec toute une gamme de variétés
Geom2 : idem, mais avec extension du blanc aux dépens de la couleur comme dans Geom
Geometry : fonction d’appel des fonctions à partir du parser
Translate : translation d’image
Geom2_sclass : opérations morphogéométriques sur le calque des classe

Bugs et perspectives de développement

OpenCV : fonctions faisant appel à OpenCV

Principales variables 

int trectxd ,trectyd,  trectww , trectwh ;
int irectxd, irectyd, irectww, irectwh;
int jrectxd, jrectyd, jrectww, jrectwh;

Fonctions

 face_detect : détection du visage et cadrage,  sur  une image fournie par la caméra  (dictionnaire : fdet)
faceDetectNext : détection du visage et cadrage, sur une image chargée à partir du fichier (l’image suivante dans le même répertoire)
fdetFrame : cadrage du visage

Bugs et perspectives de développement 

Report : generation de rapports (critique, etc) 

Principales variables

 String differentColors = "";
String[] subject_type = {"Interior", "Country","Head", "Academy", "Town", "Forest"};
int subject_t ; //= new int[20] ;
int subject_rec_qual ;
int globscore ; 
int rangeh = 0; int ranges = 0; int  rangev = 0; 

Fonctions 

fileDescr : description de l’image pour création d’un rapport
Critique : fonction synthétique de critique d’une œuvre
Framint : non opérationnel
Wokmood : non opérationnel

Use_of_color : fonction d’évaluation de l’usage de l’espace des couleurs
Use_of_luminosity : évaluation de l’espace des luminosités
Recsu : reconnaissance du sujet traitéFrame : non opérationnel

Bugs et perspectives de développement 

Gradations

Dégradés

Principales variables

 Pas de variables persistantes.  

Fonctions :

Deg : fonction générale d’exécution d’un dégradé sur une région
DegGen : fonction commandant la précédente
DegGenReg : ?

Bugs et perspectives de développement

Devrait être étendu aux textures

zDdo : le parser et fonctions annexes

Conception générale

La fonction centrale est le parser lui-même, Ddo.  Ddo2  Rread et List sont des fonctions auxiliaires pour préparer ou faciliter cette fonction, qui est contamment appelée par la « runnable » de Roxame, la fonction Procesing draw.

Ddo exécute toujours une chaîne de caractères.

Dans le cas le plus simple, cette chaîne est un mot figurant dans le dictionnaire. Dans ce cas, le dictionnaire fournit pour ce mot une catégorie et une définition, et il n’y a qu’à procéder à son exécution en utilisant ces précisions.

Les catégories sont actuellement les suivantes (mais rien n’empêcherait d’en rajouter) :

- color : la couleur demandée est choisie comme couleur « en cours » ; son nom est assigné à la variable de chaîne  refColName ; la définition fournit lezs trois valeurs RGB (refRed, refGrn et refBlu), et on calcule les valeurs refHue, refSat et refVal correspondantes
- colorb : assigne à la variable rgbTemp la définition
- comment : affiche le mot et la définition en bas d’écran
- cond : à l’étude pour disposer de structures de contrôle
- doc : charge (fonction jpgLoad) l’image de ce nom, à chercher dans le sous-répertoire de data\ donné en définition
- environ : assigne un certain nombre de paramètres d’environnement par l’intermédiaire de la fonction Environnement() paramétrée par le numéro donné en définition
- evaluation : appelle les fonctions d’évaluation par l’intermédiaire de l’instruction d’orientation Evaluation() paramétrée par le numéro donné en définition
- directory : assigne comme sous-répertoire courant (dans c\Roxame\data\ ) le sous-répertoire indiqué dans la définition
- filter : appelle un filtre par l’intermédiaire de la fonction Filter, paramétrée par le numéro donné en définition
- font : assigne la fonte dans le nom est donné en définition
- form : lance la génération dune forme, par l’intermédiaire de la fonction Form, paramétrée par le numéro donné en définition
- generator : id. la fonction Generator
- geometry : id. pour la fonction Geometry
- list : //à revoir
- loop : en construction pour créer des structures de contrôle, notamment dans les présentations

- macro_ : la définition donne alors une suite de termes qui seront exécutés l’un après l’autre ; pour l’instant, il n’y a pas de structure de contrôle interne à cette catégorie ; mais noter que 
. une macro_ peut s’appeler elle-même ; dans ce cas elle fonctionne en boucle indéfiniment

- une macro_ peut appeler n’importe quel terme du dictionnaire ; par appels successifs, on peut donc construire des « applications » aussi longues que l’on veut, mais dans une mesure limitée puisqu’on ne peut pas faire d’itérations ni de conditionnements (dans la version actuelle)

- parameter : assigne une valeur à un paramètre //revoir

- position : assigne une position pour la génération de forme
- present : lance la présentation indiquée par le terme ; c’est un fichier .txt qui doit être dans le répertoire indiqué en définition
- quad : est une variante de forme
- script : en construction, pour généraliser le concept de présentation à des scripts quelconques
- text : charge le texte de nom indiqué par le terme, et qui doit figurer dans le sous répertoire indiqué en définition

Si le terme demandé ne figure pas dans le dictionnaire, il y a alors plusieurs cas :
- le terme est un nombre ; dans ce cas il est affecté à la variable globale number (un peu dangereux, mais pratique)
- le terme comporte un suffixe, toujours de deux lettres lié au terme principal par un point ; dans ce cas, l’exécution est envoyée à l’instruction List
- le terme est une suite de mots séparés, et la fonction Rread l’analyse et empile les mots sur word_on_stack

Si aucun de ces cas n’est détecté, Roxame affiche  « word not found » et passe au mot suivant de la pile. Si ce mot est !!!work, on passe automatiquement à l’œuvre suivante.

Principales variables 

int stkl
String[] word_on_stack
String[] readWord,
int readwordscount
String[] listWord
int listWordscount 

Fonctions 

Rread : analyse d’un string en mots
Ddo2 : fonction de préparation à Ddo, notamment pour les appels à partir du clavier
Ddo : le parser lui-même

Service : tout un semble d’appels de fonctions (et quelques fonctions écrites ici )  appelées par le parser , notamment :
- 1 pause
- 2 nouvelle œuvre
- 3 affectation d’un nom à l’œuvre en cours
- 4 appel de la fonction dicoSave
- 5 save, sauvegarde de l’œuvre
- 6. Sauvegarde d’un rapport d’évfaluation
- 7 french
- 8 english
- 9 prestDown
- 10 dicoLoad
- 11 delay
- 12  tstx, affichage dun text
- 13 loop
- 14-20 fonctions pour l’animation des presentations
- 21. Assignation à number du nombre de régions
- 22-37 essais de fonctions pour créer des boucles
- 51 sélection d’une région, appel de la fonction R
81-89 appel de la fonction Reload avec différents paramètre
91-99 idem pour Reserve
100-105 fonctions de chargement des images
110-115 fonctions de chargement des textes
121-125 sélections de régions
131-135 sélections de lignes dans un texte
151-145 sélections de mots
146-159 sélections de caractères
150-158 comme 91-99
160-169 comme 81-89
170-173 fonctions Report avec différents paramètres
174 fonction Moodsynth
190. prise de vue avec la webcam
191 variante, sous condition d’image changée
202. création d’une version HTML du dictionnaire
203. assignation d’une position au hasard
204. Lancement d’une présentation
905 : sortie de pause
1144-1282. affichages de valeurs
1287. Mise en pause
1582. Création d’un fichier de description avec fileDescr
1693. passage en mode dico
2012. Affichacge dun commentaire
2009.. ?

nextBit : fournit un bit aléatoire
Nov : mise en place d’une nouvelle œuvre
nextChar : génération ou présentation d’un caractère
nextWord : génération ou présentation d’un mot
textLocate : recherche d’un texte
String : fournit un des mots d’une liste, et exécution des fonctions avec suffixe
rgbTemp ?
loopService : à l’étude, pour exécution de boucles
Condition : id.

Bugs et perspectives de développement

zkeypress : interface clavier et affichage

Principales variables 

boolean keyrel, keypres
Sring mystr, mystr2
int strlen
Int refDialMode
String[] lines
Boolean notscroll
Int logIndex, refLogLine
String[] logline
Boolean notlog

 Pour les présentations :
String prestName
Int prestRank
Int hInpage

Fonctions :

Affich : affichage
keyPressed : saisie du clavie
Environment : différentes modifications des paramètres de l’environnement

0. normal
3. ? présent dans jpgload. a servi pour games
5. dico
7, entrée de texte (txEnter)

6. avec un script
- 10. Environnement normal//maintenant 0
- 11. Environnement « HD » (plein écran). plus utilisé
- 12. Environnemnet réduit, pour tests //plus uilisé
- 13. Environnement « dictionnaire »//rempalcépar 5
- 14. Envronnement « show »//n'est plus utilisé
- 16. Environement « script » //plus utilisé
- 17 Environnement « présentation »//plus utilisé
- 18 dialMode 2//plus utilisé
- 19 prestDown // Plus utilisé
- 89-95 fonctions pour présentation
- 99 retour à l’environnement normal

prestDown : exécution d’une ligne en mode « présentation »

zmain : initialisation, setup, draw

Principales variables

int wwidth, wheight cornerx cornery
String wordtobedone
Boolean isenpause, isenloop, isfunny, isnormal, noloop, nofun
String workName, workName_

Fonctions :

reInitvar : réinitialisations à chaque œuvre nouvelle
initVar : initialisations au départ
setup : fonction de mise en place de Processing
draw : le « runnable » de Processing

Bugs et perspectives de développement

 17. Uses for diccan

Indexes

The application is lauched by the macro_ indexes, which is a series of macros :

It uses several .txt files, which are in the data\Texts directory, combines them and transforms them into HTML.
- Artists is the database
Artistes text Texts
Artistes1 text Texts
Artistes2 text Texts
Artistes3 text Texts
Artistes4 text Texts
Artistes5 text Texts
Artistes6 text Texts
Artistes7 text Texts
Artistes_index_alpha text Texts
Artistes_index_dates text Texts
Artistes_index_generatif text Texts
Artistes_index_geo text Texts
Artistes_index_notoriete text Texts
Artistes_index_specialite text Texts

indexes macro_ index_pre index_alpha_ index_dates_ index_geo_ index_specialite_

index_pre macro_ Artistes tload n 02 ssort
tload service 1407, calls the function textLoad


index_alpha_ macro_ Artistes tload 01 tsort Artistes_index_alpha tload Artistes1 tconcat tedit fond_page_alpha tconcat tedit

index_dates_ macro_ Artistes tload 05 rsort Artistes_index_dates tload Artistes5 tconcat fond_page_dates tconcat tedit

index_generatif_ macro_ Artistes tload 07 rsort Artistes_index_generatif tload Artistes7 tconcat fond_page_generatif tconcat tedit

index_geo_ macro_ Artistes tload 03 tsort Artistes_index_geo tload Artistes3 tconcat fond_page_geo tconcat tedit

index_notoriete_ macro_ Artistes tload 06 rsort Artistes_index_notoriete tload Artistes6 tconcat fond_page_notoriete tconcat tedit


index_specialite_ macro_ Artistes tload 04 tsort Artistes_index_specialite tload Artistes4 tconcat fond_page_specialite tconcat tedit

 

index_notoriete_ index_generatif_
-

 

 

18. References