Télécharger @couplan.procedur

Retour à la liste

Numérotation des lignes :

  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.  
  671.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales