Download @couplan.procedur

Back to the list

   1 : * @COUPLAN  PROCEDUR  PASCAL    12/10/18    21:15:01     7532           
   2 : *---------------------------------------------------------------------*
   3 : * NOM         : @COUPLAN                                              *
   4 : *                                                                     *
   5 : * DESCRIPTION : Procedure de maillage d'un agregat cubique de poly-   *
   6 : *                                                                     *
   7 : * SYNTAXE     : TAB2 TAB3 = @COUPLAN TAB1 P1 P2 P3 (ITRAC1) (IMESS1) ;*
   8 : *                                                                     *
   9 : * - TAB1      = Objet TABLE, resultat de la procedure @P_VORO, conte- *
  10 : *               -nant les points sommets de la partition de Voronoi   *
  11 : *               s'appuyant sur les points du maillage donne a l'indi- *
  12 : *               -ce 'MPT' de TAB1.                                    *
  13 : *                                                                     *
  14 : * - P1/P2/P3  = Points du plan de coupe ;                             *
  15 : *                                                                     *
  16 : * - ITRAC1    = LOGIQUE activant le trace des resultats ;             *
  17 : *                                                                     *
  18 : * - IMESS1    = LOGIQUE activant messages (No cellule, Face, etc.) ;  *
  19 : *                                                                     *
  20 : * - TAB2/TAB3 = TABLEs resultats contenant les points sommets de la   *
  21 : *               partition de Voronoi decrite par TAB1 coupee par le   *
  22 : *               Plan defini par P1 P2 P3.                             *
  23 : *                                                                     *
  24 : * LANGAGE     : GIBIANE-CAST3M                                        *
  25 : * AUTEUR      : S. PASCAL (CEA/DEN/DM2S/SEMT/LM2S)                    *
  26 : * COURRIEL    : serge.pascal@cea.fr                                   *
  27 : *---------------------------------------------------------------------*
  28 : * VERSION    : v1, 14/09/2009, version initiale                       *
  29 : *---------------------------------------------------------------------*
  30 : 'DEBP' @COUPLAN ;
  31 : *                                                                     *
  32 : *----------------------- Lecture des arguments -----------------------*
  33 : *                                                                     *
  34 : * Lecture de la table :                                               *
  35 : 'ARGU' TGN6T*'TABLE' ;
  36 : *                                                                     *
  37 : * Coupe de l'agregat selon le Plan P1 P2 P3 :                         *
  38 : 'ARGU' P1*'POINT' P2*'POINT' P3*'POINT' ;
  39 : *                                                                     *
  40 : * Lecture facultative d'un indicateur de trace du resultat :          *
  41 : 'ARGU' ITRAC1/'LOGIQUE' ;
  42 : 'SI' ('NON' ('EXIS' ITRAC1)) ;
  43 :   ITRAC1   = FAUX ;
  44 : 'FINS' ;
  45 : *                                                                     *
  46 : 'ARGU' IMESS1/'LOGIQUE' ;
  47 : 'SI' ('NON' ('EXIS' IMESS1)) ;
  48 :   IMESS1   = FAUX ;
  49 : 'FINS' ;
  50 : *                                                                     *
  51 : * Representation du Plan de coupe pour les traces :                   *
  52 : 'SI' ITRAC1 ;
  53 :   P4       = P2 'PLUS' (P3 'MOIN' P1) ;
  54 :   S1       = 'MANU' 'QUA4' P1 P2 P4 P3 ;
  55 :   S1       = S1 'HOMO' ('BARY' S1) 5. ;
  56 :   S1       = S1 'COUL' 'TURQ' ;
  57 :   OEIL1    = 100. * (P2 'MOIN' P1) ;
  58 : 'FINS' ;
  59 : *                                                                     *
  60 : * Normale au Plan :                                                   *
  61 : PN1      = 'PVEC' (P2 'MOIN' P1) (P3 'MOIN' P1) ;
  62 : PN1      = PN1 / ('NORM' PN1) ;
  63 : XN1 YN1 ZN1 = PN1 'COOR' ;
  64 : XP1 YP1 ZP1 = P1  'COOR' ;
  65 : *                                                                     *
  66 : *----------------------------- Decoupage -----------------------------*
  67 : *                                                                     *
  68 : * Boucle sur les cellules de Voronoi :                                *
  69 : MPT1     = TGN6T . 'MPT' ;
  70 : NBI1     = 'NBNO' MPT1 ;
  71 : TPCNEG1  = 'TABL' ;
  72 : TPCPOS1  = 'TABL' ;
  73 : PCJ0     = PN1 'PLUS' (0. 0. 0.) ;
  74 : VELE1    = 'VALE' 'ELEM' ;
  75 : VERR1    = 'VALE' 'ERRE' ;
  76 : 'REPE' BI1 NBI1 ;
  77 :   'SI' IMESS1 ;
  78 :     'SAUT' 1 'LIGN' ;
  79 :     'MESS' ' ################### Cell ' &BI1 ;
  80 :   'FINS' ;
  81 :   PCI1     = MPT1 'POIN' &BI1 ;
  82 :   MAVI1    = TGN6T . PCI1 . 'MAV' ;
  83 :   X1 Y1 Z1 = MAVI1 'COOR' ;
  84 :   CHCI1    = (XN1 * (X1 - XP1))
  85 :            + (YN1 * (Y1 - YP1))
  86 :            + (ZN1 * (Z1 - ZP1)) ;
  87 : * Test Si MAVI1 a gauche du Plan :                                    *
  88 :   'SI' (('MAXI' CHCI1) '<EG' 0.) ;
  89 :     TPCNEG1 . PCI1 = 'TABL' ;
  90 :     'SI' IMESS1 ;
  91 :       'MESS' ' ==> Cellule a gauche ' ;
  92 :     'FINS' ;
  93 :     MPTI1    = TGN6T . PCI1 . 'MPT' ;
  94 :     NBJ1     = 'NBNO' MPTI1 ;
  95 :     IPREMJ1  = VRAI ;
  96 :     'REPE' BJ1 NBJ1 ;
  97 :       'SI' IMESS1 ;
  98 :         'MESS' ' *** Face : ' &BJ1 ;
  99 :       'FINS' ;
 100 :       PCJ1     = MPTI1 'POIN' &BJ1 ;
 101 :       'SI' ('EXIS' TPCNEG1 PCJ1) ;
 102 :         'SI' IMESS1 ;
 103 :           'MESS' '  => Cell PCJ' ;
 104 :         'FINS' ;
 105 :         MAVIJN1  = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ;
 106 :         TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ;
 107 :       'SINO' ;
 108 :         MAVIJ1   = TGN6T . PCI1 . PCJ1 . 'MAV' ;
 109 :         PVK1     = MAVIJ1 'POIN' 1 ;
 110 :         MAVIJN1  = MAVIJ1 'ELEM' 'COMP' PVK1 PVK1 ;
 111 :         TPCNEG1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ;
 112 :       'FINS' ;
 113 :       'SI' IPREMJ1 ;
 114 :         IPREMJ1  = FAUX ;
 115 :         TPCNEG1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 116 :         TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ;
 117 :       'SINO' ;
 118 :         TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 119 :         TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ;
 120 :       'FINS' ;
 121 :     'FIN' BJ1 ;
 122 :     'SI' ('EXIS' TPCNEG1 'MPT') ;
 123 :       TPCNEG1 . 'MPT' = TPCNEG1 . 'MPT' 'ET' PCI1 ;
 124 :       TPCNEG1 . 'MAV' = TPCNEG1 . 'MAV' 'ET' TPCNEG1 . PCI1 . 'MAV' ;
 125 :     'SINO' ;
 126 :       TPCNEG1 . 'MPT' = 'MANU' 'POI1' PCI1 ;
 127 :       TPCNEG1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' ;
 128 :     'FINS' ;
 129 :     'ITER' BI1 ;
 130 :   'FINS' ;
 131 : *                                                                     *
 132 : * Test Si MAVI1 a droite du Plan :                                    *
 133 :   'SI' (('MINI' CHCI1) '>EG' 0.) ;
 134 :     TPCPOS1 . PCI1 = 'TABL' ;
 135 :     'SI' IMESS1 ;
 136 :       'MESS' ' ==> Cellule a droite ' ;
 137 :     'FINS' ;
 138 :     MPTI1    = TGN6T . PCI1 . 'MPT' ;
 139 :     NBJ1     = 'NBNO' MPTI1 ;
 140 :     IPREMJ1  = VRAI ;
 141 :     'REPE' BJ1 NBJ1 ;
 142 :       'SI' IMESS1 ;
 143 :         'MESS' ' *** Face : ' &BJ1 ;
 144 :       'FINS' ;
 145 :       PCJ1     = MPTI1 'POIN' &BJ1 ;
 146 :       'SI' ('EXIS' TPCPOS1 PCJ1) ;
 147 :         'SI' IMESS1 ;
 148 :           'MESS' '  => Cell PCJ' ;
 149 :         'FINS' ;
 150 :         MAVIJP1  = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ;
 151 :         TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ;
 152 :       'SINO' ;
 153 :         MAVIJ1   = TGN6T . PCI1 . PCJ1 . 'MAV' ;
 154 :         PVK1     = MAVIJ1 'POIN' 1 ;
 155 :         MAVIJP1  = MAVIJ1 'ELEM' 'COMP' PVK1 PVK1 ;
 156 :         TPCPOS1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ;
 157 :       'FINS' ;
 158 :       'SI' IPREMJ1 ;
 159 :         IPREMJ1  = FAUX ;
 160 :         TPCPOS1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 161 :         TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ;
 162 :       'SINO' ;
 163 :         TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 164 :         TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ;
 165 :       'FINS' ;
 166 :     'FIN' BJ1 ;
 167 :     'SI' ('EXIS' TPCPOS1 'MPT') ;
 168 :       TPCPOS1 . 'MPT' = TPCPOS1 . 'MPT' 'ET' PCI1 ;
 169 :       TPCPOS1 . 'MAV' = TPCPOS1 . 'MAV' 'ET' TPCPOS1 . PCI1 . 'MAV' ;
 170 :     'SINO' ;
 171 :       TPCPOS1 . 'MPT' = 'MANU' 'POI1' PCI1 ;
 172 :       TPCPOS1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' ;
 173 :     'FINS' ;
 174 :     'ITER' BI1 ;
 175 :   'FINS' ;
 176 : * 
 177 : * On est Dans le cas Ou la cellule coupe le Plan :                    *
 178 :   TPCNEG1 . PCI1 = 'TABL' ;
 179 :   TPCPOS1 . PCI1 = 'TABL' ;
 180 :   TPCNEG1 . PCI1 . PCJ0 = 'TABL' ;
 181 :   TPCPOS1 . PCI1 . PCJ0 = 'TABL' ;
 182 : * Boucle sur les Faces                                                *
 183 :   MPTI1    = TGN6T . PCI1 . 'MPT' ;
 184 :   NBJ1     = 'NBNO' MPTI1 ;
 185 :   IPREMJ1  = VRAI ;
 186 :   'REPE' BJ1 NBJ1 ;
 187 :     'SI' IMESS1 ;
 188 :       'MESS' ' *** Face : ' &BJ1 ;
 189 :     'FINS' ;
 190 :     PCJ1     = MPTI1 'POIN' &BJ1 ;
 191 :     MAVIJ1   = TGN6T . PCI1 . PCJ1 . 'MAV' ;
 192 :     X1 Y1 Z1 = MAVIJ1 'COOR' ;
 193 :     CHCIJ1   = (XN1 * (X1 - XP1))
 194 :              + (YN1 * (Y1 - YP1))
 195 :              + (ZN1 * (Z1 - ZP1)) ;
 196 : *   Test Si MAVIJ1 est Dans le Plan :                                 *
 197 :     'SI' ((('MAXI' CHCIJ1) 'EGA' 0.) 'ET' (('MINI' CHCIJ1) 'EGA' 0.)) ;
 198 :       'MESS' ' ****** Face Dans le Plan de coupe !!! ' ;
 199 :       'QUIT' @COUPLAN ;
 200 :     'FINS' ;
 201 : *   Test Si MAVIJ1 est a gauche du Plan :                            *
 202 :     'SI' (('MAXI' CHCIJ1) '<' 0.) ;
 203 :       'SI' IMESS1 ;
 204 :         'MESS' '  => Face a gauche' ;
 205 :       'FINS' ;
 206 :       'SI' ('EXIS' TPCNEG1 PCJ1) ;
 207 :         'SI' IMESS1 ;
 208 :           'MESS' '  => Cell PCJ' ;
 209 :         'FINS' ;
 210 :         MAVIJN1  = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ;
 211 :         TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ;
 212 :       'SINO' ;
 213 :         PVK1     = MAVIJ1 'POIN' 1 ;
 214 :         MAVIJN1  = MAVIJ1 'ELEM' 'COMP' PVK1 PVK1 ;
 215 :         TPCNEG1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ;
 216 :       'FINS' ;
 217 :       'SI' ('EXIS' TPCNEG1 . PCI1 'MPT') ;
 218 :         TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 219 :         TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ;
 220 :       'SINO' ;
 221 :         TPCNEG1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 222 :         TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ;
 223 :       'FINS' ;
 224 :       'ITER' BJ1 ;
 225 :     'FINS' ;
 226 : *   Test Si MAVIJ1 est a droite du Plan :                            *
 227 :     'SI' (('MINI' CHCIJ1) '>' 0.) ;
 228 :       'SI' IMESS1 ;
 229 :         'MESS' '  => Face a droite' ;
 230 :       'FINS' ;
 231 :       'SI' ('EXIS' TPCPOS1 PCJ1) ;
 232 :         'SI' IMESS1 ;
 233 :           'MESS' '  => Cell PCJ' ;
 234 :         'FINS' ;
 235 :         MAVIJP1  = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ;
 236 :         TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ;
 237 :       'SINO' ;
 238 :         MAVIJ1   = TGN6T . PCI1 . PCJ1 . 'MAV' ;
 239 :         PVK1     = MAVIJ1 'POIN' 1 ;
 240 :         MAVIJP1  = MAVIJ1 'ELEM' 'COMP' PVK1 PVK1 ;
 241 :         TPCPOS1 . PCI1 . PCJ1 = TGN6T . PCI1 . PCJ1 ;
 242 :       'FINS' ;
 243 :       'SI' ('EXIS' TPCPOS1 . PCI1 'MPT') ;
 244 :         TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 245 :         TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ;
 246 :       'SINO' ;
 247 :         TPCPOS1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 248 :         TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ;
 249 :       'FINS' ;
 250 :       'ITER' BJ1 ;
 251 :     'FINS' ;
 252 : *                                                                     *
 253 : *   On est Dans le cas Ou la Face coupe le Plan :                     *
 254 : *   Test Si cellule PCJ1 deja coupee :                                *
 255 :     'SI' ('EXIS' TPCNEG1 PCJ1) ;
 256 :       'SI' ('NON' ('EXIS' TPCPOS1 PCJ1)) ;
 257 :         'MESS'
 258 :           ' ****** Cell PCJ Existe Dans TPCNEG1 Et pas Dans TPCPOS1 ?' ;
 259 :         'QUIT' BI1 ;
 260 :       'FINS' ;
 261 :       'SI' IMESS1 ;
 262 :         'MESS' '  => Face coupe le plan' ;
 263 :         'MESS' '  => Cell PCJ' ;
 264 :       'FINS' ;
 265 : *     Arete Intersection : MAVIJK0 :                                  *
 266 :       MAVIJN1  = TPCNEG1 . PCJ1 . PCI1 . 'MAV' ;
 267 :       MAVIJP1  = TPCPOS1 . PCJ1 . PCI1 . 'MAV' ;
 268 :       MAVIJK0  = MAVIJN1 'INTE' MAVIJP1 ;
 269 : *     Face relative a PCJ0 :                                          *
 270 :       TPCNEG1 . PCI1 . PCJ0 . PCJ1         = 'TABL' ;
 271 :       TPCPOS1 . PCI1 . PCJ0 . PCJ1         = 'TABL' ;
 272 :       TPCNEG1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ;
 273 :       TPCPOS1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ;
 274 :       'SI' IPREMJ1 ;
 275 :         IPREMJ1  = FAUX ;
 276 :         MAVIJ0   = MAVIJK0 ;
 277 :         TPCNEG1 . PCI1 . PCJ0 . 'MPT'   = 'MANU' 'POI1' PCJ1 ;
 278 :         TPCPOS1 . PCI1 . PCJ0 . 'MPT'   = 'MANU' 'POI1' PCJ1 ;
 279 :       'SINO' ;
 280 :         MAVIJ0   = MAVIJ0 'ET' MAVIJK0 ;
 281 :         TPCNEG1 . PCI1 . PCJ0 . 'MPT'   = TPCNEG1 . PCI1 . PCJ0 . 'MPT'
 282 :           'ET' PCJ1 ;
 283 :         TPCPOS1 . PCI1 . PCJ0 . 'MPT'   = TPCPOS1 . PCI1 . PCJ0 . 'MPT'
 284 :           'ET' PCJ1 ;
 285 :       'FINS' ;
 286 : *     Face relative a PCJ1  :                                         *
 287 :       TPCNEG1 . PCI1 . PCJ1 = TPCNEG1 . PCJ1 . PCI1 ;
 288 :       TPCPOS1 . PCI1 . PCJ1 = TPCPOS1 . PCJ1 . PCI1 ;
 289 : *     Cellule PCI1 :                                                  *
 290 :       'SI' ('EXIS' TPCNEG1 . PCI1 'MPT') ;
 291 :         TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 292 :         TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ;
 293 :       'SINO' ;
 294 :         TPCNEG1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 295 :         TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ;
 296 :       'FINS' ;
 297 :       'SI' ('EXIS' TPCPOS1 . PCI1 'MPT') ;
 298 :         TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 299 :         TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ;
 300 :       'SINO' ;
 301 :         TPCPOS1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 302 :         TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ;
 303 :       'FINS' ;
 304 :       'ITER' BJ1 ;
 305 :     'SINO' ;
 306 :       'SI' ('EXIS' TPCPOS1 PCJ1) ;
 307 :         'MESS'
 308 :           ' ****** Cell PCJ Existe Dans TPCPOS1 Et pas Dans TPCNEG1 ?' ;
 309 :         'QUIT' BI1 ;
 310 :       'FINS' ;
 311 :     'FINS' ;
 312 : *                                                                     *
 313 : *   Boucle sur les aretes :                                           *
 314 : *                                                                     *
 315 : *------------------------------ VERRUE -------------------------------*
 316 : *   TGN6T . PCI1 . PCJ1 ne contient pas l'indice 'MPT' : on le cree *
 317 : *   en attente evolution @P_VORO...                                   *
 318 :     'SI' ('NON' ('EXIS' TGN6T . PCI1 . PCJ1 'MPT')) ;
 319 :       TINDIJ1  = 'INDE' (TGN6T . PCI1 . PCJ1) ;
 320 :       IPREMX1  = VRAI ;
 321 :       'REPE' BX0 ('DIME' TINDIJ1) ;
 322 :         INDX0    = TINDIJ1 . &BX0 ;
 323 :         'SI' ('EGA' ('TYPE' INDX0) 'POINT') ;
 324 :           'SI' IPREMX1 ;
 325 :             IPREMX1  = FAUX ;
 326 :             TGN6T . PCI1 . PCJ1 . 'MPT' = INDX0 ;
 327 :           'SINO' ;
 328 :             TGN6T . PCI1 . PCJ1 . 'MPT' =
 329 :               TGN6T . PCI1 . PCJ1 . 'MPT' 'ET' INDX0 ;
 330 :           'FINS' ;
 331 :         'FINS' ;
 332 :       'FIN' BX0 ;
 333 :     'FINS' ;
 334 : *---------------------------------------------------------------------*
 335 : *                                                                     *
 336 :     'SI' IMESS1 ;
 337 :       'MESS' '  => Face coupe le plan' ;
 338 :     'FINS' ;
 339 :     MPTIJ1   = TGN6T . PCI1 . PCJ1 . 'MPT' ;
 340 :     NBK1     = 'NBNO' MPTIJ1 ;
 341 :     TPCNEG1 . PCI1 . PCJ1 = 'TABL' ;
 342 :     TPCPOS1 . PCI1 . PCJ1 = 'TABL' ;
 343 :     IPREMK1  = VRAI ;
 344 :     'REPE' BK1 NBK1 ;
 345 :       PCK1     = MPTIJ1 'POIN' &BK1 ;
 346 :       MAVIJK1  = TGN6T . PCI1 . PCJ1 . PCK1 . 'MAV' ;
 347 :       'SI' ((MAVIJK1 'POIN' 1) 'EGA' (MAVIJK1 'POIN' 2)) ;
 348 :         'ITER' BK1 ;
 349 :       'FINS' ;
 350 :       X1 Y1 Z1 = MAVIJK1 'COOR' ;
 351 :       CHCIJK1  = (XN1 * (X1 - XP1))
 352 :                + (YN1 * (Y1 - YP1))
 353 :                + (ZN1 * (Z1 - ZP1)) ;
 354 : *     Test Si MAVIJK1 est a gauche du Plan :                         *
 355 :       'SI' (('MAXI' CHCIJK1) '<' 0.) ;
 356 :         'SI' IMESS1 ;
 357 :           'MESS' '  => Arete a gauche ' ;
 358 :         'FINS' ;
 359 :         TPCNEG1 . PCI1 . PCJ1 . PCK1 = TGN6T . PCI1 . PCJ1 . PCK1 ;
 360 :         'SI' ('EXIS' TPCNEG1 . PCI1 . PCJ1 'MAV') ;
 361 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' =
 362 :             TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK1 ;
 363 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' =
 364 :             TPCNEG1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ;
 365 :         'SINO' ;
 366 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJK1 ;
 367 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 368 :         'FINS' ;
 369 :         'ITER' BK1 ;
 370 :       'FINS' ;
 371 : *     Test Si MAVIJK1 est a droite du Plan :                         *
 372 :       'SI' (('MINI' CHCIJK1) '>' 0.) ;
 373 :         'SI' IMESS1 ;
 374 :           'MESS' '  => Arete a droite ' ;
 375 :         'FINS' ;
 376 :         TPCPOS1 . PCI1 . PCJ1 . PCK1 = TGN6T . PCI1 . PCJ1 . PCK1 ;
 377 :         'SI' ('EXIS' TPCPOS1 . PCI1 . PCJ1 'MAV') ;
 378 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' =
 379 :             TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK1 ;
 380 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' =
 381 :             TPCPOS1 . PCI1 . PCJ1 . 'MPT' 'ET' PCK1 ;
 382 :         'SINO' ;
 383 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJK1 ;
 384 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 385 :         'FINS' ;
 386 :         'ITER' BK1 ;
 387 :       'FINS' ;
 388 : *                                                                     *
 389 : *     On est Dans le cas Ou l'Arete coupe le Plan :                   *
 390 : *                                                                     *
 391 : *     Test Si cellule PCK1 deja coupee :                              *
 392 :       'SI' ('EXIS' TPCNEG1 PCK1) ;
 393 :         'SI' ('NON' ('EXIS' TPCPOS1 PCK1)) ;
 394 :           'MESS'
 395 :           ' ****** Cell PCK Existe Dans TPCNEG1 Et pas Dans TPCPOS1 ?' ;
 396 :           'QUIT' BI1 ;
 397 :         'FINS' ;
 398 :         'SI' IMESS1 ;
 399 :           'MESS' '  => Cell PCK ' ;
 400 :         'FINS' ;
 401 : *       Arete PCI1-PCJ1-PCK1 :                                        *
 402 :         MAVKIJN1 = TPCNEG1 . PCK1 . PCI1 . PCJ1 . 'MAV' ;
 403 :         MAVKIJP1 = TPCPOS1 . PCK1 . PCI1 . PCJ1 . 'MAV' ;
 404 :         TPCNEG1 . PCI1 . PCJ1 . PCK1 = TPCNEG1 . PCK1 . PCI1 . PCJ1 ;
 405 :         TPCPOS1 . PCI1 . PCJ1 . PCK1 = TPCPOS1 . PCK1 . PCI1 . PCJ1 ;
 406 : *       Point intersection PVK0 :                                     *
 407 :         PVK0     = 'INTE' ('CHAN' 'POI1' MAVKIJN1)
 408 :                           ('CHAN' 'POI1' MAVKIJP1) ;
 409 :         PVK0     = PVK0 'POIN' 1 ;
 410 :         'SI' IPREMK1 ;
 411 :           IPREMK1  = FAUX ;
 412 :           PVKI1    = PVK0 ;
 413 :           'SI' IMESS1 ;
 414 :             'MESS' '    Et de 1' ;
 415 :           'FINS' ;
 416 :         'SINO' ;
 417 :           PVKI2    = PVK0 ;
 418 :           'SI' IMESS1 ;
 419 :             'MESS' '    Et de 2' ;
 420 :           'FINS' ;
 421 :         'FINS' ;
 422 : *       Face relative a PCJ1 :                                        *
 423 :         'SI' ('EXIS' TPCNEG1 . PCI1 . PCJ1 'MAV') ;
 424 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV'
 425 :             'ET' MAVKIJN1 ;
 426 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT'
 427 :             'ET' PCK1 ;
 428 :         'SINO' ;
 429 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVKIJN1 ;
 430 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 431 :         'FINS' ;
 432 :         'SI' ('EXIS' TPCPOS1 . PCI1 . PCJ1 'MAV') ;
 433 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV'
 434 :             'ET' MAVKIJP1 ;
 435 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT'
 436 :             'ET' PCK1 ;
 437 :         'SINO' ;
 438 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVKIJP1 ;
 439 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 440 :         'FINS' ;
 441 : *       Arete suivante :                                              *
 442 :         'ITER' BK1 ;
 443 :       'SINO' ;
 444 :         'SI' ('EXIS' TPCPOS1 PCK1) ;
 445 :           'MESS'
 446 :           ' ****** Cell PCK Existe Dans TPCPOS1 Et pas Dans TPCNEG1 ?' ;
 447 :           'QUIT' BI1 ;
 448 :         'FINS' ;
 449 :       'FINS' ;
 450 : *                                                                     *
 451 : *     Test Si Face PCI1-PCK1 deja coupee :                            *
 452 :       'SI' ('EXIS' TPCNEG1 . PCI1 PCK1) ;
 453 :         'SI' ( 'NON' ('EXIS' TPCPOS1 . PCI1 PCK1)) ;
 454 :           'MESS'
 455 :           ' ****** Face PCI-PCK Dans TPCNEG1 mais pas Dans TPCPOS1 ?' ;
 456 :           'QUIT' BI1 ;
 457 :         'FINS' ;
 458 :         'SI' IMESS1 ;
 459 :           'MESS' '  => Face PCI-PCK ' ;
 460 :         'FINS' ;
 461 : *       Arete PCI1-PCJ1-PCK1 :                                        *
 462 :         MAVIKJN1 = TPCNEG1 . PCI1 . PCK1 . PCJ1 . 'MAV' ;
 463 :         MAVIKJP1 = TPCPOS1 . PCI1 . PCK1 . PCJ1 . 'MAV' ;
 464 :         TPCNEG1 . PCI1 . PCJ1 . PCK1 = TPCNEG1 . PCI1 . PCK1 . PCJ1 ;
 465 :         TPCPOS1 . PCI1 . PCJ1 . PCK1 = TPCPOS1 . PCI1 . PCK1 . PCJ1 ;
 466 : *       Point intersection PVK0 :                                     *
 467 :         PVK0     = 'INTE' ('CHAN' 'POI1' MAVIKJN1)
 468 :                           ('CHAN' 'POI1' MAVIKJP1) ;
 469 :         PVK0     = PVK0 'POIN' 1 ;
 470 :         'SI' IPREMK1 ;
 471 :           IPREMK1  = FAUX ;
 472 :           PVKI1    = PVK0 ;
 473 :           'SI' IMESS1 ;
 474 :             'MESS' '    Et de 1' ;
 475 :           'FINS' ;
 476 :         'SINO' ;
 477 :           PVKI2    = PVK0 ;
 478 :           'SI' IMESS1 ;
 479 :             'MESS' '    Et de 2' ;
 480 :           'FINS' ;
 481 :         'FINS' ;
 482 : *       Face relative a PCJ1 :                                        *
 483 :         'SI' ('EXIS' TPCNEG1 . PCI1 . PCJ1 'MAV') ;
 484 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV'
 485 :             'ET' MAVIKJN1 ;
 486 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT'
 487 :             'ET' PCK1 ;
 488 :         'SINO' ;
 489 :           TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIKJN1 ;
 490 :           TPCNEG1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 491 :         'FINS' ;
 492 :         'SI' ('EXIS' TPCPOS1 . PCI1 . PCJ1 'MAV') ;
 493 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV'
 494 :             'ET' MAVIKJP1 ;
 495 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT'
 496 :             'ET' PCK1 ;
 497 :         'SINO' ;
 498 :           TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIKJP1 ;
 499 :           TPCPOS1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 500 :         'FINS' ;
 501 : *       Arete suivante :                                              *
 502 :         'ITER' BK1 ;
 503 :       'SINO' ;
 504 :         'SI' ('EXIS' TPCPOS1 . PCI1 PCK1) ;
 505 :           'MESS'
 506 :           ' ****** Face PCI-PCK Dans TPCPOS1 mais pas Dans TPCNEG1 ?' ;
 507 :           'QUIT' BI1 ;
 508 :         'FINS' ;
 509 :       'FINS' ;
 510 : *     Sinon : calcul intersection :                                   *
 511 :       'SI' IMESS1 ;
 512 :         'MESS' '  => Calcul intersection' ;
 513 :       'FINS' ;
 514 :       TPCNEG1 . PCI1 . PCJ1 . PCK1 = 'TABL' ;
 515 :       TPCPOS1 . PCI1 . PCJ1 . PCK1 = 'TABL' ;
 516 :       PVK1     = MAVIJK1 'POIN' 1 ;
 517 :       PVK2     = MAVIJK1 'POIN' 2 ;
 518 :       XCK1     = 'PSCA' PN1 (PVK1 'MOIN' P1) ;
 519 :       XCK2     = 'PSCA' PN1 (PVK2 'MOIN' P1) ;
 520 :       'SI' ((XCK1 * XCK2) '>EG' 0.) ;
 521 :         'MESS' ' ****** Pb. : PAS d intersection ?' ;
 522 :         'QUIT' BI1 ;
 523 :       'FINS' ;
 524 :       XBARY1   = XCK2 / (XCK2 - XCK1) ;
 525 :       PVK0     = (XBARY1 * PVK1) 'PLUS' ((1. - XBARY1) * PVK2) ;
 526 :       'SI' (XCK1 '>'0.) ;
 527 :         MAVIJKN1 = PVK0 'DROI' 1 PVK2 ;
 528 :         MAVIJKP1 = PVK1 'DROI' 1 PVK0 ;
 529 :       'SINO' ;
 530 :         MAVIJKP1 = PVK0 'DROI' 1 PVK2 ;
 531 :         MAVIJKN1 = PVK1 'DROI' 1 PVK0 ;
 532 :       'FINS' ;
 533 :       TPCNEG1 . PCI1 . PCJ1 . PCK1 . 'MAV' = MAVIJKN1 ;
 534 :       TPCPOS1 . PCI1 . PCJ1 . PCK1 . 'MAV' = MAVIJKP1 ;
 535 : *     Face relative a PCJ1 :                                        *
 536 :       'SI' ('EXIS' TPCNEG1 . PCI1 . PCJ1 'MAV') ;
 537 :         TPCNEG1 . PCI1 . PCJ1 . 'MAV' = TPCNEG1 . PCI1 . PCJ1 . 'MAV'
 538 :           'ET' MAVIJKN1 ;
 539 :         TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT'
 540 :           'ET' PCK1 ;
 541 :       'SINO' ;
 542 :         TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJKN1 ;
 543 :         TPCNEG1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 544 :       'FINS' ;
 545 :       'SI' ('EXIS' TPCPOS1 . PCI1 . PCJ1 'MAV') ;
 546 :         TPCPOS1 . PCI1 . PCJ1 . 'MAV' = TPCPOS1 . PCI1 . PCJ1 . 'MAV'
 547 :           'ET' MAVIJKP1 ;
 548 :         TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT'
 549 :           'ET' PCK1 ;
 550 :       'SINO' ;
 551 :         TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJKP1 ;
 552 :         TPCPOS1 . PCI1 . PCJ1 . 'MPT' = 'MANU' 'POI1' PCK1 ;
 553 :       'FINS' ;
 554 :       'SI' IPREMK1 ;
 555 :         IPREMK1  = FAUX ;
 556 :         PVKI1    = PVK0 ;
 557 :         'SI' IMESS1 ;
 558 :           'MESS' '    Et de 1' ;
 559 :         'FINS' ;
 560 :       'SINO' ;
 561 :         PVKI2    = PVK0 ;
 562 :         'SI' IMESS1 ;
 563 :           'MESS' '    Et de 2' ;
 564 :         'FINS' ;
 565 :       'FINS' ;
 566 :     'FIN' BK1 ;
 567 : *                                                                     *
 568 : *   Construction segment intersection Face avec le Plan :             *
 569 :     MAVIJK0  = PVKI1 'DROI' 1 PVKI2 ;
 570 : *   Face relative a PCJ0 :                                            *
 571 :     TPCNEG1 . PCI1 . PCJ0 . PCJ1    = 'TABL' ;
 572 :     TPCPOS1 . PCI1 . PCJ0 . PCJ1    = 'TABL' ;
 573 :     TPCNEG1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ;
 574 :     TPCPOS1 . PCI1 . PCJ0 . PCJ1 . 'MAV' = MAVIJK0 ;
 575 :     'SI' IPREMJ1 ;
 576 :       IPREMJ1  = FAUX ;
 577 :       MAVIJ0   = MAVIJK0 ;
 578 :       TPCNEG1 . PCI1 . PCJ0 . 'MPT'   = 'MANU' 'POI1' PCJ1 ;
 579 :       TPCPOS1 . PCI1 . PCJ0 . 'MPT'   = 'MANU' 'POI1' PCJ1 ;
 580 :     'SINO' ;
 581 :       MAVIJ0   = MAVIJ0 'ET' MAVIJK0 ;
 582 :       TPCNEG1 . PCI1 . PCJ0 . 'MPT'   = TPCNEG1 . PCI1 . PCJ0 . 'MPT'
 583 :         'ET' PCJ1 ;
 584 :       TPCPOS1 . PCI1 . PCJ0 . 'MPT'   = TPCPOS1 . PCI1 . PCJ0 . 'MPT'
 585 :         'ET' PCJ1 ;
 586 :     'FINS' ;
 587 : *   Face relative a PCJ1 :                                            *
 588 : *   Partie NEG :                                                      *
 589 :     TPCNEG1 . PCI1 . PCJ1 . PCJ0  = 'TABL' ;
 590 :     TPCNEG1 . PCI1 . PCJ1 . PCJ0 . 'MAV' = MAVIJK0 ;
 591 :     MAVIJN1  = TPCNEG1 . PCI1 . PCJ1 . 'MAV' 'ET' ('INVE' MAVIJK0) ;
 592 :     PVK1     = MAVIJN1 'POIN' 1 ;
 593 :     MAVIJN1  = MAVIJN1 'ELEM' 'COMP' PVK1 PVK1 ;
 594 :     TPCNEG1 . PCI1 . PCJ1 . 'MAV' = MAVIJN1 ;
 595 :     TPCNEG1 . PCI1 . PCJ1 . 'MPT' = TPCNEG1 . PCI1 . PCJ1 . 'MPT'
 596 :       'ET' PCJ0 ;
 597 : *   Partie POS :                                                      *
 598 :     TPCPOS1 . PCI1 . PCJ1 . PCJ0  = 'TABL' ;
 599 :     TPCPOS1 . PCI1 . PCJ1 . PCJ0 . 'MAV' = MAVIJK0 ;
 600 :     MAVIJP1  = TPCPOS1 . PCI1 . PCJ1 . 'MAV' 'ET' MAVIJK0 ;
 601 :     PVK1     = MAVIJP1 'POIN' 1 ;
 602 :     MAVIJP1  = MAVIJP1 'ELEM' 'COMP' PVK1 PVK1 ;
 603 :     TPCPOS1 . PCI1 . PCJ1 . 'MAV' = MAVIJP1 ;
 604 :     TPCPOS1 . PCI1 . PCJ1 . 'MPT' = TPCPOS1 . PCI1 . PCJ1 . 'MPT'
 605 :       'ET' PCJ0 ;
 606 : *   Cellule PCI1 :                                                    *
 607 :     'SI' ('EXIS' TPCNEG1 . PCI1 'MPT') ;
 608 :       TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 609 :       TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJN1 ;
 610 :     'SINO' ;
 611 :       TPCNEG1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 612 :       TPCNEG1 . PCI1 . 'MAV' = MAVIJN1 ;
 613 :     'FINS' ;
 614 :     'SI' ('EXIS' TPCPOS1 . PCI1 'MPT') ;
 615 :       TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ1 ;
 616 :       TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJP1 ;
 617 :     'SINO' ;
 618 :       TPCPOS1 . PCI1 . 'MPT' = 'MANU' 'POI1' PCJ1 ;
 619 :       TPCPOS1 . PCI1 . 'MAV' = MAVIJP1 ;
 620 :     'FINS' ;
 621 :   'FIN' BJ1 ;
 622 : *                                                                     *
 623 :   'SI' IMESS1 ;
 624 :     'MESS' ' *** Fin Face' ;
 625 :   'FINS' ;
 626 : *                                                                     *
 627 : * Face relative a PCJ0 :                                              *
 628 :   PVK1     = MAVIJ0 'POIN' 1 ;
 629 :   MAVIJ0   = MAVIJ0 'ELEM' 'COMP' PVK1 PVK1 ;
 630 :   TPCNEG1 . PCI1 . PCJ0 . 'MAV' = MAVIJ0 ;
 631 :   TPCPOS1 . PCI1 . PCJ0 . 'MAV' = MAVIJ0 ;
 632 : *                                                                     *
 633 : * Cellule PCI1 :                                                      *
 634 : * Partie NEG :                                                        *
 635 :   TPCNEG1 . PCI1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' 'ET' MAVIJ0 ;
 636 :   TPCNEG1 . PCI1 . 'MPT' = TPCNEG1 . PCI1 . 'MPT' 'ET' PCJ0 ;
 637 : * Partie POS :                                                        *
 638 :   TPCPOS1 . PCI1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' 'ET' MAVIJ0 ;
 639 :   TPCPOS1 . PCI1 . 'MPT' = TPCPOS1 . PCI1 . 'MPT' 'ET' PCJ0 ;
 640 : *                                                                     *
 641 : *  Pts. Ref. de toutes les cellules :                                 *
 642 :   'SI' ('EXIS' TPCNEG1 'MPT') ;
 643 :     TPCNEG1 . 'MPT' = TPCNEG1 . 'MPT' 'ET' PCI1 ;
 644 :     TPCNEG1 . 'MAV' = TPCNEG1 . 'MAV' 'ET' TPCNEG1 . PCI1 . 'MAV' ;
 645 :   'SINO' ;
 646 :     TPCNEG1 . 'MPT' = 'MANU' 'POI1' PCI1 ;
 647 :     TPCNEG1 . 'MAV' = TPCNEG1 . PCI1 . 'MAV' ;
 648 :   'FINS' ;
 649 :   'SI' ('EXIS' TPCPOS1 'MPT') ;
 650 :     TPCPOS1 . 'MPT' = TPCPOS1 . 'MPT' 'ET' PCI1 ;
 651 :     TPCPOS1 . 'MAV' = TPCPOS1 . 'MAV' 'ET' TPCPOS1 . PCI1 . 'MAV' ;
 652 :   'SINO' ;
 653 :     TPCPOS1 . 'MPT' = 'MANU' 'POI1' PCI1 ;
 654 :     TPCPOS1 . 'MAV' = TPCPOS1 . PCI1 . 'MAV' ;
 655 :   'FINS' ;
 656 : 'FIN' BI1 ;
 657 : *                                                                     *
 658 : 'SI' ITRAC1 ;
 659 :   'TITR' ' Partie Gauche' ;
 660 :   'TRAC' OEIL1 (S1 'ET' TPCNEG1 . 'MAV') ;
 661 :   'TITR' ' Partie droite' ;
 662 :   'TRAC' OEIL1 (S1 'ET' TPCPOS1 . 'MAV') ;
 663 : 'FINS' ;
 664 : *                                                                     *
 665 : 'RESP' TPCNEG1 TPCPOS1 ;
 666 : *                                                                     *
 667 : 'FINP' ;
 668 : *---------------------------------------------------------------------*
 669 : * FIN PROCEDURE @COUPLAN                                              *
 670 :  

© Cast3M 2003 - All rights reserved.
Disclaimer