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