/*************************************************************************************************************************************/ /* */ /* 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