COMMENT DÉVELOPPER DES APPLICATIONS

Comment développer une application en langage anyflo
Comment faire dialoguer plusieurs anyflos
Comment se linker à anyflo
Comment échanger des informations entre un programme C et anyflo
Comment enchainer plusieurs 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 l´application mime on aura un exemple complet d´un programme complexe é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 comment les utiliser pour construire un mime virtuel (malheureusement, cette application ne tourne que sur une version ancienne datant de 2009 et n´est pas complète ...).

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.















































Íý