Télécharger boa.procedur

Retour à la liste

Numérotation des lignes :

  1. * BOA PROCEDUR CHAT 93/08/24 21:15:07 918
  2. 'DEBPROC' BOA TUYO1/'TABLE' ;
  3. *
  4. ************************************************************************
  5. *
  6. * B O A
  7. * -----
  8. *
  9. * FONCTION:
  10. * ---------
  11. *
  12. * MAILLER DES LIGNES DE TUYAUTERIE.
  13. *
  14. * PHRASE D'APPEL (EN GIBIANE):
  15. * ----------------------------
  16. *
  17. * TUYO2 = BOA ( TUYO1 ) ;
  18. *
  19. * OPERANDES:
  20. * ----------
  21. *
  22. * TUYO1 = 'TABLE' CONTENANT LES LIGNES DE TUYAUTERIE A COMPLETER
  23. * OU RECTIFIER (PRODUITES PAR "BOA").
  24. *
  25. * RESULTATS:
  26. * ----------
  27. *
  28. * TUYO2 = 'TABLE' CONTENANT LES LIGNES DE TUYAUTERIE CREEES OU
  29. * COMPLETEES.
  30. *
  31. * AVEC:
  32. *
  33. * TUYO2 'MAILLAGE' = 'MAILLAGE' TOTAL.
  34. *
  35. * TUYO2 "XYZ" = 'TABLE' DECRIVANT LA LIGNE DE TUYAUTERIE DE
  36. * NOM "XYZ".
  37. *
  38. * DETAILS DES RESULTATS:
  39. * ----------------------
  40. *
  41. * TUYO2 "XYZ" 'MAILLAGE' = MAILLAGE DE LA LIGNE "XYZ".
  42. * TUYO2 "XYZ" 'TRONCON' = TABLE DES MAILLAGES DES TRONCONS D'UNE
  43. * LIGNE (INDICES PAR LEUR NOM).
  44. * TUYO2 "XYZ" 'ELEMENT' = TYPE D'ELEMENT GEOMETRIQUE POUR LA LIGNE
  45. * "XYZ".
  46. * TUYO2 "XYZ" 'DENSITE' = LARGEUR DE MAILLE PAR DEFAUT POUR LA
  47. * LIGNE "XYZ".
  48. * TUYO2 "XYZ" 'PENTE' = PENTE PAR DEFAUT POUR LA LIGNE "XYZ".
  49. * TUYO2 "XYZ" 'ENTREE' = UNITE DE LONGUEUR EN ENTREE.
  50. * TUYO2 "XYZ" 'SORTIE' = UNITE DE LONGUEUR EN SORTIE.
  51. * TUYO2 "XYZ" 'COULEUR' = COULEUR POUR LA LIGNE "XYZ".
  52. *
  53. * VARIABLES:
  54. * ----------
  55. *
  56. * COEF_SOR = RAPPORT ENTRE UNITES D'ENTREE ET UNITES DE SORTIE.
  57. * DECOUP = "VRAI" SI POSSIBILITE D'INTRODUIRE EXPLICITEMENT LE
  58. * DECOUPAGE DE CHAQUE TRONCON.
  59. * DH = DISTANCE HORIZONTALE.
  60. * LIG_TUYO = LIGNE CONTINUE DE TUYAUTERIE.
  61. * = (TUYO2 NOM_TUYO)
  62. * PENTE = "VRAI" SI POSSIBILITE D'INTRODUIRE EXPLICITEMENT LA
  63. * PENTE DE CHAQUE TRONCON.
  64. * P0 = POINT DE DEPART D'UNE LIGNE.
  65. * P1 = POINT DE DEPART D'UN TRONCON DE LIGNE.
  66. * P8 = POINT D'ARRIVEE D'UN TRONCON DE LIGNE.
  67. * TAB_TRON = TABLE DE TRONCONS D'UNE MEME LIGNE DE TUYAUTERIE.
  68. * = (LIG_TUYO 'TRONCON')
  69. *
  70. * ...._DEF = ... PAR DEFAUT.
  71. * ...._LOC = ... LOCAL AU TRONCON.
  72. * NB_..... = NOMBRE DE .....
  73. *
  74. * PARTICULARITES DU LANGAGE UTILISEES:
  75. * ------------------------------------
  76. *
  77. * DIRECTIVE "OBTENIR": LA DIRECTIVE RENVOIE LA VALEUR 'NON' SI
  78. * L'UTILISATEUR APPUIE SUR "ENTREE" AU LIEU DE DONNER LA VALEUR
  79. * DEMANDEE.
  80. *
  81. * OPERATEUR "EGA": RETOUR DE LA VALEUR "FAUX" SI LES 2 OBJETS NE
  82. * SONT PAS DE MEME TYPE.
  83. * OPERATEUR "NEG": RETOUR DE LA VALEUR "VRAI" SI LES 2 OBJETS NE
  84. * SONT PAS DE MEME TYPE.
  85. *
  86. * DIRECTIVE "MESSAGE": L'INSTRUCTION (MESSAGE ' ' '......' ;)
  87. * PRODUIT LA CHAINE ' ......' A L'IMPRESSION
  88. * (3 BLANCS + 1 BLANC AVANT LES '...', SANS COMPRESSION DES BLANCS)
  89. *
  90. * AUTEUR, DATE DE CREATION:
  91. * -------------------------
  92. *
  93. * P. M. JUIN 1988
  94. *
  95. ************************************************************************
  96. *
  97. * ______________________
  98. *
  99. * DECLARATIONS GENERALES
  100. * ______________________
  101. *
  102. SI = 'MOT' 'SI' ; SINON = 'MOT' 'SINON' ; FINSI = 'MOT' 'FINSI' ;
  103. REPETER = 'MOT' 'REPETER'; QUITTER = 'MOT' 'QUITTER'; FIN = 'MOT' 'FIN';
  104. EXISTE = 'MOT' 'EXISTE' ; EGA = 'MOT' 'EGA' ;
  105. ERREUR = 'MOT' 'ERREUR' ;
  106. OBTENIR = 'MOT' 'OBTENIR' ;
  107. *
  108. ENTIER = 'MOT' 'ENTIER ' ;
  109. FLOTTANT = 'MOT' 'FLOTTANT' ;
  110. MOT = 'MOT' 'MOT ' ;
  111. *
  112. 'OPTION' 'DIMENSION' 3 ;
  113. *
  114. REPRISE = EXISTE TUYO1 ;
  115. LIST REPRISE;
  116. PREMIERE = 'NON' REPRISE ;
  117. SI REPRISE ;
  118. TUYO2 = TUYO1 ;
  119. SINON;
  120. TUYO2 = 'TABLE' ;
  121. FINSI ;
  122. *
  123. DEB_ERR = '***** ERREUR *****' ;
  124. *
  125. * OBJET "BOUCLE" CREE POUR PERMETTRE UNE SORTIE PREMATUREE DE LA
  126. * PROCEDURE EN CAS D'ERREUR OU DE DEMANDE EXPLICITE DE L'UTILISATEUR.
  127. REPETER PROC 1 ;
  128. *
  129. * ________________________________
  130. *
  131. * DEMANDE D'INFORMATIONS GENERALES
  132. * ________________________________
  133. *
  134. *LETYPE = 'TYPE' POINTSPH ;
  135. *SI ('NEG' LETYPE 'PROCEDUR') ;
  136. * MESSAGE DEB_ERR ;
  137. * MESSAGE 'LE NOM "POINTSPH" SE TROUVE DANS VOTRE FICHIER DE DONNEES.';
  138. * MESSAGE 'POUR DES RAISONS INDEPENDANTES DE NOTRE VOLONTE, LA ';
  139. * MESSAGE
  140. * 'PROCEDURE "BOA" NE PEUT PAS FONCTIONNER DANS CES CONDITIONS.' ;
  141. * MESSAGE 'VEUILLEZ NOUS EN EXCUSER.' ;
  142. * MESSAGE ' ' ;
  143. * MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ;
  144. * OBTENIR VAS_Y ;
  145. * QUITTER PROC ;
  146. *FINSI ;
  147. *
  148. 'SAUTER' 'PAGE' ;
  149. MESSAGE
  150. 'CETTE PROCEDURE VOUS PERMET DE MAILLER SIMPLEMENT DES LIGNES';
  151. MESSAGE
  152. 'DE TUYAUTERIE DANS UN ESPACE DE DIMENSION 3, L"AXE "Z" ETANT';
  153. MESSAGE
  154. 'SUPPOSE VERTICAL ASCENDANT. ';
  155. MESSAGE ' ' ;
  156. *
  157. MESSAGE
  158. 'VOUS AVEZ TOUJOURS LA POSSIBILITE D"APPUYER SUR LA TOUCHE "ENTREE"' ;
  159. MESSAGE
  160. 'POUR REPONDRE PAR LA NEGATIVE OU SIGNIFIER QU"UNE QUESTION NE VOUS' ;
  161. MESSAGE
  162. 'INTERESSE PAS' ;
  163. SI REPRISE ;
  164. MESSAGE
  165. 'OU ENCORE SIGNIFIER QUE VOUS AVEZ DEJA REPONDU LORS D"UN' ;
  166. MESSAGE 'PRECEDENT APPEL A "BOA".' ;
  167. FINSI ;
  168. MESSAGE ' ' ;
  169. MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ;
  170. OBTENIR VAS_Y ;
  171. *
  172. *
  173. REPETER REP_LIGN ;
  174. *
  175. *
  176. * _______________________________
  177. *
  178. * DEBUT DE TRAITEMENT D'UNE LIGNE
  179. * _______________________________
  180. *
  181. 'SAUTER' 'PAGE' ;
  182. *
  183. MESSAGE 'NOM DE LA LIGNE A DECRIRE ?' ;
  184. MESSAGE '(APPUYEZ SUR "ENTREE" POUR ARRETER LA PROCEDURE)' ;
  185. OBTENIR NOM_TUYO*MOT ;
  186. SI ('EGA' NOM_TUYO 'NON') ;
  187. QUITTER REP_LIGN ;
  188. FINSI;
  189. *
  190. NEW_TUYO = 'NON' ('EXISTE' TUYO2 NOM_TUYO) ;
  191. SI ('NON' NEW_TUYO) ;
  192. MESSAGE ' ';
  193. MESSAGE
  194. 'S"AGIT-IL DE REFAIRE (=R) OU DE COMPLETER (=C) LA LIGNE'
  195. NOM_TUYO '?' ;
  196. MESSAGE '(PAR DEFAUT: COMPLETER)' ;
  197. OBTENIR REPONSE*MOT ;
  198. NEW_TUYO = 'EGA' REPONSE 'R' ;
  199. FINSI ;
  200. *
  201. SI (NEW_TUYO) ;
  202. LIG_TUYO = 'TABLE' ;
  203. TUYO2.NOM_TUYO = LIG_TUYO ;
  204. TAB_TRON = 'TABLE' ;
  205. LIG_TUYO.'TRONCON' = TAB_TRON ;
  206. SINON;
  207. LIG_TUYO = TUYO2.NOM_TUYO ;
  208. TAB_TRON = LIG_TUYO.'TRONCON' ;
  209. FINSI ;
  210. *
  211. MESSAGE ' ';
  212. MESSAGE 'COULEUR DE LA LIGNE ?';
  213. OBTENIR COUL_DEF*MOT ;
  214. SI ( 'NEG' COUL_DEF 'NON') ;
  215. 'OPTION' 'COULEUR' COUL_DEF ;
  216. LIG_TUYO . 'COULEUR' = COUL_DEF ;
  217. SINON; SI (EXISTE LIG_TUYO 'COULEUR') ;
  218. COUL_DEF = LIG_TUYO . 'COULEUR' ;
  219. 'OPTION' 'COULEUR' COUL_DEF ;
  220. FINSI ; FINSI ;
  221. *
  222. MESSAGE ' ';
  223. MESSAGE 'TYPE D"ELEMENT GEOMETRIQUE (SEG2 OU SEG3) ?';
  224. OBTENIR ELEM_DEF*MOT ;
  225. SI ( 'OU' ('EGA' ELEM_DEF 'SEG2') ('EGA' ELEM_DEF 'SEG3') );
  226. 'OPTION' 'ELEMENTS' ELEM_DEF ;
  227. LIG_TUYO . 'ELEMENT' = ELEM_DEF ;
  228. SINON; SI (EXISTE LIG_TUYO 'ELEMENT') ;
  229. ELEM_DEF = LIG_TUYO . 'ELEMENT' ;
  230. 'OPTION' 'ELEMENTS' ELEM_DEF ;
  231. FINSI ; FINSI ;
  232. *
  233. * UNITES DE LONGUEUR: ELLES SONT CHOISIES UNE FOIS POUR TOUTES POUR UNE
  234. * LIGNE DONNEE.
  235. *
  236. SI ( 'EXISTE' LIG_TUYO 'ENTREE' ) ;
  237. UNIT_ENT = LIG_TUYO . 'ENTREE' ;
  238. MESSAGE ' ' ;
  239. MESSAGE 'UNITE DE LONGUEUR EN ENTREE:' UNIT_ENT ;
  240. SINON;
  241. MESSAGE ' ';
  242. MESSAGE 'UNITE DE LONGUEUR EN ENTREE ?';
  243. MESSAGE
  244. 'MM = MILLIMETRE, CM = CENTIMETRE, M = METRE, IN = POUCE, FT = PIED';
  245. OBTENIR UNIT_ENT*MOT ;
  246. SI ( 'NEG' UNIT_ENT 'NON' ) ;
  247. LIG_TUYO . 'ENTREE' = UNIT_ENT ;
  248. FINSI ;
  249. FINSI;
  250. *
  251. SI ( 'EXISTE' LIG_TUYO 'SORTIE' ) ;
  252. UNIT_SOR = LIG_TUYO . 'SORTIE' ;
  253. MESSAGE ' ' ;
  254. MESSAGE 'UNITE DE LONGUEUR EN SORTIE:' UNIT_SOR ;
  255. SINON;
  256. MESSAGE ' ';
  257. MESSAGE 'UNITE DE LONGUEUR EN SORTIE ?';
  258. MESSAGE
  259. 'MM = MILLIMETRE, CM = CENTIMETRE, M = METRE, ID = IDEM' ;
  260. OBTENIR UNIT_SOR*MOT ;
  261. SI ( 'NEG' UNIT_SOR 'NON' ) ;
  262. LIG_TUYO . 'SORTIE' = UNIT_SOR ;
  263. FINSI ;
  264. FINSI;
  265. *
  266. UNITES = 'ET' ('EXISTE' LIG_TUYO 'ENTREE')
  267. ('EXISTE' LIG_TUYO 'SORTIE') ;
  268. SI UNITES ;
  269. UNITES = 'ET' ('NEG' UNIT_ENT UNIT_SORT)
  270. ('NEG' UNIT_SOR 'ID') ;
  271. FINSI;
  272. *
  273. SI UNITES ;
  274. * PRECAUTION EN CAS DE MAUVAISE LECTURE: ON NE CHANGE PAS D'UNITES.
  275. COEF_SOR = 1.D0 ;
  276. SI ('EGA' UNIT_ENT 'MM') ;
  277. SI ('EGA' UNIT_SOR 'CM') ;
  278. COEF_SOR = 1.D-1 ;
  279. SINON; SI ('EGA' UNIT_SOR 'M') ;
  280. COEF_SOR = 1.D-3 ;
  281. FINSI; FINSI;
  282. SINON; SI ('EGA' UNIT_ENT 'CM') ;
  283. SI ('EGA' UNIT_SOR 'MM') ;
  284. COEF_SOR = 10.D0 ;
  285. SINON; SI ('EGA' UNIT_SOR 'M') ;
  286. COEF_SOR = 1.D-2 ;
  287. FINSI; FINSI;
  288. SINON; SI ('EGA' UNIT_ENT 'M') ;
  289. SI ('EGA' UNIT_SOR 'MM') ;
  290. COEF_SOR = 1.D3 ;
  291. SINON; SI ('EGA' UNIT_SOR 'CM') ;
  292. COEF_SOR = 1.D2 ;
  293. FINSI; FINSI;
  294. SINON; SI ('EGA' UNIT_ENT 'IN') ;
  295. SI ('EGA' UNIT_SOR 'MM') ;
  296. COEF_SOR = 25.4D0 ;
  297. SINON; SI ('EGA' UNIT_SOR 'CM') ;
  298. COEF_SOR = 2.54D0 ;
  299. SINON; SI ('EGA' UNIT_SOR 'M') ;
  300. COEF_SOR = 2.54D-2 ;
  301. FINSI; FINSI; FINSI;
  302. SINON; SI ('EGA' UNIT_ENT 'FT') ;
  303. SI ('EGA' UNIT_SOR 'MM') ;
  304. COEF_SOR = 304.8D0 ;
  305. SINON; SI ('EGA' UNIT_SOR 'CM') ;
  306. COEF_SOR = 30.48D0 ;
  307. SINON; SI ('EGA' UNIT_SOR 'M') ;
  308. COEF_SOR = 0.3048D0 ;
  309. FINSI; FINSI; FINSI;
  310. FINSI; FINSI; FINSI; FINSI; FINSI;
  311. * OUF |
  312. SINON;
  313. COEF_SOR = 1.D0 ;
  314. FINSI ;
  315. *
  316. MESSAGE ' ';
  317. MESSAGE
  318. 'LARGEUR DE MAILLE PAR DEFAUT ?';
  319. OBTENIR DENS_DEF*FLOTTANT ;
  320. SI ( 'EGA' ('TYPE' DENS_DEF) 'FLOTTANT' ) ;
  321. 'DENSITE' (DENS_DEF * COEF_SOR) ;
  322. LIG_TUYO.'DENSITE' = DENS_DEF ;
  323. SINON; SI ( 'EXISTE' LIG_TUYO 'DENSITE' ) ;
  324. DENS_DEF = LIG_TUYO.'DENSITE' ;
  325. 'DENSITE' (DENS_DEF * COEF_SOR) ;
  326. FINSI ; FINSI;
  327. *
  328. MESSAGE ' ';
  329. MESSAGE
  330. 'SOUHAITEZ-VOUS POUVOIR DONNER EXPLICITEMENT LE NOMBRE D"ELEMENTS' ;
  331. MESSAGE
  332. 'DANS LES DIFFERENTS TRONCONS DE LA LIGNE ?' ;
  333. OBTENIR REPONSE*MOT ;
  334. DECOUP = 'EGA' REPONSE 'OUI' ;
  335. *
  336. MESSAGE ' ';
  337. MESSAGE
  338. 'PENTE PAR DEFAUT POUR L"ENSEMBLE DES TRONCONS ?' ;
  339. MESSAGE '(VALEUR INFERIEURE A 1. , POSITIVE SI DESCENTE)' ;
  340. OBTENIR PENT_DEF*FLOTTANT ;
  341. SI ( 'EGA' ('TYPE' PENT_DEF) 'FLOTTANT' ) ;
  342. LIG_TUYO.'PENTE' = PENT_DEF ;
  343. SINON; SI ( 'EXISTE' LIG_TUYO 'PENTE' ) ;
  344. PENT_DEF = LIG_TUYO.'PENTE' ;
  345. FINSI ; FINSI;
  346. *
  347. MESSAGE ' ';
  348. MESSAGE
  349. 'SOUHAITEZ-VOUS POUVOIR DONNER EXPLICITEMENT LA PENTE' ;
  350. MESSAGE
  351. 'DANS LES DIFFERENTS TRONCONS DE LA LIGNE ?' ;
  352. OBTENIR REPONSE*MOT ;
  353. PENTE = 'EGA' REPONSE 'OUI' ;
  354. *
  355. * POINT DE DEPART DE LA LIGNE
  356. *
  357. MESSAGE ' ';
  358. *+*SI (NEW_TUYO) ;
  359. MESSAGE 'COORDONNEES DU POINT INITIAL ?' ;
  360. OBTENIR X0*FLOTTANT Y0*FLOTTANT Z0*FLOTTANT ;
  361. SI UNITES;
  362. X0 = X0 * COEF_SOR ;
  363. Y0 = Y0 * COEF_SOR ;
  364. Z0 = Z0 * COEF_SOR ;
  365. FINSI;
  366. P0 = X0 Y0 Z0 ;
  367. *+*SINON;
  368. *+* CA NE VA PAS: ON N'A PAS SU ORDONNER LES TRONCONS.
  369. * P0 = 'POINT' (LIG_TUYO 'MAILLAGE') 'FINAL' ;
  370. * X0 Y0 Z0 = 'COORDONNEES' P0 ;
  371. * SI UNITES;
  372. * X00 = X0 / COEF_SOR ;
  373. * Y00 = Y0 / COEF_SOR ;
  374. * Z00 = Z0 / COEF_SOR ;
  375. * SINON;
  376. * X00 = X0 ;
  377. * Y00 = Y0 ;
  378. * Z00 = Z0 ;
  379. * FINSI;
  380. * MESSAGE
  381. * 'LA LIGNE VA ETRE PROLONGEE DEPUIS LE POINT DE COORDONNEES:' ;
  382. * MESSAGE X00 Y00 Z00 ;
  383. * MESSAGE '(UNITES D"ENTREE)' ;
  384. * MESSAGE ' ' ;
  385. * MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ;
  386. * OBTENIR VAS_Y ;
  387. *+*FINSI ;
  388. *
  389. P8 = P0 ;
  390. X8 = X0 ;
  391. Y8 = Y0 ;
  392. Z8 = Z0 ;
  393. *
  394. REPETER REP_TRON ;
  395. *
  396. *
  397. * _______________________
  398. *
  399. * TRAITEMENT D'UN TRONCON
  400. * _______________________
  401. *
  402. 'SAUTER' 'PAGE' ;
  403. REPETER LECTUR01 10 ;
  404. MESSAGE 'NOM DU TRONCON A DECRIRE ?' ;
  405. MESSAGE
  406. '(APPUYEZ SUR "ENTREE" POUR CHANGER DE LIGNE DE TUYAUTERIE)' ;
  407. OBTENIR NOM_TRON*MOT ;
  408. SI ('EGA' NOM_TRON 'NON') ;
  409. QUITTER REP_TRON ;
  410. FINSI;
  411. SI ('EXISTE' TAB_TRON NOM_TRON) ;
  412. MESSAGE ' ';
  413. MESSAGE
  414. 'LE TRONCON' NOM_TRON 'EXISTE DEJA POUR LA LIGNE' NOM_TUYO ;
  415. MESSAGE 'SOUHAITEZ-VOUS VRAIMENT REFAIRE CE TRONCON ' ;
  416. MESSAGE '(OU, A LA LIMITE, LE SUPPRIMER) ?' ;
  417. OBTENIR REFAIRE*MOT ;
  418. SI ('EGA' REFAIRE 'OUI') ;
  419. QUITTER LECTUR01 ;
  420. FINSI ;
  421. SINON;
  422. QUITTER LECTUR01 ;
  423. FINSI ;
  424. FIN LECTUR01 ;
  425. *
  426. OLD_TRON = 'EXISTE' TAB_TRON NOM_TRON ;
  427. *
  428. * DEBUT DU TRONCON = FIN DU TRONCON PRECEDENT, SAUF SI ON REFAIT
  429. * UN TRONCON EXISTANT, EVIDEMMENT.
  430. *
  431. SI OLD_TRON ;
  432. P1 = 'POINT' (TAB_TRON.NOM_TRON) 'INITIAL' ;
  433. X1 Y1 Z1 = 'COORDONNEES' P1 ;
  434. SINON;
  435. P1 = P8 ;
  436. X1 = X8 ;
  437. Y1 = Y8 ;
  438. Z1 = Z8 ;
  439. FINSI ;
  440. *
  441. MESS1A = 'MOT'
  442. 'SEGMENT DE DROITE DEFINI PAR LES COORDONNEES CARTESIENNES';
  443. MESS1B = 'MOT' 'DU POINT EXTREMITE.' ;
  444. *
  445. MESS2A = 'MOT'
  446. 'SEGMENT DE DROITE DEFINI PAR:' ;
  447. MESS2B = 'MOT' '- UN VECTEUR DIRECTEUR COLINEAIRE AU TRONCON,' ;
  448. MESS2C = 'MOT' '- LA LONGUEUR DU TRONCON.' ;
  449. *
  450. MESS3A = 'MOT'
  451. 'SEGMENT DE DROITE DONT LES EXTREMITES SONT COTEES PAR';
  452. MESS3B = 'MOT' '- 2 VECTEURS DIRECTEURS ORTHOGONAUX,' ;
  453. MESS3C = 'MOT' '- LEURS LONGUEURS.' ;
  454. *
  455. MESS4A = 'MOT'
  456. 'SEGMENT DE DROITE DEFINI PAR UN VECTEUR EN COORDONNEES' ;
  457. MESS4B = 'MOT' 'CARTESIENNES.' ;
  458. *
  459. MESS5A = 'MOT'
  460. 'SEGMENT DE DROITE DEFINI PAR UN VECTEUR EN COORDONNEES' ;
  461. MESS5B = 'MOT' 'SPHERIQUES, C-A-D:';
  462. MESS5C = 'MOT' '- LA LONGUEUR DU TRONCON,' ;
  463. MESS5D = 'MOT' '- UN ANGLE COMPRIS ENTRE 0 ET 360 DEGRES,' ;
  464. MESS5E = 'MOT' '- UN ANGLE COMPRIS ENTRE -90 ET +90 DEGRES.' ;
  465. *
  466. MESS6A = 'MOT' 'GRAND ARC, DEFINI PAR:' ;
  467. MESS6B = 'MOT'
  468. '- UN VECTEUR PARALLELE A LA CORDE SOUS-TENDANT LE TRONCON,';
  469. MESS6C = 'MOT' '- LA LONGUEUR DE LA CORDE,' ;
  470. MESS6D = 'MOT'
  471. '- UN VECTEUR DIRIGE DU CENTRE VERS LA 2IEME EXTREMITE DE L"ARC,';
  472. MESS6E = 'MOT' '- LE RAYON DE L"ARC.';
  473. *
  474. MESS7A = 'MOT' 'COUDE, DEFINI PAR:' ;
  475. MESS7B = 'MOT' '- LES 2 TRONCONS A RACCORDER,';
  476. MESS7C = 'MOT' '- LE RAYON DU COUDE.' ;
  477. *
  478. MESS8A = 'MOT' 'DOUBLE COUDE, DEFINI PAR:' ;
  479. MESS8B = 'MOT' '- LES 2 TRONCONS (PARALLELES) A RACCORDER,';
  480. MESS8C = 'MOT' '- LE RAYON (COMMUN) DES 2 COUDES.' ;
  481. *
  482. *
  483. 'SAUTER' 'PAGE' ;
  484. MESSAGE '===== CREATION D"UN TRONCON =====';
  485. 'SAUTER' 'LIGNE' ;
  486. MESSAGE
  487. 'DONNEZ LE NUMERO DU TYPE DE TRONCON QUE VOUS VOULEZ INTRODUIRE';
  488. MESSAGE ' ' ;
  489. MESSAGE ' 1 =' MESS1A ;
  490. MESSAGE ' ' MESS1B ;
  491. MESSAGE ' ' ;
  492. MESSAGE ' 2 =' MESS2A ;
  493. MESSAGE ' ' MESS2B ;
  494. MESSAGE ' ' MESS2C ;
  495. MESSAGE ' ' ;
  496. MESSAGE ' 3 =' MESS3A ;
  497. MESSAGE ' ' MESS3B ;
  498. MESSAGE ' ' MESS3C ;
  499. MESSAGE ' ' ;
  500. MESSAGE ' 4 =' MESS4A ;
  501. MESSAGE ' ' MESS4B ;
  502. MESSAGE ' ' ;
  503. MESSAGE ' 5 =' MESS5A ;
  504. MESSAGE ' ' MESS5B ;
  505. MESSAGE ' ' MESS5C ;
  506. MESSAGE ' ' MESS5D ;
  507. MESSAGE ' ' MESS5E ;
  508. MESSAGE ' ' ;
  509. MESSAGE ' 6 =' MESS6A ;
  510. MESSAGE ' ' MESS6B ;
  511. MESSAGE ' ' MESS6C ;
  512. MESSAGE ' ' MESS6D ;
  513. MESSAGE ' ' MESS6E ;
  514. MESSAGE ' ' ;
  515. MESSAGE ' 7 =' MESS7A ;
  516. MESSAGE ' ' MESS7B ;
  517. MESSAGE ' ' MESS7C ;
  518. MESSAGE ' ' ;
  519. MESSAGE ' 8 =' MESS8A ;
  520. MESSAGE ' ' MESS8B ;
  521. MESSAGE ' ' MESS8C ;
  522. SI OLD_TRON ;
  523. MESSAGE ' ' ;
  524. MESSAGE ' 0 = SUPPRESSION DU TRONCON.' ;
  525. FINSI;
  526. *
  527. OBTENIR TYP_TRON*ENTIER ;
  528. *
  529. SI (OLD_TRON 'ET' ('EGA' TYP_TRON 0) ) ;
  530. * ----------------
  531. * SUPPRESSION DE TRONCON:
  532. TAB_TRON = 'ENLEVER' TAB_TRON NOM_TRON ;
  533. LIG_TUYO.'TRONCON' = TAB_TRON ;
  534. 'ITERER' REP_TRON ;
  535. FINSI;
  536. *
  537. SI ('OU' ('EGA' TYP_TRON 'NON') ('<EG' TYP_TRON 0) ) ;
  538. QUITTER REP_TRON ;
  539. FINSI ;
  540. *
  541. 'SAUTER' 'PAGE' ;
  542. *
  543. NBEL_LOC = 'TEXTE' ' ' ;
  544. SI DECOUP ;
  545. MESSAGE ' ';
  546. MESSAGE 'NOMBRE D"ELEMENTS POUR REPRESENTER LE TRONCON ?' ;
  547. OBTENIR _NBEL_*ENTIER ;
  548. SI ('EGA' ('TYPE' _NBEL_) 'ENTIER ') ;
  549. NBEL_LOC = 'TEXTE' '_NBEL_' ;
  550. FINSI ;
  551. FINSI;
  552. *
  553. PENT_LOC = 'MOT' 'NON' ;
  554. SI (PENTE 'ET' (TYP_TRON <EG 6) ) ;
  555. MESSAGE ' ';
  556. MESSAGE 'PENTE DU TRONCON ?' ;
  557. MESSAGE '(VALEUR INFERIEURE A 1. , POSITIVE SI DESCENTE)';
  558. OBTENIR PENT_LOC*FLOTTANT ;
  559. FINSI;
  560. *
  561. *
  562. 'SAUTER' 'PAGE';
  563. *
  564. SI ('EGA' TYP_TRON 1) ;
  565. * ----------------
  566. *
  567. MESSAGE MESS1A ;
  568. MESSAGE MESS1B ;
  569. MESSAGE ' ';
  570. MESSAGE 'DONNEZ LES 3 COORDONNEES DU POINT:' ;
  571. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT ;
  572. SI UNITES;
  573. X8 = X8 * COEF_SOR ;
  574. Y8 = Y8 * COEF_SOR ;
  575. Z8 = Z8 * COEF_SOR ;
  576. FINSI ;
  577. SI ( ('ABS' (Z8 - Z1) ) < 1.D-5) ;
  578. SI ('EGA' ('TYPE' PENT_LOC) 'FLOTTANT') ;
  579. DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ;
  580. Z8 = Z8 - (DH * PENT_LOC) ;
  581. SINON; SI ('EGA' ('TYPE' PENT_DEF) 'FLOTTANT') ;
  582. DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ;
  583. Z8 = Z8 - (DH * PENT_DEF) ;
  584. FINSI; FINSI;
  585. FINSI;
  586. P8 = X8 Y8 Z8 ;
  587. TAB_TRON.NOM_TRON = 'DROITE' NBEL_LOC P1 P8 ;
  588. *
  589. SINON; SI ((TYP_TRON >EG 2) 'ET' (TYP_TRON &lt;EG 5 )) ;
  590. * -------------------------------------
  591. *
  592. SI ('EGA' TYP_TRON 2) ;
  593. * ----------------
  594. MESSAGE MESS2A ;
  595. MESSAGE MESS2B ;
  596. MESSAGE MESS2C ;
  597. MESSAGE ' ';
  598. MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR DIRECTEUR ';
  599. MESSAGE 'ET LA LONGUEUR DU TRONCON ENTRE POINTS D"EPURE:';
  600. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ;
  601. SI UNITES;
  602. LONG = LONG * COEF_SOR ;
  603. FINSI ;
  604. LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ;
  605. RAP = LONG / LVECT ;
  606. X8 = X8 * RAP ;
  607. Y8 = Y8 * RAP ;
  608. Z8 = Z8 * RAP ;
  609. *
  610. SINON ; SI ('EGA' TYP_TRON 3) ;
  611. * ----------------
  612. MESSAGE MESS3A ;
  613. MESSAGE MESS3B ;
  614. MESSAGE MESS3C ;
  615. MESSAGE ' ';
  616. MESSAGE
  617. 'DONNEZ LES 3 COORDONNEES DU 1ER VECTEUR ET SA LONGUEUR:' ;
  618. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ;
  619. SI UNITES;
  620. LONG = LONG * COEF_SOR ;
  621. FINSI ;
  622. LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ;
  623. RAP = LONG / LVECT ;
  624. XX8 = X8 * RAP ;
  625. YY8 = Y8 * RAP ;
  626. ZZ8 = Z8 * RAP ;
  627. MESSAGE ' ';
  628. MESSAGE
  629. 'DONNEZ LES 3 COORDONNEES DU 2EME VECTEUR ET SA LONGUEUR:';
  630. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ;
  631. SI UNITES;
  632. LONG = LONG * COEF_SOR ;
  633. FINSI ;
  634. LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ;
  635. RAP = LONG / LVECT ;
  636. X8 = (X8 * RAP) + XX8 ;
  637. Y8 = (Y8 * RAP) + YY8 ;
  638. Z8 = (Z8 * RAP) + ZZ8 ;
  639. *
  640. SINON ; SI ('EGA' TYP_TRON 4) ;
  641. * ----------------
  642. MESSAGE MESS4A ;
  643. MESSAGE MESS4B ;
  644. MESSAGE ' ';
  645. MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR: ';
  646. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT ;
  647. SI UNITES;
  648. X8 = X8 * COEF_SOR ;
  649. Y8 = Y8 * COEF_SOR ;
  650. Z8 = Z8 * COEF_SOR ;
  651. FINSI ;
  652. *
  653. SINON;
  654. * TYP_TRON VAUT 5 :
  655. * -----------------
  656. MESSAGE MESS5A ;
  657. MESSAGE MESS5B ;
  658. MESSAGE MESS5C ;
  659. MESSAGE MESS5D ;
  660. MESSAGE MESS5E ;
  661. MESSAGE ' ';
  662. MESSAGE
  663. 'DONNEZ LA LONGUEUR DU TRONCON ENTRE POINTS D"EPURE' ;
  664. MESSAGE 'ET LES 2 ANGLES EN DEGRES DECIMAUX:';
  665. OBTENIR LONG*FLOTTANT TETA*FLOTTANT PHI*FLOTTANT ;
  666. SI UNITES;
  667. LONG = LONG * COEF_SOR ;
  668. FINSI ;
  669. P8 = POINTSPH LONG TETA PHI ;
  670. X8 Y8 Z8 = 'COORDONNEES' P8 ;
  671. *
  672. FINSI; FINSI; FINSI;
  673. *
  674. SI ( ('ABS' Z8) < 1.D-5) ;
  675. SI ('EGA' ('TYPE' PENT_LOC) 'FLOTTANT') ;
  676. DH = ( (X8 ** 2) + (Y8 ** 2) ) ** 0.5 ;
  677. Z8 = Z8 - (DH * PENT_LOC) ;
  678. SINON; SI ('EGA' ('TYPE' PENT_DEF) 'FLOTTANT') ;
  679. DH = ( (X8 ** 2) + (Y8 ** 2) ) ** 0.5 ;
  680. Z8 = Z8 - (DH * PENT_DEF) ;
  681. FINSI; FINSI;
  682. FINSI;
  683. X8 = X1 + X8 ;
  684. Y8 = Y1 + Y8 ;
  685. Z8 = Z1 + Z8 ;
  686. P8 = X8 Y8 Z8 ;
  687. TAB_TRON.NOM_TRON = 'DROITE' NBEL_LOC P1 P8 ;
  688. *
  689. SINON; SI ('EGA' TYP_TRON 6) ;
  690. * ----------------
  691. *
  692. MESSAGE MESS6A ;
  693. MESSAGE MESS6B ;
  694. MESSAGE MESS6C ;
  695. MESSAGE MESS6D ;
  696. MESSAGE MESS6E ;
  697. MESSAGE ' ';
  698. MESSAGE
  699. 'DONNEZ LES 3 COORDONNEES DU VECTEUR PARALLELE A LA CORDE' ;
  700. MESSAGE 'ET LA LONGUEUR DE LA CORDE:' ;
  701. OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ;
  702. SI UNITES;
  703. LONG = LONG * COEF_SOR ;
  704. FINSI ;
  705. LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ;
  706. RAP = LONG / LVECT ;
  707. X8 = X1 + (X8 * RAP) ;
  708. Y8 = Y1 + (Y8 * RAP) ;
  709. Z8 = Z1 + (Z8 * RAP) ;
  710. MESSAGE ' ';
  711. MESSAGE
  712. 'DONNEZ LES 3 COORDONNEES DU VECTEUR PARALLELE AU RAYON' ;
  713. MESSAGE 'ET LA VALEUR DU RAYON:' ;
  714. OBTENIR X4*FLOTTANT Y4*FLOTTANT Z4*FLOTTANT LONG*FLOTTANT ;
  715. SI UNITES;
  716. LONG = LONG * COEF_SOR ;
  717. FINSI ;
  718. LVECT = ( (X4 ** 2) + (Y4 ** 2) + (Z4 ** 2) ) ** 0.5 ;
  719. RAP = LONG / LVECT ;
  720. X4 = X8 - (X4 * RAP) ;
  721. Y4 = Y8 - (Y4 * RAP) ;
  722. Z4 = Z8 - (Z4 * RAP) ;
  723. *
  724. SI ( ('ABS' (Z8 - Z1) ) < 1.D-5) ;
  725. SI ('EGA' ('TYPE' PENT_LOC) 'FLOTTANT') ;
  726. DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ;
  727. DH = DH * PENT_LOC ;
  728. Z8 = Z8 - DH ;
  729. Z4 = Z4 - (DH / 2.D0) ;
  730. SINON; SI ('EGA' ('TYPE' PENT_DEF) 'FLOTTANT') ;
  731. DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ;
  732. DH = DH * PENT_DEF ;
  733. Z8 = Z8 - DH ;
  734. Z4 = Z4 - (DH / 2.D0) ;
  735. FINSI; FINSI;
  736. FINSI;
  737. C4 = X4 Y4 Z4 ;
  738. P8 = X8 Y8 Z8 ;
  739. TAB_TRON.NOM_TRON = 'CERCLE' NBEL_LOC P1 C4 P8 ;
  740. *
  741. SINON; SI ('EGA' TYP_TRON 7) ;
  742. * ----------------
  743. *
  744. MESSAGE MESS7A ;
  745. MESSAGE MESS7B ;
  746. MESSAGE MESS7C ;
  747. MESSAGE ' ';
  748. MESSAGE
  749. 'DONNEZ LES NOMS DES 2 TRONCONS ET LE RAYON DE RACCORDEMENT:' ;
  750. OBTENIR NOM1TRON*MOT NOM2TRON*MOT RAYON*FLOTTANT ;
  751. SI UNITES;
  752. RAYON = RAYON * COEF_SOR ;
  753. FINSI ;
  754. L1 RAC L2 = 'CONGE' NBEL_LOC RAYON
  755. (TAB_TRON.NOM1TRON) (TAB_TRON.NOM2TRON) ;
  756. TAB_TRON.NOM1TRON = L1 ;
  757. TAB_TRON.NOM_TRON = RAC ;
  758. TAB_TRON.NOM2TRON = L2 ;
  759. * ON GARDE LES VALEURS PRECEDENTES DE P8, X8, Y8 ET Z8.
  760. * ON N'EN A PAS BESOIN ICI.
  761. *
  762. SINON; SI ('EGA' TYP_TRON 8) ;
  763. * ----------------
  764. *
  765. MESSAGE MESS8A ;
  766. MESSAGE MESS8B ;
  767. MESSAGE MESS8C ;
  768. MESSAGE 'LES 2 TRONCONS A RACCORDER DOIVENT ETRE PARALLELES.';
  769. MESSAGE
  770. 'LE DOUBLE COUDE EST CENTRE SUR L"EXTREMITE DU 1ER TRONCON.';
  771. MESSAGE ' ';
  772. MESSAGE
  773. 'DONNEZ LES NOMS DES 2 TRONCONS ET LE RAYON DE RACCORDEMENT:';
  774. OBTENIR NOM1TRON*MOT NOM2TRON*MOT RAYON*FLOTTANT ;
  775. SI UNITES;
  776. RAYON = RAYON * COEF_SOR ;
  777. FINSI ;
  778. L1 RAC L2 = 'CONGE' NBEL_LOC RAYON 'DOUBLE'
  779. (TAB_TRON.NOM1TRON) (TAB_TRON.NOM2TRON) ;
  780. TAB_TRON.NOM1TRON = L1 ;
  781. TAB_TRON.NOM_TRON = RAC ;
  782. TAB_TRON.NOM2TRON = L2 ;
  783. * ON GARDE LES VALEURS PRECEDENTES DE P8, X8, Y8 ET Z8.
  784. * ON N'EN A PAS BESOIN ICI.
  785. *
  786. *
  787. FINSI; FINSI; FINSI; FINSI; FINSI;
  788. *
  789. FIN REP_TRON ;
  790. *
  791. *
  792. * ________________________________
  793. *
  794. * REUNION DES TRONCONS D'UNE LIGNE
  795. * ________________________________
  796. *
  797. NB_TRON = 'DIMENSION' TAB_TRON ;
  798. *
  799. SI (NB_TRON > 0) ;
  800. *
  801. LIS_TRON = 'INDEX' TAB_TRON ;
  802. I_TRON = 1 ;
  803. NB_TRON = NB_TRON - 1 ;
  804. MAIL_LIG = TAB_TRON . ( LIS_TRON . 1 ) ;
  805. SI (NB_TRON > 0) ;
  806. NB_ET = 0 ;
  807. REPETER REP_SOM4 NB_TRON ;
  808. I_TRON = I_TRON + 1 ;
  809. INDICE = LIS_TRON . I_TRON ;
  810. MAIL_LI1 = MAIL_LIG 'ET' (TAB_TRON.INDICE) ;
  811. NB_ET = NB_ET + 1 ;
  812. SI (NB_ET > 1) ;
  813. 'DETRUIRE' MAIL_LIG ;
  814. FINSI;
  815. MAIL_LIG = MAIL_LI1 ;
  816. FIN REP_SOM4 ;
  817. FINSI ;
  818. *
  819. LIG_TUYO.'MAILLAGE' = MAIL_LIG ;
  820. *
  821. SINON;
  822. *
  823. * CETTE LIGNE DE TUYAUTERIE EST DESESPEREMENT VIDE.
  824. SI ('EXISTE' TUYO2 NOM_TUYO) ;
  825. TUYO2 = 'ENLEVER' TUYO2 NOM_TUYO ;
  826. FINSI;
  827. *
  828. FINSI ;
  829. *
  830. FIN REP_LIGN ;
  831. *
  832. *
  833. * ________________________________
  834. *
  835. * REUNION DES LIGNES DE TUYAUTERIE
  836. * ________________________________
  837. *
  838. NB_LIG = 'DIMENSION' TUYO2 ;
  839. *
  840. SI (NB_LIG > 0) ;
  841. LIST_LIG = 'INDEX' TUYO2 ;
  842. SI ('EXISTE' TUYO2 'MAILLAGE') ;
  843. TUYO2 = 'ENLEVER' TUYO2 'MAILLAGE' ;
  844. LIST_LIG = 'INDEX' TUYO2 ;
  845. NB_LIG = NB_LIG - 1 ;
  846. FINSI;
  847. FINSI;
  848. *
  849. SI (NB_LIG > 0) ;
  850. * TUYO2ENS = TUYO2.('MOT' LIST_LIG.1).'MAILLAGE' ;
  851. TUYO2ENS = TUYO2 . ( LIST_LIG . 1 ) . 'MAILLAGE' ;
  852. I_LIG = 1 ;
  853. NB_LIG = NB_LIG - 1 ;
  854. SI (NB_LIG > 0) ;
  855. REPETER REP_SOM2 NB_LIG ;
  856. I_LIG = I_LIG + 1 ;
  857. INDICE = LIST_LIG . I_LIG ;
  858. TUYO2EN1 = TUYO2ENS 'ET' (TUYO2.INDICE.'MAILLAGE') ;
  859. SI (I_LIG > 2) ;
  860. 'DETRUIRE' TUYO2ENS ;
  861. FINSI;
  862. TUYO2ENS = TUYO2EN1 ;
  863. FIN REP_SOM2 ;
  864. FINSI ;
  865. TUYO2.'MAILLAGE' = TUYO2ENS ;
  866. *
  867. SINON;
  868. *
  869. SI ('EXISTE' TUYO2 'MAILLAGE') ;
  870. TUYO2 = ENLEVER TUYO2 'MAILLAGE' ;
  871. FINSI;
  872. *
  873. FINSI ;
  874. *
  875. *
  876. FIN PROC ;
  877. *
  878. 'SAUTER' 'PAGE' ;
  879. MESSAGE '===== FIN DE LA PROCEDURE "BOA" ===== ;' ;
  880. *
  881. 'FINPROC' TUYO2 ;
  882.  

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