* BOA PROCEDUR CHAT 93/08/24 21:15:07 918 * ************************************************************************ * * B O A * ----- * * FONCTION: * --------- * * MAILLER DES LIGNES DE TUYAUTERIE. * * PHRASE D'APPEL (EN GIBIANE): * ---------------------------- * * TUYO2 = BOA ( TUYO1 ) ; * * OPERANDES: * ---------- * * TUYO1 = 'TABLE' CONTENANT LES LIGNES DE TUYAUTERIE A COMPLETER * OU RECTIFIER (PRODUITES PAR "BOA"). * * RESULTATS: * ---------- * * TUYO2 = 'TABLE' CONTENANT LES LIGNES DE TUYAUTERIE CREEES OU * COMPLETEES. * * AVEC: * * TUYO2 'MAILLAGE' = 'MAILLAGE' TOTAL. * * TUYO2 "XYZ" = 'TABLE' DECRIVANT LA LIGNE DE TUYAUTERIE DE * NOM "XYZ". * * DETAILS DES RESULTATS: * ---------------------- * * TUYO2 "XYZ" 'MAILLAGE' = MAILLAGE DE LA LIGNE "XYZ". * TUYO2 "XYZ" 'TRONCON' = TABLE DES MAILLAGES DES TRONCONS D'UNE * LIGNE (INDICES PAR LEUR NOM). * TUYO2 "XYZ" 'ELEMENT' = TYPE D'ELEMENT GEOMETRIQUE POUR LA LIGNE * "XYZ". * TUYO2 "XYZ" 'DENSITE' = LARGEUR DE MAILLE PAR DEFAUT POUR LA * LIGNE "XYZ". * TUYO2 "XYZ" 'PENTE' = PENTE PAR DEFAUT POUR LA LIGNE "XYZ". * TUYO2 "XYZ" 'ENTREE' = UNITE DE LONGUEUR EN ENTREE. * TUYO2 "XYZ" 'SORTIE' = UNITE DE LONGUEUR EN SORTIE. * TUYO2 "XYZ" 'COULEUR' = COULEUR POUR LA LIGNE "XYZ". * * VARIABLES: * ---------- * * COEF_SOR = RAPPORT ENTRE UNITES D'ENTREE ET UNITES DE SORTIE. * DECOUP = "VRAI" SI POSSIBILITE D'INTRODUIRE EXPLICITEMENT LE * DECOUPAGE DE CHAQUE TRONCON. * DH = DISTANCE HORIZONTALE. * LIG_TUYO = LIGNE CONTINUE DE TUYAUTERIE. * = (TUYO2 NOM_TUYO) * PENTE = "VRAI" SI POSSIBILITE D'INTRODUIRE EXPLICITEMENT LA * PENTE DE CHAQUE TRONCON. * P0 = POINT DE DEPART D'UNE LIGNE. * P1 = POINT DE DEPART D'UN TRONCON DE LIGNE. * P8 = POINT D'ARRIVEE D'UN TRONCON DE LIGNE. * TAB_TRON = TABLE DE TRONCONS D'UNE MEME LIGNE DE TUYAUTERIE. * = (LIG_TUYO 'TRONCON') * * ...._DEF = ... PAR DEFAUT. * ...._LOC = ... LOCAL AU TRONCON. * NB_..... = NOMBRE DE ..... * * PARTICULARITES DU LANGAGE UTILISEES: * ------------------------------------ * * DIRECTIVE "OBTENIR": LA DIRECTIVE RENVOIE LA VALEUR 'NON' SI * L'UTILISATEUR APPUIE SUR "ENTREE" AU LIEU DE DONNER LA VALEUR * DEMANDEE. * * OPERATEUR "EGA": RETOUR DE LA VALEUR "FAUX" SI LES 2 OBJETS NE * SONT PAS DE MEME TYPE. * OPERATEUR "NEG": RETOUR DE LA VALEUR "VRAI" SI LES 2 OBJETS NE * SONT PAS DE MEME TYPE. * * DIRECTIVE "MESSAGE": L'INSTRUCTION (MESSAGE ' ' '......' ;) * PRODUIT LA CHAINE ' ......' A L'IMPRESSION * (3 BLANCS + 1 BLANC AVANT LES '...', SANS COMPRESSION DES BLANCS) * * AUTEUR, DATE DE CREATION: * ------------------------- * * P. M. JUIN 1988 * ************************************************************************ * * ______________________ * * DECLARATIONS GENERALES * ______________________ * * * 'OPTION' 'DIMENSION' 3 ; * REPRISE = EXISTE TUYO1 ; LIST REPRISE; PREMIERE = 'NON' REPRISE ; SI REPRISE ; TUYO2 = TUYO1 ; SINON; TUYO2 = 'TABLE' ; FINSI ; * DEB_ERR = '***** ERREUR *****' ; * * OBJET "BOUCLE" CREE POUR PERMETTRE UNE SORTIE PREMATUREE DE LA * PROCEDURE EN CAS D'ERREUR OU DE DEMANDE EXPLICITE DE L'UTILISATEUR. REPETER PROC 1 ; * * ________________________________ * * DEMANDE D'INFORMATIONS GENERALES * ________________________________ * *LETYPE = 'TYPE' POINTSPH ; *SI ('NEG' LETYPE 'PROCEDUR') ; * MESSAGE DEB_ERR ; * MESSAGE 'LE NOM "POINTSPH" SE TROUVE DANS VOTRE FICHIER DE DONNEES.'; * MESSAGE 'POUR DES RAISONS INDEPENDANTES DE NOTRE VOLONTE, LA '; * MESSAGE * 'PROCEDURE "BOA" NE PEUT PAS FONCTIONNER DANS CES CONDITIONS.' ; * MESSAGE 'VEUILLEZ NOUS EN EXCUSER.' ; * MESSAGE ' ' ; * MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ; * OBTENIR VAS_Y ; * QUITTER PROC ; *FINSI ; * 'SAUTER' 'PAGE' ; MESSAGE 'CETTE PROCEDURE VOUS PERMET DE MAILLER SIMPLEMENT DES LIGNES'; MESSAGE MESSAGE 'SUPPOSE VERTICAL ASCENDANT. '; MESSAGE ' ' ; * MESSAGE 'VOUS AVEZ TOUJOURS LA POSSIBILITE D"APPUYER SUR LA TOUCHE "ENTREE"' ; MESSAGE 'POUR REPONDRE PAR LA NEGATIVE OU SIGNIFIER QU"UNE QUESTION NE VOUS' ; MESSAGE 'INTERESSE PAS' ; SI REPRISE ; MESSAGE 'OU ENCORE SIGNIFIER QUE VOUS AVEZ DEJA REPONDU LORS D"UN' ; MESSAGE 'PRECEDENT APPEL A "BOA".' ; FINSI ; MESSAGE ' ' ; MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ; OBTENIR VAS_Y ; * * REPETER REP_LIGN ; * * * _______________________________ * * DEBUT DE TRAITEMENT D'UNE LIGNE * _______________________________ * 'SAUTER' 'PAGE' ; * MESSAGE 'NOM DE LA LIGNE A DECRIRE ?' ; MESSAGE '(APPUYEZ SUR "ENTREE" POUR ARRETER LA PROCEDURE)' ; SI ('EGA' NOM_TUYO 'NON') ; QUITTER REP_LIGN ; FINSI; * NEW_TUYO = 'NON' ('EXISTE' TUYO2 NOM_TUYO) ; SI ('NON' NEW_TUYO) ; MESSAGE ' '; MESSAGE 'S"AGIT-IL DE REFAIRE (=R) OU DE COMPLETER (=C) LA LIGNE' NOM_TUYO '?' ; MESSAGE '(PAR DEFAUT: COMPLETER)' ; NEW_TUYO = 'EGA' REPONSE 'R' ; FINSI ; * SI (NEW_TUYO) ; LIG_TUYO = 'TABLE' ; TUYO2.NOM_TUYO = LIG_TUYO ; TAB_TRON = 'TABLE' ; LIG_TUYO.'TRONCON' = TAB_TRON ; SINON; LIG_TUYO = TUYO2.NOM_TUYO ; TAB_TRON = LIG_TUYO.'TRONCON' ; FINSI ; * MESSAGE ' '; MESSAGE 'COULEUR DE LA LIGNE ?'; SI ( 'NEG' COUL_DEF 'NON') ; 'OPTION' 'COULEUR' COUL_DEF ; LIG_TUYO . 'COULEUR' = COUL_DEF ; SINON; SI (EXISTE LIG_TUYO 'COULEUR') ; COUL_DEF = LIG_TUYO . 'COULEUR' ; 'OPTION' 'COULEUR' COUL_DEF ; FINSI ; FINSI ; * MESSAGE ' '; SI ( 'OU' ('EGA' ELEM_DEF 'SEG2') ('EGA' ELEM_DEF 'SEG3') ); 'OPTION' 'ELEMENTS' ELEM_DEF ; LIG_TUYO . 'ELEMENT' = ELEM_DEF ; SINON; SI (EXISTE LIG_TUYO 'ELEMENT') ; ELEM_DEF = LIG_TUYO . 'ELEMENT' ; 'OPTION' 'ELEMENTS' ELEM_DEF ; FINSI ; FINSI ; * * UNITES DE LONGUEUR: ELLES SONT CHOISIES UNE FOIS POUR TOUTES POUR UNE * LIGNE DONNEE. * SI ( 'EXISTE' LIG_TUYO 'ENTREE' ) ; UNIT_ENT = LIG_TUYO . 'ENTREE' ; MESSAGE ' ' ; MESSAGE 'UNITE DE LONGUEUR EN ENTREE:' UNIT_ENT ; SINON; MESSAGE ' '; MESSAGE 'UNITE DE LONGUEUR EN ENTREE ?'; MESSAGE 'MM = MILLIMETRE, CM = CENTIMETRE, M = METRE, IN = POUCE, FT = PIED'; SI ( 'NEG' UNIT_ENT 'NON' ) ; LIG_TUYO . 'ENTREE' = UNIT_ENT ; FINSI ; FINSI; * SI ( 'EXISTE' LIG_TUYO 'SORTIE' ) ; UNIT_SOR = LIG_TUYO . 'SORTIE' ; MESSAGE ' ' ; MESSAGE 'UNITE DE LONGUEUR EN SORTIE:' UNIT_SOR ; SINON; MESSAGE ' '; MESSAGE 'UNITE DE LONGUEUR EN SORTIE ?'; MESSAGE 'MM = MILLIMETRE, CM = CENTIMETRE, M = METRE, ID = IDEM' ; SI ( 'NEG' UNIT_SOR 'NON' ) ; LIG_TUYO . 'SORTIE' = UNIT_SOR ; FINSI ; FINSI; * UNITES = 'ET' ('EXISTE' LIG_TUYO 'ENTREE') ('EXISTE' LIG_TUYO 'SORTIE') ; SI UNITES ; UNITES = 'ET' ('NEG' UNIT_ENT UNIT_SORT) ('NEG' UNIT_SOR 'ID') ; FINSI; * SI UNITES ; * PRECAUTION EN CAS DE MAUVAISE LECTURE: ON NE CHANGE PAS D'UNITES. COEF_SOR = 1.D0 ; SI ('EGA' UNIT_ENT 'MM') ; SI ('EGA' UNIT_SOR 'CM') ; COEF_SOR = 1.D-1 ; SINON; SI ('EGA' UNIT_SOR 'M') ; COEF_SOR = 1.D-3 ; FINSI; FINSI; SINON; SI ('EGA' UNIT_ENT 'CM') ; SI ('EGA' UNIT_SOR 'MM') ; COEF_SOR = 10.D0 ; SINON; SI ('EGA' UNIT_SOR 'M') ; COEF_SOR = 1.D-2 ; FINSI; FINSI; SINON; SI ('EGA' UNIT_ENT 'M') ; SI ('EGA' UNIT_SOR 'MM') ; COEF_SOR = 1.D3 ; SINON; SI ('EGA' UNIT_SOR 'CM') ; COEF_SOR = 1.D2 ; FINSI; FINSI; SINON; SI ('EGA' UNIT_ENT 'IN') ; SI ('EGA' UNIT_SOR 'MM') ; COEF_SOR = 25.4D0 ; SINON; SI ('EGA' UNIT_SOR 'CM') ; COEF_SOR = 2.54D0 ; SINON; SI ('EGA' UNIT_SOR 'M') ; COEF_SOR = 2.54D-2 ; FINSI; FINSI; FINSI; SINON; SI ('EGA' UNIT_ENT 'FT') ; SI ('EGA' UNIT_SOR 'MM') ; COEF_SOR = 304.8D0 ; SINON; SI ('EGA' UNIT_SOR 'CM') ; COEF_SOR = 30.48D0 ; SINON; SI ('EGA' UNIT_SOR 'M') ; COEF_SOR = 0.3048D0 ; FINSI; FINSI; FINSI; FINSI; FINSI; FINSI; FINSI; FINSI; * OUF | SINON; COEF_SOR = 1.D0 ; FINSI ; * MESSAGE ' '; MESSAGE 'LARGEUR DE MAILLE PAR DEFAUT ?'; OBTENIR DENS_DEF*FLOTTANT ; 'DENSITE' (DENS_DEF * COEF_SOR) ; LIG_TUYO.'DENSITE' = DENS_DEF ; SINON; SI ( 'EXISTE' LIG_TUYO 'DENSITE' ) ; DENS_DEF = LIG_TUYO.'DENSITE' ; 'DENSITE' (DENS_DEF * COEF_SOR) ; FINSI ; FINSI; * MESSAGE ' '; MESSAGE 'SOUHAITEZ-VOUS POUVOIR DONNER EXPLICITEMENT LE NOMBRE D"ELEMENTS' ; MESSAGE 'DANS LES DIFFERENTS TRONCONS DE LA LIGNE ?' ; DECOUP = 'EGA' REPONSE 'OUI' ; * MESSAGE ' '; MESSAGE 'PENTE PAR DEFAUT POUR L"ENSEMBLE DES TRONCONS ?' ; MESSAGE '(VALEUR INFERIEURE A 1. , POSITIVE SI DESCENTE)' ; OBTENIR PENT_DEF*FLOTTANT ; LIG_TUYO.'PENTE' = PENT_DEF ; SINON; SI ( 'EXISTE' LIG_TUYO 'PENTE' ) ; PENT_DEF = LIG_TUYO.'PENTE' ; FINSI ; FINSI; * MESSAGE ' '; MESSAGE 'SOUHAITEZ-VOUS POUVOIR DONNER EXPLICITEMENT LA PENTE' ; MESSAGE 'DANS LES DIFFERENTS TRONCONS DE LA LIGNE ?' ; PENTE = 'EGA' REPONSE 'OUI' ; * * POINT DE DEPART DE LA LIGNE * MESSAGE ' '; *+*SI (NEW_TUYO) ; MESSAGE 'COORDONNEES DU POINT INITIAL ?' ; OBTENIR X0*FLOTTANT Y0*FLOTTANT Z0*FLOTTANT ; SI UNITES; X0 = X0 * COEF_SOR ; Y0 = Y0 * COEF_SOR ; Z0 = Z0 * COEF_SOR ; FINSI; P0 = X0 Y0 Z0 ; *+*SINON; *+* CA NE VA PAS: ON N'A PAS SU ORDONNER LES TRONCONS. * P0 = 'POINT' (LIG_TUYO 'MAILLAGE') 'FINAL' ; * X0 Y0 Z0 = 'COORDONNEES' P0 ; * SI UNITES; * X00 = X0 / COEF_SOR ; * Y00 = Y0 / COEF_SOR ; * Z00 = Z0 / COEF_SOR ; * SINON; * X00 = X0 ; * Y00 = Y0 ; * Z00 = Z0 ; * FINSI; * MESSAGE * 'LA LIGNE VA ETRE PROLONGEE DEPUIS LE POINT DE COORDONNEES:' ; * MESSAGE X00 Y00 Z00 ; * MESSAGE '(UNITES D"ENTREE)' ; * MESSAGE ' ' ; * MESSAGE 'APPUYEZ SUR LA TOUCHE "ENTREE" POUR CONTINUER' ; * OBTENIR VAS_Y ; *+*FINSI ; * P8 = P0 ; X8 = X0 ; Y8 = Y0 ; Z8 = Z0 ; * REPETER REP_TRON ; * * * _______________________ * * TRAITEMENT D'UN TRONCON * _______________________ * 'SAUTER' 'PAGE' ; REPETER LECTUR01 10 ; MESSAGE 'NOM DU TRONCON A DECRIRE ?' ; MESSAGE '(APPUYEZ SUR "ENTREE" POUR CHANGER DE LIGNE DE TUYAUTERIE)' ; SI ('EGA' NOM_TRON 'NON') ; QUITTER REP_TRON ; FINSI; SI ('EXISTE' TAB_TRON NOM_TRON) ; MESSAGE ' '; MESSAGE 'LE TRONCON' NOM_TRON 'EXISTE DEJA POUR LA LIGNE' NOM_TUYO ; MESSAGE 'SOUHAITEZ-VOUS VRAIMENT REFAIRE CE TRONCON ' ; MESSAGE '(OU, A LA LIMITE, LE SUPPRIMER) ?' ; SI ('EGA' REFAIRE 'OUI') ; QUITTER LECTUR01 ; FINSI ; SINON; QUITTER LECTUR01 ; FINSI ; FIN LECTUR01 ; * OLD_TRON = 'EXISTE' TAB_TRON NOM_TRON ; * * DEBUT DU TRONCON = FIN DU TRONCON PRECEDENT, SAUF SI ON REFAIT * UN TRONCON EXISTANT, EVIDEMMENT. * SI OLD_TRON ; P1 = 'POINT' (TAB_TRON.NOM_TRON) 'INITIAL' ; X1 Y1 Z1 = 'COORDONNEES' P1 ; SINON; P1 = P8 ; X1 = X8 ; Y1 = Y8 ; Z1 = Z8 ; FINSI ; * MESS1A = 'MOT' 'SEGMENT DE DROITE DEFINI PAR LES COORDONNEES CARTESIENNES'; * MESS2A = 'MOT' 'SEGMENT DE DROITE DEFINI PAR:' ; * MESS3A = 'MOT' 'SEGMENT DE DROITE DONT LES EXTREMITES SONT COTEES PAR'; * MESS4A = 'MOT' 'SEGMENT DE DROITE DEFINI PAR UN VECTEUR EN COORDONNEES' ; * MESS5A = 'MOT' 'SEGMENT DE DROITE DEFINI PAR UN VECTEUR EN COORDONNEES' ; * MESS6B = 'MOT' '- UN VECTEUR PARALLELE A LA CORDE SOUS-TENDANT LE TRONCON,'; MESS6D = 'MOT' * * * * 'SAUTER' 'PAGE' ; MESSAGE '===== CREATION D"UN TRONCON ====='; 'SAUTER' 'LIGNE' ; MESSAGE 'DONNEZ LE NUMERO DU TYPE DE TRONCON QUE VOUS VOULEZ INTRODUIRE'; MESSAGE ' ' ; MESSAGE ' 1 =' MESS1A ; MESSAGE ' ' MESS1B ; MESSAGE ' ' ; MESSAGE ' 2 =' MESS2A ; MESSAGE ' ' MESS2B ; MESSAGE ' ' MESS2C ; MESSAGE ' ' ; MESSAGE ' 3 =' MESS3A ; MESSAGE ' ' MESS3B ; MESSAGE ' ' MESS3C ; MESSAGE ' ' ; MESSAGE ' 4 =' MESS4A ; MESSAGE ' ' MESS4B ; MESSAGE ' ' ; MESSAGE ' 5 =' MESS5A ; MESSAGE ' ' MESS5B ; MESSAGE ' ' MESS5C ; MESSAGE ' ' MESS5D ; MESSAGE ' ' MESS5E ; MESSAGE ' ' ; MESSAGE ' 6 =' MESS6A ; MESSAGE ' ' MESS6B ; MESSAGE ' ' MESS6C ; MESSAGE ' ' MESS6D ; MESSAGE ' ' MESS6E ; MESSAGE ' ' ; MESSAGE ' 7 =' MESS7A ; MESSAGE ' ' MESS7B ; MESSAGE ' ' MESS7C ; MESSAGE ' ' ; MESSAGE ' 8 =' MESS8A ; MESSAGE ' ' MESS8B ; MESSAGE ' ' MESS8C ; SI OLD_TRON ; MESSAGE ' ' ; MESSAGE ' 0 = SUPPRESSION DU TRONCON.' ; FINSI; * OBTENIR TYP_TRON*ENTIER ; * SI (OLD_TRON 'ET' ('EGA' TYP_TRON 0) ) ; * ---------------- * SUPPRESSION DE TRONCON: TAB_TRON = 'ENLEVER' TAB_TRON NOM_TRON ; LIG_TUYO.'TRONCON' = TAB_TRON ; 'ITERER' REP_TRON ; FINSI; * SI ('OU' ('EGA' TYP_TRON 'NON') ('<EG' TYP_TRON 0) ) ; QUITTER REP_TRON ; FINSI ; * 'SAUTER' 'PAGE' ; * NBEL_LOC = 'TEXTE' ' ' ; SI DECOUP ; MESSAGE ' '; MESSAGE 'NOMBRE D"ELEMENTS POUR REPRESENTER LE TRONCON ?' ; OBTENIR _NBEL_*ENTIER ; NBEL_LOC = 'TEXTE' '_NBEL_' ; FINSI ; FINSI; * SI (PENTE 'ET' (TYP_TRON <EG 6) ) ; MESSAGE ' '; MESSAGE 'PENTE DU TRONCON ?' ; MESSAGE '(VALEUR INFERIEURE A 1. , POSITIVE SI DESCENTE)'; OBTENIR PENT_LOC*FLOTTANT ; FINSI; * * 'SAUTER' 'PAGE'; * SI ('EGA' TYP_TRON 1) ; * ---------------- * MESSAGE MESS1A ; MESSAGE MESS1B ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU POINT:' ; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT ; SI UNITES; X8 = X8 * COEF_SOR ; Y8 = Y8 * COEF_SOR ; Z8 = Z8 * COEF_SOR ; FINSI ; SI ( ('ABS' (Z8 - Z1) ) < 1.D-5) ; DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ; Z8 = Z8 - (DH * PENT_LOC) ; DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ; Z8 = Z8 - (DH * PENT_DEF) ; FINSI; FINSI; FINSI; P8 = X8 Y8 Z8 ; TAB_TRON.NOM_TRON = 'DROITE' NBEL_LOC P1 P8 ; * SINON; SI ((TYP_TRON >EG 2) 'ET' (TYP_TRON <EG 5 )) ; * ------------------------------------- * SI ('EGA' TYP_TRON 2) ; * ---------------- MESSAGE MESS2A ; MESSAGE MESS2B ; MESSAGE MESS2C ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR DIRECTEUR '; MESSAGE 'ET LA LONGUEUR DU TRONCON ENTRE POINTS D"EPURE:'; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ; RAP = LONG / LVECT ; X8 = X8 * RAP ; Y8 = Y8 * RAP ; Z8 = Z8 * RAP ; * SINON ; SI ('EGA' TYP_TRON 3) ; * ---------------- MESSAGE MESS3A ; MESSAGE MESS3B ; MESSAGE MESS3C ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU 1ER VECTEUR ET SA LONGUEUR:' ; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ; RAP = LONG / LVECT ; XX8 = X8 * RAP ; YY8 = Y8 * RAP ; ZZ8 = Z8 * RAP ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU 2EME VECTEUR ET SA LONGUEUR:'; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ; RAP = LONG / LVECT ; X8 = (X8 * RAP) + XX8 ; Y8 = (Y8 * RAP) + YY8 ; Z8 = (Z8 * RAP) + ZZ8 ; * SINON ; SI ('EGA' TYP_TRON 4) ; * ---------------- MESSAGE MESS4A ; MESSAGE MESS4B ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR: '; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT ; SI UNITES; X8 = X8 * COEF_SOR ; Y8 = Y8 * COEF_SOR ; Z8 = Z8 * COEF_SOR ; FINSI ; * SINON; * TYP_TRON VAUT 5 : * ----------------- MESSAGE MESS5A ; MESSAGE MESS5B ; MESSAGE MESS5C ; MESSAGE MESS5D ; MESSAGE MESS5E ; MESSAGE ' '; MESSAGE 'DONNEZ LA LONGUEUR DU TRONCON ENTRE POINTS D"EPURE' ; MESSAGE 'ET LES 2 ANGLES EN DEGRES DECIMAUX:'; OBTENIR LONG*FLOTTANT TETA*FLOTTANT PHI*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; X8 Y8 Z8 = 'COORDONNEES' P8 ; * FINSI; FINSI; FINSI; * SI ( ('ABS' Z8) < 1.D-5) ; DH = ( (X8 ** 2) + (Y8 ** 2) ) ** 0.5 ; Z8 = Z8 - (DH * PENT_LOC) ; DH = ( (X8 ** 2) + (Y8 ** 2) ) ** 0.5 ; Z8 = Z8 - (DH * PENT_DEF) ; FINSI; FINSI; FINSI; X8 = X1 + X8 ; Y8 = Y1 + Y8 ; Z8 = Z1 + Z8 ; P8 = X8 Y8 Z8 ; TAB_TRON.NOM_TRON = 'DROITE' NBEL_LOC P1 P8 ; * SINON; SI ('EGA' TYP_TRON 6) ; * ---------------- * MESSAGE MESS6A ; MESSAGE MESS6B ; MESSAGE MESS6C ; MESSAGE MESS6D ; MESSAGE MESS6E ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR PARALLELE A LA CORDE' ; MESSAGE 'ET LA LONGUEUR DE LA CORDE:' ; OBTENIR X8*FLOTTANT Y8*FLOTTANT Z8*FLOTTANT LONG*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; LVECT = ( (X8 ** 2) + (Y8 ** 2) + (Z8 ** 2) ) ** 0.5 ; RAP = LONG / LVECT ; X8 = X1 + (X8 * RAP) ; Y8 = Y1 + (Y8 * RAP) ; Z8 = Z1 + (Z8 * RAP) ; MESSAGE ' '; MESSAGE 'DONNEZ LES 3 COORDONNEES DU VECTEUR PARALLELE AU RAYON' ; MESSAGE 'ET LA VALEUR DU RAYON:' ; OBTENIR X4*FLOTTANT Y4*FLOTTANT Z4*FLOTTANT LONG*FLOTTANT ; SI UNITES; LONG = LONG * COEF_SOR ; FINSI ; LVECT = ( (X4 ** 2) + (Y4 ** 2) + (Z4 ** 2) ) ** 0.5 ; RAP = LONG / LVECT ; X4 = X8 - (X4 * RAP) ; Y4 = Y8 - (Y4 * RAP) ; Z4 = Z8 - (Z4 * RAP) ; * SI ( ('ABS' (Z8 - Z1) ) < 1.D-5) ; DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ; DH = DH * PENT_LOC ; Z8 = Z8 - DH ; Z4 = Z4 - (DH / 2.D0) ; DH = ( ((X8 - X1) ** 2) + ((Y8 - Y1) ** 2) ) ** 0.5 ; DH = DH * PENT_DEF ; Z8 = Z8 - DH ; Z4 = Z4 - (DH / 2.D0) ; FINSI; FINSI; FINSI; C4 = X4 Y4 Z4 ; P8 = X8 Y8 Z8 ; TAB_TRON.NOM_TRON = 'CERCLE' NBEL_LOC P1 C4 P8 ; * SINON; SI ('EGA' TYP_TRON 7) ; * ---------------- * MESSAGE MESS7A ; MESSAGE MESS7B ; MESSAGE MESS7C ; MESSAGE ' '; MESSAGE 'DONNEZ LES NOMS DES 2 TRONCONS ET LE RAYON DE RACCORDEMENT:' ; SI UNITES; RAYON = RAYON * COEF_SOR ; FINSI ; L1 RAC L2 = 'CONGE' NBEL_LOC RAYON (TAB_TRON.NOM1TRON) (TAB_TRON.NOM2TRON) ; TAB_TRON.NOM1TRON = L1 ; TAB_TRON.NOM_TRON = RAC ; TAB_TRON.NOM2TRON = L2 ; * ON GARDE LES VALEURS PRECEDENTES DE P8, X8, Y8 ET Z8. * ON N'EN A PAS BESOIN ICI. * SINON; SI ('EGA' TYP_TRON 8) ; * ---------------- * MESSAGE MESS8A ; MESSAGE MESS8B ; MESSAGE MESS8C ; MESSAGE 'LES 2 TRONCONS A RACCORDER DOIVENT ETRE PARALLELES.'; MESSAGE 'LE DOUBLE COUDE EST CENTRE SUR L"EXTREMITE DU 1ER TRONCON.'; MESSAGE ' '; MESSAGE 'DONNEZ LES NOMS DES 2 TRONCONS ET LE RAYON DE RACCORDEMENT:'; SI UNITES; RAYON = RAYON * COEF_SOR ; FINSI ; L1 RAC L2 = 'CONGE' NBEL_LOC RAYON 'DOUBLE' (TAB_TRON.NOM1TRON) (TAB_TRON.NOM2TRON) ; TAB_TRON.NOM1TRON = L1 ; TAB_TRON.NOM_TRON = RAC ; TAB_TRON.NOM2TRON = L2 ; * ON GARDE LES VALEURS PRECEDENTES DE P8, X8, Y8 ET Z8. * ON N'EN A PAS BESOIN ICI. * * FINSI; FINSI; FINSI; FINSI; FINSI; * FIN REP_TRON ; * * * ________________________________ * * REUNION DES TRONCONS D'UNE LIGNE * ________________________________ * NB_TRON = 'DIMENSION' TAB_TRON ; * SI (NB_TRON > 0) ; * LIS_TRON = 'INDEX' TAB_TRON ; I_TRON = 1 ; NB_TRON = NB_TRON - 1 ; MAIL_LIG = TAB_TRON . ( LIS_TRON . 1 ) ; SI (NB_TRON > 0) ; NB_ET = 0 ; REPETER REP_SOM4 NB_TRON ; I_TRON = I_TRON + 1 ; INDICE = LIS_TRON . I_TRON ; MAIL_LI1 = MAIL_LIG 'ET' (TAB_TRON.INDICE) ; NB_ET = NB_ET + 1 ; SI (NB_ET > 1) ; 'DETRUIRE' MAIL_LIG ; FINSI; MAIL_LIG = MAIL_LI1 ; FIN REP_SOM4 ; FINSI ; * LIG_TUYO.'MAILLAGE' = MAIL_LIG ; * SINON; * * CETTE LIGNE DE TUYAUTERIE EST DESESPEREMENT VIDE. SI ('EXISTE' TUYO2 NOM_TUYO) ; TUYO2 = 'ENLEVER' TUYO2 NOM_TUYO ; FINSI; * FINSI ; * FIN REP_LIGN ; * * * ________________________________ * * REUNION DES LIGNES DE TUYAUTERIE * ________________________________ * NB_LIG = 'DIMENSION' TUYO2 ; * SI (NB_LIG > 0) ; LIST_LIG = 'INDEX' TUYO2 ; SI ('EXISTE' TUYO2 'MAILLAGE') ; TUYO2 = 'ENLEVER' TUYO2 'MAILLAGE' ; LIST_LIG = 'INDEX' TUYO2 ; NB_LIG = NB_LIG - 1 ; FINSI; FINSI; * SI (NB_LIG > 0) ; * TUYO2ENS = TUYO2.('MOT' LIST_LIG.1).'MAILLAGE' ; TUYO2ENS = TUYO2 . ( LIST_LIG . 1 ) . 'MAILLAGE' ; I_LIG = 1 ; NB_LIG = NB_LIG - 1 ; SI (NB_LIG > 0) ; REPETER REP_SOM2 NB_LIG ; I_LIG = I_LIG + 1 ; INDICE = LIST_LIG . I_LIG ; TUYO2EN1 = TUYO2ENS 'ET' (TUYO2.INDICE.'MAILLAGE') ; SI (I_LIG > 2) ; 'DETRUIRE' TUYO2ENS ; FINSI; TUYO2ENS = TUYO2EN1 ; FIN REP_SOM2 ; FINSI ; TUYO2.'MAILLAGE' = TUYO2ENS ; * SINON; * SI ('EXISTE' TUYO2 'MAILLAGE') ; TUYO2 = ENLEVER TUYO2 'MAILLAGE' ; FINSI; * FINSI ; * * FIN PROC ; * 'SAUTER' 'PAGE' ; MESSAGE '===== FIN DE LA PROCEDURE "BOA" ===== ;' ; * 'FINPROC' TUYO2 ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales