224 lines
10 KiB
C++
224 lines
10 KiB
C++
|
|
||
|
// 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) <https://www.irdl.fr/>.
|
||
|
//
|
||
|
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||
|
//
|
||
|
// Copyright (C) 1997-2021 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 <https://www.gnu.org/licenses/>.
|
||
|
//
|
||
|
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||
|
|
||
|
#include "Frontiere_initiale.h"
|
||
|
|
||
|
#include <iomanip>
|
||
|
#include "CharUtil.h"
|
||
|
#include <limits>
|
||
|
|
||
|
// 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 <int>& ,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 <string> >&
|
||
|
,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<std::streamsize>::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<std::streamsize>::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<std::streamsize>::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();
|
||
|
};
|
||
|
|
||
|
|