/*************************************************************************************************************************************/
/* */
/* C O U P E D ' U N A L B U M D ' I M A G E S : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande fait une coupe plane */
/* dans un album Argument. */
/* */
/* */
/* Author of '$xci/coupe_3D$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20140913094315). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_DI_ALBUM_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/album.01.I"
#define ATTENDRE_LES_IMAGES_INEXISTANTES \
VRAI \
/* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est */ \
/* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee... */
#define DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES \
ZERO \
/* Duree d'attente des images inexistantes avec une valeur par defaut assurant la */ \
/* compatibilite avec la version anterieure au 20040928095323. */
#define FAIRE_UNE_COUPE_QUELCONQUE \
FAUX \
/* Indique s'il faut faire une coupe plane ('FAUX'), ou bien une coups quelconque ('VRAI'). */ \
/* Ceci fut introduit le 20171027115642 en garantissant la compatibilite anterieure... */
#define COEFFICIENT_A \
NEUT(FU)
#define COEFFICIENT_B \
NEUT(FU)
#define COEFFICIENT_C \
NEUT(FU)
#define COEFFICIENT_D \
NEGA(FU)
/* Definition du plan de coupe : */
/* */
/* X + Y + Z - 1 = 0 */
/* */
/* par defaut... */
/* */
/* On notera que le plan utile pour l'eponge de Manger ('v $xiirf/MENG.22.5.1') est le */
/* plan : */
/* */
/* 2.X - 2.Y + 2.Z - 1 = 0 */
/* */
/* Ce plan passe par les milieux de 6 aretes du cube unite dont les coordonnees sont : */
/* */
/* {1/2,0,0} */
/* {1,1/2,0} */
/* {1,1,1/2} */
/* {1/2,1,1} */
/* {0,1/2,1} */
/* {0,0,1/2} */
/* */
/* C'est ce plan d'intersection qui donne la coupe "etoilee" ('v $xiirf/MENG.32.5.1'). */
#define NIVEAU_D_EFFACEMENT \
NOIR \
/* Niveau a donner aux points qui sont effaces par la coupe... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/album.02.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O U P E D ' U N A L B U M D ' I M A G E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
/* Nom de la sequence a generer eventuellement. */
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
/* Nom de la sequence a visualiser. */
DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
/* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
/* Numero de la premiere image, */
DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
/* Nombre de chiffres codant le numero des images de la serie... */
DEFV(Logical,INIT(attendre_les_images_inexistantes,ATTENDRE_LES_IMAGES_INEXISTANTES));
/* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est */
/* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee... */
DEFV(Positive,INIT(duree_d_attente_des_images_inexistantes,DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES));
/* Duree d'attente des images inexistantes avec une valeur par defaut assurant la */
/* compatibilite avec la version anterieure au 20040928095323. */
DEFV(Logical,INIT(faire_une_coupe_quelconque,FAIRE_UNE_COUPE_QUELCONQUE));
/* Indique s'il faut faire une coupe plane ('FAUX'), ou bien une coups quelconque ('VRAI'). */
/* Ceci fut introduit le 20171027115642 en garantissant la compatibilite anterieure... */
DEFV(Float,INIT(coefficient_A,COEFFICIENT_A));
DEFV(Float,INIT(coefficient_B,COEFFICIENT_B));
DEFV(Float,INIT(coefficient_C,COEFFICIENT_C));
DEFV(Float,INIT(coefficient_D,COEFFICIENT_D));
/* Definition du plan de coupe : */
/* */
/* X+Y+Z-1 = 0 */
/* */
/* par defaut... */
DEFV(genere_p,INIT(niveau_d_effacement,NIVEAU_D_EFFACEMENT));
/* Niveau a donner aux points qui sont effaces par la coupe... */
/*..............................................................................................................................*/
EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,EDITER_LES_MESSAGES_D_ERREUR);
/* Initialisation de l'indicateur d'edition des messages d'erreur... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("attendre=",attendre_les_images_inexistantes);
GET_ARGUMENT_I("attente=",duree_d_attente_des_images_inexistantes);
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("postfixe=",nom_postfixe);
GET_ARGUMENT_I("premiere=",premiere_image);
GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ);
GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
GET_ARGUMENTS2_L("super_echelle=""se="
,Acoupe_plane_____utiliser_la_super_echelle
,Acoupe_quelconque_____utiliser_la_super_echelle
);
GET_ARGUMENTS2_L("IZLE="
,Acoupe_plane_____faire_un_IZLE
,Acoupe_quelconque_____faire_un_IZLE
);
GET_ARGUMENTS2_N("IZGT="
,Acoupe_plane_____faire_un_IZLE
,Acoupe_quelconque_____faire_un_IZLE
);
GET_ARGUMENT_L("coupe_quelconque=""quelconque=""cq=",faire_une_coupe_quelconque);
GET_ARGUMENT_N("coupe_plane=""plane=""cp=",faire_une_coupe_quelconque);
/* Arguments introduits le 20171027115642... */
GET_ARGUMENT_F("cA=""pA=",coefficient_A);
GET_ARGUMENT_F("cB=""pB=",coefficient_B);
GET_ARGUMENT_F("cC=""pC=",coefficient_C);
GET_ARGUMENT_F("cD=""pD=",coefficient_D);
GET_ARGUMENT_F("a333=",Acoupe_quelconque_____a333);
GET_ARGUMENT_F("a332=",Acoupe_quelconque_____a332);
GET_ARGUMENT_F("a331=",Acoupe_quelconque_____a331);
GET_ARGUMENT_F("a330=",Acoupe_quelconque_____a330);
GET_ARGUMENT_F("a323=",Acoupe_quelconque_____a323);
GET_ARGUMENT_F("a322=",Acoupe_quelconque_____a322);
GET_ARGUMENT_F("a321=",Acoupe_quelconque_____a321);
GET_ARGUMENT_F("a320=",Acoupe_quelconque_____a320);
GET_ARGUMENT_F("a313=",Acoupe_quelconque_____a313);
GET_ARGUMENT_F("a312=",Acoupe_quelconque_____a312);
GET_ARGUMENT_F("a311=",Acoupe_quelconque_____a311);
GET_ARGUMENT_F("a310=",Acoupe_quelconque_____a310);
GET_ARGUMENT_F("a303=",Acoupe_quelconque_____a303);
GET_ARGUMENT_F("a302=",Acoupe_quelconque_____a302);
GET_ARGUMENT_F("a301=",Acoupe_quelconque_____a301);
GET_ARGUMENT_F("a300=",Acoupe_quelconque_____a300);
GET_ARGUMENT_F("a233=",Acoupe_quelconque_____a233);
GET_ARGUMENT_F("a232=",Acoupe_quelconque_____a232);
GET_ARGUMENT_F("a231=",Acoupe_quelconque_____a231);
GET_ARGUMENT_F("a230=",Acoupe_quelconque_____a230);
GET_ARGUMENT_F("a223=",Acoupe_quelconque_____a223);
GET_ARGUMENT_F("a222=",Acoupe_quelconque_____a222);
GET_ARGUMENT_F("a221=",Acoupe_quelconque_____a221);
GET_ARGUMENT_F("a220=",Acoupe_quelconque_____a220);
GET_ARGUMENT_F("a213=",Acoupe_quelconque_____a213);
GET_ARGUMENT_F("a212=",Acoupe_quelconque_____a212);
GET_ARGUMENT_F("a211=",Acoupe_quelconque_____a211);
GET_ARGUMENT_F("a210=",Acoupe_quelconque_____a210);
GET_ARGUMENT_F("a203=",Acoupe_quelconque_____a203);
GET_ARGUMENT_F("a202=",Acoupe_quelconque_____a202);
GET_ARGUMENT_F("a201=",Acoupe_quelconque_____a201);
GET_ARGUMENT_F("a200=",Acoupe_quelconque_____a200);
GET_ARGUMENT_F("a133=",Acoupe_quelconque_____a133);
GET_ARGUMENT_F("a132=",Acoupe_quelconque_____a132);
GET_ARGUMENT_F("a131=",Acoupe_quelconque_____a131);
GET_ARGUMENT_F("a130=",Acoupe_quelconque_____a130);
GET_ARGUMENT_F("a123=",Acoupe_quelconque_____a123);
GET_ARGUMENT_F("a122=",Acoupe_quelconque_____a122);
GET_ARGUMENT_F("a121=",Acoupe_quelconque_____a121);
GET_ARGUMENT_F("a120=",Acoupe_quelconque_____a120);
GET_ARGUMENT_F("a113=",Acoupe_quelconque_____a113);
GET_ARGUMENT_F("a112=",Acoupe_quelconque_____a112);
GET_ARGUMENT_F("a111=",Acoupe_quelconque_____a111);
GET_ARGUMENT_F("a110=",Acoupe_quelconque_____a110);
GET_ARGUMENT_F("a103=",Acoupe_quelconque_____a103);
GET_ARGUMENT_F("a102=",Acoupe_quelconque_____a102);
GET_ARGUMENT_F("a101=",Acoupe_quelconque_____a101);
GET_ARGUMENT_F("a100=",Acoupe_quelconque_____a100);
GET_ARGUMENT_F("a033=",Acoupe_quelconque_____a033);
GET_ARGUMENT_F("a032=",Acoupe_quelconque_____a032);
GET_ARGUMENT_F("a031=",Acoupe_quelconque_____a031);
GET_ARGUMENT_F("a030=",Acoupe_quelconque_____a030);
GET_ARGUMENT_F("a023=",Acoupe_quelconque_____a023);
GET_ARGUMENT_F("a022=",Acoupe_quelconque_____a022);
GET_ARGUMENT_F("a021=",Acoupe_quelconque_____a021);
GET_ARGUMENT_F("a020=",Acoupe_quelconque_____a020);
GET_ARGUMENT_F("a013=",Acoupe_quelconque_____a013);
GET_ARGUMENT_F("a012=",Acoupe_quelconque_____a012);
GET_ARGUMENT_F("a011=",Acoupe_quelconque_____a011);
GET_ARGUMENT_F("a010=",Acoupe_quelconque_____a010);
GET_ARGUMENT_F("a003=",Acoupe_quelconque_____a003);
GET_ARGUMENT_F("a002=",Acoupe_quelconque_____a002);
GET_ARGUMENT_F("a001=",Acoupe_quelconque_____a001);
GET_ARGUMENT_F("a000=",Acoupe_quelconque_____a000);
/* Arguments introduits le 20171027115642... */
GET_ARGUMENT_P("niveau_effacement=""niveau=""effacement=",niveau_d_effacement);
)
);
begin_nouveau_block
Bblock
BDEFV(album,album_d_images);
/* Definition de l'album d'images avant la coupe plane. */
BDEFV(album,album_d_images_coupe);
/* Definition de l'album d'images apres la coupe plane. */
CALi(dAload_album(album_d_images
,nom_imageA
,nom_postfixe
,premiere_image
,pas_des_images
,nombre_de_chiffres
,attendre_les_images_inexistantes
,duree_d_attente_des_images_inexistantes
,FAUX
)
);
Test(IL_NE_FAUT_PAS(faire_une_coupe_quelconque))
/* Test introduit le 20171027115642... */
Bblock
CALS(Acoupe_plane(album_d_images_coupe
,album_d_images
,coefficient_A
,coefficient_B
,coefficient_C
,coefficient_D
,niveau_d_effacement
)
);
/* Coupe plane... */
Eblock
ATes
Bblock
CALS(Acoupe_quelconque(album_d_images_coupe
,album_d_images
,niveau_d_effacement
)
);
/* Coupe quelconque introduite le 20171027115642... */
/* */
/* Le 20200127150342, grace a 'v $xiirv/.STRX.31.2.$U', on notera que les parametres */
/* suivants : */
/* */
/* a100=0 a010=0 a001=0 */
/* a003=0 a002=+1 a001=-1 */
/* a030=0 a020=+1 a010=-1 */
/* a300=0 a200=+1 a100=-1 */
/* a000=... */
/* */
/* definissent une sphere de rayon 'a000'... */
Eblock
ETes
CALi(dAupdate_album(nom_imageR
,nom_postfixe
,premiere_image
,pas_des_images
,album_d_images_coupe
,nombre_de_chiffres
,FAUX
)
);
EDEFV(album,album_d_images_coupe);
/* Definition de l'album d'images apres la coupe plane. */
EDEFV(album,album_d_images);
/* Definition de l'album d'images avant la coupe plane. */
Eblock
end_nouveau_block
RETU_Commande;
Eblock
ECommande