// This file is part of the Herezh++ application. // // The finite element software Herezh++ is dedicated to the field // of mechanics for large transformations of solid structures. // It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600) // INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) . // // Herezh++ is distributed under GPL 3 license ou ultérieure. // // Copyright (C) 1997-2022 Université Bretagne Sud (France) // AUTHOR : Gérard Rio // E-MAIL : gerardrio56@free.fr // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // For more information, please consult: . #include "Frontiere_initiale.h" #include #include "CharUtil.h" #include // CONSTRUCTEURS : // par defaut Frontiere_initiale::Frontiere_initiale () : OrdreVisu("..............................frontieres initiales" ,"visualisation des frontieres initiales","fri") ,filaire(true),surface(true),numero(false) ,Rcoull(.425),Gcoull(0.0),Bcoull(.425) ,Rcoulf(1.0),Gcoulf(0.0),Bcoulf(1.0) ,Rcouln(1.0),Gcouln(1.0),Bcouln(0.0) ,taille_numero(0.2) {}; // constructeur de copie Frontiere_initiale::Frontiere_initiale (const Frontiere_initiale& ord) : OrdreVisu(ord),filaire(ord.filaire) ,surface(ord.surface),numero(ord.numero) ,Rcoull(ord.Rcoull),Gcoull(ord.Gcoull),Bcoull(ord.Bcoull) ,Rcoulf(ord.Rcoulf),Gcoulf(ord.Gcoulf),Bcoulf(ord.Bcoulf) ,Rcouln(ord.Rcouln),Gcouln(ord.Gcouln),Bcouln(ord.Bcouln) ,taille_numero(ord.taille_numero) {}; // DESTRUCTEUR : Frontiere_initiale::~Frontiere_initiale () {}; // METHODES PUBLIQUES : // execution de l'ordre // tab_mail : donne les numéros de maillage concerné // incre : numéro d'incrément qui en cours // type_incre : indique si c'est le premier le dernier ou l'incrément courant a visualiser ou pas // animation : indique si l'on est en animation ou pas // unseul_incre : indique si oui ou non il y a un seul increment à visualiser void Frontiere_initiale::ExeOrdre(ParaGlob * ,const Tableau & ,LesMaillages * ,bool ,LesReferences* ,LesLoisDeComp* ,DiversStockage*,Charge*,LesCondLim* // ,LesContacts*,Resultats*,ostream & sort,EnumTypeIncre type_incre,int incre ,LesContacts*,Resultats*,UtilLecture & entreePrinc,OrdreVisu::EnumTypeIncre ,int incre // ,bool animation) ,bool ,const map < string, const double * , std::less >& ,const List_io < TypeQuelconque >& listeVecGlob) {ostream &sort = entreePrinc.Sort_princ_vrml(); // visualisation du maillage pointé si actif if ((actif)&&(incre==0)) { cout << "\n *** ordre actuellement non defini *** " << "\n Frontiere_initiale::ExeOrdre( .... " << endl; } }; // choix de l'ordre, cet méthode peut entraîner la demande d'informations // supplémentaires si nécessaire. qui sont ensuite gérer par la classe elle même void Frontiere_initiale::ChoixOrdre() {// demande de précision bool choix_valide = false; cout << "\n ----> préparation de la visualisation des frontieres initiales" << "\n paramètre par défaut ? : affichage en filaire, couleur magenta," << "\n et affichage des facettes, couleur violet," << " \n pas d'affichage de numéros. " << " (rep 'o' ou 'f') pour accepter ces paramètres sinon autre "; string rep; cout << "\n reponse ? "; rep = lect_return_defaut(true,"o"); if (rep != "o") {// cas d'un choix autre que standart while (!choix_valide) { try { cout << "\n (0) fin modif" << "\n (1) en fillaire? (2) affichage des facettes ? " << "\n (3) affichage des numéros ? (4) couleur pour le filaire " << "\n (5) couleur pour les facettes (6) couleur pour les numeros"; cout << "\n \n reponse ? "; rep = lect_return_defaut(false,"0"); if (rep == "fin_prog") Sortie(1); // sinon int num = ChangeEntier(rep); if (num == 0) choix_valide=true; else if ((num >= 1)&&(num<=6)) { choix_valide=false; switch (num) { case 1: //"en filaire") { cout << "\n en fillaire (par defaut rep 'o') " << "ou pas de filaire (rep autre) ? "; rep = lect_return_defaut(true,"o"); if (rep!= "o") filaire = false; else filaire = true; break;} case 2: // "affichage des facettes ?") { cout << "\n affichage des facettes (par defaut rep 'o') " << "ou pas de facette (rep autre) ? "; rep = lect_return_defaut(true,"o"); if (rep!= "o") surface = false; else surface = true; break;} case 3: // "affichage des numéros ?") { cout << "\n affichage des numéros (non par defaut rep 'o') " << "ou on veut l'affichage des numéros (rep autre) ? "; rep = lect_return_defaut(true,"o"); if (rep!= "o") numero = true; else numero = false; break;} case 4: // "couleur pour le filaire?") { cout << "\n couleur pour le filaire au standard RGB : par defaut mgenta (rep 'o') "; rep = lect_return_defaut(true,"o"); if (rep != "o") { cout << "\n couleur au standard RGB (trois réels entre 0 et 1) ? "; double Rco,Gco,Bco; cin >> Rco >> Gco >> Bco; std::cin.ignore( std::numeric_limits::max(), '\n' );// purge de cin if ((Rco <= 1.)&& (Rco >= 0) && (Gco <= 1.)&& (Gco >= 0) &&(Bco <= 1.)&& (Bco >= 0)) { Rcoull = Rco; Gcoull = Gco; Bcoull = Bco; } else { cout << " \n *****choix non valide de couleur**** "; } } else { Rcoull = .425; Gcoull = 0.; Bcoull = .425; } break;} case 5: // "couleur pour les facettes") { cout << "\n couleur au standard RGB pour les facettes : par defaut violet (rep 'o') "; rep = lect_return_defaut(false,"o");; if (rep != "o") { cout << "\n couleur au standard RGB (trois réels entre 0 et 1) ? "; double Rco,Gco,Bco; cin >> Rco >> Gco >> Bco; std::cin.ignore( std::numeric_limits::max(), '\n' );// purge de cin if ((Rco <= 1.)&& (Rco >= 0) && (Gco <= 1.)&& (Gco >= 0) &&(Bco <= 1.)&& (Bco >= 0)) { Rcoulf = Rco; Gcoulf = Gco; Bcoulf = Bco; } else { cout << " \n *****choix non valide de couleur**** "; } } else { Rcoulf = 1; Gcoulf = 0; Bcoulf = 1; } break;} case 6: // "couleur pour les numerao") { cout << "\n couleur au standard RGB pour les numeraos : par defaut jaune (rep 'o') "; rep = lect_return_defaut(false,"o"); if (rep != "o") { cout << "\n couleur au standard RGB (trois réels entre 0 et 1) ? "; double Rco,Gco,Bco; cin >> Rco >> Gco >> Bco; std::cin.ignore( std::numeric_limits::max(), '\n' );// purge de cin if ((Rco <= 1.)&& (Rco >= 0) && (Gco <= 1.)&& (Gco >= 0) &&(Bco <= 1.)&& (Bco >= 0)) { Rcouln = Rco; Gcouln = Gco; Bcouln = Bco; } else { cout << " \n *****choix non valide de couleur**** "; } } else { Rcouln = 1; Gcouln = 1; Bcouln = 0; } break;} } } else { cout << "\n Erreur on attendait un entier entre 0 et 6 !!, " << "\n redonnez une bonne valeur" << "\n ou taper fin_prog pour arreter le programme"; choix_valide=false; } } catch (ErrSortieFinale) // cas d'une direction voulue vers la sortie // on relance l'interuption pour le niveau supérieur { ErrSortieFinale toto; throw (toto); } catch (...)// erreur de lecture { cout << "\n Erreur on attendait un des mots clés proposés !!, " << "\n redonnez une bonne valeur" << "\n ou taper fin_prog pour arreter le programme"; choix_valide=false; } } //-- fin du while } //-- fin du if (rep != "o") du départ c'est-à-dire du cas non standart // appel de la méthode de la classe mère OrdreVisu::ChoixOrdre(); };