DESCRIPTION GÉNÉRALE D´ANYFLO



PRINCIPE
LES OBJETS
LES TRANSFORMATIONS
L´INTERACTION

















































PRINCIPE

     Le langage
     Grahique
     Animation
     Interaction

Le langage

          Multiplicité d´une commande
          Évaluation
          Affectation
          Actions

         Le langage interne d´ANYFLO est une extension simplifiée du langage C, outre les fonctionnalités de ce langage, il possède plusieurs centaines de commandes pouvant rentrer dans une expression syntaxiquement correcte et être interpretées.
         Par défaut anyflo parle "english", pour lui faire parler une autre langue il suffit de traduire les fichiers de commandes (koma.h, komb.h, komc.h) et les fichiers de messages (mesa.h, mesb.h, mesc.h).
         Il est possible de lui faire parler plusieurs langues en même temps, il suffit de surdéfinir les noms de commandes dans les fichiers kom*.h
Par exemple si, dans komb.h, on écrit:
1: screen ecr ECR
screen et ecr sont 2 noms de la même commande d´effacement de l´écran.
Multiplicite d´une commande
Commandes simples:
Une commandes simple est un nom de commande éventuellement suivie de paramètres.
Exemples:
screen;
         Efface l´écran avec la couleur courante du fond.
screen(r,v,b);
         Efface l´écran avec la couleur (r,v,b).

Commandes multiples:
Une commande multiple est une suite de noms de commandes pouvant éventuellement comporter des paramètres entre parenthèses. Son effet dépend du 1er mot de la commande qui peut être:
1) Un mot du langage.
2) Un objet obj(id), les autres commandes précisent les paramètres de construction de l´objet de type obj et d´identificateur id.
3) Une propriété d´objet.
4) Une transformation(pi), pi sont les paramètres de la transformation, les autres commandes précisent les paramètres de son application.
5) D´autres commandes comme interaction, mouse, ... qui entreprennent certaines actions.
Exemples:
alea(10,20,30)vol(1);
         Bruite avec un aléatoire reproductible le volume numéro 1 avec des coefficients compris entre -10 et 10 pour les x, entre -20 et 20 pour les y et entre -30 et 30 pour les z.
cube(1)dim(100,150,200)col(1,0,0);
         Construit le parallélépipède de dimensions 100,150,200 et de couleur rouge.
col vol(1)=1,.8,.4;
         Donne au volume numéro 1 une couleur orangée.
interaction("rotxzeye");
         Passe en mode interaction en associant le bouton left de la mouse aux rotations en x et z de l´oeil.
Évaluations
Une commande com1(p1) com2(p2) .... comn(pn) est évaluée, c´est à dire qu´elle retourne une valeur.
Exemples:
poi(3) vol(1);
         Retourne les coordonnées du point 3 du volume 1.
w=poi(3) vol(1);$w;
         Imprime les coordonnées du point 3 du volume 1.
Affectations
Une commande com1 com .... obj(id)=val affecte à la propriété com1 com2 ... de l´objet id de type obj la valeur val.
Exemples:
poi(3) vol(1)=100,50,0;
         Affecte la valeur (100,50,0) au point 3 du volume 1.
col vertex(3) vol(1)=0,1,0;
         Affecte la couleur verte au sommet 3 du volume 1.
Actions
Certaines commandes entreprennent une action.
Exemples:
screen(r,v,b);
         Efface l´écran avec la couleur (r,v,b)
alea(20)vol(1);
       Bruite aléatoirement de 20 le volume numéro 1

Grahique

       2D
       3D
2D
Un ensemble de commandes graphiques permettent un accès direct au bitmap de la carte graphic:
frame
screen
menu
message
brush
pixel
rectangle
segment
text

3D
La commande displ permet d´afficher toutes sortes d´objets.

Un ensemble de commandes permettent de définir des objets 3D, de les transformer et de les animer interactivement.

Animation

Toutes les propriétés des objets peuvent être modifiées au cours du temps soit procéduralement par l´exécution de fonctions, soit par des trajectoires, soit interactivement, soit enfin en utilisant des méthodes connexionnistes ou encore évolutionnistes.

Interaction

Un appel à la fonction MainLoop()OpenGL (avec des call backs en assurant le contrôle interactif) permet le temps réel avec les possibilités de la carte graphic installée sur la machine.

LES OBJETS

    Les objets du langage
    Les objets généraux
    Les objets standards
    Identificateur
    Propriétés d´objets
    Accès aux propriétés d´objets
    Visibilité d´un objet

Les objets du langage

Chaînes de caractères, exemple "AB"
Tableaux de chaînes, exemple: "MOT1 MOT2 MOT3"
Nombres flottants, exemple: 1.0
Tableaux de nombres, exemple (1,2.5,-1.0,.3)
Tableaux hybrides, exemple: 1,2,3,"ABCD",4,"EF"
Variables, exemple x=[1,5], elles peuvent être globales, statiques ou locales
Fonctions écrites par l´utilisateur
Fonctions mathématiques, exemples cos, sin, log

Les objets généraux

L´objet le plus général est défini par son type qui est un mot défini par type("ttt")=num.
Exemples:
object("obj1")type("type1") construit l´objet de nom obj1 et de type type1.
Le type peut être défini implicitement lors de la création d´un objet.

Les objets standards

Objets standards de l´interpréteur:
         compile: compilations.
         func: fonctions.
         var: variables.
         history: history.

