ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 1168
Committed: Thu Jul 25 22:21:32 2024 UTC (13 months ago) by francois
File size: 97639 byte(s)
Log Message:
bur dans le maillage quadratique discret et mailleur affichage de -examine pour les mg_cg_assemblage

File Contents

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