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 <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 ;
© Cast3M 2003 - All rights reserved.
Disclaimer