ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 881
Committed: Wed Apr 12 23:14:07 2017 UTC (8 years, 4 months ago) by francois
File size: 78859 byte(s)
Log Message:
Changement de strategie pour le mailleur couche.
Il fonctionne maintenant avec des volumes minces et non des coquilles
mince est une propriète de volume et ne change pas son nom.
cela necessite un changement de version de fichier -> maintenant 2.3 compatible en arrière
valider sur ancien exemple plus sphere creuse

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