ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 883
Committed: Thu Apr 20 13:38:18 2017 UTC (8 years, 4 months ago) by francois
File size: 78930 byte(s)
Log Message:
Creation d'un mailleur FEM pour pouvoir avoir des stratégies paramétrées de maillage. L'ancienne méthode construit disparait et est remplacée par l'utilisation d'un MAILLEUR_FEM.
Stratégie de quadratisation mise en place : déplacer les noeuds pour s'assurer que les tetras quadratiques présentent une distortion au dessu d'une borne inférieure. Mais ces noeuds quittent la géométrie.

Les paramètres dans ~/.magic.

File Contents

# Content
1
2 //------------------------------------------------------------
3 //------------------------------------------------------------
4 // MAGiC
5 // Jean Christophe Cuilli�e et Vincent FRANCOIS
6 // D�artement de G�ie M�anique - UQTR
7 //------------------------------------------------------------
8 // Le projet MAGIC est un projet de recherche du d�artement
9 // de g�ie m�anique de l'Universit�du Qu�ec �
10 // Trois Rivi�es
11 // Les librairies ne peuvent �re utilis�s sans l'accord
12 // des auteurs (contact : francois@uqtr.ca)
13 //------------------------------------------------------------
14 //------------------------------------------------------------
15 //
16 // main.cpp
17 //
18 //------------------------------------------------------------
19 //------------------------------------------------------------
20 // COPYRIGHT 2000
21 // Version du 02/03/2006 �11H25
22 //------------------------------------------------------------
23 //------------------------------------------------------------
24 #include "gestionversion.h"
25 #ifdef WINDOWS_VERSION
26 #include "fenetre.h"
27 #endif
28
29
30 #include <string.h>
31 #include "mg_file.h"
32 #include "mg_export.h"
33 #include "fct_export.h"
34 #include "mg_import.h"
35 #include "step_import.h"
36 #include "acis_import.h"
37 #include "step_import.h"
38 #include "stl_import.h"
39 #include "occ_import.h"
40 #include "mailleur_fem.h"
41 #include "mc_gestionnaire.h"
42 #include "vct_multi_modele.h"
43 #include "mgaster.h"
44 #include <ctype.h>
45 #include <math.h>
46 #include "mailleur_analyse.h"
47 #include "magic_application.h"
48 #include "fct_taille_fem_solution.h"
49 #include "fem_maillage_quadratique_outils.h"
50 #include "fem_maillage_outils.h"
51 #include "mg_table.h"
52 //---------------------------------------------------------------------------
53
54
55 void minuscule(char * mess)
56 {
57 int nb=strlen(mess);
58 for (int i=0;i<nb;i++)
59 mess[i]=tolower(mess[i]);
60 }
61
62
63 int main(int argc,char **argv)
64 {
65 std::vector<MAGIC_PARAMETRE_APPLICATION> lst;
66 MAGIC_PARAMETRE_APPLICATION p1(2,(char*)"-gmsh",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en gmsh");
67 MAGIC_PARAMETRE_APPLICATION p2(3,(char*)"-nodeforme",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Ne convertit pas les deformes des maillages FEM");
68 MAGIC_PARAMETRE_APPLICATION p3(4,(char*)"-copie",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Copie un fichier MAGiC en un autre");
69 MAGIC_PARAMETRE_APPLICATION p4(5,(char*)"-out",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier de sortie");
70 MAGIC_PARAMETRE_APPLICATION p5(6,(char*)"-aster",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion MAGiC en format ASTER (uniquement calcul mecanique)");
71 MAGIC_PARAMETRE_APPLICATION p6(7,(char*)"-coderesu",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Choix des valeurs à calculer par EF - Defaut 11111111 - |Surface moyenne|Surface inferieure|Surface superieur|Deplacement|Contraintes|Deformations|Contraintes equivalentes|Energie|");
72 MAGIC_PARAMETRE_APPLICATION p7(8,(char*)"-carte",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion carte de taille ancien format en format gmsh");
73 MAGIC_PARAMETRE_APPLICATION p8(9,(char*)"-step",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier step en format MAGiC");
74 MAGIC_PARAMETRE_APPLICATION p9(10,(char*)"-unite",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Facteur d'unité pour obtenir des métres - Defaut 1.");
75 MAGIC_PARAMETRE_APPLICATION p10(11,(char*)"-stepocc",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier step en format MAGiC via opencascade");
76 MAGIC_PARAMETRE_APPLICATION p11(12,(char*)"-sat",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier sat en format MAGiC");
77 MAGIC_PARAMETRE_APPLICATION p12(13,(char*)"-eps",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Tolérance pour un double - Defaut 0.000001");
78 MAGIC_PARAMETRE_APPLICATION p13(14,(char*)"-epsgeo",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Distance max entre la triangulation et la géométrie - Defaut 1.");
79 MAGIC_PARAMETRE_APPLICATION p14(15,(char*)"-importstl",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Importation de la triangulation STL");
80 MAGIC_PARAMETRE_APPLICATION p15(16,(char*)"-importtriangulation",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Importation de la triangulation STL avec noeuds fusionnés");
81 MAGIC_PARAMETRE_APPLICATION p16(17,(char*)"-occ",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier opencascade en format MAGiC");
82 MAGIC_PARAMETRE_APPLICATION p17(18,(char*)"-fem",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Création d'un maillage fem");
83 MAGIC_PARAMETRE_APPLICATION p18(19,(char*)"-nummai",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de maillage - Defaut le premier");
84 MAGIC_PARAMETRE_APPLICATION p19(20,(char*)"-degre",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Degre du maillage à créer");
85 MAGIC_PARAMETRE_APPLICATION p20(21,(char*)"-astermagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation des resultats ASTER dans un maillage");
86 MAGIC_PARAMETRE_APPLICATION p21(22,(char*)"-fichieraster",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier aster");
87 MAGIC_PARAMETRE_APPLICATION p22(23,(char*)"-optis",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion de fichier magic en format OPTIS - Fonction esactivée");
88 MAGIC_PARAMETRE_APPLICATION p23(24,(char*)"-optismagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation des résultats OPTIS");
89 MAGIC_PARAMETRE_APPLICATION p24(25,(char*)"-fichieroptis",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier optis");
90 MAGIC_PARAMETRE_APPLICATION p25(26,(char*)"-fichierflottant",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier flottant - Optionnel");
91 MAGIC_PARAMETRE_APPLICATION p26(27,(char*)"-seuil",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Seuil de densité pour conserver les éléments");
92 MAGIC_PARAMETRE_APPLICATION p27(28,(char*)"-niveau",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Facteur pour le seuil (parametre incertain)");
93 MAGIC_PARAMETRE_APPLICATION p28(29,(char*)"-selectgr",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Selection de groupe topologique");
94 MAGIC_PARAMETRE_APPLICATION p29(30,(char*)"-deselectgr",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Deselection de groupe topologique");
95 MAGIC_PARAMETRE_APPLICATION p30(31,(char*)"-numgeo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de geometrie - Defaut la première");
96 MAGIC_PARAMETRE_APPLICATION p31(32,(char*)"-numgt",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de groupe topologique - Defaut le premier");
97 MAGIC_PARAMETRE_APPLICATION p32(33,(char*)"-numentite",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro d'entité à selectionner");
98 MAGIC_PARAMETRE_APPLICATION p33(34,(char*)"-expand",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Prend en compte la topologie sous-jacente dans la selection");
99 MAGIC_PARAMETRE_APPLICATION p34(35,(char*)"-examine",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Contenu d'un fichier MAGiC. Si un numero de maillage est présent l'action analyse ce maillage");
100 MAGIC_PARAMETRE_APPLICATION p35(36,(char*)"-angle",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Angle limite pour l'analyse de retournement de triangle - Defaut 0.03");
101 MAGIC_PARAMETRE_APPLICATION p36(37,(char*)"-fichierlog",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier log");
102 MAGIC_PARAMETRE_APPLICATION p37(38,(char*)"-deforme",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Calcul un maillage déforme");
103 MAGIC_PARAMETRE_APPLICATION p38(39,(char*)"-fusiongeo",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Fusionne deux géométries");
104 MAGIC_PARAMETRE_APPLICATION p39(40,(char*)"-numsol1",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 1");
105 MAGIC_PARAMETRE_APPLICATION p40(41,(char*)"-numsol2",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 2");
106 MAGIC_PARAMETRE_APPLICATION p41(42,(char*)"-numsol3",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de solution 3");
107 MAGIC_PARAMETRE_APPLICATION p42(43,(char*)"-numchamp1",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 1");
108 MAGIC_PARAMETRE_APPLICATION p43(44,(char*)"-numchamp2",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 2");
109 MAGIC_PARAMETRE_APPLICATION p44(45,(char*)"-numchamp3",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de champs de la solution 3");
110 MAGIC_PARAMETRE_APPLICATION p45(46,(char*)"-ccf",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie");
111 MAGIC_PARAMETRE_APPLICATION p46(47,(char*)"-ccft",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous jacente");
112 MAGIC_PARAMETRE_APPLICATION p47(48,(char*)"-ccfhelp",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Liste des conditions aux limites disponibles");
113 MAGIC_PARAMETRE_APPLICATION p48(49,(char*)"-valeur",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Condition aux limites à appliquer sous la forme id:ccf:valeur(:NS|SU) ou id:ccf:formule:var1,var2(:NS|SU)");
114 MAGIC_PARAMETRE_APPLICATION p49(50,(char*)"-oricoque",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Orientation d'une coque");
115 MAGIC_PARAMETRE_APPLICATION p50(51,(char*)"-numcoque",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro de la coque - Defaut la premiere");
116 MAGIC_PARAMETRE_APPLICATION p51(52,(char*)"-stlmagic",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation de fichier STL");
117 MAGIC_PARAMETRE_APPLICATION p52(53,(char*)"-epsf",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Tolérance pour un float - Defaut 0.0001");
118 MAGIC_PARAMETRE_APPLICATION p53(54,(char*)"-calculaster",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Calcul ASTER");
119 MAGIC_PARAMETRE_APPLICATION p54(55,(char*)"-correspondance",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Ajout d'un fichier de correspondance entre GMSH et MAGIC");
120 MAGIC_PARAMETRE_APPLICATION p55(56,(char*)"-carte2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion carte de taille nouvelle version en format gmsh");
121 MAGIC_PARAMETRE_APPLICATION p56(57,(char*)"-stlout",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en stl");
122 MAGIC_PARAMETRE_APPLICATION p57(58,(char*)"-comparetaille",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Compare la taille d'un maillage avec la taille d'une carte de taille isotrope ancienne version");
123 MAGIC_PARAMETRE_APPLICATION p58(59,(char*)"-cartetaille",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom de la carte de taille a fournir");
124 MAGIC_PARAMETRE_APPLICATION p59(60,(char*)"-comparetaille2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Compare la taille d'un maillage avec la taille d'une carte de taille isotrope nouvelle version");
125 MAGIC_PARAMETRE_APPLICATION p60(61,(char*)"-coefdef",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Coefficient de déformé - par defaut 0. = pas de creation de maillage");
126 MAGIC_PARAMETRE_APPLICATION p61(62,(char*)"-detachemaillage",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Détache un maillage des ses liens avec la géométrie");
127 MAGIC_PARAMETRE_APPLICATION p62(63,(char*)"-elastique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en elasticité");
128 MAGIC_PARAMETRE_APPLICATION p63(64,(char*)"-thermique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en thermique");
129 MAGIC_PARAMETRE_APPLICATION p64(65,(char*)"-contrainteplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en contrainte plane");
130 MAGIC_PARAMETRE_APPLICATION p65(66,(char*)"-deformationplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en deformation plane");
131 MAGIC_PARAMETRE_APPLICATION p66(67,(char*)"-sonde",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Obtenir un resultat sur une arete dans un fichier csv");
132 MAGIC_PARAMETRE_APPLICATION p67(68,(char*)"-numsol",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de la solution (la premiere par defaut)");
133 MAGIC_PARAMETRE_APPLICATION p68(69,(char*)"-numchamp",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero du champs de la solution (le premier par defaut)");
134 MAGIC_PARAMETRE_APPLICATION p69(70,(char*)"-csvout",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier csv");
135 MAGIC_PARAMETRE_APPLICATION p70(71,(char*)"-numare",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de l'arete à sonder (la premiere par default)");
136 MAGIC_PARAMETRE_APPLICATION p71(72,(char*)"-projsolution",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Projeter une solution sur un autre maillage");
137 MAGIC_PARAMETRE_APPLICATION p72(73,(char*)"-fichiersolution",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier contenant la solution");
138 MAGIC_PARAMETRE_APPLICATION p73(74,(char*)"-comparesolution",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Comparer deux champs de solution. La reference est la deuxième solution.");
139 MAGIC_PARAMETRE_APPLICATION p74(75,(char*)"-analyse",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Analyse le maillage quadratique. Defaut non.");
140 MAGIC_PARAMETRE_APPLICATION p75(76,(char*)"-table",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Extraire des tables de valeurs d'un maillage fem");
141 MAGIC_PARAMETRE_APPLICATION p76(77,(char*)"-noeud",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les noeuds");
142 MAGIC_PARAMETRE_APPLICATION p77(78,(char*)"-element1",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element1D");
143 MAGIC_PARAMETRE_APPLICATION p78(79,(char*)"-element2",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element2D");
144 MAGIC_PARAMETRE_APPLICATION p79(80,(char*)"-element3",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les element3D");
145 MAGIC_PARAMETRE_APPLICATION p80(81,(char*)"-numtopo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Action uniquement sur le numero de topologie mentionnée");
146 MAGIC_PARAMETRE_APPLICATION p81(82,(char*)"-maigmsh",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation d'un maillage de GMSH (-in peut être omis -out peut etre omis si -in n'est pas omis -numgeo le defaut correspond à un non attechement du maillage)");
147 MAGIC_PARAMETRE_APPLICATION p82(83,(char*)"-fichiergmsh",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier gmsh");
148 MAGIC_PARAMETRE_APPLICATION p83(84,(char*)"-param",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier parametre");
149 MAGIC_PARAMETRE_APPLICATION p84(85,(char*)"-creeparam",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Création d'un fichier parametre");
150 MAGIC_PARAMETRE_APPLICATION p85(86,(char*)"-importefonction",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Importation d'une fonction dans une géométrie");
151 MAGIC_PARAMETRE_APPLICATION p86(87,(char*)"-fichier",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Nom du fichier à importer");
152 MAGIC_PARAMETRE_APPLICATION p87(88,(char*)"-elastique_gd",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en elasticite grandes deformations");
153 MAGIC_PARAMETRE_APPLICATION p88(89,(char*)"-plastique",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Calcul aster en plasticite");
154 MAGIC_PARAMETRE_APPLICATION p89(90,(char*)"-base",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Base de numerotation des entités code aster - Defaut 10");
155 MAGIC_PARAMETRE_APPLICATION p90(91,(char*)"-element_gauss1",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element1D");
156 MAGIC_PARAMETRE_APPLICATION p91(92,(char*)"-element_gauss2",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element2D");
157 MAGIC_PARAMETRE_APPLICATION p92(93,(char*)"-element_gauss3",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action aux points de gauss sur les element3D");
158 MAGIC_PARAMETRE_APPLICATION p93(94,(char*)"-ccfi",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie par identificateur d'une autre entité MAGiC");
159 MAGIC_PARAMETRE_APPLICATION p94(95,(char*)"-ccfit",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous jacente par identificateur d'une autre entité MAGiC");
160 MAGIC_PARAMETRE_APPLICATION p95(96,(char*)"-ccff",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie sous forme de formule");
161 MAGIC_PARAMETRE_APPLICATION p96(97,(char*)"-ccfft",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Application de conditions aux limites sur une topologie et sur les topologie sous forme de formule");
162 MAGIC_PARAMETRE_APPLICATION p97(98,(char*)"-opt",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Optimisation de la numerotation des noeuds");
163 MAGIC_PARAMETRE_APPLICATION p98(99,(char*)"-rigidite",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite elastique par code aster");
164 MAGIC_PARAMETRE_APPLICATION p99(100,(char*)"-rigiditecontrainteplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite en contrainte plane par code aster");
165 MAGIC_PARAMETRE_APPLICATION p100(101,(char*)"-rigiditedeformationplane",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Matrice de rigidite en deformation plane par code aster");
166 MAGIC_PARAMETRE_APPLICATION p101(102,(char*)"-elementnd",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Action sur les tous les elements (solution de calcul mixte)");
167 MAGIC_PARAMETRE_APPLICATION p102(103,(char*)"-changefonction",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Modifie une fonction dans une géométrie");
168 MAGIC_PARAMETRE_APPLICATION p103(104,(char*)"-numfonction",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero d'une fonction dans la géométrie (defaut la premiere)");
169 MAGIC_PARAMETRE_APPLICATION p104(105,(char*)"-offout",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion du fichier MAGiC en off");
170 MAGIC_PARAMETRE_APPLICATION p105(106,(char*)"-mince",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Conversion d'une coquille mince");
171 MAGIC_PARAMETRE_APPLICATION p106(107,(char*)"-volcor",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Ajout d'une face de base et d'une face en vis a vis pour un volume mince sous la forme idgeo:idvol:idfacebase:idfacevisavis");
172
173
174 p1.ajouter_dependance(1);p1.ajouter_dependance(3);p1.ajouter_dependance(55);
175 p3.ajouter_dependance(1);p3.ajouter_dependance(5);
176 p5.ajouter_dependance(1);p5.ajouter_dependance(7);p5.ajouter_dependance(85);
177 p7.ajouter_dependance(1);
178 p8.ajouter_dependance(1);p8.ajouter_dependance(10);
179 p10.ajouter_dependance(1);p10.ajouter_dependance(13);p10.ajouter_dependance(14);p10.ajouter_dependance(15);;p10.ajouter_dependance(16);
180 p11.ajouter_dependance(1);p11.ajouter_dependance(10);
181 p16.ajouter_dependance(1);p16.ajouter_dependance(13);p16.ajouter_dependance(14);p16.ajouter_dependance(15);;p16.ajouter_dependance(16);
182 p17.ajouter_dependance(1);p17.ajouter_dependance(5);p17.ajouter_dependance(19);p17.ajouter_dependance(20);p17.ajouter_dependance(75);p17.ajouter_dependance(98);
183 p20.ajouter_dependance(1);p20.ajouter_dependance(19);p20.ajouter_dependance(22);p20.ajouter_dependance(90);
184 //p22.ajouter_dependance(1);p22.ajouter_dependance(7);
185 p23.ajouter_dependance(1);p23.ajouter_dependance(19);p23.ajouter_dependance(25);p23.ajouter_dependance(26);p23.ajouter_dependance(27);p23.ajouter_dependance(28);
186 p28.ajouter_dependance(1);p28.ajouter_dependance(31);p28.ajouter_dependance(32);p28.ajouter_dependance(33);p28.ajouter_dependance(34);
187 p29.ajouter_dependance(1);p29.ajouter_dependance(31);p29.ajouter_dependance(32);p29.ajouter_dependance(33);p29.ajouter_dependance(34);
188 p34.ajouter_dependance(1);p34.ajouter_dependance(19);p34.ajouter_dependance(36);p34.ajouter_dependance(37);
189 p37.ajouter_dependance(1);p37.ajouter_dependance(19);p37.ajouter_dependance(40);p37.ajouter_dependance(41);p37.ajouter_dependance(42);p37.ajouter_dependance(43);p37.ajouter_dependance(44);p37.ajouter_dependance(45);p37.ajouter_dependance(61);
190 p38.ajouter_dependance(1);p38.ajouter_dependance(31);
191 p45.ajouter_dependance(1);p45.ajouter_dependance(31);p45.ajouter_dependance(49);
192 p46.ajouter_dependance(1);p46.ajouter_dependance(31);p46.ajouter_dependance(49);
193 p49.ajouter_dependance(1);p49.ajouter_dependance(19);p49.ajouter_dependance(51);p49.ajouter_dependance(5);
194 p51.ajouter_dependance(1);p51.ajouter_dependance(10);p51.ajouter_dependance(53);
195 p53.ajouter_dependance(1);p53.ajouter_dependance(5);p53.ajouter_dependance(7);p53.ajouter_dependance(19);p53.ajouter_dependance(63);p53.ajouter_dependance(64);p53.ajouter_dependance(65);p53.ajouter_dependance(66);p53.ajouter_dependance(84);p53.ajouter_dependance(85);p53.ajouter_dependance(88);p53.ajouter_dependance(89);p53.ajouter_dependance(99);p53.ajouter_dependance(100);p53.ajouter_dependance(101);
196 p55.ajouter_dependance(1);
197 p56.ajouter_dependance(1);p56.ajouter_dependance(19);
198 p57.ajouter_dependance(1);p57.ajouter_dependance(19);p57.ajouter_dependance(59);
199 p59.ajouter_dependance(1);p59.ajouter_dependance(19);p59.ajouter_dependance(59);
200 p61.ajouter_dependance(1);p61.ajouter_dependance(5);p61.ajouter_dependance(19);
201 p66.ajouter_dependance(1);p66.ajouter_dependance(31);p66.ajouter_dependance(68);p66.ajouter_dependance(69);p66.ajouter_dependance(70);p66.ajouter_dependance(71);
202 p71.ajouter_dependance(1);p71.ajouter_dependance(73);p71.ajouter_dependance(68);p71.ajouter_dependance(69);p71.ajouter_dependance(19);p71.ajouter_dependance(5);
203 p73.ajouter_dependance(1);p73.ajouter_dependance(5);p73.ajouter_dependance(40);p73.ajouter_dependance(41);p73.ajouter_dependance(43);p73.ajouter_dependance(44);
204 p75.ajouter_dependance(1);p75.ajouter_dependance(5);p75.ajouter_dependance(19);p75.ajouter_dependance(77);p75.ajouter_dependance(78);p75.ajouter_dependance(79);p75.ajouter_dependance(80);p75.ajouter_dependance(81);p75.ajouter_dependance(91);p75.ajouter_dependance(92);p75.ajouter_dependance(93);p75.ajouter_dependance(102);
205 p81.ajouter_dependance(1);p81.ajouter_dependance(5);p81.ajouter_dependance(31);p81.ajouter_dependance(83);
206 p85.ajouter_dependance(1);p85.ajouter_dependance(31);p85.ajouter_dependance(87);
207 p93.ajouter_dependance(1);p93.ajouter_dependance(31);p93.ajouter_dependance(49);
208 p94.ajouter_dependance(1);p94.ajouter_dependance(31);p94.ajouter_dependance(49);
209 p95.ajouter_dependance(1);p95.ajouter_dependance(31);p95.ajouter_dependance(49);
210 p96.ajouter_dependance(1);p96.ajouter_dependance(31);p96.ajouter_dependance(49);
211 p102.ajouter_dependance(1);p102.ajouter_dependance(31);p102.ajouter_dependance(87);p102.ajouter_dependance(104);
212 p104.ajouter_dependance(1);p104.ajouter_dependance(19);
213 p105.ajouter_dependance(1);p105.ajouter_dependance(107);
214 lst.push_back(p1);
215 lst.push_back(p2);
216 lst.push_back(p3);
217 lst.push_back(p4);
218 lst.push_back(p5);
219 lst.push_back(p6);
220 lst.push_back(p7);
221 lst.push_back(p8);
222 lst.push_back(p9);
223 lst.push_back(p10);
224 lst.push_back(p11);
225 lst.push_back(p12);
226 lst.push_back(p13);
227 lst.push_back(p14);
228 lst.push_back(p15);
229 lst.push_back(p16);
230 lst.push_back(p17);
231 lst.push_back(p18);
232 lst.push_back(p19);
233 lst.push_back(p20);
234 lst.push_back(p21);
235 lst.push_back(p22);
236 lst.push_back(p23);
237 lst.push_back(p24);
238 lst.push_back(p25);
239 lst.push_back(p26);
240 lst.push_back(p27);
241 lst.push_back(p28);
242 lst.push_back(p29);
243 lst.push_back(p30);
244 lst.push_back(p31);
245 lst.push_back(p32);
246 lst.push_back(p33);
247 lst.push_back(p34);
248 lst.push_back(p35);
249 lst.push_back(p36);
250 lst.push_back(p37);
251 lst.push_back(p38);
252 lst.push_back(p39);
253 lst.push_back(p40);
254 lst.push_back(p41);
255 lst.push_back(p42);
256 lst.push_back(p43);
257 lst.push_back(p44);
258 lst.push_back(p45);
259 lst.push_back(p46);
260 lst.push_back(p47);
261 lst.push_back(p48);
262 lst.push_back(p49);
263 lst.push_back(p50);
264 lst.push_back(p51);
265 lst.push_back(p52);
266 lst.push_back(p53);
267 lst.push_back(p54);
268 lst.push_back(p55);
269 lst.push_back(p56);
270 lst.push_back(p57);
271 lst.push_back(p58);
272 lst.push_back(p59);
273 lst.push_back(p60);
274 lst.push_back(p61);
275 lst.push_back(p62);
276 lst.push_back(p63);
277 lst.push_back(p64);
278 lst.push_back(p65);
279 lst.push_back(p66);
280 lst.push_back(p67);
281 lst.push_back(p68);
282 lst.push_back(p69);
283 lst.push_back(p70);
284 lst.push_back(p71);
285 lst.push_back(p72);
286 lst.push_back(p73);
287 lst.push_back(p74);
288 lst.push_back(p75);
289 lst.push_back(p76);
290 lst.push_back(p77);
291 lst.push_back(p78);
292 lst.push_back(p79);
293 lst.push_back(p80);
294 lst.push_back(p81);
295 lst.push_back(p82);
296 lst.push_back(p83);
297 lst.push_back(p84);
298 lst.push_back(p85);
299 lst.push_back(p86);
300 lst.push_back(p87);
301 lst.push_back(p88);
302 lst.push_back(p89);
303 lst.push_back(p90);
304 lst.push_back(p91);
305 lst.push_back(p92);
306 lst.push_back(p93);
307 lst.push_back(p94);
308 lst.push_back(p95);
309 lst.push_back(p96);
310 lst.push_back(p97);
311 lst.push_back(p98);
312 lst.push_back(p99);
313 lst.push_back(p100);
314 lst.push_back(p101);
315 lst.push_back(p102);
316 lst.push_back(p103);
317 lst.push_back(p104);
318 lst.push_back(p105);
319 lst.push_back(p106);
320 MAGIC_APPLICATION app((char*)"Operation dans l'environnement MAGiC",argc,argv,lst,true,false);
321 char nomfichier[3000];
322 char* p;
323 if (app.get_action()!=48)
324 {
325 if (app.get_erreur()==true) return 0;
326 if ((app.get_action()!=82) && (app.get_action()!=54)&& (app.get_action()!=6))
327 {
328 app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
329 p=strrchr(nomfichier,'.');
330 }
331 }
332 char chaine[1000];for (int i=0;i<1000;i++) chaine[i]=0;
333 if (app.get_action()==2)
334 {
335 bool desactivedeforme;
336 app.recupere_parametre_bool_avec_defaut(4,desactivedeforme,false);
337 bool corres;
338 app.recupere_parametre_bool_avec_defaut(55,corres,false);
339 if (app.get_erreur()==true) return 0;
340 char mess[2000];
341 sprintf(mess,"Conversion MAGiC vers GMSH");
342 app.affiche(mess);
343 MG_FILE gest(nomfichier);
344 int nb=gest.get_nb_mg_maillage();
345 for (int i=0;i<nb;i++)
346 {
347 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
348 unsigned long id=mai->get_id();
349 strncpy(chaine,nomfichier,p-nomfichier);
350 char chaine2[3000];
351 sprintf(chaine2,"%s%lu",chaine,id);
352 std::string namefic=chaine2;
353 MG_EXPORT exp;
354 sprintf(mess," Maillage geometrique : creation de %s.msh",namefic.c_str());
355 app.affiche(mess);
356 if (corres==false) exp.gmsh(mai,namefic); else exp.gmsh_avec_correspondance(mai,namefic);
357 }
358 nb=gest.get_nb_fem_maillage();
359 for (int i=0;i<nb;i++)
360 {
361 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
362 if (desactivedeforme) mai->desactive_deforme();
363 unsigned long id=mai->get_id();
364 strncpy(chaine,nomfichier,p-nomfichier);
365 char chaine2[3000];
366 sprintf(chaine2,"%s%lu",chaine,id);
367 std::string namefic=chaine2;
368 MG_EXPORT exp;
369 sprintf(mess," Maillage EF : Creation de %s.msh",namefic.c_str());
370 app.affiche(mess);
371 if (corres==false) exp.gmsh(mai,namefic); else exp.gmsh_avec_correspondance(mai,namefic);
372 }
373 }
374 if (app.get_action()==4)
375 {
376 char fichierout[2000];
377 app.recupere_parametre_string(5,fichierout,(char*)"Fichier sortant manquant");
378 if (app.get_erreur()==true) return 0;
379 char mess[2000];
380 sprintf(mess,"Copie de fichier MAGiC");
381 app.affiche(mess);
382 MG_FILE gest(nomfichier);
383 gest.enregistrer(fichierout);
384 }
385 if (app.get_action()==6)
386 {
387 char mess[500];
388 char coderesu[10];
389 char nomparam[500];
390 bool creeparam;
391 app.recupere_parametre_string_avec_defaut(7,coderesu,(char*)"11111111");
392 app.recupere_parametre_bool_avec_defaut(85,creeparam,false);
393 if (!creeparam) app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
394 if (!creeparam) app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
395 app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
396 if (app.get_erreur()==true) return 0;
397 if (creeparam)
398 {
399 char mess[500];
400 sprintf(mess," Calcul ASTER\n\nCréation d'un fichier parametre\n");
401 app.affiche(mess);
402 MG_EXPORT exp;
403 exp.ecrire_params_aster(nomparam);
404 }
405 else
406 {
407 sprintf(mess,"Conversion MAGiC vers code ASTER");
408 app.affiche(mess);
409 MG_FILE gest(nomfichier);
410 int nb=gest.get_nb_fem_maillage();
411 for (int i=0;i<nb;i++)
412 {
413 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
414 MG_GEOMETRIE* geo=mai->get_mg_geometrie();
415 unsigned long id=mai->get_id();
416 p=strrchr(nomfichier,'.');
417 strncpy(chaine,nomfichier,p-nomfichier);
418 char chaine2[3000];
419 sprintf(chaine2,"%s%lu",chaine,id);
420 std::string namefic=chaine2;
421 MG_EXPORT exp;
422 exp.lire_params_aster(nomparam);
423 exp.aster(geo,mai,namefic,MAGIC::CALCUL_ASTER::ELASTIQUE,coderesu);
424 }
425
426 }
427 }
428 if (app.get_action()==8)
429 {
430 if (app.get_erreur()==true) return 0;
431 char mess[500];
432 sprintf(mess," Conversion carte de taille ancienne version vers GMSH");
433 app.affiche(mess);
434 FCT_GENERATEUR_3D<4> carte;
435 carte.lire(nomfichier);
436 strncpy(chaine,nomfichier,p-nomfichier);
437 std::string namefic=chaine;
438 FCT_EXPORT exp;
439 exp.gmsh(&carte,namefic);
440 }
441 #ifdef BREP_STEP
442 if (app.get_action()==9)
443 {
444 double unite;
445 app.recupere_parametre_double_avec_defaut(10,unite,1.);
446 if (app.get_erreur()==true) return 0;
447 char mess[500];
448 sprintf(mess," Conversion STEP vers MAGiC");
449 app.affiche(mess);
450 STEP_IMPORT stepimport;
451 MG_GESTIONNAIRE gest;
452 stepimport.importer(gest,nomfichier) ;
453 strncpy(chaine,nomfichier,p-nomfichier);
454 std::string namefic=chaine;
455 namefic=namefic + ".magic";
456 int nb=gest.get_nb_mg_geometrie();
457 for (int i=0;i<nb;i++)
458 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
459 gest.enregistrer(namefic.c_str());
460 }
461 #endif
462 #ifdef BREP_OCC
463 if (app.get_action()==11)
464 {
465 double eps,eps2;
466 bool importstl,importtriangulation;
467 app.recupere_parametre_double_avec_defaut(13,eps,0.000001);
468 app.recupere_parametre_double_avec_defaut(14,eps2,1.);
469 app.recupere_parametre_bool_avec_defaut(15,importstl,false);
470 app.recupere_parametre_bool_avec_defaut(16,importtriangulation,false);
471 if (app.get_erreur()==true) return 0;
472 int importtri=0;
473 if (importstl) importtri=1;
474 if (importtriangulation) importtri=2;
475 char mess[500];
476 sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
477 app.affiche(mess);
478 MG_GESTIONNAIRE gest;
479 OCC_IMPORT occimport;
480 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,eps) ;
481 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
482 strncpy(chaine,nomfichier,p-nomfichier);
483 std::string namefic=chaine;
484 namefic=namefic + ".magic";
485 gest.enregistrer(namefic.c_str());
486 }
487 #endif
488 #ifdef BREP_SAT
489 if (app.get_action()==12)
490 {
491 double unite;
492 app.recupere_parametre_double_avec_defaut(10,unite,1.);
493 if (app.get_erreur()==true) return 0;
494 char mess[500];
495 sprintf(mess," Conversion SAT vers MAGiC");
496 app.affiche(mess);
497 MG_GESTIONNAIRE gest;
498 ACIS_IMPORT acisimport;
499 acisimport.importer(gest,nomfichier) ;
500 strncpy(chaine,nomfichier,p-nomfichier);
501 std::string namefic=chaine;
502 namefic=namefic + ".magic";
503 int nb=gest.get_nb_mg_geometrie();
504 for (int i=0;i<nb;i++)
505 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
506 gest.enregistrer(namefic.c_str());
507 }
508 #endif
509 #ifdef BREP_OCC
510 if (app.get_action()==17)
511 {
512 double eps,eps2;
513 bool importstl,importtriangulation;
514 app.recupere_parametre_double_avec_defaut(13,eps,0.000001);
515 app.recupere_parametre_double_avec_defaut(14,eps2,1.);
516 app.recupere_parametre_bool_avec_defaut(15,importstl,false);
517 app.recupere_parametre_bool_avec_defaut(16,importtriangulation,false);
518 if (app.get_erreur()==true) return 0;
519 int importtri=0;
520 if (importstl) importtri=1;
521 if (importtriangulation) importtri=2;
522 char mess[500];
523 sprintf(mess," Conversion OpenCascade vers MAGiC");
524 app.affiche(mess);
525 MG_GESTIONNAIRE gest;
526 OCC_IMPORT occimport;
527 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,eps) ;
528 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
529 strncpy(chaine,nomfichier,p-nomfichier);
530 std::string namefic=chaine;
531 namefic=namefic + ".magic";
532 gest.enregistrer(namefic.c_str());
533 }
534 #endif
535 if (app.get_action()==18)
536 {
537 int degre,nummai;
538 bool analyse;
539 bool optno;
540 char fichierout[2000];
541 app.recupere_parametre_string_avec_defaut(5,fichierout,nomfichier);
542 app.recupere_parametre_int_avec_defaut(19,nummai,0);
543 app.recupere_parametre_int(20,degre,(char*)"Degré du maillage manquant");
544 app.recupere_parametre_bool_avec_defaut(75,analyse,false);
545 app.recupere_parametre_bool_avec_defaut(98,optno,false);
546 if (app.get_erreur()==true) return 0;
547 char mess[500];
548 sprintf(mess," Creation d'un maillage FEM");
549 app.affiche(mess);
550 MG_FILE gest(nomfichier);
551 MG_MAILLAGE* mai;
552 if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
553 FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
554 gest.ajouter_fem_maillage(fem);
555 MAILLEUR_FEM m;
556 m.active_affichage(app.affiche);
557 if (!optno) m.maille(fem,0); else m.maille(fem,1);
558 gest.enregistrer(fichierout);
559 if (analyse==true)
560 {
561 MAILLEUR_ANALYSE m3d(fem);
562 m3d.active_affichage(app.affiche);
563 m3d.analyse();
564 }
565 /*if (degre==2)
566 {
567 //char message [5000];
568 FEM_MAILLAGE_QUADRATIQUE_OUTILS ou ;
569 double moy=ou.get_distortion_moy(fem);
570 double min=ou.get_distortion_min (fem);
571 int nb=ou.get_nombre_elements_invalides(fem);
572 sprintf(mess," maillage quadratique :");
573 app.affiche(mess);
574 sprintf(mess," ");
575 app.affiche(mess);
576 sprintf(mess," distorsion moy %f ",moy);
577 app.affiche(mess);
578 sprintf(mess," distorsion min %f ",min);
579 app.affiche(mess);
580 sprintf(mess," nombre elements invalides %d ",nb);
581 app.affiche(mess);
582 }*/
583
584
585 }
586 if (app.get_action()==21)
587 {
588 int nummai;
589 char fichieraster[500];
590 int base;
591 app.recupere_parametre_int_avec_defaut(19,nummai,0);
592 app.recupere_parametre_string(22,fichieraster,(char*)"Fichier aster manquant");
593 app.recupere_parametre_int_avec_defaut(90,base,10);
594 if (app.get_erreur()==true) return 0;
595 char mess[500];
596 sprintf(mess," Importation des résultats ASTER vers MAGIC");
597 app.affiche(mess);
598 MG_FILE gest(nomfichier);
599 FEM_MAILLAGE* mai;
600 if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
601 MG_IMPORT imp;
602 std::string res=imp.aster(base,mai,fichieraster,nomfichier);
603 app.affiche((char*)("\033[1;31m"+res+"\033[1;32m").c_str());
604 gest.enregistrer(nomfichier);
605 }
606
607 if (app.get_action()==23)
608 {
609
610 }
611 if (app.get_action()==24)
612 {
613 int nummai;
614 char fichieroptis[500];
615 char fichierflottant[500];
616 double niveau,seuil;
617 app.recupere_parametre_int_avec_defaut(19,nummai,0);
618 app.recupere_parametre_string(25,fichieroptis,(char*)"Fichier OPTIS manquant");
619 app.recupere_parametre_string_avec_defaut(26,fichieroptis,(char*)"");
620 app.recupere_parametre_double(27,seuil,(char*)"Seuil manquant");
621 app.recupere_parametre_double(28,niveau,(char*)"Niveau manquant");
622 if (app.get_erreur()==true) return 0;
623 char mess[500];
624 sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
625 app.affiche(mess);
626 MG_FILE gest(nomfichier);
627 FEM_MAILLAGE* mai;
628 if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
629 MG_IMPORT imp;
630 int flottant=0;
631 if (strlen(fichierflottant)>0) flottant=1;
632 imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
633 gest.enregistrer(nomfichier);
634 }
635
636 if (app.get_action()==29)
637 {
638 int numgeo,numgt,numentite;
639 bool expand;
640 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
641 app.recupere_parametre_int_avec_defaut(32,numgt,0);
642 app.recupere_parametre_int(33,numentite,(char*)"Numéro d'entité manquant");
643 app.recupere_parametre_bool_avec_defaut(34,expand,false);
644 if (app.get_erreur()==true) return 0;
645 char mess[500];
646 sprintf(mess," Selection de groupe topologique");
647 app.affiche(mess);
648 MG_FILE gest(nomfichier);
649 MG_GEOMETRIE* mggeo;
650 if (numgeo==0) mggeo=gest.get_mg_geometrie(numgeo); else mggeo=gest.get_mg_geometrieid(numgeo);
651 MG_GROUPE_TOPOLOGIQUE* mggt;
652 if (numgt==0)
653 {
654 mggt=new MG_GROUPE_TOPOLOGIQUE;
655 mggeo->ajouter_mg_groupe_topologique(mggt);
656 }
657 else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
658 MG_ELEMENT_TOPOLOGIQUE* ele;
659 ele=mggeo->get_mg_sommetid(numentite);
660 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
661 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
662 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
663 if (ele!=NULL)
664 {
665 mggt->ajouter(ele);
666 if (expand)
667 {
668 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
669 ele->get_topologie_sousjacente(&lst);
670 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
671 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
672 mggt->ajouter(ele2);
673 }
674 }
675 gest.enregistrer(nomfichier);
676 }
677 if (app.get_action()==30)
678 {
679 int numgeo,numgt,numentite;
680 bool expand;
681 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
682 app.recupere_parametre_int_avec_defaut(32,numgt,0);
683 app.recupere_parametre_int(33,numentite,(char*)"Numéro d'entité manquant");
684 app.recupere_parametre_bool_avec_defaut(34,expand,false);
685 if (app.get_erreur()==true) return 0;
686 char mess[500];
687 sprintf(mess," Deselection de groupe topologique");
688 app.affiche(mess);
689 MG_FILE gest(nomfichier);
690 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
691 MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
692 MG_ELEMENT_TOPOLOGIQUE* ele;
693 ele=mggeo->get_mg_sommetid(numentite);
694 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
695 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
696 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
697 if (ele!=NULL)
698 {
699 mggt->supprimer(ele);
700 if (expand)
701 {
702 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
703 ele->get_topologie_sousjacente(&lst);
704 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
705 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
706 mggt->supprimer(ele2);
707 }
708 }
709 gest.enregistrer(nomfichier);
710 }
711
712 if (app.get_action()==35)
713 {
714 int nummai;
715 double angle;
716 char fichierlog[500];
717 strcpy(fichierlog,"");
718 app.recupere_parametre_int_avec_defaut(19,nummai,-1);
719 app.recupere_parametre_double_avec_defaut(36,angle,0.03);
720 app.recupere_parametre_string_avec_defaut(37,fichierlog,(char*)fichierlog);
721 if (app.get_erreur()==true) return 0;
722 char mess[500];
723 sprintf(mess," Contenu d'un fichier MAGIC");
724 app.affiche(mess);
725 MG_FILE gest(nomfichier);
726 if (nummai!=-1)
727 {
728 MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
729 if (mai!=NULL)
730 {
731 MAILLEUR_ANALYSE m3d(mai);
732 m3d.active_affichage(app.affiche);
733 m3d.change_eps_angle_retourne(angle);
734 if (strlen(fichierlog)==0)
735 m3d.analyse();
736 else
737 m3d.analyse(fichierlog);
738 }
739 else
740 {
741 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
742 if (mai!=NULL)
743 {
744 MAILLEUR_ANALYSE m3d(mai);
745 m3d.active_affichage(app.affiche);
746 m3d.change_eps_angle_retourne(angle);
747 if (strlen(fichierlog)==0)
748 m3d.analyse();
749 else
750 m3d.analyse(fichierlog);
751 }
752
753 }
754
755 }
756
757 else
758 {
759 char message [5000];
760 int nbarbre=gest.get_nb_mg_arbre();
761 sprintf(message," \033[1;32m%d\033[1;33m arbres :",nbarbre);
762 for (int i=0;i<nbarbre;i++)
763 {
764 MG_ARBRE* arb=gest.get_mg_arbre(i);
765 sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,arb->get_id());
766 }
767 app.affiche(message);
768 for (int i=0;i<nbarbre;i++)
769 {
770 MG_ARBRE* arb=gest.get_mg_arbre(i);
771 sprintf(message," arbre \033[1;31m%lu\033[1;33m",arb->get_id());
772 app.affiche(message);
773 int nbass=arb->get_nb_mg_assemblage();
774 sprintf(message," \033[1;32m%d\033[1;33m assemblages",nbass);
775 app.affiche(message);
776 int nbprim=arb->get_nb_mg_primitive();
777 sprintf(message," \033[1;32m%d\033[1;33m primitives",nbprim);
778 //for (int i=0;i<nbprim;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,arb->get_mg_primitive(i)->get_id());
779 app.affiche(message);
780 int nbope=arb->get_nb_mg_operateur_boolean();
781 sprintf(message," \033[1;32m%d\033[1;33m operateurs booleans",nbope);
782 app.affiche(message);
783 }
784 int nbgeo=gest.get_nb_mg_geometrie();
785 sprintf(message," \033[1;32m%d\033[1;33m geometries :",nbgeo);
786 for (int i=0;i<nbgeo;i++)
787 {
788 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
789 sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,geo->get_id());
790 }
791 app.affiche(message);
792 for (int i=0;i<nbgeo;i++)
793 {
794 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
795 sprintf(message," geometrie \033[1;31m%lu\033[1;33m",geo->get_id());
796 app.affiche(message);
797 int nbmg=geo->get_nb_mg_groupe_topologique();
798 sprintf(message," \033[1;32m%d\033[1;33m groupe topologique",nbmg);
799 for (int j=0;j<nbmg;j++)
800 {
801 MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
802 sprintf(message,"%s \033[1;31m%lu\033[1;33m ",message,mggp->get_id());
803 }
804 app.affiche(message);
805 int nbvolume=geo->get_nb_mg_volume();
806 if (nbvolume==0) sprintf(message," \033[1;32m%d\033[1;33m volumes",geo->get_nb_mg_volume());
807 else sprintf(message," \033[1;32m%d\033[1;33m volumes : ",geo->get_nb_mg_volume());
808 for (int i=0;i<nbvolume;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_volume(i)->get_id());
809 app.affiche(message);
810 int nbcoque=geo->get_nb_mg_coque();
811 if (nbcoque==0) sprintf(message," \033[1;32m%d\033[1;33m coques",geo->get_nb_mg_coque());
812 else sprintf(message," \033[1;32m%d\033[1;33m coques : ",geo->get_nb_mg_coque());
813 for (int i=0;i<nbcoque;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_coque(i)->get_id());
814 app.affiche(message);
815 int nbpoutre=geo->get_nb_mg_poutre();
816 if (nbpoutre==0) sprintf(message," \033[1;32m%d\033[1;33m poutres",geo->get_nb_mg_poutre());
817 else sprintf(message," \033[1;32m%d\033[1;33m poutres : ",geo->get_nb_mg_poutre());
818 for (int i=0;i<nbpoutre;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_poutre(i)->get_id());
819 app.affiche(message);
820 sprintf(message," \033[1;32m%d\033[1;33m coquilles",geo->get_nb_mg_coquille());
821 app.affiche(message);
822 sprintf(message," \033[1;32m%d\033[1;33m faces",geo->get_nb_mg_face());
823 app.affiche(message);
824 sprintf(message," \033[1;32m%d\033[1;33m aretes",geo->get_nb_mg_arete());
825 app.affiche(message);
826 sprintf(message," \033[1;32m%d\033[1;33m sommets",geo->get_nb_mg_sommet());
827 app.affiche(message);
828 int nbgef=geo->get_nb_mg_geom_fonction();
829 if (nbgef==0) sprintf(message," \033[1;32m%d\033[1;33m fonctions geometriques",nbgef);
830 else sprintf(message," \033[1;32m%d\033[1;33m fonctions geometriques : ",nbgef);
831 for (int i=0;i<nbgef;i++) sprintf(message,"%s \033[1;31m%lu\033[1;33m",message,geo->get_mg_geom_fonction(i)->get_id());
832 app.affiche(message);
833
834 }
835 int nbmai=gest.get_nb_mg_maillage();
836 sprintf(message," \033[1;32m%d\033[1;33m maillage geometrique :",nbmai);
837 app.affiche(message);
838 for (int i=0;i<nbmai;i++)
839 {
840 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
841 sprintf(message," maillage geometrique \033[1;31m%lu\033[1;33m ",mai->get_id());
842 app.affiche(message);
843 sprintf(message," \033[1;32m%d\033[1;33m noeuds",mai->get_nb_mg_noeud());
844 app.affiche(message);
845 sprintf(message," \033[1;32m%d\033[1;33m segments",mai->get_nb_mg_segment());
846 app.affiche(message);
847 sprintf(message," \033[1;32m%d\033[1;33m triangles",mai->get_nb_mg_triangle());
848 app.affiche(message);
849 sprintf(message," \033[1;32m%d\033[1;33m quadrangles",mai->get_nb_mg_quadrangle());
850 app.affiche(message);
851 sprintf(message," \033[1;32m%d\033[1;33m tetras",mai->get_nb_mg_tetra());
852 app.affiche(message);
853 sprintf(message," \033[1;32m%d\033[1;33m hexas",mai->get_nb_mg_hexa());
854 app.affiche(message);
855 sprintf(message," \033[1;32m%d\033[1;33m pentas",mai->get_nb_mg_penta());
856 app.affiche(message);
857 }
858 int nbmaif=gest.get_nb_fem_maillage();
859 sprintf(message," \033[1;32m%d\033[1;33m maillage FEM :",nbmaif);
860 app.affiche(message);
861 for (int i=0;i<nbmaif;i++)
862 {
863 FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
864 sprintf(message," maillage FEM \033[1;31m%lu\033[1;33m ",maif->get_id());
865 app.affiche(message);
866 sprintf(message," \033[1;32m%d\033[1;33m noeuds",maif->get_nb_fem_noeud());
867 app.affiche(message);
868 sprintf(message," \033[1;32m%d\033[1;33m elements 1D",maif->get_nb_fem_element1());
869 app.affiche(message);
870 sprintf(message," \033[1;32m%d\033[1;33m elements 2D",maif->get_nb_fem_element2());
871 app.affiche(message);
872 sprintf(message," \033[1;32m%d\033[1;33m elements 3D",maif->get_nb_fem_element3());
873 app.affiche(message);
874 double rx,ry,rz;
875 maif->calcul_somme_reaction(rx,ry,rz);
876 sprintf(message," Reactions : \n Rx=\033[1;31m%le\033[1;33m\n Ry=\033[1;31m%le\033[1;33m\n Rz=\033[1;31m%le\033[1;33m",rx,ry,rz);
877 app.affiche(message);
878
879 }
880 int nbsol=gest.get_nb_mg_solution();
881 sprintf(message," \033[1;32m%d\033[1;33m solution maillage geometrique :",nbsol);
882 app.affiche(message);
883 message[0]=0;
884 for (int i=0;i<nbsol;i++)
885 {
886 MG_SOLUTION* sol=gest.get_mg_solution(i);
887 char legende[500];
888 legende[0]=0;
889 message[0]=0;
890 for (int j=0;j<sol->get_nb_champ();j++)
891 sprintf(legende,"%s%s_%s ",legende,(char*)sol->get_nom().c_str(),(char*)sol->get_legende(j).c_str());
892 sprintf(message," \033[1;31m%lu(%s)\033[1;33m ",sol->get_id(),legende);
893 app.affiche(message);
894 }
895 int nbsolf=gest.get_nb_fem_solution();
896 sprintf(message," \033[1;32m%d\033[1;33m solution maillage FEM :",nbsolf);
897 app.affiche(message);
898 message[0]=0;
899 for (int i=0;i<nbsolf;i++)
900 {
901 FEM_SOLUTION* sol=gest.get_fem_solution(i);
902 char legende[500];
903 legende[0]=0;
904 message[0]=0;
905 for (int j=0;j<sol->get_nb_champ();j++)
906 sprintf(legende,"%s%s_%s ",legende,(char*)sol->get_nom().c_str(),(char*)sol->get_legende(j).c_str());
907 sprintf(message," \033[1;31m%lu(%s)\033[1;33m ",sol->get_id(),legende);
908 app.affiche(message);
909 }
910 }
911 }
912 if (app.get_action()==38)
913 {
914 int nummai;
915 int numsol1,numsol2,numsol3;
916 int numchamp1,numchamp2,numchamp3;
917 double coef;
918 app.recupere_parametre_int_avec_defaut(19,nummai,0);
919 app.recupere_parametre_int(40,numsol1,(char*)"Numéro solution 1 manquant");
920 app.recupere_parametre_int(41,numsol2,(char*)"Numéro solution 2 manquant");
921 app.recupere_parametre_int(42,numsol3,(char*)"Numéro solution 3 manquant");
922 app.recupere_parametre_int(43,numchamp1,(char*)"Numéro champs 1 manquant");
923 app.recupere_parametre_int(44,numchamp2,(char*)"Numéro champs 2 manquant");
924 app.recupere_parametre_int(45,numchamp3,(char*)"Numéro champs 3 manquant");
925 app.recupere_parametre_double_avec_defaut(61,coef,0.);
926 if (app.get_erreur()==true) return 0;
927 char mess[500];
928 sprintf(mess," Calcul de deforme");
929 app.affiche(mess);
930 MG_FILE gest(nomfichier);
931 FEM_MAILLAGE* mai;
932 if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
933 FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
934 FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
935 FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
936 mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
937 if (coef>1e-16)
938 {
939 sprintf(mess," Création du maillage deforme");
940 app.affiche(mess);
941 MG_MAILLAGE* mgmai=new MG_MAILLAGE(mai,coef);
942 }
943 sprintf(mess," Enregistrement");
944 app.affiche(mess);
945 gest.enregistrer(nomfichier);
946 }
947 if (app.get_action()==39)
948 {
949 int numgeo;
950 app.recupere_parametre_int_avec_defaut (31,numgeo,0);
951 if (app.get_erreur()==true) return 0;
952 char mess[500];
953 sprintf(mess," Fusion de géométrie");
954 app.affiche(mess);
955 MG_FILE gest(nomfichier);
956 MG_GEOMETRIE* mggeo;
957 if (numgeo==0) mggeo=gest.get_mg_geometrie(numgeo); else mggeo=gest.get_mg_geometrieid(numgeo);
958 VCT_MULTI_MODELE fusion(mggeo);
959 fusion.recherche_identite();
960 gest.enregistrer(nomfichier);
961 }
962 if ((app.get_action()==46) || (app.get_action()==47))
963 {
964 int numgeo;
965 char ccf[500];
966 app.recupere_parametre_int_avec_defaut (31,numgeo,0);
967 app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
968 if (app.get_erreur()==true) return 0;
969 char mess[500];
970 sprintf(mess," Selection de condition aux limites");
971 unsigned long identity;
972 char typeccf[3];
973 char effortsuiv[3]={'N','S',0};
974 typeccf[2]=0;
975 double valccf=0.5; // Valeur par défaut
976 sscanf(ccf,"%lu:%c%c:%le:%c%c\n",&identity,&typeccf[0],&typeccf[1],&valccf,&effortsuiv[0],&effortsuiv[1]);
977 MC_GESTIONNAIRE mcgest;
978 int res=mcgest.existe(typeccf);
979 if (res==0)
980 {
981 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
982 app.affiche(mess);
983 return 0;
984 }
985 std::string effortsuivstr=effortsuiv;
986 if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
987 {
988 sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
989 app.affiche(mess);
990 return 0;
991 }
992 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
993 app.affiche(mess);
994 MG_FILE gest(nomfichier);
995 MG_GEOMETRIE* geo;
996 if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
997 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
998 MG_VOLUME* ele;
999 ele=geo->get_mg_volumeid(identity);
1000 if (ele!=NULL) liste.ajouter(ele);
1001 else
1002 {
1003 MG_COQUE* ele;
1004 ele=geo->get_mg_coqueid(identity);
1005 if (ele!=NULL) liste.ajouter(ele);
1006 else
1007 {
1008 MG_POUTRE* ele;
1009 ele=geo->get_mg_poutreid(identity);
1010 if (ele!=NULL) liste.ajouter(ele);
1011 else
1012 {
1013 MG_FACE* ele;
1014 ele=geo->get_mg_faceid(identity);
1015 if (ele!=NULL) liste.ajouter(ele);
1016 else
1017 {
1018 MG_ARETE* ele;
1019 ele=geo->get_mg_areteid(identity);
1020 if (ele!=NULL) liste.ajouter(ele);
1021 else
1022 {
1023 MG_SOMMET* ele;
1024 ele=geo->get_mg_sommetid(identity);
1025 if (ele!=NULL) liste.ajouter(ele);
1026 }
1027 }
1028 }
1029 }
1030 }
1031 if (app.get_action()==47)
1032 {
1033 int nb=liste.get_nb();
1034 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1035 }
1036 int nb=liste.get_nb();
1037 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,effortsuiv);
1038 gest.enregistrer(nomfichier);
1039 }
1040 if ((app.get_action()==94) || (app.get_action()==95))
1041 {
1042 int numgeo;
1043 char ccf[500];
1044 app.recupere_parametre_int_avec_defaut (31,numgeo,0);
1045 app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
1046 if (app.get_erreur()==true) return 0;
1047 char mess[500];
1048 sprintf(mess," Selection de condition aux limites");
1049 unsigned long identity;
1050 char typeccf[3];
1051 char effortsuiv[3]={'N','S',0};
1052 typeccf[2]=0;
1053 unsigned long valccf=0; // Valeur par défaut
1054 sscanf(ccf,"%lu:%c%c:%lu:%c%c\n",&identity,&typeccf[0],&typeccf[1],&valccf,&effortsuiv[0],&effortsuiv[1]);
1055 MC_GESTIONNAIRE mcgest;
1056 int res=mcgest.existe(typeccf);
1057 if (res==0)
1058 {
1059 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
1060 app.affiche(mess);
1061 return 0;
1062 }
1063 std::string effortsuivstr=effortsuiv;
1064 if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
1065 {
1066 sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
1067 app.affiche(mess);
1068 return 0;
1069 }
1070 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
1071 app.affiche(mess);
1072 MG_FILE gest(nomfichier);
1073 MG_GEOMETRIE* geo;
1074 if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1075 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
1076 MG_VOLUME* ele;
1077 ele=geo->get_mg_volumeid(identity);
1078 if (ele!=NULL) liste.ajouter(ele);
1079 else
1080 {
1081 MG_COQUE* ele;
1082 ele=geo->get_mg_coqueid(identity);
1083 if (ele!=NULL) liste.ajouter(ele);
1084 else
1085 {
1086 MG_POUTRE* ele;
1087 ele=geo->get_mg_poutreid(identity);
1088 if (ele!=NULL) liste.ajouter(ele);
1089 else
1090 {
1091 MG_FACE* ele;
1092 ele=geo->get_mg_faceid(identity);
1093 if (ele!=NULL) liste.ajouter(ele);
1094 else
1095 {
1096 MG_ARETE* ele;
1097 ele=geo->get_mg_areteid(identity);
1098 if (ele!=NULL) liste.ajouter(ele);
1099 else
1100 {
1101 MG_SOMMET* ele;
1102 ele=geo->get_mg_sommetid(identity);
1103 if (ele!=NULL) liste.ajouter(ele);
1104 }
1105 }
1106 }
1107 }
1108 }
1109 if (app.get_action()==95)
1110 {
1111 int nb=liste.get_nb();
1112 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1113 }
1114 int nb=liste.get_nb();
1115 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,effortsuiv);
1116 gest.enregistrer(nomfichier);
1117 }
1118 if ((app.get_action()==96) || (app.get_action()==97))
1119 {
1120 int numgeo;
1121 char ccf[500];
1122 app.recupere_parametre_int_avec_defaut (31,numgeo,0);
1123 app.recupere_parametre_string(49,ccf,(char*)"Valeur de la condition aux limites manquant");
1124 if (app.get_erreur()==true) return 0;
1125 char mess[500];
1126 sprintf(mess," Selection de condition aux limites");
1127 unsigned long identity;
1128 char typeccf[3];
1129 char effortsuiv[3]={'N','S',0};
1130 typeccf[2]=0;
1131 char valccf[500];
1132 char formule[500];
1133 sscanf(ccf,"%lu:%c%c:%s:%c%c\n",&identity,&typeccf[0],&typeccf[1],formule,&effortsuiv[0],&effortsuiv[1]);
1134 OT_CHAINE ot;
1135 std::vector<std::string> variable=ot.split(formule,':');
1136 strcpy(valccf,variable[0].c_str());
1137 std::vector<std::string> listvariable=ot.split(variable[1].c_str(),',');
1138 MC_GESTIONNAIRE mcgest;
1139 int res=mcgest.existe(typeccf);
1140 if (res==0)
1141 {
1142 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
1143 app.affiche(mess);
1144 return 0;
1145 }
1146 std::string effortsuivstr=effortsuiv;
1147 if (!((effortsuivstr=="NS")||(effortsuivstr=="SU")))
1148 {
1149 sprintf(mess," ERREUR!!!! type de suivi des efforts inconnus");
1150 app.affiche(mess);
1151 return 0;
1152 }
1153 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
1154 app.affiche(mess);
1155 MG_FILE gest(nomfichier);
1156 MG_GEOMETRIE* geo;
1157 if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1158 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
1159 MG_VOLUME* ele;
1160 ele=geo->get_mg_volumeid(identity);
1161 if (ele!=NULL) liste.ajouter(ele);
1162 else
1163 {
1164 MG_COQUE* ele;
1165 ele=geo->get_mg_coqueid(identity);
1166 if (ele!=NULL) liste.ajouter(ele);
1167 else
1168 {
1169 MG_POUTRE* ele;
1170 ele=geo->get_mg_poutreid(identity);
1171 if (ele!=NULL) liste.ajouter(ele);
1172 else
1173 {
1174 MG_FACE* ele;
1175 ele=geo->get_mg_faceid(identity);
1176 if (ele!=NULL) liste.ajouter(ele);
1177 else
1178 {
1179 MG_ARETE* ele;
1180 ele=geo->get_mg_areteid(identity);
1181 if (ele!=NULL) liste.ajouter(ele);
1182 else
1183 {
1184 MG_SOMMET* ele;
1185 ele=geo->get_mg_sommetid(identity);
1186 if (ele!=NULL) liste.ajouter(ele);
1187 }
1188 }
1189 }
1190 }
1191 }
1192 if (app.get_action()==97)
1193 {
1194 int nb=liste.get_nb();
1195 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
1196 }
1197 int nb=liste.get_nb();
1198 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf,listvariable,effortsuiv);
1199 gest.enregistrer(nomfichier);
1200 }
1201 if (app.get_action()==48)
1202 {
1203 char mess[500];
1204 sprintf(mess," Liste des conditions aux limites disponibles");
1205 app.affiche(mess);
1206 MC_GESTIONNAIRE mcgest;
1207 int ok=0;
1208 do
1209 {
1210 std::string code;
1211 std::string description;
1212 int res=mcgest.get_description(code,description);
1213 if (res)
1214 {
1215 sprintf(mess," %s : %s",code.c_str(),description.c_str());
1216 app.affiche(mess);
1217 }
1218 else ok=1;
1219 }
1220 while (ok==0);
1221 }
1222 if (app.get_action()==50)
1223 {
1224 int numgeo,nummai,numcoque;
1225 char fichierout[500];
1226 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1227 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1228 app.recupere_parametre_int_avec_defaut(51,numcoque,0);
1229 app.recupere_parametre_string_avec_defaut(5,fichierout,nomfichier);
1230 if (app.get_erreur()==true) return 0;
1231 char mess[500];
1232 sprintf(mess," Orientation d'une coque");
1233 app.affiche(mess);
1234 MG_FILE gest(nomfichier);
1235 MG_GEOMETRIE* geo;
1236 if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1237 MG_MAILLAGE* mai;
1238 if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
1239 MG_COQUE* coque;
1240 if (numcoque==0) coque=mai->get_mg_geometrie()->get_mg_coque(numcoque); else coque=mai->get_mg_geometrie()->get_mg_coqueid(numcoque);
1241 coque->orienter(mai);
1242 gest.enregistrer(fichierout);
1243 }
1244 if (app.get_action()==52)
1245 {
1246 double epsf,unite;
1247 app.recupere_parametre_double_avec_defaut(10,unite,1.);
1248 app.recupere_parametre_double_avec_defaut(53,epsf,0.0001);
1249 if (app.get_erreur()==true) return 0;
1250 char mess[500];
1251 sprintf(mess," Conversion STL vers MAGiC");
1252 app.affiche(mess);
1253 MG_GESTIONNAIRE gest;
1254 STL_IMPORT stlimport;
1255 stlimport.change_eps(epsf);
1256 stlimport.importer(gest,nomfichier) ;
1257 strncpy(chaine,nomfichier,p-nomfichier);
1258 std::string namefic=chaine;
1259 namefic=namefic + ".magic";
1260 int nb=gest.get_nb_mg_geometrie();
1261 for (int i=0;i<nb;i++)
1262 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
1263 gest.enregistrer(namefic.c_str());
1264 }
1265 if (app.get_action()==54)
1266 {
1267 int nummai;
1268 char coderesu[10];
1269 bool elastique;
1270 bool elastique_gd;
1271 bool plastique;
1272 bool thermique;
1273 bool conplane;
1274 bool defplane;
1275 bool rigiditeconplane;
1276 bool rigiditedefplane;
1277 bool creeparam;
1278 bool rigidite;
1279 char nomparam[500];
1280 char nomfichierout[500];
1281 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1282 app.recupere_parametre_string_avec_defaut(7,coderesu,(char*)"11111111");
1283 app.recupere_parametre_bool_avec_defaut(63,elastique,false);
1284 app.recupere_parametre_bool_avec_defaut(64,thermique,false);
1285 app.recupere_parametre_bool_avec_defaut(65,conplane,false);
1286 app.recupere_parametre_bool_avec_defaut(66,defplane,false);
1287 app.recupere_parametre_bool_avec_defaut(85,creeparam,false);
1288 app.recupere_parametre_bool_avec_defaut(88,elastique_gd,false);
1289 app.recupere_parametre_bool_avec_defaut(89,plastique,false);
1290 app.recupere_parametre_bool_avec_defaut(99,rigidite,false);
1291 app.recupere_parametre_bool_avec_defaut(100,rigiditeconplane,false);
1292 app.recupere_parametre_bool_avec_defaut(101,rigiditedefplane,false);
1293 if (!creeparam) app.recupere_parametre_string(1,nomfichier,(char*)"Fichier entrant manquant");
1294 app.recupere_parametre_string(84,nomparam,(char*)"Fichier parametre manquant");
1295 app.recupere_parametre_string_avec_defaut(5,nomfichierout,nomfichier);
1296 if (app.get_erreur()==true) return 0;
1297 if (creeparam)
1298 {
1299 char mess[500];
1300 sprintf(mess," Calcul ASTER\n\nCréation d'un fichier parametre\n");
1301 app.affiche(mess);
1302 MG_EXPORT exp;
1303 exp.ecrire_params_aster(nomparam);
1304 }
1305 else
1306 {
1307 char mess[500];
1308 sprintf(mess," Calcul ASTER");
1309 app.affiche(mess);
1310 char nometude[1000];
1311 char *p=strchr(nomfichierout,'.');
1312 strncpy(nometude,nomfichierout,p-nomfichierout);
1313 nometude[p-nomfichierout]=0;
1314 MG_FILE gest(nomfichier);
1315 FEM_MAILLAGE* mai;
1316 if (nummai==0) mai=gest.get_fem_maillage(nummai); else mai=gest.get_fem_maillageid(nummai);
1317 MGASTER mgaster;
1318 mgaster.active_affichage(app.affiche);
1319 if (elastique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE,coderesu);
1320 if (rigidite) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE,coderesu);
1321 if (conplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::CONTRAINTE_PLANE,coderesu);
1322 if (defplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::DEFORMATION_PLANE,coderesu);
1323 if (rigiditeconplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE_CONTRAINTE_PLANE,coderesu);
1324 if (rigiditedefplane) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::RIGIDITE_DEFORMATION_PLANE,coderesu);
1325 if (thermique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::THERMIQUE,(char*)"");
1326 if (elastique_gd) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::ELASTIQUE_GROT_GDEF,coderesu);
1327 if (plastique) mgaster.calcule(nomparam,mai,nometude,MAGIC::CALCUL_ASTER::PLASTIQUE,coderesu);
1328
1329 }
1330 }
1331 if (app.get_action()==56)
1332 {
1333 if (app.get_erreur()==true) return 0;
1334 char mess[500];
1335 sprintf(mess," Conversion carte de taille nouvelle version vers GMSH");
1336 app.affiche(mess);
1337 FCT_TAILLE_FEM_SOLUTION carte(nomfichier);
1338 strncpy(chaine,nomfichier,p-nomfichier);
1339 std::string namefic=chaine;
1340 MG_EXPORT exp;
1341 exp.gmsh(&carte,namefic);
1342 sprintf(mess," Carte de taille FEM : Creation de %s.msh",namefic.c_str());
1343 app.affiche(mess);
1344 }
1345 if ((app.get_action()==58) || (app.get_action()==60))
1346 {
1347 int nummai;
1348 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1349 char nomcarte[500];
1350 if (app.get_action()==58)
1351 app.recupere_parametre_string(59,nomcarte,(char*)"Fichier carte manquant");
1352 if (app.get_action()==60)
1353 app.recupere_parametre_string(59,nomcarte,(char*)"Fichier carte manquant");
1354 if (app.get_erreur()==true) return 0;
1355 char mess[500];
1356 sprintf(mess," Comparaison de la taille reelle d'un maillage avec la carte de taille");
1357 app.affiche(mess);
1358 sprintf(mess," Lecture fichier MAGiC");
1359 app.affiche(mess);
1360 MG_FILE gest(nomfichier);
1361 MG_MAILLAGE* mai;
1362 if (nummai==0) mai=gest.get_mg_maillage(nummai); else mai=gest.get_mg_maillageid(nummai);
1363 sprintf(mess," Lecture fichier carte de taille");
1364 app.affiche(mess);
1365 FCT_TAILLE *carte;
1366 if (app.get_action()==58)
1367 carte=new FCT_GENERATEUR_3D<4>(nomcarte);
1368 if (app.get_action()==60)
1369 carte=new FCT_TAILLE_FEM_SOLUTION(nomcarte);
1370 char nometude[1000];
1371 char *p=strchr(nomfichier,'.');
1372 strncpy(nometude,nomfichier,p-nomfichier);
1373 nometude[p-nomfichier]=0;
1374 char nomsolution[500];
1375 sprintf(nomsolution,"%s_comp%lu.sol",nometude,mai->get_id());
1376 sprintf(mess," Comparaison");
1377 app.affiche(mess);
1378 MAILLEUR_ANALYSE m3d(mai);
1379 sprintf(mess," Respect global de la taille demandee");
1380 app.affiche(mess);
1381 double tabtaille[3];
1382 m3d.compare_maillage_carte_isotrope(carte,nomsolution,tabtaille);
1383 sprintf(mess," Nombre de maille théorique : %lf - Nombre de maille reelle : %lf",tabtaille[0],tabtaille[1]);
1384 app.affiche(mess);
1385 sprintf(mess," Erreur : %lf%%",tabtaille[2]);
1386 app.affiche(mess);
1387 MG_SOLUTION *sol=gest.get_mg_solution(gest.get_nb_mg_solution()-1);
1388 sol->active_solution(2);
1389 LISTE_MG_NOEUD::iterator it;
1390 int tab[201];
1391 for (int i=0;i<201;i++) tab[i]=0;
1392 for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
1393 {
1394 double val=no->get_solution();
1395 int valint=(int)val+100;
1396 if (valint<0) valint=0;
1397 if (valint>200) valint=200;
1398 tab[valint]++;
1399 }
1400 sprintf(mess," Repartition du respect de la taille demandee");
1401 app.affiche(mess);
1402 char nomanalyse[500];
1403 sprintf(nomanalyse,"%s_comp%lu.csv",nometude,mai->get_id());
1404 FILE *in=fopen(nomanalyse,"wt");
1405 for (int i=0;i<201;i++)
1406 if (i<101) fprintf(in,"%d;%d;\n",i-100,tab[i]);
1407 else fprintf(in,"%d;%d;%d;\n",i-100,tab[i],tab[i]+tab[200-i]);
1408 fclose(in);
1409 sprintf(mess," Enregistrement");
1410 app.affiche(mess);
1411 sprintf(nomsolution,"%s_comp%lu.magic",nometude,mai->get_id());
1412 gest.enregistrer(nomsolution);
1413 delete carte;
1414 }
1415 if (app.get_action()==57)
1416 {
1417 int nummai;
1418 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1419 if (app.get_erreur()==true) return 0;
1420 char mess[500];
1421 sprintf(mess," Conversion mg maillage en stl");
1422 app.affiche(mess);
1423 MG_FILE gest(nomfichier);
1424 strncpy(chaine,nomfichier,p-nomfichier);
1425 MG_MAILLAGE* mai;
1426 if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1427 sprintf(chaine,"%s%lu",chaine,mai->get_id());
1428 std::string namefic=chaine;
1429 MG_EXPORT exp;
1430 exp.stl(mai,namefic);
1431 sprintf(mess," creation de %s.stl",namefic.c_str());
1432 app.affiche(mess);
1433
1434 }
1435 if (app.get_action()==105)
1436 {
1437 int nummai;
1438 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1439 if (app.get_erreur()==true) return 0;
1440 char mess[500];
1441 sprintf(mess," Conversion mg maillage en off");
1442 app.affiche(mess);
1443 MG_FILE gest(nomfichier);
1444 strncpy(chaine,nomfichier,p-nomfichier);
1445 MG_MAILLAGE* mai;
1446 if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1447 sprintf(chaine,"%s%lu",chaine,mai->get_id());
1448 std::string namefic=chaine;
1449 MG_EXPORT exp;
1450 exp.off(mai,namefic);
1451 sprintf(mess," creation de %s.off",namefic.c_str());
1452 app.affiche(mess);
1453
1454 }
1455 if (app.get_action()==62)
1456 {
1457 int nummai;
1458 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1459 char outfile[500];
1460 app.recupere_parametre_string(5,outfile,(char*)"Fichier de sortie manquant");
1461 if (app.get_erreur()==true) return 0;
1462 char mess[500];
1463 sprintf(mess," Détachement d'un mg maillage de sa geometrie");
1464 app.affiche(mess);
1465 MG_FILE gest(nomfichier);
1466 MG_MAILLAGE* mai;
1467 if (nummai==0) mai=gest.get_mg_maillage(0); else mai=gest.get_mg_maillageid(nummai);
1468 MG_GESTIONNAIRE gest2;
1469 MG_MAILLAGE *mai2=mai->detacher(&gest2);
1470 sprintf(mess," Enregistrement");
1471 app.affiche(mess);
1472 gest2.enregistrer(outfile);
1473 }
1474 if (app.get_action()==67)
1475 {
1476 int numsol;
1477 int numchamp;
1478 int numare;
1479 int numgeo;
1480 char outfile[500];
1481 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1482 app.recupere_parametre_int_avec_defaut(68,numsol,0);
1483 app.recupere_parametre_int_avec_defaut(69,numchamp,0);
1484 app.recupere_parametre_int_avec_defaut(71,numare,0);
1485 app.recupere_parametre_string(70,outfile,(char*)"Fichier de sortie manquant");
1486 if (app.get_erreur()==true) return 0;
1487 MG_FILE gest(nomfichier);
1488 FEM_SOLUTION* sol;
1489 if (numsol==0) sol=gest.get_fem_solution(0); else sol=gest.get_fem_solutionid(numsol);
1490 MG_GEOMETRIE* geo;
1491 if (numgeo==0) geo=gest.get_mg_geometrie(0); else geo=gest.get_mg_geometrie(numgeo);
1492 MG_ARETE *are;
1493 if (numare==0) are=geo->get_mg_arete(0); else are=geo->get_mg_areteid(numare);
1494 char mess[500];
1495 sprintf(mess," Sonde de %s_%s sur l'arète %lu",(char*)sol->get_nom().c_str(),(char*)sol->get_legende(numchamp).c_str(),are->get_id());
1496 app.affiche(mess);
1497 are->recupere_resultat(sol,numchamp,outfile);
1498
1499 }
1500 if (app.get_action()==72)
1501 {
1502 int numsol;
1503 int numchamp;
1504 int nummai;
1505 char outfile[500];
1506 char infile[500];
1507 app.recupere_parametre_int_avec_defaut(68,numsol,0);
1508 app.recupere_parametre_int_avec_defaut(69,numchamp,0);
1509 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1510 app.recupere_parametre_string(73,infile,(char*)"Fichier de solution manquant");
1511 app.recupere_parametre_string_avec_defaut(5,outfile,infile);
1512 if (app.get_erreur()==true) return 0;
1513 app.affiche((char*)"Lecture du fichier MAGIC");
1514 MG_FILE gest(nomfichier);
1515 app.affiche((char*)"Lecture de la solution a projeter");
1516 MG_FILE gestsol(infile);
1517 FEM_SOLUTION* sol;
1518 if (numsol==0) sol=gestsol.get_fem_solution(0); else sol=gestsol.get_fem_solutionid(numsol);
1519 FEM_MAILLAGE* fem;
1520 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
1521 char mess[500];
1522 sprintf(mess," Projection de la solution %s_%s du maillage %lu sur le maillage %lu",(char*)sol->get_nom().c_str(),(char*)sol->get_legende(numchamp).c_str(),sol->get_maillage()->get_id(),fem->get_id());
1523 app.affiche(mess);
1524 FEM_MAILLAGE_OUTILS otfem;
1525 int res=otfem.projete_solution_maillage(sol,numchamp,fem);
1526 if (res==MAGIC::PROJECTION::SUCCES) gest.enregistrer(outfile);
1527 if (res==MAGIC::PROJECTION::DIMENSION_MAILLAGE_INCOMPATIBLE) app.affiche((char*)" Erreur : Dimension des maillages incompatibles");
1528 if (res==MAGIC::PROJECTION::TYPE_SOLUTION_INCORRECT) app.affiche((char*)" Erreur : Solution a projeter n'est pas exprimer aux noeuds");
1529 if (res==MAGIC::PROJECTION::NON_IMPLEMENTER) app.affiche((char*)" Erreur : Cas de projection non implementer");
1530 }
1531 if (app.get_action()==74)
1532 {
1533 int numsol1;
1534 int numchamp1;
1535 int numsol2;
1536 int numchamp2;
1537 char outfile[500];
1538 app.recupere_parametre_int_avec_defaut(40,numsol1,0);
1539 app.recupere_parametre_int_avec_defaut(41,numsol2,0);
1540 app.recupere_parametre_int_avec_defaut(43,numchamp1,0);
1541 app.recupere_parametre_int_avec_defaut(44,numchamp2,0);
1542 app.recupere_parametre_string_avec_defaut(5,outfile,nomfichier);
1543 if (app.get_erreur()==true) return 0;
1544 MG_FILE gest(nomfichier);
1545 FEM_SOLUTION* sol1;
1546 if (numsol1==0) sol1=gest.get_fem_solution(0); else sol1=gest.get_fem_solutionid(numsol1);
1547 FEM_SOLUTION* sol2;
1548 if (numsol2==0) sol2=gest.get_fem_solution(0); else sol2=gest.get_fem_solutionid(numsol2);
1549 char mess[500];
1550 sprintf(mess," Comparaison de %s_%s et de %s_%s",(char*)sol1->get_nom().c_str(),(char*)sol1->get_legende(numchamp1).c_str(),(char*)sol2->get_nom().c_str(),(char*)sol2->get_legende(numchamp2).c_str());
1551 app.affiche(mess);
1552 FEM_MAILLAGE_OUTILS otfem;
1553 otfem.compare_champs_solution(sol1,numchamp1,sol2,numchamp2);
1554 gest.enregistrer(outfile);
1555 }
1556 if (app.get_action()==76)
1557 {
1558 bool bnoeud,belement1,belement2,belement3,bgelement1,bgelement2,bgelement3,belementnd;
1559 int nummai,numtopo;
1560 char out[500];
1561 app.recupere_parametre_string(5,out,(char*)"Fichier sortant manquant");
1562 app.recupere_parametre_int_avec_defaut(19,nummai,0);
1563 app.recupere_parametre_bool_avec_defaut(77,bnoeud,false);
1564 app.recupere_parametre_bool_avec_defaut(78,belement1,false);
1565 app.recupere_parametre_bool_avec_defaut(79,belement2,false);
1566 app.recupere_parametre_bool_avec_defaut(80,belement3,false);
1567 app.recupere_parametre_bool_avec_defaut(91,bgelement3,false);
1568 app.recupere_parametre_bool_avec_defaut(92,bgelement3,false);
1569 app.recupere_parametre_bool_avec_defaut(93,bgelement3,false);
1570 app.recupere_parametre_bool_avec_defaut(102,belementnd,false);
1571 app.recupere_parametre_int_avec_defaut(81,numtopo,0);
1572 if (app.get_erreur()==true) return 0;
1573 char mess[500];
1574 sprintf(mess," Extraction de tables de valeurs");
1575 app.affiche(mess);
1576 MG_FILE gest(nomfichier);
1577 FEM_MAILLAGE *fem;
1578 MG_ELEMENT_TOPOLOGIQUE *topo;
1579 if (nummai==0) fem=gest.get_fem_maillage(0); else fem=gest.get_fem_maillageid(nummai);
1580 if (numtopo==0) topo=NULL;
1581 else
1582 {
1583 MG_GEOMETRIE* geo=fem->get_mg_geometrie();
1584 topo=geo->get_mg_faceid(numtopo);
1585 if (topo==NULL) topo=geo->get_mg_volumeid(numtopo);
1586 if (topo==NULL) topo=geo->get_mg_areteid(numtopo);
1587 if (topo==NULL) topo=geo->get_mg_sommetid(numtopo);
1588 }
1589 MG_TABLE tab;
1590 if (bnoeud)
1591 {
1592 app.affiche((char*)" Création de la table aux noeuds");
1593 char nomout[500];
1594 sprintf(nomout,"%s_noeud.csv",out);
1595 tab.info_noeud(fem,nomout,topo);
1596 }
1597 if (belement1)
1598 {
1599 app.affiche((char*)" Création de la table aux elements 1D");
1600 char nomout[500];
1601 sprintf(nomout,"%s_element1.csv",out);
1602 tab.info_element1(fem,nomout,topo);
1603 }
1604 if (belement2)
1605 {
1606 app.affiche((char*)" Création de la table aux elements 2D");
1607 char nomout[500];
1608 sprintf(nomout,"%s_element2.csv",out);
1609 tab.info_element2(fem,nomout,topo);
1610 }
1611 if (belement3)
1612 {
1613 app.affiche((char*)" Création de la table aux elements 3D");
1614 char nomout[500];
1615 sprintf(nomout,"%s_element3.csv",out);
1616 tab.info_element3(fem,nomout,topo);
1617 }
1618 if (belementnd)
1619 {
1620 app.affiche((char*)" Création de la table aux elements de solutions mixtes");
1621 char nomout[500];
1622 sprintf(nomout,"%s_elementnd.csv",out);
1623 tab.info_element_nd(fem,nomout,topo);
1624 }
1625 if (bgelement1)
1626 {
1627 app.affiche((char*)" Création de la table aux point de gauss des elements 1D");
1628 char nomout[500];
1629 sprintf(nomout,"%s_elementgauss1.csv",out);
1630 tab.info_element_gauss1(fem,nomout,topo);
1631 }
1632 if (bgelement2)
1633 {
1634 app.affiche((char*)" Création de la table aux point de gauss des elements 2D");
1635 char nomout[500];
1636 sprintf(nomout,"%s_elementgauss2.csv",out);
1637 tab.info_element_gauss2(fem,nomout,topo);
1638 }
1639 if (bgelement3)
1640 {
1641 app.affiche((char*)" Création de la table aux point de gauss des elements 3D");
1642 char nomout[500];
1643 sprintf(nomout,"%s_elementgauss3.csv",out);
1644 tab.info_element_gauss3(fem,nomout,topo);
1645 }
1646 }
1647 if (app.get_action()==82)
1648 {
1649 int numgeo;
1650 char out[500];
1651 char in[500];
1652 char fgmsh[500];
1653 app.recupere_parametre_string_avec_defaut(1,in,(char*)"");
1654 if (strcmp(in,"")==0)
1655 app.recupere_parametre_string(5,out,(char*)"Fichier sortant manquant");
1656 else
1657 app.recupere_parametre_string_avec_defaut(5,out,in);
1658 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1659 app.recupere_parametre_string(83,fgmsh,(char*)"Fichier GMSH manquant");
1660 if (app.get_erreur()==true) return 0;
1661 char mess[2000];
1662 sprintf(mess,"Importation d'un maillage GMSH");
1663 app.affiche(mess);
1664 MG_GESTIONNAIRE *gest;
1665 if (strcmp(in,"")==0) gest=new MG_GESTIONNAIRE; else gest=new MG_FILE(in);
1666 MG_GEOMETRIE *geo;
1667 if ((numgeo!=0) && (gest->get_nb_mg_geometrie()>0)) geo=gest->get_mg_geometrieid(numgeo);
1668 MG_IMPORT imp;
1669 imp.maillage_gmsh(gest,fgmsh,geo);
1670 sprintf(mess,"Enregistrement du fichier");
1671 app.affiche(mess);
1672 gest->enregistrer(out);
1673 delete gest;
1674 }
1675 if ((app.get_action()==86)||(app.get_action()==103))
1676 {
1677 int numgeo,numfonc;
1678 char chemin[1000];
1679 app.recupere_parametre_int_avec_defaut(31,numgeo,0);
1680 app.recupere_parametre_string(87,chemin,(char*)"Fichier de fonction manquant");
1681 if (app.get_action()==103) app.recupere_parametre_int_avec_defaut(104,numfonc,0);
1682 if (app.get_erreur()==true) return 0;
1683 char mess[2000];
1684 if (app.get_action()==86) sprintf(mess,"Importation d'une fonction geometrique");
1685 if (app.get_action()==103) sprintf(mess,"Modification d'une fonction geometrique");
1686 app.affiche(mess);
1687 sprintf(mess,"\nLecture du fichier MAGiC");
1688 app.affiche(mess);
1689 MG_FILE gest(nomfichier);
1690 MG_GEOMETRIE *geo;
1691 if (numgeo==0) geo=gest.get_mg_geometrie(numgeo); else geo=gest.get_mg_geometrieid(numgeo);
1692 if (app.get_action()==86)
1693 {
1694 sprintf(mess,"Importation de la courbe");
1695 app.affiche(mess);
1696 MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(chemin);
1697 geo->ajouter_mg_geom_fonction(gf);
1698 gest.enregistrer(nomfichier);
1699 }
1700 if (app.get_action()==103)
1701 {
1702 sprintf(mess,"Importation de la courbe");
1703 app.affiche(mess);
1704 MG_GEOM_FONCTION *gf;
1705 if (numfonc==0) gf=geo->get_mg_geom_fonction(0); else gf=geo->get_mg_geom_fonctionid(numfonc);
1706 gf->change(chemin);
1707 gest.enregistrer(nomfichier);
1708 }
1709 }
1710 if (app.get_action()==106)
1711 {
1712 char mess[255];
1713 sprintf(mess,"Définition d'une coque mince");
1714 app.affiche(mess);
1715 char valeur[500];
1716 app.recupere_parametre_string(107,valeur,(char*)"Faces en vis a vis manquantes");
1717 if (app.get_erreur()==true) return 0;
1718 MG_FILE gest(nomfichier);
1719 unsigned long id,id1,id2,idgeo;
1720 sscanf(valeur,"%lu:%lu:%lu:%lu\n",&idgeo,&id,&id1,&id2);
1721 MG_GEOMETRIE* geo=gest.get_mg_geometrieid(idgeo);
1722 if (geo!=NULL)
1723 {
1724 MG_VOLUME* vol=geo->get_mg_volumeid(id);
1725 if (vol!=NULL)
1726 {
1727 MG_FACE* face1=geo->get_mg_faceid(id1);
1728 MG_FACE* face2=geo->get_mg_faceid(id2);
1729 if (face1!=NULL)
1730 if (face2!=NULL)
1731 {
1732 vol->ajouter_face_correspondante(face1,face2);
1733 sprintf(mess," Ajout de la face de base %lu et de la face correspondante %lu dans le volume mince %lu",id1,id2,id);
1734 app.affiche(mess);
1735 }
1736 }
1737 }
1738 sprintf(mess,"Enregistrement du fichier");
1739 gest.enregistrer(nomfichier);
1740 }
1741
1742 char mess[255];
1743 sprintf(mess,"Fin");
1744 app.affiche(mess);
1745 }
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760