COMMENT DÉVELOPPER DES APPLICATIONS
|
Comment développer une application en langage anyflo
Le
langage anyflo, proche du C mais moins contraignant, permet de
développer très rapidement des applications graphiques interactives par des méthodes
classiques de programmation.
En téléchargeant les
applications on aura des exemples complets
de programmes complexes écrit en langage anyflo montrant, entre autre, comment construire un corps
humain, comment utiliser des capteurs variés, comment générer des réseaux neuronaux
et des algorithmes génétiques et comment les utiliser.
Comment faire dialoguer plusieurs anyflos
Sur la même machine
Sur plusieurs machines
Sur la même machine
Le plus simple est de passer par la
mémoire partagée.
Voir un exemple en lançant
shared_memory.js
qui lance 4 anyflos dans des fenêtres différentes:
WshShell.Run("anyflo.exe env=env ima=ima1 lan=\"shared_memory_serveur()\" x=420 y=300 orx=0 ory=0");
WshShell.Run("anyflo.exe env=env ima=ima1 lan=\"shared_memory_help()\" x=420 y=300 orx=0 ory=380");
WshShell.Run("anyflo.exe env=env ima=ima1 lan=\"shared_memory_client1()\" x=420 y=300 orx=440 ory=0");
WshShell.Run("anyflo.exe env=env ima=ima1 lan=\"shared_memory_client2()\" x=420 y=300 orx=440 ory=380");
appelant respectivement les fonctions:
shared_memory_serveur()
shared_memory_help()
shared_memory_client1()
shared_memory_client2()
Sur plusieurs machines
Passer par des sockets
TCP ou
UDP.
Comment se linker à anyflo
Fonctions par défaut
Fonctions particulières
Fonctions écrites en langage C
Fonctions par défaut
Par défaut les opérations fondamentales (comme la perspective, les calculs
d´éclairements, les mappings, les textures, ...) sont gérées automatiquement
par le programme, l´utilisateur se limitant à fournir des paramètres à des
algorithmes "câblés" dans le logiciel.
Mais, parmi ces paramètres,
figurent la possibilité de passer des noms de fonctions (écrites en langage
anyflo) qui seront exécutées à la place de ces algorithmes.
Fonctions particulières
Ces exemples ne fonctionneront que lorsque le type
2 d´affichage aura été implémenté.
Exemple 1: Mise en perspective
Remplace l´algorithme de
projection perspective conique par celui décrit dans la fonction de nom toto.
Une telle fonction contiendra:
toto()
{
p1=poi; /* Affecte à la variable p1 les coordonnées 3D du point traité */
p2=fonction(p1); /* Calcul par l´utilisateur de la perspective de p1 */
validate pers(p2); /* Passe la valeur ainsi calculée au programme */
}
Exemple 2: Texture
LIBRE vol(1)="toto";
Affecte au volume 1 la LIBRE 3D décrite dans la fonction de nom toto.
Une telle fonction contiendra:
toto()
{
p1=poi; /* Affecte à la
variable p1 les coordonnées 3D du point traité */
k1=col; /* Affecte à la
variable k1 la couleur du point traité */
n1=normal; /*Affecte à la
variable n1 la normal au point traité*/
k2=fonction(p1,k1,n1); /* Calcul par l´utilisateur de la nouvelle couleur */
col(k2); /* Passe la valeur ainsi calculée au programme */
}
Exemple:
1) Construire une ball et lui affecter une LIBRE 3D procédurale:
ini ini vol;
/* Initialise les flags, supprime tous les volumes */
ball(100,12);
/* Construit une ball de rayon 100 et de 12parallèles */
illum vol 1=3,1;
/* Modèle de PHONG */
LIBRE vol(1)="toto";
/* Texture procédurale */
2) Écrire la fonction de LIBRE toto:
toto()
{
p=poi ;
/* p = point affiché */
x=p[0];y=p[1];z=p[2];
/* Coordonnées absolues du point */
/* Calculer la couleur en fonction des coordonnées */
r=abs(sin(2*PI*x/100));
v=abs(sin(2*PI*y/237));
b=abs(sin(2*PI*z/312));
col(r,v,b);
/* Affecter la couleur */
3) Afficher:
yes illum LIBRE;
/* Valider les flags */
screen;displ vol;
/* Afficher */
}
Fonctions écrites en langage C
Comment se linker à anyflo
Le fichier
utilb.c situé dans le directory anyflo fournit une
interface de programmation en langage C avec des exemples triviaux.
Il suffit de modifier
certaines de ces fonctions, de les compiller et de linker (un exécutable de nom
anyflo.exe)
est alors construit) :
Sous UNIX : en faisant make dans le directory de l´environnement.
Sous Windows : lancer Visual C++ et cliquer sur
file,
puis
Open Workspace, puis sur
anyflo.dsw dans
anyflo.
Attention: anyflo a été développé sous VisualC++ version 6.0
et ne peut être modifié qu´avec cette version du compilateur. Tous les fichiers
*.c modifiables sont situés dans le dossier
anyflo.
Exemple 1: gestion de l´interaction
Les fonctions _F_0(), _F_1(), _F_2(), _F_3(), _F_4() et _F_5() du fichier utilb.c
doublent les fonctions anyflo de ´interaction func(i,"fi");´, elles sont exécutées dans l´ordre:
_F_0();f0();
_F_1();f1();
_F_2();f2();
_F_3();f3();
_F_4();f4();
_F_5();f5();
Exemple 2: ajout de commandes ou nouvelle application
La fonction
EVALUER_2(long *pd0, long *pd_eg, long *suite, long *end)
du fichier
utilb.c:
pd0 -> codage de la ligne de commande.
pd_eg: ->
=expresion
dans le cas d´une affectation.
[suite, end]: est un buffer libre.
Ajouter des commandes
Principe
Dans le fichier initb.h se trouvent les noms des fichiers décrivant les
environnements:
enva.h,koma.h,mesa.h pour l´interpréteur.
envb.h,komb.h,mesb.h pour anyflo.
On peut en ajouter d´autres:
envc.h,komc.h,mesc.h
À condition de:
1) Créer les fichiers:
envc.h contenant les
initialisations propres à l´application
komc.h contenant les
descriptifs des commandes ajoutées
mesc.h contenant les messages
émis par l´application
defc.h contenant les defines
(pratiquement les noms des commandes en majuscules)
2) Modifier la fonction EVALUER_2() du fichier utilb.c en y codant les
traîtements de ces commandes
Exemple
Soit à ajouter la commande:
com0(datas)
1) Modifier komc.h:
|0: com0
0,-1,0,1
.
2) Modifier la fonction EVALUER_2() du fichier utilb.c.
Linker un programme écrit en C avec l´interpréteur
Principe
Dans le fichier
initb.h se trouvent les noms des fichiers décrivant les environnements:
enva.h,koma.h,mesa.h pour l´interpreteur.
envb.h,komb.h,mesb.h pour anyflo.
Si on remplace l´environnement d´anyflo
envb.h,komb.h,mesb.h
par un autre
envc.h,komc.h,mesc.h
on aura linké une application quelconque à l´interpréteur.
Pour cela il faut:
1) Créer les fichiers:
envc.h contenant les
initialisations propres à l´application
komc.h contenant les
descriptifs des commandes ajoutées
mesc.h contenant les messages
émis par l´application
defc.h contenant les defines
(pratiquement les noms des commandes en majuscules)
glbc.h contenant les
déclarations des variables globales et à inclure dans le fichier application.c
contenant main()
extc.h contenant les
références aux variables globales et à inclure dans tous les fichiers de
l´application
initc.c contenant la fonction: initb
Avec *argv pointant vers les chaînes de caractères des argc paramètres de
lancement.
Dans cette fonction seront réalisées toutes les initialisations:
exec.c contenant la fonction EVALUER_1()
Comment échanger des informations entre un programme C et anyflo
Ce sera la cas, par exemple, du driver d´un capteur (caméra,
motion capture, KINET, etc..). Le plus simple est encore de passer par la
mémoire partagée (sur la même machine) ou
par des sockets TCP ou UDP
(sur plusieurs machines ou sur un réseau).
On trouvera, à titre d´exemple, le source (très simple)
mem_part.c d´un driver pouvant fonctionner
indiféremment en serveur ou en client ce dernier pouvant très bien
être anyflo.
On trouvera dans le dossier distribution:
l´exécutable mem_part.exe du serveur
envoyant des caractères
le fichier
mem_part.js sur lequel il faut cliquer pour lancer ce driver.
le fichier driver.js lançant anyflo qui lit et exécute
la fonction driver.func: les caractères tapés dans la
fenêtre du serveur apparaissent à l´écran.
ATTENTION: un seul device de type MEM simple peut être déclaré.
Comment enchainer plusieurs applications
Appeler simplement
interaction func(6,"F6")
avec la fonction:
f6()
{
system("prog.js");exit;
}
avec le fichier prog.js de la forme:
f();
function f()
{
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("anyflo.exe env=env lan=\"prog()\"");
}
la méme méthode peut être employée dans la fonction
prog.func pour enchainer un autre programme prog2, et ainsi de suite.
Íý