ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 9 months ago) by couturad
File size: 88838 byte(s)
Log Message:
Nouveau opencascade commit 1

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