Objets standards d´anyflo:
         audio(id): objet audio.
         brush: objets graphiques 2D utilisés par le mode
         device: connexions à des capteurs.
         fog: brouillards.
         field: champs de forces.
         font: fontes.
         genetic: populations génétiques.
         image: images.
         light: lumières.
         memory: mémoires.
         menu: menus.
         message: messages.
         object: objets. palette.
         network: réseaus neuronaux.
         scale: échelles.
         sphere: objet particulier de type sphère.
         stock: objets directives de stockage.
         text: textes.
         traj: traj.
         see: see.
         vol: volumes.
         view: visualisations.
         win: fenêtres.

Des volumes particuliers peuvent être déclarés directement:
         ball: approximation polyédrique d´une sphère.
         cube: parallélépipèdes rectangles.
         envelope: envelope de plusieurs volumes.
         geod: surface définie par des courbes géodésiques.
         grid: grilles.
         prism: prismes.
         sphere: sphère définie par défaut.
         rev: surface de révolution.
         pipe: tuyaux.

Identificateur

Les objets sont connus à leurs création par leur identificateur qui est soit un entier non nul (leur numéro), soit une chaine de caractères (leur nom).
Exemple:
cube(7)dim(100)
       Construit un cube de numéro 7 et de côté 100.
ball("B1")radius(100)secy(6)secx(18)
       Construit une boule de nom B1, de rayon 100, de 6 sections en y et de 18 sections en x.

Propriétés d´objets

Les objets peuvent être munis d´un nombre quelconque de propriétés arbitraires. À leur création certaines propriétés peuvent être définies automatiquement.
Exemple:
cube(7) dim(200);
crée un objet de type cube comportant:
         une propriété ´poi´ constituée de 8 points.
         une propriété ´fac´ constituée de 6 facettes.
Après création d´un objet des propriétés peuvent lui être ajoutées, exemples:
col vol(7)=1;
         Affecte la couleur rouge au volume 7.
poi(0) vol(7)=0,0,0;
         Ajoute le point (0,0,0) au voulme 7.

Accès aux propriétés d´objets

Évaluation:
poi(3) vol(1);
         Retourne les coordonnées du point 3 du volume 1.
col vertex(3) vol(1);
         Retourne la couleur (r,v,b) du sommet 3 du volume 1.
Affectation:
poi(3) vol(1)=100,50,0;
         Affecte (100,50,0) au point 3 du volume 1.
col vertex(3) vol(1)=0,0,1;
         Affecte le bleu comme couleur du sommet 3 du volume 1.
Création:
col screen vol(1)=1,0,1;
         Crée la propriété col screen du volume 1 et lui affecte la valeur (1,0,1).

Visibilité d´un objet

validate object(id)obj retourne:
1 si l´objet est valide.
0 si l´objet est invalide.
NIL si l´objet n´exisite pas.

LES TRANSFORMATIONS


     Les transformations linéaires d´objets par la matrice
     Les transformations des points d´objets
     Les commandes de transformation
     Encapsulement

Les transformations linéaires par la matrice

         Elles n´affectent que la matrice de l´objet en laissant invariantes les coordonnées de ses points.
Syntaxe:
T matrix vol(id)
Retourne les coefficients p de la transformation T.
T(p)matrix vol(id)
Affecte les coefficients p de la transformation T.
T est une transformation linéaire: TRAN, DILA, DILX, DILY, DILZ, HOM, ROTA, AXE, ROTX, ROTY, ROTZ.
Exemples:
tran(100,0,0)matrix vol(1);: déplacement.
rota(.25*PI)matrix vol(1);axis(1,-1,1)matrix vol(1);: rotation autour de l´axe (1,-1,1).
dila(1,2.5,-1)matrix vol(1);: dilatation en y et symétrie en z.

Les transformations des points d´objets

         Elles affectent les coordonnées des points de l'objet.
Syntaxe:
T(p)vol(id); tous les sommets.
T(p)vertex(s)vol(id); seulement les sommets s.
Exemples:
tran(100,0,0) vol(1);
         Déplace le volume 1 de (100,0,0)
rand coe(20)vertex[1,5]vol(1);
         Bruite de 20 les sommets 1 à 5 du volume 1

Les commandes de transformations

Voir la list des transformations.

Encapsulement

La commande attach permet d´encapsuler des propriétés d´un objet qui seront exécutées lors de l´utilisation de cet objet (son affichage pour un volume, le calcul de la perspective pour une vue, un modèle d´éclairement pour une lumière).
Syntaxe:
attach(0)P(p)vol(id);
       Attache la propriété P(p) au volume id, elle sera alors exécutées automatiquement à chaque "pas" d´une animation dynamic.
Exemple:
attach generate ext vol(id): en mode interaction, l´extension du volume id sera recalculée avant chaque affichage (utile si le volume id est déformable).

4 L´INTERACTION

interaction
temps réel Par défaut le dialogue a lieu via le clavier.
Pour passer en mode interaction en temps réel taper la commande: interaction, le dialogue peut alors se faire via la mouse, des menus, des échelles, etc..
Des options de lancement permettent d´avoir directement le mode interction ou le mode see qui est une combinaison de ces 2 modes puisque l´on est en mode temps réel et qu´une fenêtre de dialogue permet de taper des commandes parallèlement à l´exécution.

Le temps réel

Les structures très générales d´anyflo sont traduites (par un compilateur de données transparent pour l'utilisateur) en structures compactes et figées compatibles avec les fonctions d´OpenGL et de DirectX.
En no illum:
yes segment accélére les calculs, mais les précalculs sont plus longs.
simple vol(id)=1 ne traite que le filaire pour le volume id, pas d'attaches, ni de motif, ni de particules, ni d´envelope vertex, ni de local, ni de sphere vertex, ni de vol vertex.