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_
-