From: prascle Date: Tue, 22 Mar 2011 09:17:38 +0000 (+0000) Subject: version V6_main 20110308 X-Git-Tag: V6_3_0a1~2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=f3867860d0e23fd91631d20d7263b5a4b2ec371e;p=modules%2Fhomard.git version V6_main 20110308 --- diff --git a/clean_configure b/clean_configure index 6ebb5297..1f84207b 100755 --- a/clean_configure +++ b/clean_configure @@ -20,15 +20,18 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -rm -rf autom4te.cache aclocal.m4 configure make_config +rm -rf autom4te.cache aclocal.m4 configure make_config \$\(top_srcdir\) find . -name "*~" -print -exec rm {} \; find . -name "*.pyc" -print -exec rm {} \; #exit # ==================== ON SORT AVANT find bin -name Makefile.in | xargs rm -f +find doc -name Makefile.in | xargs rm -f find idl -name Makefile.in | xargs rm -f find resources -name Makefile.in | xargs rm -f -find salome_adm -name Makefile.in | xargs rm -f +find tests -name Makefile.in | xargs rm -f find src -name Makefile.in | xargs rm -f rm -f Makefile.in +rm -f COPYING INSTALL +rm -rf salome_adm diff --git a/configure.ac b/configure.ac index 90e8b169..178c51c3 100644 --- a/configure.ac +++ b/configure.ac @@ -266,6 +266,14 @@ echo CHECK_HDF5 +echo +echo --------------------------------------------- +echo BOOST Library +echo --------------------------------------------- +echo + +CHECK_BOOST + echo echo --------------------------------------------- echo Testing OpenCascade @@ -327,7 +335,7 @@ echo echo Configure if test "${HOMARD_WITH_GUI}" = "yes"; then -variables="cc_ok fortran_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok hdf5_ok omniORB_ok Kernel_ok med2_ok SalomeGUI_ok Med_ok SMesh_ok sphinx_ok" +variables="cc_ok fortran_ok boost_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok hdf5_ok omniORB_ok Kernel_ok med2_ok SalomeGUI_ok Med_ok SMesh_ok sphinx_ok" fi if test "${HOMARD_WITH_GUI}" = "no"; then diff --git a/doc/conf.py b/doc/conf.py index ca7e356f..2b658f9b 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding: iso-8859-1 -*- # # HOMARD documentation build configuration file, created by # sphinx-quickstart on Tue Jan 5 08:51:14 2010. @@ -31,23 +31,23 @@ templates_path = ['_templates'] source_suffix = '.rst' # The encoding of source files. -#source_encoding = 'utf-8' +source_encoding = 'iso-8859-1' # The master toctree document. master_doc = 'index' # General information about the project. project = u'HOMARD' -copyright = u'1996, 2010, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret' +copyright = u'1996, 2011, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '9.6' +version = '9.9' # The full version, including alpha/beta/rc tags. -release = '9.6' +release = '9.9' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/files/tutorial_1.py b/doc/files/tutorial_1.py index 607f72c0..fb6be922 100644 --- a/doc/files/tutorial_1.py +++ b/doc/files/tutorial_1.py @@ -23,7 +23,7 @@ Hypo_0.SetAdapRefinUnRef(-1, 1, 0) # # Case "Case_0" # ============= -Case_0 = homard.CreateCase('Case_0', 'MESH', dircase+'/tutorial_1.00.med') +Case_0 = homard.CreateCase('Case_0', 'MAILL', dircase+'/tutorial_1.00.med') Case_0.SetDirName(dircase) Case_0.SetConfType(1) # diff --git a/doc/files/tutorial_3.py b/doc/files/tutorial_3.py index c9f3cd16..34a51412 100644 --- a/doc/files/tutorial_3.py +++ b/doc/files/tutorial_3.py @@ -25,6 +25,9 @@ Hypo_0.SetField('SOLU_0__QIRE_ELEM_SIGM__________') Hypo_0.SetUseComp(0) Hypo_0.AddComp('ERREST ') Hypo_0.SetRefinThr(3, 1.0) +Hypo_0.SetTypeFieldInterp(2) +Hypo_0.AddFieldInterp('SOLU_0__DEPL____________________') +Hypo_0.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________') # # Hypothesis "Hypo_1" # =================== @@ -36,6 +39,9 @@ Hypo_1.SetUseComp(0) Hypo_1.AddComp('ERREST ') Hypo_1.SetRefinThr(3, 1.5) Hypo_1.SetUnRefThr(3, 6.) +Hypo_1.SetTypeFieldInterp(2) +Hypo_1.AddFieldInterp('SOLU_1__DEPL____________________') +Hypo_1.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________') # # Case "Case_0" # ============= @@ -47,7 +53,8 @@ Case_0.SetDirName(dircase) Iter_0 = homard.CreateIteration('Iter_0', Case_0.GetIter0Name()) Iter_0.SetMeshName('H_1') Iter_0.SetMeshFile(dircase+'/maill.01.med') -Iter_0.SetField(dircase+'/tutorial_3.00.med', 1, 1) +Iter_0.SetFieldFile(dircase+'/tutorial_3.00.med') +Iter_0.SetTimeStepRank( 1, 1) homard.AssociateIterHypo('Iter_0', 'Hypo_0') codret = homard.Compute('Iter_0', 1) # @@ -56,7 +63,8 @@ codret = homard.Compute('Iter_0', 1) Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0') Iter_1.SetMeshName('H_2') Iter_1.SetMeshFile('/tmp/maill.02.med') -Iter_1.SetField(dircase+'/tutorial_3.01.med', 1, 1) +Iter_1.SetFieldFile(dircase+'/tutorial_3.01.med') +Iter_1.SetTimeStepRank(1, 1) homard.AssociateIterHypo('Iter_1', 'Hypo_1') codret = homard.Compute('Iter_1', 1) diff --git a/doc/files/tutorial_4.00.med.gz b/doc/files/tutorial_4.00.med.gz new file mode 100644 index 00000000..eacc498f Binary files /dev/null and b/doc/files/tutorial_4.00.med.gz differ diff --git a/doc/files/tutorial_4.fr.med.gz b/doc/files/tutorial_4.fr.med.gz new file mode 100644 index 00000000..1ebca817 Binary files /dev/null and b/doc/files/tutorial_4.fr.med.gz differ diff --git a/doc/files/tutorial_4.py b/doc/files/tutorial_4.py new file mode 100644 index 00000000..1d9783cb --- /dev/null +++ b/doc/files/tutorial_4.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +""" +Exemple de couplage HOMARD-Salome +Copyright EDF-R&D 1996, 2011 +""" +__revision__ = "V1.0" +# +import salome +salome.salome_init() +import HOMARD +# +homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD") +study_main = salome.myStudyManager.NewStudy("HOMARD") +homard.SetCurrentStudy(salome.myStudy) +# +dircase = "/tmp" +# +# Creation of the boundaries +# ========================== +Boundary_1 = homard.CreateBoundary('intersection', 0) +Boundary_1.SetMeshFile(dircase+'/tutorial_4.fr.med') +Boundary_1.SetMeshName('PIQUAGE') +# +Boundary_2 = homard.CreateBoundary('cyl_1_ext', 1) +Boundary_2.SetCylinder(0.0, 25., -25., 25., 50., 75., 100.) +# +Boundary_3 = homard.CreateBoundary('cyl_2_ext', 1) +Boundary_3.SetCylinder(17.5, -2.5, -12.5, -100., -75., -25., 50.) +# +Boundary_4 = homard.CreateBoundary('cyl_1_int', 1) +Boundary_4.SetCylinder(0.0, 25., -25., 25., 50., 75., 75.) +# +Boundary_5 = homard.CreateBoundary('cyl_2_int', 1) +Boundary_5.SetCylinder(17.5, -2.5, -12.5, -100., -75., -25., 25.) +# +# Hypothesis "Hypo" +# =================== +# Creation of the hypothesis Hypo_1 +Hypo_1 = homard.CreateHypothesis('Hypo_1') +Hypo_1.SetAdapRefinUnRef(-1, 1, 0) +Hypo_1.AddGroup('T1_INT') +Hypo_1.AddGroup('T2_INT') +# Creation of the hypothesis Hypo_2 +Hypo_2 = homard.CreateHypothesis('Hypo_2') +Hypo_2.SetAdapRefinUnRef(-1, 1, 0) +Hypo_2.AddGroup('T1_EXT') +Hypo_2.AddGroup('T2_EXT') +# +# Case "Case" +# ============= +Case = homard.CreateCase('Case', 'PIQUAGE', dircase+'/tutorial_4.00.med') +Case.SetDirName(dircase) +Case.AddBoundaryGroup( 'intersection', '' ) +Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT' ) +Case.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' ) +Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT' ) +Case.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' ) +# +# Creation of the iterations +# ========================== +# Creation of the iteration Iter_1 +Iter_1 = homard.CreateIteration('Iter_1', Case.GetIter0Name() ) +Iter_1.SetMeshName('PIQUAGE_1') +Iter_1.SetMeshFile(dircase+'/maill.01.med') +homard.AssociateIterHypo('Iter_1', 'Hypo_1') +codret = homard.Compute('Iter_1', 1) +# Creation of the iteration Iter_2 +Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1' ) +Iter_2.SetMeshName('PIQUAGE_2') +Iter_2.SetMeshFile(dircase+'/maill.02.med') +homard.AssociateIterHypo('Iter_2', 'Hypo_2') +codret = homard.Compute('Iter_2', 1) + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(1) diff --git a/doc/glossaire.rst b/doc/glossaire.rst index 1e448725..bd5469f3 100644 --- a/doc/glossaire.rst +++ b/doc/glossaire.rst @@ -7,28 +7,28 @@ Glossaire :sorted: raffinement - Le raffinement est une opération consistant à découper les mailles sélectionnées. + Le raffinement est une opération consistant à découper les mailles sélectionnées. niveau - Le niveau d'une maille est le nombre de découpages qu'il a fallu pour l'obtenir. Les mailles du maillage initial sont du niveau 0 par convention. + Le niveau d'une maille est le nombre de découpages qu'il a fallu pour l'obtenir. Les mailles du maillage initial sont du niveau 0 par convention. - déraffinement - Le déraffinement est une opération consistant à supprimer des mailles. Il s'agit en fait d'annuler un précédent découpage : on ne reviendra jamais 'plus haut' que le maillage initial. + déraffinement + Le déraffinement est une opération consistant à supprimer des mailles. Il s'agit en fait d'annuler un précédent découpage : on ne reviendra jamais 'plus haut' que le maillage initial. zone - Une zone est une région qui définit un pilotage de raffinement : toutes les mailles dont au moins une arête est dans une zone seront raffinées. + Une zone est une région qui définit un pilotage de raffinement : toutes les mailles dont au moins une arête est dans une zone seront raffinées. cas - Un cas est défini par un maillage initial et une succession d'adaptations. + Un cas est défini par un maillage initial et une succession d'adaptations. - itération - Une itération est le processus qui permet de passer d'un maillage à un autre au sein d'un cas. Une itération met en oeuvre du raffinement et/ou du déraffinement selon l'hypothèse qui lui est attachée. + itération + Une itération est le processus qui permet de passer d'un maillage à un autre au sein d'un cas. Une itération met en oeuvre du raffinement et/ou du déraffinement selon l'hypothèse qui lui est attachée. - hypothèse - Une hypothèse décrit les conditions de passage d'un maillage à un autre : raffinement et/ou déraffinement, mode de pilotage, etc. Une hypothèse est référencée par une ou plusieurs itérations. + hypothèse + Une hypothèse décrit les conditions de passage d'un maillage à un autre : raffinement et/ou déraffinement, mode de pilotage, etc. Une hypothèse est référencée par une ou plusieurs itérations. champ - Un champ est exprimé sur un maillage, par noeud ou par maille, avec une ou plusieurs composantes. La valeur de ce champ pilote l'adaptation. + Un champ est exprimé sur un maillage, par noeud ou par maille, avec une ou plusieurs composantes. La valeur de ce champ pilote l'adaptation. MED - C'est le format d'échange des maillages et des champs pour Salome. \ No newline at end of file + C'est le format d'échange des maillages et des champs pour Salome. \ No newline at end of file diff --git a/doc/gui_create_boundary.rst b/doc/gui_create_boundary.rst new file mode 100644 index 00000000..3268897d --- /dev/null +++ b/doc/gui_create_boundary.rst @@ -0,0 +1,110 @@ +.. _gui_create_boundary: + +La frontière +============ +.. index:: single: boundary +.. index:: single: frontière + +L'objet frontière contient toutes les définitions géométriques permettant de décrire une frontière courbe à suivre. + +Il existe deux modes de description d'une frontière : + + - Discrète : ce mode est utilisé pour décrire une courbe 1D + - Analytique : ce mode est utilisé pour décrire une surface + + +Frontière discrète +================== + +Le suivi d'une frontière discrète se fera en sélectionnant une frontière choisie dans la liste des frontières discrètes existantes. + +Au démarrage, la liste est vide. Il faut créer une première frontière discrète par activation du bouton 'New' : + +.. image:: images/create_boundary_di_1.png + :align: center + +La fenêtre proposée invite au choix d'un fichier de maillage. Ce maillage est celui de toutes les lignes constituant la frontière. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. + +.. image:: images/create_boundary_di_2.png + :align: center + +.. note:: + Le fichier ne doit contenir qu'un seul maillage. + +Si des frontières discrètes ont déjà été définies pour un autre cas, on peut sélectionner l'une d'elles. On peut également créer une nouvelle frontière discrète par activation du bouton 'New', comme expliqué précédemment. + +.. image:: images/create_boundary_di_3.png + :align: center + + + +Frontière analytique +==================== +Au démarrage, Salome affiche un tableau avec un seule colonne. Cette colonne contient la liste de tous les groupes du maillage initial définissant le cas. + +.. image:: images/create_boundary_an_1.png + :align: center + +Il faut créer une première frontière analytique par activation du bouton 'New'. On aura le choix entre cylindre ou sphère. Une fois que la frontière sera validée, son nom figurera en en-tête d'une deuxième colonne. + +.. image:: images/create_boundary_an_2.png + :align: center + +Il faut maintenant établir le lien entre le maillage définissant le cas et cette frontière décrite analytiquement. Cela se fait en cochant les groupes des faces qui doivent se trouver sur la frontière. + +.. image:: images/create_boundary_an_3.png + :align: center + +Cette opération est répétée autant de fois que l'on souhaite placer des faces du maillages sur une surface courbe : + +.. image:: images/create_boundary_an_4.png + :align: center + +.. note:: + + Un groupe peut très bien ne jamais être coché : cela signifie que les mailles qu'il définit n'appartiennent à aucune des frontières décrites. + + Un groupe ne peut être coché qu'une seule fois. En effet, des mailles surfaciques ne peuvent pas appartenir à plus d'une surface. + + Plusieurs groupes peuvent être cochés pour une même frontière. Cela arrive quand le maillage initial de la zone a été subdivisé en plusieurs groupes : toutes les mailles surfaciques appartiennent à cette surface mais ont été réparties en plusieurs groupes. + + Inversement, une frontière peut très bien n'être retenue par aucun groupe. Cela arrive si elle a été définie pour un cas précédent et qu'elle est sans objet pour le cas en cours de définition. + + +Il existe deux types de frontière analytique : + + - Cylindre + - Sphère + +.. note:: + Les valeurs numériques proposées par défaut tiennent compte de la géométrie du maillage. + + +Un cylindre +""""""""""" +.. index:: single: cylindre + +Le cylindre est défini par un point de l'axe, son axe et son rayon. L'axe est défini par un vecteur. La norme de ce vecteur n'est pas nécessairement égale à 1 ; de même, son orientation n'a aucune importance. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. + +.. image:: images/create_boundary_an_cy.png + :align: center + +Une sphère +"""""""""" +.. index:: single: sphere + +La sphère est définie par son centre et son rayon. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière. + +.. image:: images/create_boundary_an_sp.png + :align: center + +.. index:: single: arbre d'étude +L'arbre d'étude +""""""""""""""" +A l'issue de cette création de frontières, l'arbre d'études a été enrichi. On y trouve toutes les frontières créées, identifiées par leur nom, avec la possibilité de les éditer. + +.. image:: images/create_boundary_1.png + :align: center + + + diff --git a/doc/gui_create_case.rst b/doc/gui_create_case.rst index 88b3abc6..7ebf7c87 100644 --- a/doc/gui_create_case.rst +++ b/doc/gui_create_case.rst @@ -3,12 +3,14 @@ Le cas ====== .. index:: single: cas -La définition du cas se fait par la donnée des informations suivantes : + +La définition du cas se fait par la donnée des informations suivantes : - Un nom - - Un répertoire + - Un répertoire - Le fichier du maillage initial - - Le type de conformité pour la série d'adaptations envisagées + - Le type de conformité pour la série d'adaptations envisagées + - Les éventuelles frontières courbes à respecter .. image:: images/create_case_1.png :align: center @@ -16,20 +18,21 @@ La définition du cas se fait par la donnée des informations suivantes : Le nom du cas """"""""""""" -Un nom de cas est proposé automatiquement : Case_0, Case_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour un cas précédent. +Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas. -Le répertoire +Le répertoire """"""""""""" -Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. Ce répertoire doit exister. Par défaut, Salome propose ``/tmp``. Ce choix peut être modifié, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement ; ces noms de fichiers seront visibles dans l'arbre d'études. +Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. Ce répertoire doit exister. Par défaut, Salome propose ``/tmp``. Ce choix peut être modifié, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement ; ces noms de fichiers seront visibles dans l'arbre d'études. .. image:: images/create_case_2.png :align: center .. index:: single: maillage;initial .. index:: single: MED + Le maillage initial """"""""""""""""""" -Le maillage initial doit se trouver dans un fichier au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Mais il peut également avoir été créé avec le module SMESH et exporté au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. +Le maillage initial doit se trouver dans un fichier au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Mais il peut également avoir été créé avec le module SMESH et exporté au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. .. image:: images/create_case_3.png :align: center @@ -38,30 +41,51 @@ Le maillage initial doit se trouver dans un fichier au format MED. Classiquement Le fichier ne doit contenir qu'un seul maillage. .. warning:: - Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre la cohérence entre les différents niveaux de raffinement/déraffinement + Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre la cohérence entre les différents niveaux de raffinement/déraffinement -.. index:: single: type de conformité -Le type de conformité +.. index:: single: type de conformité + +Le type de conformité """"""""""""""""""""" -Les itérations qui seront définies pour ce cas devront respecter le même comportement vis-à-vis de la conformité. +Les itérations qui seront définies pour ce cas devront respecter le même comportement vis-à-vis de la conformité. -L'option par défaut, 'conforme', implique que les maillages produits par HOMARD seront conformes au sens des éléments finis. C'est le choix classique de la plupart des logiciels de simulation par éléments finis. +L'option par défaut, 'conforme', implique que les maillages produits par HOMARD seront conformes au sens des éléments finis. C'est le choix classique de la plupart des logiciels de simulation par éléments finis. -Si le calcul est possible avec des maillages non conforme, on a le choix entre 3 possibilités : +Néanmoins, si le calcul est possible avec des maillages non conformes, on a le choix entre 3 possibilités : .. image:: images/create_case_4.png :align: center -* 1 noeud par maille : une maille ne peut posséder qu'un seul noeud de non conformité avec ses voisines. -* 1 noeud par arête : chaque arête d'une maille peut être découpée sans que la maille voisine par cette arête ne le soit. -* quelconque : aucune limitation sur les raccords de conformité d'une maille à l'autre. +* 1 noeud par maille : une maille ne peut posséder qu'un seul noeud de non conformité avec ses voisines. +* 1 noeud par arête : chaque arête d'une maille peut être découpée sans que la maille voisine par cette arête ne le soit. +* quelconque : aucune limitation sur les raccords de conformité d'une maille à l'autre. -.. index:: single: arbre d'étude -L'arbre d'étude -""""""""""""""" -A l'issue de cette création de cas, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni. +.. index:: single: frontière + +Les frontières courbes +"""""""""""""""""""""" +Quand le bord du domaine est courbe, HOMARD sait placer les nouveaux noeuds sur ces frontières pour éviter des singularités artificielles. Cette technique est aussi applicable à une courbure intérieure à un domaine. + +Deux cas de figure sont présents : + +* courbe 1D : cette courbe peut être définie dans un plan, par exemple pour un calcul 2D. Elle peut également être définie dans l'espace 3D, par exemple pour l'intersection de deux surfaces. Une ligne à suivre est décrite de manière discrète. +* surface : une surface à suivre est décrite de manière analytique. + +On cochera le ou les boutons voulus : .. image:: images/create_case_5.png :align: center +La définition des frontières est décrite dans :ref:`gui_create_boundary`. + + +.. index:: single: arbre d'étude + +L'arbre d'étude +""""""""""""""" +A l'issue de cette création de cas, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni. + +.. image:: images/create_case_6.png + :align: center + diff --git a/doc/gui_create_hypothese.rst b/doc/gui_create_hypothese.rst index c3e5c3d5..dfd894f9 100644 --- a/doc/gui_create_hypothese.rst +++ b/doc/gui_create_hypothese.rst @@ -1,55 +1,55 @@ .. _gui_create_hypothese: -L'hypothèse +L'hypothèse =========== -.. index:: single: hypothèse +.. index:: single: hypothèse -L'hypothèse contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée. +L'hypothèse contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée. -Il existe trois classes d'hypothèses : +Il existe trois classes d'hypothèses : - Uniforme sur tout le maillage, - Selon un champ, - - En fonction de zone géométrique. + - En fonction de zone géométrique. .. image:: images/create_hypothese_1.png :align: center -Nom de l'hypothèse +Nom de l'hypothèse """""""""""""""""" -Un nom de l'hypothèse est proposé automatiquement : Hypo_0, Hypo_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une hypothèse précédente. +Un nom de l'hypothèse est proposé automatiquement : Hypo_0, Hypo_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une hypothèse précédente. Adaptation uniforme """"""""""""""""""" -Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites. +Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites. Adaptation selon un champ """"""""""""""""""""""""" .. note:: - Pour pouvoir adapter le maillage selon un champ il faut avoir au préalable indiqué dans la fenêtre de construction de l'itération le fichier med contenant le champ. + Pour pouvoir adapter le maillage selon un champ il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`). Le nom du fichier qui a été sélectionné est affiché sans modification possible ici : -Le nom du fichier qui a été sélectionné est affiché sans modification possible dans cette fenêtre. Le champ voulu est à choisir dans la liste qui s'affiche. - -.. image:: images/create_hypothese_4.png +.. image:: images/create_hypothese_ch_1.png :align: center -Une fois ce champ choisi, la liste des ses composantes s'affiche. Il suffit de désigner la (ou les) composantes désirées. Si l'on choisi une seule composante, par défaut, c'est sa valeur absolue qui sera utilisée, mais il est possible d'utiliser la valeur relative. Dans le cas de plusieurs composantes, par défaut HOMARD utilisera la norme L2 (euclidienne). On peut toutefois choisir d'utiliser la norme infinie (le max des valeurs absolues des composantes). +Le champ voulu est à choisir dans la liste des champs contenus dans le fichier. +Une fois ce champ choisi, la liste des ses composantes s'affiche. Il suffit de désigner la (ou les) composantes désirées. Si l'on choisi une seule composante, par défaut, c'est sa valeur absolue qui sera utilisée, mais il est possible d'utiliser la valeur relative. Dans le cas de plusieurs composantes, par défaut HOMARD utilisera la norme L2 (euclidienne). On peut toutefois choisir d'utiliser la norme infinie (le max des valeurs absolues des composantes). -.. image:: images/create_hypothese_5.png +.. image:: images/create_hypothese_ch_2.png :align: center -Le raffinement se fait selon un seuil qui définit un critère haut de raffinement. Toutes les mailles pour lesquels l’indicateur est supérieur à ce critère seront raffinées. -Pour le choix du critère, trois variantes sont possibles : - - selon un pourcentage de mailles à raffiner, nombre réel compris entre 0 et 100 ; HOMARD raffinera les x% des mailles qui ont la plus grande valeur du champ. - - selon une valeur relative du champ, nombre compris entre 0 et 100 ; HOMARD raffinera les mailles où le champ est supérieur à x% de l'intervalle [mini,maxi]. - - selon une valeur absolue ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées. +Le raffinement se fait selon un seuil qui définit un critère haut de raffinement. Toutes les mailles pour lesqules l'indicateur est supérieur à ce critère seront raffinées. +Pour le choix du critère, trois variantes sont possible : + + - selon un pourcentage de mailles à raffiner, nombre réel compris entre 0 et 100 ; HOMARD raffinera les x% des mailles qui ont la plus grande valeur du champ. + - selon une valeur relative du champ, nombre compris entre 0 et 100 ; HOMARD raffinera les mailles où le champ est supérieur à x% de l'intervalle [mini,maxi]. + - selon une valeur absolue ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées. -La même convention s'applique au déraffinement, en remplaçant supérieur par inférieur. On peut inactiver une des fonctions (raffinement ou déraffinement) en cochant le bouton ad_hoc. +La même convention s'applique au déraffinement, en remplaçant supérieur par inférieur. On peut inactiver une des fonctions (raffinement ou déraffinement) en cochant le bouton ad_hoc. -.. image:: images/create_hypothese_6.png +.. image:: images/create_hypothese_ch_3.png :align: center @@ -57,34 +57,57 @@ Adaptation selon une zone """"""""""""""""""""""""" .. index:: single: zone -Au démarrage, il faut créer une première zone par activation du bouton 'New' (voir :ref:`gui_create_zone`) : +Au démarrage, il faut créer une première zone par activation du bouton 'New' (voir :ref:`gui_create_zone`) : -.. image:: images/create_hypothese_2.png +.. image:: images/create_hypothese_zo_1.png :align: center -Lorsque des zones ont déjà été créées, la liste apparaît dans la fenêtre ce qui permet de sélectionner les zones voulues. +Lorsque des zones ont déjà été créées, la liste apparaît dans la fenêtre ce qui permet de sélectionner les zones voulues. -.. image:: images/create_hypothese_3.png +.. image:: images/create_hypothese_zo_2.png :align: center Filtrage par les groupes """""""""""""""""""""""" -.. index:: single: zone +.. index:: single: groupe + +On peut restreindre l'application de l'hypothèse d'adaptation à des groupes. On coche le bouton associé : + +.. image:: images/create_hypothese_gr_1.png + :align: center + +La liste des groupes de mailles présents dans le maillage est affichée. Il suffit de cocher ceux voulus pour restreindre l'hypothèse d'adaptation. + +.. image:: images/create_hypothese_gr_2.png + :align: center + + +Interpolation de champs +""""""""""""""""""""""" +.. index:: single: interpolation + +.. note:: + Pour pouvoir interpoler un champ de l'ancien vers le nouveau maillage, il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`). -Après l'activation du filtrage par les groupes, la liste des groupes de mailles présents dans le maillage est affichée. Il suffit de cocher ceux voulus pour restreindre l'hypothèse d'adaptation. +Par défaut, aucun champ n'est interpolé. A contrario, on peut demander l'interpolation de tous les champs présents dans le fichier fourni : -.. image:: images/create_hypothese_8.png +.. image:: images/create_hypothese_ch_4.png :align: center +Si on veut choisir les champs à interpoler, il faut les cocher dans la liste de tous les champs présents dans le fichier fourni : -L'arbre d'étude +.. image:: images/create_hypothese_ch_5.png + :align: center + + +L'arbre d'étude """"""""""""""" -.. index:: single: arbre d'étude +.. index:: single: arbre d'étude -L'arbre d'études contient les hypothèses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente. +L'arbre d'études contient les hypothèses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente. -.. image:: images/create_hypothese_7.png +.. image:: images/create_hypothese_2.png :align: center diff --git a/doc/gui_create_iteration.rst b/doc/gui_create_iteration.rst index 6d067570..5f4c83d1 100644 --- a/doc/gui_create_iteration.rst +++ b/doc/gui_create_iteration.rst @@ -1,74 +1,78 @@ .. _gui_create_iteration: -L'itération +L'itération =========== -.. index:: single: itération -La définition d'une itération se fait par la donnée des informations suivantes : +.. index:: single: itération +La définition d'une itération se fait par la donnée des informations suivantes : - - L'itération précédente - - Le nom du maillage résultat - - L'hypothèse utilisée + - L'itération précédente + - Le nom du maillage résultat + - L'hypothèse utilisée - Eventuellement, le fichier du champ d'indicateurs d'erreur .. image:: images/create_iteration_1.png :align: center -Le nom de l'itération +Le nom de l'itération """"""""""""""""""""" -Un nom de cas est proposé automatiquement : Iter_0, Iter_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une itération précédente. +Un nom de cas est proposé automatiquement : Iter_0, Iter_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une itération précédente. -L'itération précédente +L'itération précédente """""""""""""""""""""" -L'itération précédente est choisie dans l'arbre d'étude. Le nom du maillage correspondant sera affiché. +L'itération précédente est choisie dans l'arbre d'étude. Le nom du maillage correspondant sera affiché. -.. index:: single: maillage;résultat -Le nom du maillage résultat +.. index:: single: maillage;résultat +Le nom du maillage résultat """"""""""""""""""""""""""" -L'itération en cours de création produira un maillage. Ce maillage sera connu sous un nom. Ce nom est fourni en le tapant dans la zone de texte. Par défaut, on propose un nom identique à celui de l'itération précédente. +L'itération en cours de création produira un maillage. Ce maillage sera connu sous un nom. Ce nom est fourni en le tapant dans la zone de texte. Par défaut, on propose un nom identique à celui de l'itération précédente. -.. index:: single: hypothèse -L'hypothèse utilisée -"""""""""""""""""""" -L'itération en cours pilotera l'adaptation par HOMARD selon un scénario défini dans une hypothèse. Celle-ci est choisi dans la liste +.. index:: single: champ +.. index:: single: MED +Le champ +"""""""" +Pour créer ou utiliser une hypothèse d'adaptation basée sur un champ exprimé sur le maillage, on doit fournir le fichier où se trouve le champ. C'est également le cas si on veut interpoler des champs du maillage n au maillage n+1. Ce fichier est au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. -Au démarrage, il faut créer une première hypothèse par activation du bouton 'New' (voir :ref:`gui_create_hypothese`) : .. image:: images/create_iteration_2.png :align: center -Ensuite, il faut éventuellement créer une nouvelle hypothèse par activation du bouton 'New', puis sélectionner celle voulue dans la liste proposée : +Dasn le cas où des pas de temps ont été définis, une solution simple consiste à traiter les champs au dernier pas de temps enregistré dans le fichier. Si on veut définir un autre pas de temps, on coche le bouton "Choosen time step" ; les valeurs de 'Time Step' et de 'Rank' sont celles correspondant à la convention MED. .. image:: images/create_iteration_3.png :align: center +.. index:: single: hypothèse +L'hypothèse utilisée +"""""""""""""""""""" +L'itération en cours pilotera l'adaptation par HOMARD selon un scénario défini dans une hypothèse. Celle-ci est choisi dans la liste des hypothèses existantes. -.. note:: - Si on envisage une adaptation selon les valeurs d'un champ sur le maillage, il faut avoir renseigné les informations sur ce champ avant de créer une nouvelle hypothèse. - -.. index:: single: champ -.. index:: single: MED -Le champ -"""""""" -Pour créer ou utiliser une hypothèse d'adaptation basée sur un champ exprimé sur le maillage, on doit fournir le fichier où se trouve le champ. Ce fichier est au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. - -Les valeurs de 'Time Step' et de 'Rank' sont celles correspondant à la convention MED. +Au démarrage, il faut créer une première hypothèse par activation du bouton 'New' (voir :ref:`gui_create_hypothese`) : .. image:: images/create_iteration_4.png :align: center -.. index:: single: arbre d'étude -L'arbre d'étude -""""""""""""""" -A l'issue de cette création d'itération, l'arbre d'études a été enrichi. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, l'itération courante, identifiée par son nom. On trouve aussi l'hypothèse qui lui est attachée. +Ensuite, il faut éventuellement créer une nouvelle hypothèse par activation du bouton 'New', puis sélectionner celle voulue dans la liste proposée : .. image:: images/create_iteration_5.png :align: center -Quand plusieurs itérations s'enchaînent, leur hypothèse est visible dans l'arbre d'étude. On remarquera dans la figure ci-après que deux itérations peuvent partager la même hypothèse. + +.. note:: + Si on envisage une adaptation selon les valeurs d'un champ sur le maillage, il faut avoir renseigné les informations sur ce champ avant de créer une nouvelle hypothèse. + +.. index:: single: arbre d'étude +L'arbre d'étude +""""""""""""""" +A l'issue de cette création d'itération, l'arbre d'études a été enrichi. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, l'itération courante, identifiée par son nom. On trouve aussi l'hypothèse qui lui est attachée. .. image:: images/create_iteration_6.png :align: center +Quand plusieurs itérations s'enchaînent, leur hypothèse est visible dans l'arbre d'étude. On remarquera dans la figure ci-après que deux itérations peuvent partager la même hypothèse. + +.. image:: images/create_iteration_7.png + :align: center + diff --git a/doc/gui_create_zone.rst b/doc/gui_create_zone.rst index 08343839..e178002f 100644 --- a/doc/gui_create_zone.rst +++ b/doc/gui_create_zone.rst @@ -4,37 +4,37 @@ La zone ======= .. index:: single: zone -L'objet zone contient toutes les définitions géométriques permettant de décrire une zone à raffiner. +L'objet zone contient toutes les définitions géométriques permettant de décrire une zone à raffiner. Il existe deux types de zone : - - Parallélépipède - - Sphère + - Parallélépipède + - Sphère Nom de la zone """""""""""""" -Un nom de zone est proposé automatiquement : Zone_0, Zone_1, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une zone précédente. +Un nom de zone est proposé automatiquement : Zone_1, Zone_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour une autre zone. -Un parallélépipède +Un parallélépipède """""""""""""""""" .. index:: single: boite -Le parallélépipède est forcément parallèle aux axes de coordonnées, il est défini par ses extrêmes dans chaque direction. +Le parallélépipède est forcément parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chaque direction. .. image:: images/create_zone_1.png :align: center -Une sphère +Une sphère """""""""" .. index:: single: sphere -La sphère est définie par son centre et son rayon. +La sphère est définie par son centre et son rayon. .. image:: images/create_zone_2.png :align: center .. note:: - Les valeurs proposées par défaut tiennent compte de la géométrie du maillage. + Les valeurs proposées par défaut tiennent compte de la géométrie du maillage. diff --git a/doc/gui_usage.rst b/doc/gui_usage.rst index e7a58f8d..cf162a2a 100644 --- a/doc/gui_usage.rst +++ b/doc/gui_usage.rst @@ -1,32 +1,32 @@ Mode d'emploi pour l'interface graphique ======================================== .. index:: single: cas -.. index:: single: itération +.. index:: single: itération Activer le module HOMARD """""""""""""""""""""""" -Pour utiliser le module HOMARD, deux façons existent : +Pour utiliser le module HOMARD, deux façons existent : #. en activant l'onglet HOMARD dans la liste des modules, #. en cliquant sur le bouton HOMARD dans la barre d'outils. -L'utilisateur a alors le choix entre créer une nouvelle étude ou en ouvrir une qui a été précédemment enregistrée. +L'utilisateur a alors le choix entre créer une nouvelle étude ou en ouvrir une qui a été précédemment enregistrée. -Définir une adaptation +Définir une adaptation """""""""""""""""""""" -Une fois que HOMARD a été activé, la permière action consiste à créer un cas. Il s'agit de sélectionner le maillage initial de la suite d'adaptations envisagée (voir :ref:`gui_create_case`). A partir de ce cas, on définira les itérations successives (voir :ref:`gui_create_iteration`) à partir des hypothèses (voir :ref:`gui_create_hypothese`). +Une fois que HOMARD a été activé, la permière action consiste à créer un cas. Il s'agit de sélectionner le maillage initial de la suite d'adaptations envisagée (voir :ref:`gui_create_case`). A partir de ce cas, on définira les itérations successives (voir :ref:`gui_create_iteration`) à partir des hypothèses (voir :ref:`gui_create_hypothese`). -Récupérer le résultat d'une adaptation +Récupérer le résultat d'une adaptation """""""""""""""""""""""""""""""""""""" -Le résultat d'une adaptation s'obtient en sélectionnant l'itération à calculer. On sélectionne ensuite *Lancement* dans le menu HOMARD. +Le résultat d'une adaptation s'obtient en sélectionnant l'itération à calculer. On sélectionne ensuite *Lancement* dans le menu HOMARD. .. image:: images/lancement_1.png :align: center -Le fichier contenant le maillage produit est visible dans l'arbre d'études. +Le fichier contenant le maillage produit est visible dans l'arbre d'études. -Mode d'emploi de la saisie des données +Mode d'emploi de la saisie des données """""""""""""""""""""""""""""""""""""" .. toctree:: diff --git a/doc/images/create_boundary_1.png b/doc/images/create_boundary_1.png new file mode 100644 index 00000000..4416bbac Binary files /dev/null and b/doc/images/create_boundary_1.png differ diff --git a/doc/images/create_boundary_an_1.png b/doc/images/create_boundary_an_1.png new file mode 100644 index 00000000..a148efb1 Binary files /dev/null and b/doc/images/create_boundary_an_1.png differ diff --git a/doc/images/create_boundary_an_2.png b/doc/images/create_boundary_an_2.png new file mode 100644 index 00000000..27d70efd Binary files /dev/null and b/doc/images/create_boundary_an_2.png differ diff --git a/doc/images/create_boundary_an_3.png b/doc/images/create_boundary_an_3.png new file mode 100644 index 00000000..129868e4 Binary files /dev/null and b/doc/images/create_boundary_an_3.png differ diff --git a/doc/images/create_boundary_an_4.png b/doc/images/create_boundary_an_4.png new file mode 100644 index 00000000..7229a76e Binary files /dev/null and b/doc/images/create_boundary_an_4.png differ diff --git a/doc/images/create_boundary_an_cy.png b/doc/images/create_boundary_an_cy.png new file mode 100644 index 00000000..4b8e6481 Binary files /dev/null and b/doc/images/create_boundary_an_cy.png differ diff --git a/doc/images/create_boundary_an_sp.png b/doc/images/create_boundary_an_sp.png new file mode 100644 index 00000000..5e78c78c Binary files /dev/null and b/doc/images/create_boundary_an_sp.png differ diff --git a/doc/images/create_boundary_di_1.png b/doc/images/create_boundary_di_1.png new file mode 100644 index 00000000..5ad7b254 Binary files /dev/null and b/doc/images/create_boundary_di_1.png differ diff --git a/doc/images/create_boundary_di_2.png b/doc/images/create_boundary_di_2.png new file mode 100644 index 00000000..9501528d Binary files /dev/null and b/doc/images/create_boundary_di_2.png differ diff --git a/doc/images/create_boundary_di_3.png b/doc/images/create_boundary_di_3.png new file mode 100644 index 00000000..5b548dde Binary files /dev/null and b/doc/images/create_boundary_di_3.png differ diff --git a/doc/images/create_case_1.png b/doc/images/create_case_1.png index c9c88c52..9c420750 100644 Binary files a/doc/images/create_case_1.png and b/doc/images/create_case_1.png differ diff --git a/doc/images/create_case_5.png b/doc/images/create_case_5.png index e607d9b4..239e4b95 100644 Binary files a/doc/images/create_case_5.png and b/doc/images/create_case_5.png differ diff --git a/doc/images/create_case_6.png b/doc/images/create_case_6.png new file mode 100644 index 00000000..e607d9b4 Binary files /dev/null and b/doc/images/create_case_6.png differ diff --git a/doc/images/create_hypothese_2.png b/doc/images/create_hypothese_2.png index d5a7ee22..cdcb199e 100644 Binary files a/doc/images/create_hypothese_2.png and b/doc/images/create_hypothese_2.png differ diff --git a/doc/images/create_hypothese_ch_1.png b/doc/images/create_hypothese_ch_1.png new file mode 100644 index 00000000..6478cb0c Binary files /dev/null and b/doc/images/create_hypothese_ch_1.png differ diff --git a/doc/images/create_hypothese_ch_2.png b/doc/images/create_hypothese_ch_2.png new file mode 100644 index 00000000..96a94cf2 Binary files /dev/null and b/doc/images/create_hypothese_ch_2.png differ diff --git a/doc/images/create_hypothese_ch_3.png b/doc/images/create_hypothese_ch_3.png new file mode 100644 index 00000000..bed6fce7 Binary files /dev/null and b/doc/images/create_hypothese_ch_3.png differ diff --git a/doc/images/create_hypothese_ch_4.png b/doc/images/create_hypothese_ch_4.png new file mode 100644 index 00000000..18fbc585 Binary files /dev/null and b/doc/images/create_hypothese_ch_4.png differ diff --git a/doc/images/create_hypothese_ch_5.png b/doc/images/create_hypothese_ch_5.png new file mode 100644 index 00000000..290bb998 Binary files /dev/null and b/doc/images/create_hypothese_ch_5.png differ diff --git a/doc/images/create_hypothese_gr_1.png b/doc/images/create_hypothese_gr_1.png new file mode 100644 index 00000000..1bfd0b60 Binary files /dev/null and b/doc/images/create_hypothese_gr_1.png differ diff --git a/doc/images/create_hypothese_gr_2.png b/doc/images/create_hypothese_gr_2.png new file mode 100644 index 00000000..615dba21 Binary files /dev/null and b/doc/images/create_hypothese_gr_2.png differ diff --git a/doc/images/create_hypothese_zo_1.png b/doc/images/create_hypothese_zo_1.png new file mode 100644 index 00000000..d5a7ee22 Binary files /dev/null and b/doc/images/create_hypothese_zo_1.png differ diff --git a/doc/images/create_hypothese_zo_2.png b/doc/images/create_hypothese_zo_2.png new file mode 100644 index 00000000..d8b6ecd6 Binary files /dev/null and b/doc/images/create_hypothese_zo_2.png differ diff --git a/doc/images/create_iteration_1.png b/doc/images/create_iteration_1.png index 3160a9ac..4d37f73f 100644 Binary files a/doc/images/create_iteration_1.png and b/doc/images/create_iteration_1.png differ diff --git a/doc/images/create_iteration_2.png b/doc/images/create_iteration_2.png index f0b4d5ae..b0cb7536 100644 Binary files a/doc/images/create_iteration_2.png and b/doc/images/create_iteration_2.png differ diff --git a/doc/images/create_iteration_3.png b/doc/images/create_iteration_3.png index 414c6db6..c6971c9a 100644 Binary files a/doc/images/create_iteration_3.png and b/doc/images/create_iteration_3.png differ diff --git a/doc/images/create_iteration_4.png b/doc/images/create_iteration_4.png index 6a277af6..f0b4d5ae 100644 Binary files a/doc/images/create_iteration_4.png and b/doc/images/create_iteration_4.png differ diff --git a/doc/images/create_iteration_5.png b/doc/images/create_iteration_5.png index 51db52b5..414c6db6 100644 Binary files a/doc/images/create_iteration_5.png and b/doc/images/create_iteration_5.png differ diff --git a/doc/images/create_iteration_6.png b/doc/images/create_iteration_6.png index cdcb199e..51db52b5 100644 Binary files a/doc/images/create_iteration_6.png and b/doc/images/create_iteration_6.png differ diff --git a/doc/images/create_iteration_7.png b/doc/images/create_iteration_7.png new file mode 100644 index 00000000..cdcb199e Binary files /dev/null and b/doc/images/create_iteration_7.png differ diff --git a/doc/index.rst b/doc/index.rst index bd9da0f2..7589e93a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -10,9 +10,9 @@ Documentation du composant HOMARD |logo| HOMARD est le composant qui permet l'adaptation de maillage au sein de la plateforme Salome. -*HOMARD est une marque déposée d'EDF.* +*HOMARD est une marque déposée d'EDF.* -Table des matières de ce mode d'emploi +Table des matières de ce mode d'emploi """""""""""""""""""""""""""""""""""""" .. toctree:: diff --git a/doc/intro.rst b/doc/intro.rst index a526864a..a510bb8d 100644 --- a/doc/intro.rst +++ b/doc/intro.rst @@ -1,26 +1,26 @@ Introduction ============ -Le logiciel HOMARD est destiné à adapter les maillages dans le cadre des codes de calculs par éléments ou volumes finis. Ce logiciel, réalisé par EDF R&D, procède par raffinement et déraffinement des maillages bidimensionnels ou tridimensionnels. Il est conçu pour être utilisé indépendamment du code de calcul auquel il est couplé. +Le logiciel HOMARD est destiné à adapter les maillages dans le cadre des codes de calculs par éléments ou volumes finis. Ce logiciel, réalisé par EDF R&D, procède par raffinement et déraffinement des maillages bidimensionnels ou tridimensionnels. Il est conçu pour être utilisé indépendamment du code de calcul auquel il est couplé. Plusieurs motivations apparaissent pour adapter un maillage : - - on veut simplifier la réalisation du maillage d'une géométrie complexe : on part d’une version grossière et on confie à un processus automatique la charge de l’affiner. - - on veut s’assurer de la convergence de la solution numérique : plutôt que de réaliser à la main des maillages de plus en plus fins, on laisse le logiciel chercher lui-même les endroits où il faudrait affiner le maillage pour augmenter la précision du résultat. - - les conditions du calcul changent au cours de son déroulement : les zones qui doivent être maillées finement se déplacent. Si on maille fin partout dès le début, le maillage est trop gros. En adaptant au fur et à mesure, le maillage ne sera fin qu’aux endroits nécessaires : sa taille sera réduite et la qualité de la solution sera bonne. + - on veut simplifier la réalisation du maillage d'une géométrie complexe : on par d'une version grossière et on confie à un processus automatique la charge de le raffiner. + - on veut s'assurer de la convergence de la solution numérique : plutôt que de réaliser à la main des maillages de plus en plus fins, on laisse le logiciel chercher lui-même les endroits où il faudrait affiner le maillage pour augmenter la précision du résultat. + - les conditions du calcul changent au cours de son déroulement : les zones qui doivent être maillées finement se déplacent. Si on maille fin partout dès le début, le maillage est trop gros. En adaptant au fur et à mesure, le maillage ne sera fin qu'aux endroits nécessaires : sa taille sera réduite et la qualité de la solution sera bonne. -Dans tous les cas, le principe de l’adaptation de maillage reste le même. Sur le maillage de départ, on réalise le calcul standard. A partir d’une analyse de la solution numérique obtenue, on estime l’erreur qui a été commise par rapport à la solution réelle. Cette estimation se représente par une valeur d’indicateur d’erreur dans chaque maille du calcul. A partir de là, on applique le principe suivant : les mailles où l’indicateur d’erreur est fort devraient être plus petites et réciproquement, les mailles où l’indicateur d’erreur est faible pourraient être plus grandes. Avec cette information, on alimente HOMARD qui va modifier le maillage en conséquence. Sur le nouveau maillage, on recommencera alors le calcul. -Schématiquement, une itération d’adaptation de maillage se présente ainsi. Le logiciel calcule la solution numérique sur le maillage n°k, puis en déduit les valeurs de l’indicateur d’erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de l’indicateur n°k, HOMARD crée le nouveau maillage n°k+1. +Dans tous les cas, le principe de l'adaptation de maillage reste le même. Sur le maillage de départ, on réalise le calcul standard. A partir d'une analyse de la solution numérique obtenue, on estime l'erreur qui a été commise par rapport à la solution réelle. Cette estimation se représente par une valeur d'indicateur d'erreur dans chaque maille du calcul. A partir de là, on applique le principe suivant : les mailles où l'indicateur d'erreur est fort devraient être plus petites et réciproquement, les mailles où l'indicateur d'erreur est faible pourraient être plus grandes. Avec cette information, on alimente HOMARD qui va modifier le maillage en conséquence. Sur le nouveau maillage, on recommencera alors le calcul. +Schématiquement, une itération d'adaptation de maillage se présente ainsi. Le logiciel calcule la solution numérique sur le maillage n°k, puis en déduit les valeurs de l'indicateur d'erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de l'indicateur n°k, HOMARD crée le nouveau maillage n°k+1. .. image:: images/intro_1.png :align: center -Au final, la chaîne complète part du maillage initial produit par un mailleur. Elle comprend des maillons successifs (calcul d’indicateur / adaptation) comme sur la figure ci-après. +Au final, la chaîne complète part du maillage initial produit par un mailleur. Elle comprend des maillons successifs (calcul d'indicateur / adaptation) comme sur la figure ci-après. .. image:: images/intro_2.png :align: center -A partir de ce schéma de base, des variantes sont possibles. Si aucun calcul d'erreur n'est disponible dans le logiciel couplé, on peut utiliser un champ pour piloter l'adaptation. Un champ de contraintes en mécaniques peut être utilisé : raffiner là où les contraintes sont importantes est souvent efficace pour améliorer la qualité de la simulation. On peut également adapter en fonction du saut d'une variable d'une maille à sa voisine ou dans une zone connue a priori. Grâce à ses nombreuses options, HOMARD permet d'envisager de nombreux scénarios d'adaptation de maillage. +A partir de ce schéma de base, des variantes sont possibles. Si aucun calcul d'erreur n'est disponible dans le logiciel couplé, on peut utiliser un champ pour piloter l'adaptation. Un champ de contraintes en mécaniques peut être utilisé : raffiner là où les contraintes sont importantes est souvent efficace pour améliorer la qualité de la simulation. On peut également adapter en fonction du saut d'une variable d'une maille à sa voisine ou dans une zone connue a priori. Grâce à ses nombreuses options, HOMARD permet d'envisager de nombreux scénarios d'adaptation de maillage. .. note:: - Pour une description plus complète, voir :download:`Description générale de HOMARD `. + Pour une description plus complète, voir :download:`Description générale de HOMARD `. diff --git a/doc/tui_create_boundary.rst b/doc/tui_create_boundary.rst new file mode 100644 index 00000000..e116b947 --- /dev/null +++ b/doc/tui_create_boundary.rst @@ -0,0 +1,73 @@ +.. _tui_create_boundary: + +La frontière +============ + +.. index:: single: boundary +.. index:: single: frontière +.. index:: single: cylindre +.. index:: single: sphere + +Les variables sont décrites dans :ref:`gui_create_boundary`. + +Méthodes de la classe homard +"""""""""""""""""""""""""""" + ++----------------------------------------------------------------+ ++================================================================+ +| .. module:: CreateBoundary | +| | +| **CreateBoundary(boundary_name, boundary_type)** | +| | +| - ``boundary_name`` : le nom de la zone | +| - ``boundary_type`` : entier précisant le type de frontière| +| | +| * 1 : cylindre | +| * 2 : sphère | ++----------------------------------------------------------------+ + +Méthodes de la classe boundary +"""""""""""""""""""""""""""""" + ++---------------------------------------------------------------+ ++===============================================================+ +| .. module:: GetName | +| | +| **GetName()** | +| Retourne le nom de la frontière | ++---------------------------------------------------------------+ +| .. module:: GetBoundaryType | +| | +| **GetBoundaryType()** | +| Retourne le type de la frontière | ++---------------------------------------------------------------+ +| .. module:: SetCylinder | +| | +| **SetCylinder(Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, R)** | +| | +| - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées d'un point | +| sur l'axe du cylindre | +| - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe | +| - ``R`` : rayon du cylindre | ++---------------------------------------------------------------+ +| .. module:: SetSphere | +| | +| **SetSphere(Xcen, Ycen, Zcen, R)** | +| | +| - ``Xcen`` : X du centre | +| - ``Ycen`` : Y du centre | +| - ``Zcen`` : Z du centre | +| - ``R`` : rayon de la sphère | ++---------------------------------------------------------------+ + + +Exemple +""""""" +Création d'une frontière sphérique, puis d'une frontière cylindrique : :: + + fron_1 = homard.CreateBoundary("FRON_1", 2) + fron_1.SetSphere(12.3, 3.4, .56, 6.5) + fron_2 = homard.CreateBoundary('CYL_1', 1) + fron_2.SetCylinder(0.0, 25., -25., 25., 50., 75., 100.) + + diff --git a/doc/tui_create_case.rst b/doc/tui_create_case.rst index 588c05c9..8750be31 100644 --- a/doc/tui_create_case.rst +++ b/doc/tui_create_case.rst @@ -3,12 +3,12 @@ Le cas ====== .. index:: single: cas -.. index:: single: type de conformité +.. index:: single: type de conformité .. index:: single: maillage;initial -Les variables sont décrites dans :ref:`gui_create_case`. +Les variables sont décrites dans :ref:`gui_create_case`. -Méthodes de la classe homard +Méthodes de la classe homard """""""""""""""""""""""""""" +---------------------------------------------------------------+ @@ -22,14 +22,14 @@ Méthodes de la classe homard | - ``mesh_name`` : le nom du maillage initial | | - ``mesh_file`` : le nom du fichier contenant ce maillage | | | -| Par défaut : | +| Par défaut : | | | -| * le répertoire des résultats est ``/tmp`` | +| * le répertoire des résultats est ``/tmp`` | | * l'adaptation est conforme | +---------------------------------------------------------------+ -Méthodes de la classe cas +Méthodes de la classe cas """"""""""""""""""""""""" +---------------------------------------------------------------+ @@ -43,18 +43,18 @@ Méthodes de la classe cas | | | **SetDirName(dirname)** | | | -| - ``dirname`` : le nom du répertoire des résutats | +| - ``dirname`` : le nom du répertoire des résutats | +---------------------------------------------------------------+ | .. module:: GetDirName | | | | **GetDirName()** | -| Retourne le nom du répertoire des résutats associé au cas | +| Retourne le nom du répertoire des résutats associé au cas | +---------------------------------------------------------------+ | .. module:: SetConfType | | | | **SetConfType(conf_type)** | | | -| - ``conf_type`` : entier précisant le mode de conformité | +| - ``conf_type`` : entier précisant le mode de conformité | | | | 1. conforme | | 2. non conforme avec 1 noeud par maille | @@ -64,20 +64,36 @@ Méthodes de la classe cas | .. module:: GetConfType | | | | **GetConfType()** | -| Retourne le type de conformité | +| Retourne le type de conformité | +---------------------------------------------------------------+ | .. module:: GetIter0Name | | | | **GetIter0Name()** | -| Retourne le nom de l'itération 0, associée au maillage | +| Retourne le nom de l'itération 0, associée au maillage | | initial. Ce nom est mis automatiquement par le module | -| HOMARD et doit être utilisé pour enchaîner les adaptations| +| HOMARD et doit être utilisé pour enchaîner les adaptations| ++---------------------------------------------------------------+ +| .. module:: AddBoundaryGroup | +| | +| **AddBoundaryGroup(boundary, group)** | +| | +| - ``boundary`` : nom d'une frontière courbe à suivre | +| Pour une frontière discrète : | +| | +| . si toutes les lignes courbes sont suivies, le second | +| argument est une chaîne vide. | +| . si seulement certaines lignes courbes sont suivies, | +| ``group`` est le nom d'un groupe de segments à suivre. | +| Pour une frontière analytique : | +| | +| - ``group`` : nom d'un groupe de faces placées sur la | +| frontière | +---------------------------------------------------------------+ Exemple """"""" -La création de l'objet case_1 se fait ainsi : :: +La création de l'objet case_1 se fait ainsi : :: case_name = "CAS_1" mesh_name = "MAILL" @@ -86,6 +102,10 @@ La création de l'objet case_1 se fait ainsi : :: dirname = "/local00/Salome/Adapt/resu" case_1.SetDirName(dirname) case_1.SetConfType(1) + case_1.AddBoundaryGroup( 'intersection', '' ) + case_1.AddBoundaryGroup( 'cyl_1', 'T1_EXT' ) + case_1.AddBoundaryGroup( 'cyl_1', 'T2_EXT' ) + case_1.AddBoundaryGroup( 'cyl_2', 'T_INT' ) diff --git a/doc/tui_create_hypothese.rst b/doc/tui_create_hypothese.rst index 29dfe983..4f44a4ae 100644 --- a/doc/tui_create_hypothese.rst +++ b/doc/tui_create_hypothese.rst @@ -1,15 +1,15 @@ .. _tui_create_hypothese: -L'hypothèse +L'hypothèse =========== -.. index:: single: itération -.. index:: single: hypothèse +.. index:: single: itération +.. index:: single: hypothèse .. index:: single: zone -Les variables sont décrites dans :ref:`gui_create_hypothese`. +Les variables sont décrites dans :ref:`gui_create_hypothese`. -Méthodes de la classe homard +Méthodes de la classe homard """""""""""""""""""""""""""" +---------------------------------------------------------------+ @@ -19,20 +19,20 @@ Méthodes de la classe homard | **CreateHypothesis(hypo_name)** | | Retourne une instance de la classe hypothese | | | -| - ``hypo_name`` : le nom de l'hypothèse | +| - ``hypo_name`` : le nom de l'hypothèse | +---------------------------------------------------------------+ | .. module:: AssociateHypoZone | | | | **AssociateHypoZone(hypo_name, zone_name)** | | | -| - ``hypo_name`` : le nom de l'hypothèse | -| - ``zone_name`` : le nom de la zone à associer | +| - ``hypo_name`` : le nom de l'hypothèse | +| - ``zone_name`` : le nom de la zone à associer | +---------------------------------------------------------------+ -Méthodes de la classe hypothese +Méthodes de la classe hypothese """"""""""""""""""""""""""""""" -Généralités +Généralités ^^^^^^^^^^^ +---------------------------------------------------------------+ @@ -40,24 +40,24 @@ Généralités | .. module:: GetName | | | | **GetName()** | -| Retourne le nom de l'hypothèse | +| Retourne le nom de l'hypothèse | +---------------------------------------------------------------+ | .. module:: SetAdapRefinUnRef | | | | **SetAdapRefinUnRef(Adap, Refin, UnRef)** | | | -| - ``Adap`` : entier précisant le type d'adaptation | +| - ``Adap`` : entier précisant le type d'adaptation | | | | * -1 : uniforme | | * 0 : selon des zones | | * 1 : selon un champ | | | -| - ``Refin`` : entier précisant si le raffinement est actif| +| - ``Refin`` : entier précisant si le raffinement est actif| | | | 0. inactif | | 1. actif | | | -| - ``UnRef`` : entier précisant si déraffinement est actif | +| - ``UnRef`` : entier précisant si déraffinement est actif | | | | 0. inactif | | 1. actif | @@ -76,7 +76,7 @@ Généralités | .. module:: GetUnRefType | | | | **GetUnRefType()** | -| Retourne le type de déraffinement | +| Retourne le type de déraffinement | +---------------------------------------------------------------+ Le champ et les seuils @@ -84,9 +84,9 @@ Le champ et les seuils +---------------------------------------------------------------+ +===============================================================+ -| .. module:: SetFieldName | +| .. module:: SetField | | | -| **SetFieldName(field_name)** | +| **SetField(field_name)** | | | | - ``field_name`` : le nom du champ | +---------------------------------------------------------------+ @@ -99,16 +99,16 @@ Le champ et les seuils | | | **SetUseField(use_field)** | | | -| - ``use_field`` : entier précisant l'usage du champ | +| - ``use_field`` : entier précisant l'usage du champ | | | -| 0. valeur par maille (défaut) | +| 0. valeur par maille (défaut) | | 1. saut entre une maille et ses voisines | +---------------------------------------------------------------+ | .. module:: SetRefinThr | | | | **SetRefinThr(type_thres, threshold)** | | | -| - ``type_thres`` : entier précisant le type de seuil en | +| - ``type_thres`` : entier précisant le type de seuil en | | raffinement | | | | 1. valeur absolue | @@ -126,8 +126,8 @@ Le champ et les seuils | | | **SetUnRefThr(type_thres, threshold)** | | | -| - ``type_thres`` : entier précisant le type de seuil en | -| déraffinement | +| - ``type_thres`` : entier précisant le type de seuil en | +| déraffinement | | | | 1. valeur absolue | | 2. valeur relative en % | @@ -138,7 +138,7 @@ Le champ et les seuils | .. module:: GetUnRefThrType | | | | **GetUnRefThrType()** | -| Retourne le type de seuil de déraffinement | +| Retourne le type de seuil de déraffinement | +---------------------------------------------------------------+ @@ -151,23 +151,23 @@ Les composantes du champ | | | **AddComp(comp_name)** | | | -| - ``comp_name`` : nom d'une composante à prendre en | +| - ``comp_name`` : nom d'une composante à prendre en | | compte | +---------------------------------------------------------------+ | .. module:: SetUseComp | | | | **SetUseComp(use_comp)** | | | -| - ``use_comp`` : entier précisant l'usage des composantes | +| - ``use_comp`` : entier précisant l'usage des composantes | | | -| 0. norme L2 (défaut) | +| 0. norme L2 (défaut) | | 1. norme infinie | | 2. valeur relative, uniquement si une seule composante| +---------------------------------------------------------------+ | .. module:: GetListComp | | | | **GetListComp()** | -| Retourne la liste des composantes utilisées | +| Retourne la liste des composantes utilisées | +---------------------------------------------------------------+ Le filtrage par les groupes @@ -179,21 +179,21 @@ Le filtrage par les groupes | | | **AddGroup(group_name)** | | | -| - ``group_name`` : nom du groupe à prendre en compte | +| - ``group_name`` : nom du groupe à prendre en compte | +---------------------------------------------------------------+ | .. module:: GetGroups | | | | **GetGroups()** | -| Retourne la liste des groupes utilisés pour le filtrage | +| Retourne la liste des groupes utilisés pour le filtrage | +---------------------------------------------------------------+ Exemple """"""" -La création de l'objet hypo_1 se fait ainsi : :: +La création de l'objet hypo_1 se fait ainsi : :: hypo_1 = homard.CreateHypothesis("HypoField") hypo_1.SetAdapRefinUnRef(1, 1, 0) - hypo_1.SetFieldName("INDICATEUR") + hypo_1.SetField("INDICATEUR") hypo_1.AddComp("INDX") hypo_1.AddComp("INDZ") hypo_1.SetRefinThr(1, 80.) diff --git a/doc/tui_create_iteration.rst b/doc/tui_create_iteration.rst index 45f80069..f09fc5c4 100644 --- a/doc/tui_create_iteration.rst +++ b/doc/tui_create_iteration.rst @@ -1,15 +1,15 @@ .. _tui_create_iteration: -L'itération +L'itération =========== -.. index:: single: itération -.. index:: single: hypothèse +.. index:: single: itération +.. index:: single: hypothèse .. index:: single: zone -Les variables sont décrites dans :ref:`gui_create_iteration`. +Les variables sont décrites dans :ref:`gui_create_iteration`. -Méthodes de la classe homard +Méthodes de la classe homard """""""""""""""""""""""""""" +---------------------------------------------------------------+ @@ -19,25 +19,25 @@ Méthodes de la classe homard | **CreateIteration(iter_name, iter_parent_name)** | | Retourne une instance de la classe iteration | | | -| - ``iter_name`` : le nom de l'itération | -| - ``iter_parent_name`` : le nom de l'itération mère | +| - ``iter_name`` : le nom de l'itération | +| - ``iter_parent_name`` : le nom de l'itération mère | | | -| Par défaut : | +| Par défaut : | | | -| * le maillage produit a le même nom que l'itération | +| * le maillage produit a le même nom que l'itération | +---------------------------------------------------------------+ | .. module:: AssociateIterHypo | | | | **AssociateIterHypo(iter_name, hypo_name)** | | | -| - ``iter_name`` : le nom de l'itération | -| - ``hypo_name`` : le nom de l'hypothèse à associer | +| - ``iter_name`` : le nom de l'itération | +| - ``hypo_name`` : le nom de l'hypothèse à associer | +---------------------------------------------------------------+ -Méthodes de la classe iteration +Méthodes de la classe iteration """"""""""""""""""""""""""""""" -Généralités +Généralités ^^^^^^^^^^^ +---------------------------------------------------------------+ @@ -45,35 +45,35 @@ Généralités | .. module:: GetName | | | | **GetName()** | -| Retourne le nom de l'itération | +| Retourne le nom de l'itération | +---------------------------------------------------------------+ | .. module:: GetNumber | | | | **GetNumber()** | -| Retourne le numéro de l'itération | +| Retourne le numéro de l'itération | +---------------------------------------------------------------+ | .. module:: GetIterParent | | | | **GetIterParent()** | -| Retourne le nom de l'itération mère | +| Retourne le nom de l'itération mère | +---------------------------------------------------------------+ | .. module:: GetHypoName | | | | **GetHypoName()** | -| Retourne le nom de l'hypothèse associée | +| Retourne le nom de l'hypothèse associée | +---------------------------------------------------------------+ | .. module:: GetCaseName | | | | **GetCaseName()** | -| Retourne le nom du cas associé | +| Retourne le nom du cas associé | +---------------------------------------------------------------+ | .. module:: GetState | | | | **GetState()** | -| Retourne l'état de l'itération | +| Retourne l'état de l'itération | | | -| - ``0`` : itération non calculée | -| - ``1`` : itération calculée correctement | +| - ``0`` : itération non calculée | +| - ``1`` : itération calculée correctement | +---------------------------------------------------------------+ Informations sur les maillages @@ -104,13 +104,18 @@ Informations sur le champ +---------------------------------------------------------------+ +===============================================================+ -| .. module:: SetField | +| .. module:: SetFieldFile | | | -| **SetField(field_file, TimeStep, Rank)** | +| **SetFieldFile(field_file)** | | | | - ``field_file`` : le nom du fichier contenant le champ | -| - ``TimeStep`` : l'instant où est pris le champ | -| - ``Rank`` : le numéro d'ordre où est pris le champ | ++---------------------------------------------------------------+ +| .. module:: SetTimeStepRank | +| | +| **SetTimeStepRank(fTimeStep, Rank)** | +| | +| - ``TimeStep`` : l'instant où est pris le champ | +| - ``Rank`` : le numéro d'ordre où est pris le champ | +---------------------------------------------------------------+ | .. module:: GetFieldFileName | | | @@ -120,19 +125,19 @@ Informations sur le champ | .. module:: GetTimeStep | | | | **GetTimeStep()** | -| Retourne l'instant où est pris le champ | +| Retourne l'instant où est pris le champ | +---------------------------------------------------------------+ | .. module:: GetRank | | | | **GetRank()** | -| Retourne le numéro d'ordre où est pris le champ | +| Retourne le numéro d'ordre où est pris le champ | +---------------------------------------------------------------+ Exemple """"""" .. index:: single: maillage;initial -Pour la création de la première itération, il faut récupérer le nom qui a été donné à celle qui correspond au maillage initial. Ce nom s'obtient avec la méthode ``GetIter0Name`` appliquée au cas. :: +Pour la création de la première itération, il faut récupérer le nom qui a été donné à celle qui correspond au maillage initial. Ce nom s'obtient avec la méthode ``GetIter0Name`` appliquée au cas. :: iter_name = "Iteration_1" iter_1 = homard.CreateIteration(iter_name, case_1.GetIter0Name()) @@ -141,7 +146,7 @@ Pour la création de la première itération, il faut récupérer le nom qui a iter_1.SetMeshFile("/local00/M.01.med") homard.AssociateIterHypo(iter_name, "HypoField") -Pour la création d'une itération suivante, on donnera le nom de l'itération parent de laquelle on part. :: +Pour la création d'une itération suivante, on donnera le nom de l'itération parent de laquelle on part. :: iter_name = "Iteration_2" iter_1 = homard.CreateIteration(iter_name, "Iteration_1") diff --git a/doc/tui_create_zone.rst b/doc/tui_create_zone.rst index e5e34af5..98c985a1 100644 --- a/doc/tui_create_zone.rst +++ b/doc/tui_create_zone.rst @@ -7,21 +7,25 @@ La zone .. index:: single: boite .. index:: single: sphere -Les variables sont décrites dans :ref:`gui_create_zone`. +Les variables sont décrites dans :ref:`gui_create_zone`. -Méthodes de la classe homard +Méthodes de la classe homard """""""""""""""""""""""""""" +---------------------------------------------------------------+ +===============================================================+ | .. module:: CreateZone | | | -| **CreateZone(zone_name)** | +| **CreateZone(zone_name, zone_type)** | | | | - ``zone_name`` : le nom de la zone | +| - ``zone_type`` : entier précisant le type de zone | +| | +| * 2 : parallélépipède | +| * 4 : sphère | +---------------------------------------------------------------+ -Méthodes de la classe zone +Méthodes de la classe zone """""""""""""""""""""""""" +---------------------------------------------------------------+ @@ -31,14 +35,10 @@ Méthodes de la classe zone | **GetName()** | | Retourne le nom de la zone | +---------------------------------------------------------------+ -| .. module:: SetZoneType | -| | -| **SetZoneType(zone_type)** | -| | -| - ``zone_type`` : entier précisant le type de zone | +| .. module:: GetZoneType | | | -| * 2 : parallélépipède | -| * 4 : sphère | +| **GetZoneType()** | +| Retourne le type de la zone | +---------------------------------------------------------------+ | .. module:: SetBox | | | @@ -54,16 +54,15 @@ Méthodes de la classe zone | - ``Xcen`` : X du centre | | - ``Ycen`` : Y du centre | | - ``Zcen`` : Z du centre | -| - ``R`` : rayon de la sphère | +| - ``R`` : rayon de la sphère | +---------------------------------------------------------------+ Exemple """"""" -La création de l'objet zone_1 se fait ainsi : :: +La création de l'objet zone_1 se fait ainsi : :: - zone_1 = homard.CreateZone("Zone_2") - zone_1.SetTypeZone(4) + zone_1 = homard.CreateZone("Zone_2", 4) zone_1.SetSphere(12.3, 3.4, .56, 6.5) diff --git a/doc/tui_homard.rst b/doc/tui_homard.rst index d2ef16f3..29eec9d7 100644 --- a/doc/tui_homard.rst +++ b/doc/tui_homard.rst @@ -3,10 +3,10 @@ L'adaptation ============ -.. index:: single: itération +.. index:: single: itération .. index:: single: calcul -Méthodes de la classe homard +Méthodes de la classe homard """""""""""""""""""""""""""" +---------------------------------------------------------------+ @@ -14,24 +14,24 @@ Méthodes de la classe homard | .. index:: single: Compute | | | | **Compute(iter_name, option)** | -| Calcule l'adaptation de maillage correspondant à | -| une itération | +| Calcule l'adaptation de maillage correspondant à | +| une itération | | | -| - ``iter_name`` : le nom de l'itération | -| - ``option`` : un entier précisant ce qui se passe quand | -| des fichiers de résultats existent déjà | -| * 0 : arrêt en erreur | -| * 1 : écrasement des anciens fichiers | +| - ``iter_name`` : le nom de l'itération | +| - ``option`` : un entier précisant ce qui se passe quand | +| des fichiers de résultats existent déjà | +| * 0 : arrêt en erreur | +| * 1 : écrasement des anciens fichiers | | | | Retourne un entier : | -| * 0 : adaptation réussie | -| * autre valeur : problème | +| * 0 : adaptation réussie | +| * autre valeur : problème | +---------------------------------------------------------------+ Exemple """"""" -Le calcul de l'itération de nom "Iteration_1" avec écrasement des anciens fichiers de résultat se fait ainsi : :: +Le calcul de l'itération de nom "Iteration_1" avec écrasement des anciens fichiers de résultat se fait ainsi : :: iter_name = "Iteration_1" codret = homard.Compute(iter_name, 1) diff --git a/doc/tui_usage.rst b/doc/tui_usage.rst index 195b2581..fec8871e 100644 --- a/doc/tui_usage.rst +++ b/doc/tui_usage.rst @@ -1,6 +1,6 @@ Mode d'emploi pour TUI ====================== -Le module HOMARD peut se lancer à partir d'instructions python. On trouvera ici la description de chacune des fonctions accessibles par l'utilisateur. +Le module HOMARD peut se lancer à partir d'instructions python. On trouvera ici la description de chacune des fonctions accessibles par l'utilisateur. .. toctree:: :maxdepth: 2 @@ -9,4 +9,5 @@ Le module HOMARD peut se lancer à partir d'instructions python. On trouvera ici tui_create_iteration tui_create_hypothese tui_create_zone + tui_create_boundary tui_homard diff --git a/doc/tutorials.rst b/doc/tutorials.rst index 653ac99d..b28733bc 100644 --- a/doc/tutorials.rst +++ b/doc/tutorials.rst @@ -2,15 +2,15 @@ Exemples ======== .. index:: single: exemple .. index:: single: python -On trouvera ici les instructions python pour quelques configurations caractéristiques. Les fichiers de données associés sont téléchargeables. +On trouvera ici les instructions python pour quelques configurations caractéristiques. Les fichiers de données associés sont téléchargeables. Raffinement uniforme """""""""""""""""""" .. index:: single: raffinement;uniforme On fera ici trois raffinements uniformes successifs du maillage contenu dans le fichier ``tutorial_1.00.med``. Quelques remarques : - * la même hypothèse est utilisée à chaque itération - * le maillage produit porte toujours le même nom. Cela ne pose pas de problème car il est stocké dans des fichiers différents. + * la même hypothèse est utilisée à chaque itération + * le maillage produit porte toujours le même nom. Cela ne pose pas de problème car il est stocké dans des fichiers différents. :: @@ -23,7 +23,7 @@ On fera ici trois raffinements uniformes successifs du maillage contenu dans le # # Case "Case_0" # ============= - Case_0 = homard.CreateCase('Case_0', 'MAILL', dircase+'/m0.med') + Case_0 = homard.CreateCase('Case_0', 'MAILL', dircase+'/tutorial_1.00.med') Case_0.SetDirName(dircase) Case_0.SetConfType(1) # @@ -51,7 +51,7 @@ On fera ici trois raffinements uniformes successifs du maillage contenu dans le codret = homard.Compute('Iter_2', 1) .. note:: - Téléchargement des fichiers + Téléchargement des fichiers * :download:`maillage initial` * :download:`commandes python` @@ -61,7 +61,7 @@ Raffinement par des zones """"""""""""""""""""""""" .. index:: single: zone -On procède ici au raffinement selon des zones. Pour passer du maillage initial au maillage 'M_1', on utilise une boîte encadrant le plan z=1 et une sphère centrée sur l'origine de rayon 1.05. Puis pour passer du maillage 'M_1' au maillage 'M_2', on remplace la sphère par une boîte encadrant le cube de côté 0.5, pointant sur l'origine. On notera que le type de raffinement n'a pas été précisé ; par défaut, il sera donc conforme. +On procède ici au raffinement selon des zones. Pour passer du maillage initial au maillage 'M_1', on utilise une boîte encadrant le plan z=1 et une sphère centrée sur l'origine de rayon 1.05. Puis pour passer du maillage 'M_1' au maillage 'M_2', on remplace la sphère par une boîte encadrant le cube de côté 0.5, pointant sur l'origine. On notera que le type de raffinement n'a pas été précisé ; par défaut, il sera donc conforme. :: dircase = "/tmp" @@ -116,7 +116,7 @@ On procède ici au raffinement selon des zones. Pour passer du maillage initial codret = homard.Compute('Iter_1', 1) .. note:: - Téléchargement des fichiers + Téléchargement des fichiers * :download:`maillage initial` * :download:`commandes python` @@ -126,7 +126,7 @@ Raffinement selon un champ """""""""""""""""""""""""" .. index:: single: champ -On procède ici au raffinement selon un champ. Les hypothèses servent à définir le nom du champ et les seuils de raffinement/déraffinement. La donnée du fichier et des instants est faite dans l'itération. +On procède ici au raffinement selon un champ. Les hypothèses servent à définir le nom du champ et les seuils de raffinement/déraffinement. La donnée du fichier et des instants est faite dans l'itération. Des champs sur les noeuds ou sur les mailles sont interpolés. :: dircase = "/tmp" @@ -140,6 +140,9 @@ On procède ici au raffinement selon un champ. Les hypothèses servent à défin Hypo_0.SetUseComp(0) Hypo_0.AddComp('ERREST ') Hypo_0.SetRefinThr(3, 1.0) + Hypo_0.SetTypeFieldInterp(2) + Hypo_0.AddFieldInterp('SOLU_0__DEPL____________________') + Hypo_0.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________') # # Hypothesis "Hypo_1" # =================== @@ -151,6 +154,9 @@ On procède ici au raffinement selon un champ. Les hypothèses servent à défin Hypo_1.AddComp('ERREST ') Hypo_1.SetRefinThr(3, 1.5) Hypo_1.SetUnRefThr(3, 6.) + Hypo_1.SetTypeFieldInterp(2) + Hypo_1.AddFieldInterp('SOLU_1__DEPL____________________') + Hypo_1.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________') # # Case "Case_0" # ============= @@ -162,7 +168,8 @@ On procède ici au raffinement selon un champ. Les hypothèses servent à défin Iter_0 = homard.CreateIteration('Iter_0', Case_0.GetIter0Name()) Iter_0.SetMeshName('H_1') Iter_0.SetMeshFile(dircase+'/maill.01.med') - Iter_0.SetField(dircase+'/tutorial_3.00.med', 1, 1) + Iter_0.SetFieldFile(dircase+'/tutorial_3.00.med') + Iter_0.SetTimeStepRank( 1, 1) homard.AssociateIterHypo('Iter_0', 'Hypo_0') codret = homard.Compute('Iter_0', 1) # @@ -171,17 +178,90 @@ On procède ici au raffinement selon un champ. Les hypothèses servent à défin Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0') Iter_1.SetMeshName('H_2') Iter_1.SetMeshFile('/tmp/maill.02.med') - Iter_1.SetField(dircase+'/tutorial_3.01.med', 1, 1) + Iter_1.SetFieldFile(dircase+'/tutorial_3.01.med') + Iter_1.SetTimeStepRank(1, 1) homard.AssociateIterHypo('Iter_1', 'Hypo_1') codret = homard.Compute('Iter_1', 1) .. note:: - Téléchargement des fichiers + Téléchargement des fichiers - * :download:`maillage et champ étape 0` - * :download:`maillage et champ étape 1` + * :download:`maillage et champ étape 0` + * :download:`maillage et champ étape 1` * :download:`commandes python` +Suivi de frontières courbes +""""""""""""""""""""""""""" +.. index:: single: champ + +On teste ici le suivi des frontières courbes : des frontières analytiques pour décrire les différentes surfaces des tuyaux et une frontière discrète pour décrire les lignes d'intersection des deux tuyaux. Le pilotage du raffinement est le suivant : raffinement uniforme de toutes les mailles contenues dans des groupes désignés. +:: + dircase = "/tmp" + # + # Creation of the boundaries + # ========================== + Boundary_1 = homard.CreateBoundary('intersection', 0) + Boundary_1.SetMeshFile(dircase+'/tutorial_4.fr.med') + Boundary_1.SetMeshName('PIQUAGE') + # + Boundary_2 = homard.CreateBoundary('cyl_1_ext', 1) + Boundary_2.SetCylinder(0.0, 25., -25., 25., 50., 75., 100.) + # + Boundary_3 = homard.CreateBoundary('cyl_2_ext', 1) + Boundary_3.SetCylinder(17.5, -2.5, -12.5, -100., -75., -25., 50.) + # + Boundary_4 = homard.CreateBoundary('cyl_1_int', 1) + Boundary_4.SetCylinder(0.0, 25., -25., 25., 50., 75., 75.) + # + Boundary_5 = homard.CreateBoundary('cyl_2_int', 1) + Boundary_5.SetCylinder(17.5, -2.5, -12.5, -100., -75., -25., 25.) + # + # Hypothesis "Hypo" + # =================== + # Creation of the hypothesis Hypo_1 + Hypo_1 = homard.CreateHypothesis('Hypo_1') + Hypo_1.SetAdapRefinUnRef(-1, 1, 0) + Hypo_1.AddGroup('T1_INT') + Hypo_1.AddGroup('T2_INT') + # Creation of the hypothesis Hypo_2 + Hypo_2 = homard.CreateHypothesis('Hypo_2') + Hypo_2.SetAdapRefinUnRef(-1, 1, 0) + Hypo_2.AddGroup('T1_EXT') + Hypo_2.AddGroup('T2_EXT') + # + # Case "Case" + # ============= + Case = homard.CreateCase('Case', 'PIQUAGE', dircase+'/tutorial_4.00.med') + Case.SetDirName(dircase) + Case.AddBoundaryGroup( 'intersection', '' ) + Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT' ) + Case.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' ) + Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT' ) + Case.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' ) + # + # Creation of the iterations + # ========================== + # Creation of the iteration Iter_1 + Iter_1 = homard.CreateIteration('Iter_1', Case.GetIter0Name() ) + Iter_1.SetMeshName('PIQUAGE_1') + Iter_1.SetMeshFile(dircase+'/maill.01.med') + homard.AssociateIterHypo('Iter_1', 'Hypo_1') + codret = homard.Compute('Iter_1', 1) + # Creation of the iteration Iter_2 + Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1' ) + Iter_2.SetMeshName('PIQUAGE_2') + Iter_2.SetMeshFile(dircase+'/maill.02.med') + homard.AssociateIterHypo('Iter_2', 'Hypo_2') + codret = homard.Compute('Iter_2', 1) + +.. note:: + Téléchargement des fichiers + + * :download:`maillage initial` + * :download:`maillage de la frontière discrète` + * :download:`commandes python` + + .. toctree:: :maxdepth: 2 diff --git a/idl/HOMARD_Gen.idl b/idl/HOMARD_Gen.idl index a84e1765..8c7a60d2 100644 --- a/idl/HOMARD_Gen.idl +++ b/idl/HOMARD_Gen.idl @@ -19,7 +19,7 @@ module HOMARD typedef sequence listeCases; typedef sequence listeBoundarys; - interface HOMARD_Gen : Engines::Component, SALOMEDS::Driver + interface HOMARD_Gen : Engines::EngineComponent, SALOMEDS::Driver { HOMARD_Cas CreateCase(in string nomCas, in string MeshName, in string FileName ) raises (SALOME::SALOME_Exception); @@ -41,6 +41,7 @@ module HOMARD void DissociateHypoZone(in string nomZone, in string nomHypothesis) raises (SALOME::SALOME_Exception); + void InvalideBoundary (in string nomBoundary) raises (SALOME::SALOME_Exception); void InvalideZone (in string nomZone) raises (SALOME::SALOME_Exception); void InvalideHypo (in string nomHypo) raises (SALOME::SALOME_Exception); void InvalideIter (in string nomIter) raises (SALOME::SALOME_Exception); diff --git a/idl/Makefile.am b/idl/Makefile.am index 6f0537d8..a665aa18 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -43,6 +43,8 @@ nodist_libSalomeIDLHOMARD_la_SOURCES = \ HOMARD_BoundarySK.cc \ HOMARD_GenSK.cc +BUILT_SOURCES = $(nodist_libSalomeIDLHOMARD_la_SOURCES) + # header files must be exported: other modules have to use this library nodist_salomeinclude_HEADERS = $(BASEIDL_FILES:%.idl=%.hh) @@ -85,8 +87,8 @@ IDLPYFLAGS = \ SUFFIXES = .idl .hh SK.cc .idlSK.cc: $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -.idl.hh: - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< +#.idl.hh: +# $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) $(INSTALL) -d $(DESTDIR)$(salomepythondir) diff --git a/src/HOMARD/HOMARD_Boundary.cxx b/src/HOMARD/HOMARD_Boundary.cxx index d819555a..eceeca34 100644 --- a/src/HOMARD/HOMARD_Boundary.cxx +++ b/src/HOMARD/HOMARD_Boundary.cxx @@ -99,13 +99,6 @@ std::string HOMARD_Boundary::GetDumpPython() const break; } } - aScript << "\t" <<_NomBoundary << ".SetCaseCreation('"; - aScript << _NomCasCreation << "')\n"; - - std::list::const_iterator it; - for ( it=_ListGroupSelected.begin(); it!=_ListGroupSelected.end();it++) - aScript << "\t" << _NomBoundary << ".AddGroup('" << (*it) << "')\n" ; - return aScript.str(); } diff --git a/src/HOMARD/HOMARD_Hypothesis.cxx b/src/HOMARD/HOMARD_Hypothesis.cxx index 4da42dd2..41b634eb 100644 --- a/src/HOMARD/HOMARD_Hypothesis.cxx +++ b/src/HOMARD/HOMARD_Hypothesis.cxx @@ -93,7 +93,6 @@ std::string HOMARD_Hypothesis::GetDumpPython() const std::ostringstream aScript; aScript << "\n# Creation of the hypothesis " << _NomHypo << "\n" ; aScript << "\t" << _NomHypo << " = homard.CreateHypothesis('" << _NomHypo << "')\n"; - aScript << "\t" << _NomHypo << ".SetCaseCreation('" << _NomCasCreation << "')\n"; aScript << "\t" << _NomHypo << ".SetAdapRefinUnRef(" << _TypeAdap << ", " << _TypeRaff << ", " << _TypeDera << ")\n"; // Raffinement selon des zones geometriques diff --git a/src/HOMARD/HomardDriver.cxx b/src/HOMARD/HomardDriver.cxx index 04c46302..d1e1ed3b 100644 --- a/src/HOMARD/HomardDriver.cxx +++ b/src/HOMARD/HomardDriver.cxx @@ -345,21 +345,24 @@ void HomardDriver::TexteBoundaryOption( int BoundaryOption ) // std::cerr << "A la fin de TexteBoundaryOption _Texte ="<<_Texte << std::endl; } ////============================================================================= -void HomardDriver::TexteBoundaryDi( const std::string MeshName, const std::string MeshFile ) +void HomardDriver::TexteBoundaryDi( const std::string MeshName, const std::string MeshFile, const std::string GroupName ) { -// std::cerr << "Dans HomardDriver::TexteBoundaryDi, MeshName ="< 0 ) _Texte += "CCGroFro " + GroupName + "\n" ; // // std::cerr << "A la fin de TexteBoundaryOption _Texte ="<<_Texte << std::endl; } ////============================================================================= void HomardDriver::TexteBoundaryAn( int NumeBoundary, int BoundaryType, const std::string Group, double x0, double x1, double x2, double x3, double x4, double x5, double x6 ) { -std::cerr << "Dans TexteBoundaryAn de HomardDriver NumeBoundary = "< +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Ui_CreateBoundaryAn +{ +public: + QGridLayout *gridLayout; + QGroupBox *gBCylindre; + QGridLayout *gridLayout1; + QDoubleSpinBox *SpinBox_Xcent; + QLabel *TLXcent; + QDoubleSpinBox *SpinBox_Radius; + QDoubleSpinBox *SpinBox_Zcent; + QLabel *TLradius; + QLabel *TLZcent; + QLabel *TLYcent; + QDoubleSpinBox *SpinBox_Ycent; + QLabel *TLXaxis; + QLabel *TLYaxis; + QLabel *TLZaxis; + QDoubleSpinBox *SpinBox_Zaxis; + QDoubleSpinBox *SpinBox_Yaxis; + QDoubleSpinBox *SpinBox_Xaxis; + QGroupBox *GBButtons; + QHBoxLayout *hboxLayout; + QPushButton *buttonOk; + QPushButton *buttonApply; + QPushButton *buttonCancel; + QPushButton *buttonHelp; + QGroupBox *gBSphere; + QGridLayout *gridLayout2; + QDoubleSpinBox *SpinBox_Rayon; + QDoubleSpinBox *SpinBox_Zcentre; + QLabel *TLRayon; + QLabel *TLZcentre; + QLabel *TLYcentre; + QDoubleSpinBox *SpinBox_Ycentre; + QDoubleSpinBox *SpinBox_Xcentre; + QLabel *TLXcentre; + QGroupBox *TypeBoundary; + QHBoxLayout *hboxLayout1; + QRadioButton *RBCylindre; + QRadioButton *RBSphere; + QLineEdit *LEBoundaryName; + QLabel *Name; + + void setupUi(QDialog *CreateBoundaryAn) + { + CreateBoundaryAn->setObjectName(QString::fromUtf8("CreateBoundaryAn")); + CreateBoundaryAn->setAutoFillBackground(true); + CreateBoundaryAn->setSizeGripEnabled(true); + gridLayout = new QGridLayout(CreateBoundaryAn); + gridLayout->setSpacing(6); + gridLayout->setMargin(9); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + gBCylindre = new QGroupBox(CreateBoundaryAn); + gBCylindre->setObjectName(QString::fromUtf8("gBCylindre")); + QSizePolicy sizePolicy(static_cast(0), static_cast(0)); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth()); + gBCylindre->setSizePolicy(sizePolicy); + gridLayout1 = new QGridLayout(gBCylindre); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + SpinBox_Xcent = new QDoubleSpinBox(gBCylindre); + SpinBox_Xcent->setObjectName(QString::fromUtf8("SpinBox_Xcent")); + SpinBox_Xcent->setDecimals(5); + SpinBox_Xcent->setMaximum(1e+09); + SpinBox_Xcent->setMinimum(-1e+09); + SpinBox_Xcent->setValue(0); + + gridLayout1->addWidget(SpinBox_Xcent, 0, 1, 1, 1); + + TLXcent = new QLabel(gBCylindre); + TLXcent->setObjectName(QString::fromUtf8("TLXcent")); + QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth()); + TLXcent->setSizePolicy(sizePolicy1); + TLXcent->setWordWrap(false); + + gridLayout1->addWidget(TLXcent, 0, 0, 1, 1); + + SpinBox_Radius = new QDoubleSpinBox(gBCylindre); + SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius")); + SpinBox_Radius->setDecimals(5); + SpinBox_Radius->setMaximum(1e+09); + + gridLayout1->addWidget(SpinBox_Radius, 3, 1, 1, 2); + + SpinBox_Zcent = new QDoubleSpinBox(gBCylindre); + SpinBox_Zcent->setObjectName(QString::fromUtf8("SpinBox_Zcent")); + SpinBox_Zcent->setDecimals(5); + SpinBox_Zcent->setMaximum(1e+09); + SpinBox_Zcent->setMinimum(-1e+09); + SpinBox_Zcent->setValue(0); + + gridLayout1->addWidget(SpinBox_Zcent, 2, 1, 1, 1); + + TLradius = new QLabel(gBCylindre); + TLradius->setObjectName(QString::fromUtf8("TLradius")); + QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth()); + TLradius->setSizePolicy(sizePolicy2); + TLradius->setWordWrap(false); + + gridLayout1->addWidget(TLradius, 3, 0, 1, 1); + + TLZcent = new QLabel(gBCylindre); + TLZcent->setObjectName(QString::fromUtf8("TLZcent")); + QSizePolicy sizePolicy3(static_cast(0), static_cast(0)); + sizePolicy3.setHorizontalStretch(0); + sizePolicy3.setVerticalStretch(0); + sizePolicy3.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth()); + TLZcent->setSizePolicy(sizePolicy3); + TLZcent->setWordWrap(false); + + gridLayout1->addWidget(TLZcent, 2, 0, 1, 1); + + TLYcent = new QLabel(gBCylindre); + TLYcent->setObjectName(QString::fromUtf8("TLYcent")); + QSizePolicy sizePolicy4(static_cast(0), static_cast(0)); + sizePolicy4.setHorizontalStretch(0); + sizePolicy4.setVerticalStretch(0); + sizePolicy4.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth()); + TLYcent->setSizePolicy(sizePolicy4); + TLYcent->setWordWrap(false); + + gridLayout1->addWidget(TLYcent, 1, 0, 1, 1); + + SpinBox_Ycent = new QDoubleSpinBox(gBCylindre); + SpinBox_Ycent->setObjectName(QString::fromUtf8("SpinBox_Ycent")); + SpinBox_Ycent->setDecimals(5); + SpinBox_Ycent->setMaximum(1e+09); + SpinBox_Ycent->setMinimum(-1e+09); + SpinBox_Ycent->setValue(0); + + gridLayout1->addWidget(SpinBox_Ycent, 1, 1, 1, 1); + + TLXaxis = new QLabel(gBCylindre); + TLXaxis->setObjectName(QString::fromUtf8("TLXaxis")); + QSizePolicy sizePolicy5(static_cast(0), static_cast(0)); + sizePolicy5.setHorizontalStretch(0); + sizePolicy5.setVerticalStretch(0); + sizePolicy5.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth()); + TLXaxis->setSizePolicy(sizePolicy5); + TLXaxis->setWordWrap(false); + + gridLayout1->addWidget(TLXaxis, 0, 2, 1, 1); + + TLYaxis = new QLabel(gBCylindre); + TLYaxis->setObjectName(QString::fromUtf8("TLYaxis")); + QSizePolicy sizePolicy6(static_cast(0), static_cast(0)); + sizePolicy6.setHorizontalStretch(0); + sizePolicy6.setVerticalStretch(0); + sizePolicy6.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth()); + TLYaxis->setSizePolicy(sizePolicy6); + TLYaxis->setWordWrap(false); + + gridLayout1->addWidget(TLYaxis, 1, 2, 1, 1); + + TLZaxis = new QLabel(gBCylindre); + TLZaxis->setObjectName(QString::fromUtf8("TLZaxis")); + QSizePolicy sizePolicy7(static_cast(0), static_cast(0)); + sizePolicy7.setHorizontalStretch(0); + sizePolicy7.setVerticalStretch(0); + sizePolicy7.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth()); + TLZaxis->setSizePolicy(sizePolicy7); + TLZaxis->setWordWrap(false); + + gridLayout1->addWidget(TLZaxis, 2, 2, 1, 1); + + SpinBox_Zaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Zaxis->setObjectName(QString::fromUtf8("SpinBox_Zaxis")); + SpinBox_Zaxis->setDecimals(5); + SpinBox_Zaxis->setMaximum(1e+09); + SpinBox_Zaxis->setMinimum(-1e+09); + SpinBox_Zaxis->setValue(0); + + gridLayout1->addWidget(SpinBox_Zaxis, 2, 3, 1, 1); + + SpinBox_Yaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Yaxis->setObjectName(QString::fromUtf8("SpinBox_Yaxis")); + SpinBox_Yaxis->setDecimals(5); + SpinBox_Yaxis->setMaximum(1e+09); + SpinBox_Yaxis->setMinimum(-1e+09); + SpinBox_Yaxis->setValue(0); + + gridLayout1->addWidget(SpinBox_Yaxis, 1, 3, 1, 1); + + SpinBox_Xaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Xaxis->setObjectName(QString::fromUtf8("SpinBox_Xaxis")); + SpinBox_Xaxis->setDecimals(5); + SpinBox_Xaxis->setMaximum(1e+09); + SpinBox_Xaxis->setMinimum(-1e+09); + SpinBox_Xaxis->setValue(0); + + gridLayout1->addWidget(SpinBox_Xaxis, 0, 3, 1, 1); + + + gridLayout->addWidget(gBCylindre, 2, 0, 1, 2); + + GBButtons = new QGroupBox(CreateBoundaryAn); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + QSizePolicy sizePolicy8(static_cast(0), static_cast(0)); + sizePolicy8.setHorizontalStretch(0); + sizePolicy8.setVerticalStretch(0); + sizePolicy8.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); + GBButtons->setSizePolicy(sizePolicy8); + hboxLayout = new QHBoxLayout(GBButtons); + hboxLayout->setSpacing(6); + hboxLayout->setMargin(9); + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + hboxLayout->addWidget(buttonOk); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + hboxLayout->addWidget(buttonApply); + + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + + hboxLayout->addWidget(buttonCancel); + + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + + hboxLayout->addWidget(buttonHelp); + + + gridLayout->addWidget(GBButtons, 4, 0, 1, 2); + + gBSphere = new QGroupBox(CreateBoundaryAn); + gBSphere->setObjectName(QString::fromUtf8("gBSphere")); + QSizePolicy sizePolicy9(static_cast(0), static_cast(0)); + sizePolicy9.setHorizontalStretch(0); + sizePolicy9.setVerticalStretch(0); + sizePolicy9.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); + gBSphere->setSizePolicy(sizePolicy9); + gridLayout2 = new QGridLayout(gBSphere); + gridLayout2->setSpacing(6); + gridLayout2->setMargin(9); + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + SpinBox_Rayon = new QDoubleSpinBox(gBSphere); + SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon")); + SpinBox_Rayon->setDecimals(5); + SpinBox_Rayon->setMaximum(1e+09); + SpinBox_Rayon->setMinimum(0); + SpinBox_Rayon->setValue(0); + + gridLayout2->addWidget(SpinBox_Rayon, 1, 3, 1, 1); + + SpinBox_Zcentre = new QDoubleSpinBox(gBSphere); + SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre")); + SpinBox_Zcentre->setDecimals(5); + SpinBox_Zcentre->setMaximum(1e+09); + SpinBox_Zcentre->setMinimum(-1e+09); + SpinBox_Zcentre->setValue(0); + + gridLayout2->addWidget(SpinBox_Zcentre, 2, 1, 1, 1); + + TLRayon = new QLabel(gBSphere); + TLRayon->setObjectName(QString::fromUtf8("TLRayon")); + QSizePolicy sizePolicy10(static_cast(0), static_cast(0)); + sizePolicy10.setHorizontalStretch(0); + sizePolicy10.setVerticalStretch(0); + sizePolicy10.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); + TLRayon->setSizePolicy(sizePolicy10); + TLRayon->setWordWrap(false); + + gridLayout2->addWidget(TLRayon, 1, 2, 1, 1); + + TLZcentre = new QLabel(gBSphere); + TLZcentre->setObjectName(QString::fromUtf8("TLZcentre")); + QSizePolicy sizePolicy11(static_cast(0), static_cast(0)); + sizePolicy11.setHorizontalStretch(0); + sizePolicy11.setVerticalStretch(0); + sizePolicy11.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); + TLZcentre->setSizePolicy(sizePolicy11); + TLZcentre->setWordWrap(false); + + gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1); + + TLYcentre = new QLabel(gBSphere); + TLYcentre->setObjectName(QString::fromUtf8("TLYcentre")); + QSizePolicy sizePolicy12(static_cast(0), static_cast(0)); + sizePolicy12.setHorizontalStretch(0); + sizePolicy12.setVerticalStretch(0); + sizePolicy12.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); + TLYcentre->setSizePolicy(sizePolicy12); + TLYcentre->setWordWrap(false); + + gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1); + + SpinBox_Ycentre = new QDoubleSpinBox(gBSphere); + SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre")); + SpinBox_Ycentre->setDecimals(5); + SpinBox_Ycentre->setMaximum(1e+09); + SpinBox_Ycentre->setMinimum(-1e+09); + SpinBox_Ycentre->setValue(0); + + gridLayout2->addWidget(SpinBox_Ycentre, 1, 1, 1, 1); + + SpinBox_Xcentre = new QDoubleSpinBox(gBSphere); + SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre")); + SpinBox_Xcentre->setDecimals(5); + SpinBox_Xcentre->setMaximum(1e+09); + SpinBox_Xcentre->setMinimum(-1e+09); + SpinBox_Xcentre->setValue(0); + + gridLayout2->addWidget(SpinBox_Xcentre, 0, 1, 1, 1); + + TLXcentre = new QLabel(gBSphere); + TLXcentre->setObjectName(QString::fromUtf8("TLXcentre")); + QSizePolicy sizePolicy13(static_cast(0), static_cast(0)); + sizePolicy13.setHorizontalStretch(0); + sizePolicy13.setVerticalStretch(0); + sizePolicy13.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); + TLXcentre->setSizePolicy(sizePolicy13); + TLXcentre->setWordWrap(false); + + gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1); + + + gridLayout->addWidget(gBSphere, 3, 0, 1, 2); + + TypeBoundary = new QGroupBox(CreateBoundaryAn); + TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary")); + QSizePolicy sizePolicy14(static_cast(0), static_cast(0)); + sizePolicy14.setHorizontalStretch(0); + sizePolicy14.setVerticalStretch(0); + sizePolicy14.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth()); + TypeBoundary->setSizePolicy(sizePolicy14); + TypeBoundary->setMinimumSize(QSize(340, 0)); + hboxLayout1 = new QHBoxLayout(TypeBoundary); + hboxLayout1->setSpacing(6); + hboxLayout1->setMargin(9); + hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); + RBCylindre = new QRadioButton(TypeBoundary); + RBCylindre->setObjectName(QString::fromUtf8("RBCylindre")); + RBCylindre->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png"))); + RBCylindre->setCheckable(true); + RBCylindre->setChecked(true); + + hboxLayout1->addWidget(RBCylindre); + + RBSphere = new QRadioButton(TypeBoundary); + RBSphere->setObjectName(QString::fromUtf8("RBSphere")); + RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png"))); + + hboxLayout1->addWidget(RBSphere); + + + gridLayout->addWidget(TypeBoundary, 1, 0, 1, 2); + + LEBoundaryName = new QLineEdit(CreateBoundaryAn); + LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName")); + LEBoundaryName->setMaxLength(32); + + gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 1); + + Name = new QLabel(CreateBoundaryAn); + Name->setObjectName(QString::fromUtf8("Name")); + + gridLayout->addWidget(Name, 0, 0, 1, 1); + + + retranslateUi(CreateBoundaryAn); + + QSize size(458, 500); + size = size.expandedTo(CreateBoundaryAn->minimumSizeHint()); + CreateBoundaryAn->resize(size); + + + QMetaObject::connectSlotsByName(CreateBoundaryAn); + } // setupUi + + void retranslateUi(QDialog *CreateBoundaryAn) + { + CreateBoundaryAn->setWindowTitle(QApplication::translate("CreateBoundaryAn", "Create Analytical Boundary", 0, QApplication::UnicodeUTF8)); + gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates of the cylindre", 0, QApplication::UnicodeUTF8)); + TLXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8)); + TLradius->setText(QApplication::translate("CreateBoundaryAn", "Radius", 0, QApplication::UnicodeUTF8)); + TLZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8)); + TLYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8)); + TLXaxis->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0, QApplication::UnicodeUTF8)); + TLYaxis->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0, QApplication::UnicodeUTF8)); + TLZaxis->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0, QApplication::UnicodeUTF8)); + GBButtons->setTitle(QString()); + buttonOk->setText(QApplication::translate("CreateBoundaryAn", "&Ok", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateBoundaryAn", "&Apply", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateBoundaryAn", "&Cancel", 0, QApplication::UnicodeUTF8)); + buttonHelp->setText(QApplication::translate("CreateBoundaryAn", "&Help", 0, QApplication::UnicodeUTF8)); + gBSphere->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates of the sphere", 0, QApplication::UnicodeUTF8)); + TLRayon->setText(QApplication::translate("CreateBoundaryAn", "Radius", 0, QApplication::UnicodeUTF8)); + TLZcentre->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8)); + TLYcentre->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8)); + TLXcentre->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8)); + TypeBoundary->setTitle(QApplication::translate("CreateBoundaryAn", "Type of boundary", 0, QApplication::UnicodeUTF8)); + RBCylindre->setText(QString()); + RBSphere->setText(QString()); + Name->setText(QApplication::translate("CreateBoundaryAn", "Name", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(CreateBoundaryAn); + } // retranslateUi + +}; + +namespace Ui { + class CreateBoundaryAn: public Ui_CreateBoundaryAn {}; +} // namespace Ui + +#endif // CREATEBOUNDARYAN_H diff --git a/src/HOMARDGUI/CreateBoundaryAn.ui b/src/HOMARDGUI/CreateBoundaryAn.ui new file mode 100644 index 00000000..e5a1cc80 --- /dev/null +++ b/src/HOMARDGUI/CreateBoundaryAn.ui @@ -0,0 +1,566 @@ + + CreateBoundaryAn + + + + 0 + 0 + 458 + 500 + + + + Create Analytical Boundary + + + true + + + true + + + + 9 + + + 6 + + + + + + 0 + 0 + 0 + 0 + + + + Coordinates of the cylindre + + + + 9 + + + 6 + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X centre + + + false + + + + + + + 5 + + + 1000000000.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + Radius + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z centre + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Y centre + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X axis + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Y axis + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z axis + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + + + + 0 + 0 + 0 + 0 + + + + + + + + 9 + + + 6 + + + + + &Ok + + + + + + + &Apply + + + + + + + &Cancel + + + + + + + &Help + + + + + + + + + + + 0 + 0 + 0 + 0 + + + + Coordinates of the sphere + + + + 9 + + + 6 + + + + + 5 + + + 999999999.000000000000000 + + + 0.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + Radius + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z centre + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Y centre + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X centre + + + false + + + + + + + + + + + 0 + 0 + 0 + 0 + + + + + 340 + 0 + + + + Type of boundary + + + + 9 + + + 6 + + + + + + + + ../../resources/cylinderpointvector.png + + + true + + + true + + + + + + + + + + ../../resources/zone_spherepoint.png + + + + + + + + + + 32 + + + + + + + Name + + + + + + + + diff --git a/src/HOMARDGUI/CreateCase.h b/src/HOMARDGUI/CreateCase.h index f3010ccb..88f472cd 100644 --- a/src/HOMARDGUI/CreateCase.h +++ b/src/HOMARDGUI/CreateCase.h @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateCase.ui' ** -** Created: Fri Nov 26 13:44:35 2010 -** by: Qt User Interface Compiler version 4.4.3 +** Created: Mon Jan 31 13:48:20 2011 +** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ @@ -29,318 +29,332 @@ #include #include -QT_BEGIN_NAMESPACE - class Ui_CreateCase { public: - QGridLayout *gridLayout_2; - QHBoxLayout *horizontalLayout_5; + QGridLayout *gridLayout; + QGroupBox *GroupButtons; + QGridLayout *gridLayout1; + QPushButton *buttonOk; + QPushButton *buttonApply; + QPushButton *buttonCancel; + QPushButton *buttonHelp; + QGroupBox *GBBoundaryA; + QWidget *layoutWidget; + QVBoxLayout *vboxLayout; + QPushButton *PBBoundaryAnNew; + QPushButton *PBBoundaryAnHelp; + QTableWidget *TWBoundary; + QHBoxLayout *hboxLayout; QLabel *Name; QLineEdit *LECaseName; - QHBoxLayout *horizontalLayout_4; + QHBoxLayout *hboxLayout1; QLabel *Directory; QPushButton *PushDir; QLineEdit *LEDirName; - QHBoxLayout *horizontalLayout_3; + QHBoxLayout *hboxLayout2; QLabel *Mesh_2; QPushButton *PushFichier; QLineEdit *LEFileName; - QSpacerItem *verticalSpacer_2; + QSpacerItem *spacerItem; QGroupBox *GBTypeConf; - QHBoxLayout *horizontalLayout; + QHBoxLayout *hboxLayout3; QRadioButton *RBConforme; QRadioButton *RBNonConforme; - QSpacerItem *verticalSpacer_3; + QSpacerItem *spacerItem1; QGroupBox *GBTypeNoConf; - QHBoxLayout *horizontalLayout_2; + QHBoxLayout *hboxLayout4; QRadioButton *RB1NpM; QRadioButton *RB1NpA; QRadioButton *RBQuelconque; - QSpacerItem *verticalSpacer_4; - QHBoxLayout *horizontalLayout_6; + QSpacerItem *spacerItem2; + QHBoxLayout *hboxLayout5; QCheckBox *CBBoundaryD; QCheckBox *CBBoundaryA; - QSpacerItem *verticalSpacer_7; + QSpacerItem *spacerItem3; + QSpacerItem *spacerItem4; QGroupBox *GBBoundaryD; - QGridLayout *gridLayout_3; - QComboBox *CBBoundaryDi; - QSpacerItem *spacer_2; - QPushButton *PBBoundaryDiEdit; + QGridLayout *gridLayout2; + QPushButton *PBBoundaryDiHelp; QPushButton *PBBoundaryDiNew; - QGroupBox *GBBoundaryA; - QTableWidget *TWBoundary; - QWidget *layoutWidget; - QVBoxLayout *verticalLayout_4; - QPushButton *PBBoundaryNew; - QPushButton *PBBoundaryEdit; - QPushButton *PBBoundaryDelete; - QGroupBox *GroupButtons; - QGridLayout *gridLayout; - QPushButton *buttonOk; - QPushButton *buttonApply; - QPushButton *buttonCancel; - QPushButton *buttonHelp; - QSpacerItem *verticalSpacer_5; + QPushButton *PBBoundaryDiEdit; + QSpacerItem *spacerItem5; + QComboBox *CBBoundaryDi; void setupUi(QDialog *CreateCase) { - if (CreateCase->objectName().isEmpty()) - CreateCase->setObjectName(QString::fromUtf8("CreateCase")); - CreateCase->resize(589, 675); - QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + CreateCase->setObjectName(QString::fromUtf8("CreateCase")); + QSizePolicy sizePolicy(static_cast(0), static_cast(0)); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(CreateCase->sizePolicy().hasHeightForWidth()); CreateCase->setSizePolicy(sizePolicy); - CreateCase->setAutoFillBackground(false); - gridLayout_2 = new QGridLayout(CreateCase); - gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); - horizontalLayout_5 = new QHBoxLayout(); - horizontalLayout_5->setObjectName(QString::fromUtf8("horizontalLayout_5")); + CreateCase->setAutoFillBackground(true); + gridLayout = new QGridLayout(CreateCase); + gridLayout->setSpacing(6); + gridLayout->setMargin(9); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + GroupButtons = new QGroupBox(CreateCase); + GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); + gridLayout1 = new QGridLayout(GroupButtons); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonOk = new QPushButton(GroupButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + buttonOk->setAutoDefault(false); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + buttonApply = new QPushButton(GroupButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + buttonApply->setAutoDefault(false); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonCancel = new QPushButton(GroupButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + buttonCancel->setAutoDefault(false); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonHelp = new QPushButton(GroupButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + buttonHelp->setAutoDefault(false); + + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + + + gridLayout->addWidget(GroupButtons, 13, 0, 1, 2); + + GBBoundaryA = new QGroupBox(CreateCase); + GBBoundaryA->setObjectName(QString::fromUtf8("GBBoundaryA")); + GBBoundaryA->setMinimumSize(QSize(548, 300)); + layoutWidget = new QWidget(GBBoundaryA); + layoutWidget->setObjectName(QString::fromUtf8("layoutWidget")); + layoutWidget->setGeometry(QRect(410, 20, 120, 110)); + vboxLayout = new QVBoxLayout(layoutWidget); + vboxLayout->setSpacing(6); + vboxLayout->setMargin(0); + vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); + PBBoundaryAnNew = new QPushButton(layoutWidget); + PBBoundaryAnNew->setObjectName(QString::fromUtf8("PBBoundaryAnNew")); + PBBoundaryAnNew->setAutoDefault(false); + + vboxLayout->addWidget(PBBoundaryAnNew); + + PBBoundaryAnHelp = new QPushButton(layoutWidget); + PBBoundaryAnHelp->setObjectName(QString::fromUtf8("PBBoundaryAnHelp")); + PBBoundaryAnHelp->setAutoDefault(false); + + vboxLayout->addWidget(PBBoundaryAnHelp); + + TWBoundary = new QTableWidget(GBBoundaryA); + TWBoundary->setObjectName(QString::fromUtf8("TWBoundary")); + TWBoundary->setGeometry(QRect(4, 20, 371, 270)); + TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked); + TWBoundary->setShowGrid(true); + TWBoundary->setRowCount(0); + TWBoundary->setColumnCount(1); + + gridLayout->addWidget(GBBoundaryA, 12, 0, 1, 2); + + hboxLayout = new QHBoxLayout(); + hboxLayout->setSpacing(6); + hboxLayout->setMargin(0); + hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); Name = new QLabel(CreateCase); Name->setObjectName(QString::fromUtf8("Name")); - horizontalLayout_5->addWidget(Name); + hboxLayout->addWidget(Name); LECaseName = new QLineEdit(CreateCase); LECaseName->setObjectName(QString::fromUtf8("LECaseName")); LECaseName->setMinimumSize(QSize(382, 21)); - horizontalLayout_5->addWidget(LECaseName); + hboxLayout->addWidget(LECaseName); - gridLayout_2->addLayout(horizontalLayout_5, 0, 0, 1, 2); + gridLayout->addLayout(hboxLayout, 0, 0, 1, 2); - horizontalLayout_4 = new QHBoxLayout(); - horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4")); + hboxLayout1 = new QHBoxLayout(); + hboxLayout1->setSpacing(6); + hboxLayout1->setMargin(0); + hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); Directory = new QLabel(CreateCase); Directory->setObjectName(QString::fromUtf8("Directory")); - horizontalLayout_4->addWidget(Directory); + hboxLayout1->addWidget(Directory); PushDir = new QPushButton(CreateCase); PushDir->setObjectName(QString::fromUtf8("PushDir")); PushDir->setAutoDefault(false); - horizontalLayout_4->addWidget(PushDir); + hboxLayout1->addWidget(PushDir); LEDirName = new QLineEdit(CreateCase); LEDirName->setObjectName(QString::fromUtf8("LEDirName")); LEDirName->setMinimumSize(QSize(382, 21)); - horizontalLayout_4->addWidget(LEDirName); + hboxLayout1->addWidget(LEDirName); - gridLayout_2->addLayout(horizontalLayout_4, 1, 0, 1, 1); + gridLayout->addLayout(hboxLayout1, 1, 0, 1, 1); - horizontalLayout_3 = new QHBoxLayout(); - horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3")); + hboxLayout2 = new QHBoxLayout(); + hboxLayout2->setSpacing(6); + hboxLayout2->setMargin(0); + hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); Mesh_2 = new QLabel(CreateCase); Mesh_2->setObjectName(QString::fromUtf8("Mesh_2")); - horizontalLayout_3->addWidget(Mesh_2); + hboxLayout2->addWidget(Mesh_2); PushFichier = new QPushButton(CreateCase); PushFichier->setObjectName(QString::fromUtf8("PushFichier")); PushFichier->setAutoDefault(false); - horizontalLayout_3->addWidget(PushFichier); + hboxLayout2->addWidget(PushFichier); LEFileName = new QLineEdit(CreateCase); LEFileName->setObjectName(QString::fromUtf8("LEFileName")); LEFileName->setMinimumSize(QSize(382, 21)); - horizontalLayout_3->addWidget(LEFileName); + hboxLayout2->addWidget(LEFileName); - gridLayout_2->addLayout(horizontalLayout_3, 3, 0, 1, 2); + gridLayout->addLayout(hboxLayout2, 3, 0, 1, 2); - verticalSpacer_2 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout_2->addItem(verticalSpacer_2, 4, 0, 1, 1); + gridLayout->addItem(spacerItem, 4, 0, 1, 1); GBTypeConf = new QGroupBox(CreateCase); GBTypeConf->setObjectName(QString::fromUtf8("GBTypeConf")); - horizontalLayout = new QHBoxLayout(GBTypeConf); - horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); + hboxLayout3 = new QHBoxLayout(GBTypeConf); + hboxLayout3->setSpacing(6); + hboxLayout3->setMargin(9); + hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); RBConforme = new QRadioButton(GBTypeConf); RBConforme->setObjectName(QString::fromUtf8("RBConforme")); RBConforme->setChecked(true); - horizontalLayout->addWidget(RBConforme); + hboxLayout3->addWidget(RBConforme); RBNonConforme = new QRadioButton(GBTypeConf); RBNonConforme->setObjectName(QString::fromUtf8("RBNonConforme")); - horizontalLayout->addWidget(RBNonConforme); + hboxLayout3->addWidget(RBNonConforme); - RBNonConforme->raise(); - RBConforme->raise(); - gridLayout_2->addWidget(GBTypeConf, 5, 0, 1, 2); + gridLayout->addWidget(GBTypeConf, 5, 0, 1, 2); - verticalSpacer_3 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem1 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout_2->addItem(verticalSpacer_3, 6, 0, 1, 1); + gridLayout->addItem(spacerItem1, 6, 0, 1, 1); GBTypeNoConf = new QGroupBox(CreateCase); GBTypeNoConf->setObjectName(QString::fromUtf8("GBTypeNoConf")); - horizontalLayout_2 = new QHBoxLayout(GBTypeNoConf); - horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); + hboxLayout4 = new QHBoxLayout(GBTypeNoConf); + hboxLayout4->setSpacing(6); + hboxLayout4->setMargin(9); + hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4")); RB1NpM = new QRadioButton(GBTypeNoConf); RB1NpM->setObjectName(QString::fromUtf8("RB1NpM")); - horizontalLayout_2->addWidget(RB1NpM); + hboxLayout4->addWidget(RB1NpM); RB1NpA = new QRadioButton(GBTypeNoConf); RB1NpA->setObjectName(QString::fromUtf8("RB1NpA")); - horizontalLayout_2->addWidget(RB1NpA); + hboxLayout4->addWidget(RB1NpA); RBQuelconque = new QRadioButton(GBTypeNoConf); RBQuelconque->setObjectName(QString::fromUtf8("RBQuelconque")); - horizontalLayout_2->addWidget(RBQuelconque); + hboxLayout4->addWidget(RBQuelconque); - gridLayout_2->addWidget(GBTypeNoConf, 7, 0, 1, 2); + gridLayout->addWidget(GBTypeNoConf, 7, 0, 1, 2); - verticalSpacer_4 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem2 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout_2->addItem(verticalSpacer_4, 8, 0, 1, 1); + gridLayout->addItem(spacerItem2, 8, 0, 1, 1); - horizontalLayout_6 = new QHBoxLayout(); - horizontalLayout_6->setObjectName(QString::fromUtf8("horizontalLayout_6")); + hboxLayout5 = new QHBoxLayout(); + hboxLayout5->setSpacing(6); + hboxLayout5->setMargin(0); + hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5")); CBBoundaryD = new QCheckBox(CreateCase); CBBoundaryD->setObjectName(QString::fromUtf8("CBBoundaryD")); - horizontalLayout_6->addWidget(CBBoundaryD); + hboxLayout5->addWidget(CBBoundaryD); CBBoundaryA = new QCheckBox(CreateCase); CBBoundaryA->setObjectName(QString::fromUtf8("CBBoundaryA")); - horizontalLayout_6->addWidget(CBBoundaryA); - - - gridLayout_2->addLayout(horizontalLayout_6, 9, 0, 1, 1); - - verticalSpacer_7 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Expanding); + hboxLayout5->addWidget(CBBoundaryA); - gridLayout_2->addItem(verticalSpacer_7, 10, 0, 1, 1); - GBBoundaryD = new QGroupBox(CreateCase); - GBBoundaryD->setObjectName(QString::fromUtf8("GBBoundaryD")); - sizePolicy.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth()); - GBBoundaryD->setSizePolicy(sizePolicy); - gridLayout_3 = new QGridLayout(GBBoundaryD); - gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3")); - CBBoundaryDi = new QComboBox(GBBoundaryD); - CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi")); - CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents); + gridLayout->addLayout(hboxLayout5, 9, 0, 1, 1); - gridLayout_3->addWidget(CBBoundaryDi, 0, 0, 1, 1); + spacerItem3 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Expanding); - spacer_2 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); + gridLayout->addItem(spacerItem3, 10, 0, 1, 1); - gridLayout_3->addItem(spacer_2, 0, 1, 1, 1); + spacerItem4 = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); - PBBoundaryDiEdit = new QPushButton(GBBoundaryD); - PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit")); - PBBoundaryDiEdit->setAutoDefault(false); + gridLayout->addItem(spacerItem4, 2, 1, 1, 1); - gridLayout_3->addWidget(PBBoundaryDiEdit, 0, 2, 1, 1); + GBBoundaryD = new QGroupBox(CreateCase); + GBBoundaryD->setObjectName(QString::fromUtf8("GBBoundaryD")); + QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth()); + GBBoundaryD->setSizePolicy(sizePolicy1); + gridLayout2 = new QGridLayout(GBBoundaryD); + gridLayout2->setSpacing(6); + gridLayout2->setMargin(9); + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + PBBoundaryDiHelp = new QPushButton(GBBoundaryD); + PBBoundaryDiHelp->setObjectName(QString::fromUtf8("PBBoundaryDiHelp")); + PBBoundaryDiHelp->setAutoDefault(false); + + gridLayout2->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1); PBBoundaryDiNew = new QPushButton(GBBoundaryD); PBBoundaryDiNew->setObjectName(QString::fromUtf8("PBBoundaryDiNew")); PBBoundaryDiNew->setAutoDefault(false); - gridLayout_3->addWidget(PBBoundaryDiNew, 0, 3, 1, 1); - - - gridLayout_2->addWidget(GBBoundaryD, 11, 0, 1, 1); - - GBBoundaryA = new QGroupBox(CreateCase); - GBBoundaryA->setObjectName(QString::fromUtf8("GBBoundaryA")); - GBBoundaryA->setMinimumSize(QSize(548, 150)); - TWBoundary = new QTableWidget(GBBoundaryA); - if (TWBoundary->columnCount() < 2) - TWBoundary->setColumnCount(2); - QTableWidgetItem *__colItem = new QTableWidgetItem(); - TWBoundary->setHorizontalHeaderItem(0, __colItem); - QTableWidgetItem *__colItem1 = new QTableWidgetItem(); - TWBoundary->setHorizontalHeaderItem(1, __colItem1); - TWBoundary->setObjectName(QString::fromUtf8("TWBoundary")); - TWBoundary->setGeometry(QRect(4, 20, 371, 121)); - TWBoundary->setAutoScrollMargin(16); - TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked); - TWBoundary->setShowGrid(true); - TWBoundary->setRowCount(0); - TWBoundary->setColumnCount(2); - layoutWidget = new QWidget(GBBoundaryA); - layoutWidget->setObjectName(QString::fromUtf8("layoutWidget")); - layoutWidget->setGeometry(QRect(410, 20, 120, 110)); - verticalLayout_4 = new QVBoxLayout(layoutWidget); - verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4")); - verticalLayout_4->setContentsMargins(0, 0, 0, 0); - PBBoundaryNew = new QPushButton(layoutWidget); - PBBoundaryNew->setObjectName(QString::fromUtf8("PBBoundaryNew")); - PBBoundaryNew->setAutoDefault(false); - - verticalLayout_4->addWidget(PBBoundaryNew); - - PBBoundaryEdit = new QPushButton(layoutWidget); - PBBoundaryEdit->setObjectName(QString::fromUtf8("PBBoundaryEdit")); - PBBoundaryEdit->setAutoDefault(false); - - verticalLayout_4->addWidget(PBBoundaryEdit); - - PBBoundaryDelete = new QPushButton(layoutWidget); - PBBoundaryDelete->setObjectName(QString::fromUtf8("PBBoundaryDelete")); - PBBoundaryDelete->setAutoDefault(false); - - verticalLayout_4->addWidget(PBBoundaryDelete); - - - gridLayout_2->addWidget(GBBoundaryA, 12, 0, 1, 2); - - GroupButtons = new QGroupBox(CreateCase); - GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); - gridLayout = new QGridLayout(GroupButtons); - gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - buttonOk = new QPushButton(GroupButtons); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - buttonOk->setAutoDefault(false); - - gridLayout->addWidget(buttonOk, 0, 0, 1, 1); + gridLayout2->addWidget(PBBoundaryDiNew, 0, 3, 1, 1); - buttonApply = new QPushButton(GroupButtons); - buttonApply->setObjectName(QString::fromUtf8("buttonApply")); - buttonApply->setAutoDefault(false); + PBBoundaryDiEdit = new QPushButton(GBBoundaryD); + PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit")); + PBBoundaryDiEdit->setAutoDefault(false); - gridLayout->addWidget(buttonApply, 0, 1, 1, 1); + gridLayout2->addWidget(PBBoundaryDiEdit, 0, 2, 1, 1); - buttonCancel = new QPushButton(GroupButtons); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - buttonCancel->setAutoDefault(false); + spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); - gridLayout->addWidget(buttonCancel, 0, 2, 1, 1); + gridLayout2->addItem(spacerItem5, 0, 1, 1, 1); - buttonHelp = new QPushButton(GroupButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - buttonHelp->setAutoDefault(false); + CBBoundaryDi = new QComboBox(GBBoundaryD); + CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi")); + CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents); - gridLayout->addWidget(buttonHelp, 0, 3, 1, 1); + gridLayout2->addWidget(CBBoundaryDi, 0, 0, 1, 1); - gridLayout_2->addWidget(GroupButtons, 13, 0, 1, 2); + gridLayout->addWidget(GBBoundaryD, 11, 0, 1, 1); - verticalSpacer_5 = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout_2->addItem(verticalSpacer_5, 2, 1, 1, 1); + retranslateUi(CreateCase); + QSize size(597, 850); + size = size.expandedTo(CreateCase->minimumSizeHint()); + CreateCase->resize(size); - retranslateUi(CreateCase); CBBoundaryDi->setCurrentIndex(-1); @@ -351,6 +365,20 @@ public: void retranslateUi(QDialog *CreateCase) { CreateCase->setWindowTitle(QApplication::translate("CreateCase", "Create Case", 0, QApplication::UnicodeUTF8)); + GroupButtons->setTitle(QString()); + buttonOk->setText(QApplication::translate("CreateCase", "&Ok", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateCase", "&Apply", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateCase", "&Cancel", 0, QApplication::UnicodeUTF8)); + buttonHelp->setText(QApplication::translate("CreateCase", "&Help", 0, QApplication::UnicodeUTF8)); + GBBoundaryA->setTitle(QApplication::translate("CreateCase", "Analytic Boundary", 0, QApplication::UnicodeUTF8)); + PBBoundaryAnNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); + PBBoundaryAnHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); + if (TWBoundary->columnCount() < 1) + TWBoundary->setColumnCount(1); + + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(QApplication::translate("CreateCase", "a_virer", 0, QApplication::UnicodeUTF8)); + TWBoundary->setHorizontalHeaderItem(0, __colItem); Name->setText(QApplication::translate("CreateCase", "Name", 0, QApplication::UnicodeUTF8)); Directory->setText(QApplication::translate("CreateCase", "Directory", 0, QApplication::UnicodeUTF8)); PushDir->setText(QString()); @@ -366,19 +394,9 @@ public: CBBoundaryD->setText(QApplication::translate("CreateCase", "Discrete Boundary ", 0, QApplication::UnicodeUTF8)); CBBoundaryA->setText(QApplication::translate("CreateCase", "Analytic Boundary ", 0, QApplication::UnicodeUTF8)); GBBoundaryD->setTitle(QApplication::translate("CreateCase", "Discrete Boundary", 0, QApplication::UnicodeUTF8)); - PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); + PBBoundaryDiHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); PBBoundaryDiNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); - GBBoundaryA->setTitle(QApplication::translate("CreateCase", "Analytic Boundary", 0, QApplication::UnicodeUTF8)); - TWBoundary->horizontalHeaderItem(0)->setText(QApplication::translate("CreateCase", "Group", 0, QApplication::UnicodeUTF8)); - TWBoundary->horizontalHeaderItem(1)->setText(QApplication::translate("CreateCase", "Boundary", 0, QApplication::UnicodeUTF8)); - PBBoundaryNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); - PBBoundaryEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); - PBBoundaryDelete->setText(QString()); - GroupButtons->setTitle(QString()); - buttonOk->setText(QApplication::translate("CreateCase", "&Ok", 0, QApplication::UnicodeUTF8)); - buttonApply->setText(QApplication::translate("CreateCase", "&Apply", 0, QApplication::UnicodeUTF8)); - buttonCancel->setText(QApplication::translate("CreateCase", "&Cancel", 0, QApplication::UnicodeUTF8)); - buttonHelp->setText(QApplication::translate("CreateCase", "&Help", 0, QApplication::UnicodeUTF8)); + PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); Q_UNUSED(CreateCase); } // retranslateUi @@ -388,6 +406,4 @@ namespace Ui { class CreateCase: public Ui_CreateCase {}; } // namespace Ui -QT_END_NAMESPACE - #endif // CREATECASE_H diff --git a/src/HOMARDGUI/CreateCase.ui b/src/HOMARDGUI/CreateCase.ui index abfe1cf8..4bc2dd16 100644 --- a/src/HOMARDGUI/CreateCase.ui +++ b/src/HOMARDGUI/CreateCase.ui @@ -5,12 +5,14 @@ 0 0 - 589 - 675 + 597 + 850 - + + 0 + 0 0 0 @@ -19,11 +21,156 @@ Create Case - false + true - + + + 9 + + + 6 + + + + + + + + + 9 + + + 6 + + + + + &Ok + + + false + + + + + + + &Apply + + + false + + + + + + + &Cancel + + + false + + + + + + + &Help + + + false + + + + + + + + + + + 548 + 300 + + + + Analytic Boundary + + + + + 410 + 20 + 120 + 110 + + + + + 0 + + + 6 + + + + + New + + + false + + + + + + + Help + + + false + + + + + + + + + 4 + 20 + 371 + 270 + + + + QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked + + + true + + + 0 + + + 1 + + + + a_virer + + + + + - + + + 0 + + + 6 + @@ -44,7 +191,13 @@ - + + + 0 + + + 6 + @@ -75,7 +228,13 @@ - + + + 0 + + + 6 + @@ -106,11 +265,11 @@ - + Qt::Vertical - + 20 0 @@ -123,7 +282,13 @@ Conformity Type - + + + 9 + + + 6 + @@ -142,16 +307,14 @@ - RBNonConforme - RBConforme - + Qt::Vertical - + 20 1 @@ -164,7 +327,13 @@ Non Conformal option - + + + 9 + + + 6 + @@ -190,11 +359,11 @@ - + Qt::Vertical - + 20 0 @@ -203,7 +372,13 @@ - + + + 0 + + + 6 + @@ -221,11 +396,11 @@ - + Qt::Vertical - + 20 2 @@ -233,10 +408,25 @@ + + + + Qt::Vertical + + + + 20 + 18 + + + + - + + 0 + 0 0 0 @@ -244,37 +434,17 @@ Discrete Boundary - - - - - -1 - - - QComboBox::AdjustToContents - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 13 - - - - - - + + + 9 + + + 6 + + + - Edit + Help false @@ -291,109 +461,10 @@ - - - - - - - - 548 - 150 - - - - Analytic Boundary - - - - - 4 - 20 - 371 - 121 - - - - 16 - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked - - - true - - - 0 - - - 2 - - - - Group - - - - - Boundary - - - - - - - 410 - 20 - 120 - 110 - - - - - - - New - - - false - - - - - - - Edit - - - false - - - - - - - - - - false - - - - - - - - - - - - - - - + + - &Ok + Edit false @@ -401,51 +472,34 @@ - - - &Apply - - - false + + + Qt::Horizontal - - - - - - &Cancel + + QSizePolicy::Fixed - - false + + + 40 + 13 + - + - - - - &Help + + + + -1 - - false + + QComboBox::AdjustToContents - - - - Qt::Vertical - - - - 20 - 18 - - - - diff --git a/src/HOMARDGUI/CreateHypothesis.h b/src/HOMARDGUI/CreateHypothesis.h index 1d10a3f2..dc3fa573 100644 --- a/src/HOMARDGUI/CreateHypothesis.h +++ b/src/HOMARDGUI/CreateHypothesis.h @@ -398,6 +398,9 @@ public: GBAreaManagement->setSizePolicy(sizePolicy); gridLayout_3 = new QGridLayout(GBAreaManagement); gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3")); + + + TWZone = new QTableWidget(GBAreaManagement); if (TWZone->columnCount() < 2) TWZone->setColumnCount(2); diff --git a/src/HOMARDGUI/EditFile.h b/src/HOMARDGUI/EditFile.h index d6c0f9ae..a3c982f6 100644 --- a/src/HOMARDGUI/EditFile.h +++ b/src/HOMARDGUI/EditFile.h @@ -1,8 +1,8 @@ /******************************************************************************** ** Form generated from reading ui file 'EditFile.ui' ** -** Created: Mon Sep 27 14:45:55 2010 -** by: Qt User Interface Compiler version 4.5.2 +** Created: Tue Feb 1 14:56:22 2011 +** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ @@ -16,90 +16,87 @@ #include #include #include -#include #include #include #include #include -QT_BEGIN_NAMESPACE - class Ui_EditFile { public: - QGridLayout *gridLayout_2; - QTextBrowser *QTBEditFile; - QSpacerItem *verticalSpacer; - QGroupBox *GroupButtons; QGridLayout *gridLayout; - QPushButton *buttonQuit; + QSpacerItem *spacerItem; + QGroupBox *GroupButtons; + QGridLayout *gridLayout1; QPushButton *buttonPrint; - QPushButton *buttonHelp; - QSpacerItem *horizontalSpacer; + QPushButton *buttonQuit; + QSpacerItem *spacerItem1; + QTextBrowser *QTBEditFile; void setupUi(QWidget *EditFile) { - if (EditFile->objectName().isEmpty()) - EditFile->setObjectName(QString::fromUtf8("EditFile")); - EditFile->resize(548, 901); - gridLayout_2 = new QGridLayout(EditFile); - gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); - QTBEditFile = new QTextBrowser(EditFile); - QTBEditFile->setObjectName(QString::fromUtf8("QTBEditFile")); - QTBEditFile->setMinimumSize(QSize(530, 800)); - QFont font; - font.setFamily(QString::fromUtf8("Courier New")); - QTBEditFile->setFont(font); + EditFile->setObjectName(QString::fromUtf8("EditFile")); + gridLayout = new QGridLayout(EditFile); + gridLayout->setSpacing(6); + gridLayout->setMargin(9); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + spacerItem = new QSpacerItem(331, 49, QSizePolicy::Expanding, QSizePolicy::Minimum); - gridLayout_2->addWidget(QTBEditFile, 0, 0, 1, 2); + gridLayout->addItem(spacerItem, 2, 1, 1, 1); - verticalSpacer = new QSpacerItem(20, 14, QSizePolicy::Minimum, QSizePolicy::Expanding); + GroupButtons = new QGroupBox(EditFile); + GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); + gridLayout1 = new QGridLayout(GroupButtons); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonPrint = new QPushButton(GroupButtons); + buttonPrint->setObjectName(QString::fromUtf8("buttonPrint")); - gridLayout_2->addItem(verticalSpacer, 1, 0, 1, 1); + gridLayout1->addWidget(buttonPrint, 0, 1, 1, 1); - GroupButtons = new QGroupBox(EditFile); - GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); - gridLayout = new QGridLayout(GroupButtons); - gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - buttonQuit = new QPushButton(GroupButtons); - buttonQuit->setObjectName(QString::fromUtf8("buttonQuit")); - buttonQuit->setAutoDefault(true); - buttonQuit->setDefault(true); - buttonQuit->setFlat(true); + buttonQuit = new QPushButton(GroupButtons); + buttonQuit->setObjectName(QString::fromUtf8("buttonQuit")); + buttonQuit->setAutoDefault(true); + buttonQuit->setDefault(true); + buttonQuit->setFlat(true); - gridLayout->addWidget(buttonQuit, 0, 0, 1, 1); + gridLayout1->addWidget(buttonQuit, 0, 0, 1, 1); - buttonPrint = new QPushButton(GroupButtons); - buttonPrint->setObjectName(QString::fromUtf8("buttonPrint")); - gridLayout->addWidget(buttonPrint, 0, 1, 1, 1); + gridLayout->addWidget(GroupButtons, 2, 0, 1, 1); - buttonHelp = new QPushButton(GroupButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + spacerItem1 = new QSpacerItem(20, 14, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addWidget(buttonHelp, 0, 2, 1, 1); + gridLayout->addItem(spacerItem1, 1, 0, 1, 2); + QTBEditFile = new QTextBrowser(EditFile); + QTBEditFile->setObjectName(QString::fromUtf8("QTBEditFile")); + QTBEditFile->setMinimumSize(QSize(530, 800)); + QFont font; + font.setFamily(QString::fromUtf8("Courier New")); + QTBEditFile->setFont(font); - gridLayout_2->addWidget(GroupButtons, 2, 0, 1, 1); + gridLayout->addWidget(QTBEditFile, 0, 0, 1, 2); - horizontalSpacer = new QSpacerItem(249, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - gridLayout_2->addItem(horizontalSpacer, 2, 1, 1, 1); + retranslateUi(EditFile); + QSize size(548, 901); + size = size.expandedTo(EditFile->minimumSizeHint()); + EditFile->resize(size); - retranslateUi(EditFile); - QMetaObject::connectSlotsByName(EditFile); + QMetaObject::connectSlotsByName(EditFile); } // setupUi void retranslateUi(QWidget *EditFile) { - EditFile->setWindowTitle(QApplication::translate("EditFile", "Edit File", 0, QApplication::UnicodeUTF8)); - GroupButtons->setTitle(QString()); - buttonQuit->setText(QApplication::translate("EditFile", "&Quit", 0, QApplication::UnicodeUTF8)); - buttonPrint->setText(QApplication::translate("EditFile", "&Print", 0, QApplication::UnicodeUTF8)); - buttonHelp->setText(QApplication::translate("EditFile", "&Help", 0, QApplication::UnicodeUTF8)); - Q_UNUSED(EditFile); + EditFile->setWindowTitle(QApplication::translate("EditFile", "Edit File", 0, QApplication::UnicodeUTF8)); + GroupButtons->setTitle(QString()); + buttonPrint->setText(QApplication::translate("EditFile", "&Print", 0, QApplication::UnicodeUTF8)); + buttonQuit->setText(QApplication::translate("EditFile", "&Quit", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(EditFile); } // retranslateUi }; @@ -108,6 +105,4 @@ namespace Ui { class EditFile: public Ui_EditFile {}; } // namespace Ui -QT_END_NAMESPACE - #endif // EDITFILE_H diff --git a/src/HOMARDGUI/EditFile.ui b/src/HOMARDGUI/EditFile.ui index cccd2d76..8c7b2087 100644 --- a/src/HOMARDGUI/EditFile.ui +++ b/src/HOMARDGUI/EditFile.ui @@ -12,31 +12,22 @@ Edit File - - - - - - 530 - 800 - - - - - Courier New - - - - - - + + + 9 + + + 6 + + + - Qt::Vertical + Qt::Horizontal - + - 20 - 14 + 331 + 49 @@ -46,7 +37,20 @@ - + + + 9 + + + 6 + + + + + &Print + + + @@ -63,36 +67,37 @@ - - - - &Print - - - - - - - &Help - - - - - + + - Qt::Horizontal + Qt::Vertical - + - 249 - 20 + 20 + 14 + + + + + 530 + 800 + + + + + Courier New + + + + diff --git a/src/HOMARDGUI/HOMARDGUI.cxx b/src/HOMARDGUI/HOMARDGUI.cxx index cd7a585b..41b6721f 100644 --- a/src/HOMARDGUI/HOMARDGUI.cxx +++ b/src/HOMARDGUI/HOMARDGUI.cxx @@ -45,6 +45,7 @@ using namespace std; #include "MonEditIteration.h" #include "MonEditHypothesis.h" #include "MonEditZone.h" +#include "MonEditBoundaryAn.h" #include "MonEditBoundaryDi.h" #include "HomardQtCommun.h" @@ -82,7 +83,7 @@ HOMARDGUI::~HOMARDGUI() //======================================================================= HOMARD::HOMARD_Gen_var HOMARDGUI::InitHOMARDGen(SalomeApp_Application* app) { - Engines::Component_var comp = app->lcc()->FindOrLoad_Component( "FactoryServer","HOMARD" ); + Engines::EngineComponent_var comp = app->lcc()->FindOrLoad_Component( "FactoryServer","HOMARD" ); HOMARD::HOMARD_Gen_var clr = HOMARD::HOMARD_Gen::_narrow(comp); ASSERT(!CORBA::is_nil(clr)); return clr; @@ -312,11 +313,20 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID) { MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() ); _PTR(SObject) obj = chercheMonObjet(); - if ((obj) and (HOMARD_UTILS::isBoundaryDi(obj))) + if ((obj)) { - MESSAGE(".. Lancement de MonEditBoundaryDi" ); - MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; - aDlg->show(); + if (HOMARD_UTILS::isBoundaryDi(obj)) + { + MESSAGE(".. Lancement de MonEditBoundaryDi" ); + MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; + aDlg->show(); + } + if (HOMARD_UTILS::isBoundaryAn(obj)) + { + MESSAGE(".. Lancement de MonEditBoundaryAn" ); + MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ; + aDlg->show(); + } } } @@ -434,7 +444,12 @@ void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& t _ObjectName = title; SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); // - if ( HOMARD_UTILS::isBoundaryDi(obj) ) + if ( HOMARD_UTILS::isBoundaryAn(obj) ) + { + QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" ); + menu->addAction(QIcon(pix), "Edit boundary", this,SLOT(EditBoDi())); + } + else if ( HOMARD_UTILS::isBoundaryDi(obj) ) { QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" ); menu->addAction(QIcon(pix), "Edit boundary", this,SLOT(EditBoDi())); diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.cxx b/src/HOMARDGUI/HOMARDGUI_Utils.cxx index 2db82b83..eb5a9861 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.cxx +++ b/src/HOMARDGUI/HOMARDGUI_Utils.cxx @@ -191,6 +191,13 @@ bool HOMARD_UTILS::isObject(_PTR(SObject) MonObj, QString TypeObject, int option return bOK ; } //================================================================ +// Retourne vrai si l objet est une frontiere analytique +//================================================================ +bool HOMARD_UTILS::isBoundaryAn(_PTR(SObject) MonObj) +{ + return isObject( MonObj, QString("BoundaryAnHomard"), -1 ) ; +} +//================================================================ // Retourne vrai si l objet est une frontiere discrete //================================================================ bool HOMARD_UTILS::isBoundaryDi(_PTR(SObject) MonObj) diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.h b/src/HOMARDGUI/HOMARDGUI_Utils.h index 54fe6806..257383fb 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.h +++ b/src/HOMARDGUI/HOMARDGUI_Utils.h @@ -73,6 +73,7 @@ namespace HOMARD_UTILS { // of selected objects bool isXmgrace(_PTR(SObject) MonObj); + bool isBoundaryAn(_PTR(SObject) MonObj); bool isBoundaryDi(_PTR(SObject) MonObj); bool isZone(_PTR(SObject) MonObj); bool isHypo(_PTR(SObject) MonObj); diff --git a/src/HOMARDGUI/Makefile.am b/src/HOMARDGUI/Makefile.am index 940c38ef..e46c3acd 100644 --- a/src/HOMARDGUI/Makefile.am +++ b/src/HOMARDGUI/Makefile.am @@ -28,6 +28,9 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am salomeinclude_HEADERS = \ + MonCreateBoundaryAn.h \ + CreateBoundaryAn.h \ + MonEditBoundaryAn.h \ MonCreateBoundaryDi.h \ CreateBoundaryDi.h \ MonEditBoundaryDi.h \ @@ -60,6 +63,8 @@ dist_libHOMARD_la_SOURCES = \ HOMARDGUI.cxx \ HOMARDGUI_Utils.cxx \ HomardConfigFile.cxx \ + MonCreateBoundaryAn.cxx \ + MonEditBoundaryAn.cxx \ MonCreateBoundaryDi.cxx \ MonEditBoundaryDi.cxx \ MonCreateCase.cxx \ @@ -78,6 +83,8 @@ dist_libHOMARD_la_SOURCES = \ # MOC pre-processing MOC_FILES = \ HOMARDGUI_moc.cxx \ + MonCreateBoundaryAn_moc.cxx \ + MonEditBoundaryAn_moc.cxx \ MonCreateBoundaryDi_moc.cxx \ MonEditBoundaryDi_moc.cxx \ MonCreateCase_moc.cxx \ @@ -100,6 +107,7 @@ libHOMARD_la_CPPFLAGS = \ $(PYTHON_INCLUDES) \ $(MED2_INCLUDES) \ $(HDF5_INCLUDES) \ + $(BOOST_CPPFLAGS) \ $(CORBA_CXXFLAGS) \ $(CORBA_INCLUDES) \ $(KERNEL_CXXFLAGS) \ diff --git a/src/HOMARDGUI/MonCreateBoundaryAn.cxx b/src/HOMARDGUI/MonCreateBoundaryAn.cxx new file mode 100644 index 00000000..08cd6478 --- /dev/null +++ b/src/HOMARDGUI/MonCreateBoundaryAn.cxx @@ -0,0 +1,341 @@ +using namespace std; + +#include "MonCreateBoundaryAn.h" +#include "MonCreateCase.h" + +#include +#include + +#include "SalomeApp_Tools.h" +#include "HOMARDGUI_Utils.h" +#include "HomardQtCommun.h" +#include + +#include +#include +#include +#include +#include + +// ------------------------------------------------------------------------------------------------------------------------ +MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName) : +// ------------------------------------------------------------------------------------------------------------------------------ +/* Constructs a MonCreateBoundaryAn + appele pour une vraie creation + initialise un cylindre et non une sphere +*/ + QDialog(0), Ui_CreateBoundaryAn(), + _parent(parent), + _aBoundaryAnName (""), + _aCaseName(caseName), + _BoundaryType(1), + _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), + _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), + _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), + _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0), + Chgt (false) + { + MESSAGE("Constructeur") ; + _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); + setupUi(this); + setModal(modal); + + // Gestion des icones + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); + QIcon IS=QIcon(pix); + RBSphere->setIcon(IS); + QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); + QIcon IS2=QIcon(pix2); + RBCylindre->setIcon(IS2); + + InitConnect( ); + + SetNewBoundaryAnName() ; + InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage + InitMinMax(); // Initialise les bornes des boutons + SetCylinder(); // Propose un cylindre en premier choix + } +// -------------------------------------------------------------------------------------------------------------- +MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName): +// -------------------------------------------------------------------------------------------------------------- +// Constructeur appele par MonEditBoundaryAn +// + QDialog(0), Ui_CreateBoundaryAn(), + _myHomardGen(myHomardGen), + _parent(parent), + _aBoundaryAnName (""), + _aCaseName(caseName), + _BoundaryType(1), + _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), + _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), + // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas + _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), + _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1), + Chgt (false) + { + // MESSAGE("Debut de MonCreateBoundaryAn") + setupUi(this); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); + QIcon IS=QIcon(pix); + RBSphere->setIcon(IS); + QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); + QIcon IS2=QIcon(pix2); + RBCylindre->setIcon(IS2); + setModal(true); + InitConnect(); + } + +// ------------------------------------------------------------------------ +MonCreateBoundaryAn::~MonCreateBoundaryAn() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( RBCylindre, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ; + connect( RBSphere, SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ; + connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ); + connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ); + connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ); + connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ); +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::InitValBoundaryAn() +// ------------------------------------------------------------------------ +{ +// +// 1. Les coordonnees extremes du maillage +// + if (_aCaseName == QString("")) { return; } + + HOMARD::HOMARD_Cas_var aCas = _myHomardGen->GetCas(_aCaseName.toStdString().c_str()); + HOMARD::extrema_var MesExtremes = aCas->GetBoundingBox(); + int num = MesExtremes->length() ; + ASSERT(num == 10); + _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2]; + _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5]; + _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8]; + _DMax=MesExtremes[9]; + MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ; + MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ; + MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ; + MESSAGE ("_DMax : " << _DMax); + +// 2. Caracteristiques des zones +// en X + _Xcentre=(_Xmin + _Xmax)/2.; +// en Y + _Ycentre=(_Ymin + _Ymax)/2.; +// en Z + _Zcentre=(_Zmin + _Zmax)/2.; +// Rayon + _Rayon= _DMax/4.; +} + +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::InitMinMax() +// ------------------------------------------------------------------------ +{ +// en X + SpinBox_Xaxis->setSingleStep(0.1); + SpinBox_Xcentre->setSingleStep(_Xincr); +//en Y + SpinBox_Yaxis->setSingleStep(0.1); + SpinBox_Ycentre->setSingleStep(_Yincr); +//en Z + SpinBox_Zaxis->setSingleStep(0.1); + SpinBox_Zcentre->setSingleStep(_Zincr); +// Rayon + SpinBox_Radius->setSingleStep(_Rayon/10.); + SpinBox_Radius->setMinimum(0.); + SpinBox_Rayon->setSingleStep(_Rayon/10.); + SpinBox_Rayon->setMinimum(0.); +} +// ------------------------------------------------------------------------ +bool MonCreateBoundaryAn::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ + std::cerr << LEBoundaryName->text().trimmed().toStdString() << std::endl; + if (LEBoundaryName->text().trimmed()=="") + { + QMessageBox::information( 0, "Error", + "The boundary must be named.", + QMessageBox::Ok + QMessageBox::Default ); + return false; + } + + switch (_BoundaryType) + { + case 1 : // il s agit d un cylindre + { + if ((_BoundaryAnXcentre != SpinBox_Xcent->value()) or + (_BoundaryAnYcentre != SpinBox_Ycent->value()) or + (_BoundaryAnZcentre != SpinBox_Zcent->value()) or + (_BoundaryAnRayon != SpinBox_Radius->value()) or + (_BoundaryAnXaxis != SpinBox_Xaxis->value()) or + (_BoundaryAnYaxis != SpinBox_Yaxis->value()) or + (_BoundaryAnZaxis != SpinBox_Zaxis->value()) ) + { + Chgt = true; + _BoundaryAnXaxis= SpinBox_Xaxis->value(); + _BoundaryAnYaxis= SpinBox_Yaxis->value(); + _BoundaryAnZaxis= SpinBox_Zaxis->value(); + _BoundaryAnXcentre=SpinBox_Xcent->value(); + _BoundaryAnYcentre=SpinBox_Ycent->value(); + _BoundaryAnZcentre=SpinBox_Zcent->value(); + _BoundaryAnRayon=SpinBox_Radius->value(); + } + break; + } + + case 4 : // il s agit d une sphere + { + if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) or + (_BoundaryAnYcentre != SpinBox_Ycentre->value()) or + (_BoundaryAnZcentre != SpinBox_Zcentre->value()) or + (_BoundaryAnRayon != SpinBox_Rayon->value()) ) + { + Chgt = true; + _BoundaryAnXcentre=SpinBox_Xcentre->value(); + _BoundaryAnYcentre=SpinBox_Ycentre->value(); + _BoundaryAnZcentre=SpinBox_Zcentre->value(); + _BoundaryAnRayon=SpinBox_Rayon->value(); + } + break; + } + } + + bool bOK = CreateOrUpdateBoundaryAn(); + return bOK; + +} +// --------------------------------------------------- +bool MonCreateBoundaryAn:: CreateOrUpdateBoundaryAn() +//---------------------------------------------------- +// Creation de l'objet boundary +// Mise a jour des attributs de la BoundaryAn + +{ + if (_aBoundaryAnName != LEBoundaryName->text().trimmed()) + { + try + { + _aBoundaryAnName = LEBoundaryName->text().trimmed(); + aBoundaryAn = _myHomardGen->CreateBoundary( \ + CORBA::string_dup(_aBoundaryAnName.toStdString().c_str()), \ + CORBA::Long(_BoundaryType) ); + _parent->addBoundaryAn(_aBoundaryAnName); + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::information( 0, "Error", + QString(CORBA::string_dup(S_ex.details.text)), + QMessageBox::Ok + QMessageBox::Default ); + return false; + } + } +// Mise en place des attributs + aBoundaryAn->SetBoundaryType(_BoundaryType); + switch (_BoundaryType) + { + case 1 : // il s agit d un cylindre + { + aBoundaryAn->SetCylinder(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); + break; + } + + case 2 : // il s agit d une sphere + { + aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); + break; + } + } + aBoundaryAn->SetLimit(_Xincr, _Yincr, _Zincr); + + HOMARD_UTILS::updateObjBrowser(); + return true; +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) this->close(); +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::PushOnHelp() +// ------------------------------------------------------------------------ +{ + HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#un-cylindre") ) ; +} + +// ----------------------------------- +void MonCreateBoundaryAn::SetNewBoundaryAnName() +// ----------------------------------- +{ +// Recherche d'un nom par defaut qui n'existe pas encore + + HOMARD::listeBoundarys_var MyBoundaryAns = _myHomardGen->GetAllBoundarys(); + int num = 0; QString aBoundaryAnName=""; + while (aBoundaryAnName=="" ) + { + aBoundaryAnName.setNum(num+1) ; + aBoundaryAnName.insert(0, QString("Boun_")) ; + for ( int i=0; ilength(); i++) + { + if ( aBoundaryAnName == QString(MyBoundaryAns[i])) + { + num=num+1; + aBoundaryAnName=""; + break; + } + } + } + LEBoundaryName->clear() ; + LEBoundaryName->insert(aBoundaryAnName); +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::SetCylinder() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetCylinder") + gBCylindre->setVisible(1); + gBSphere->setVisible(0); + adjustSize(); + _BoundaryType=1; + SpinBox_Xcent->setValue(_Xcentre); + SpinBox_Xaxis->setValue(1.); + SpinBox_Ycent->setValue(_Ycentre); + SpinBox_Yaxis->setValue(1.); + SpinBox_Zcent->setValue(_Zcentre); + SpinBox_Zaxis->setValue(1.); + SpinBox_Radius->setValue(_Rayon); + MESSAGE("Fin de SetCylinder") +} +// ------------------------------------------------------------------------ +void MonCreateBoundaryAn::SetSphere() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetSphere") + gBCylindre->setVisible(0); + gBSphere->setVisible(1); + adjustSize(); + _BoundaryType=2; + SpinBox_Xcentre->setValue(_Xcentre); + SpinBox_Ycentre->setValue(_Ycentre); + SpinBox_Zcentre->setValue(_Zcentre); + SpinBox_Rayon->setValue(_Rayon); + MESSAGE("Fin de SetSphere") +} + + diff --git a/src/HOMARDGUI/MonCreateBoundaryAn.h b/src/HOMARDGUI/MonCreateBoundaryAn.h new file mode 100644 index 00000000..78fdbf9c --- /dev/null +++ b/src/HOMARDGUI/MonCreateBoundaryAn.h @@ -0,0 +1,63 @@ +#ifndef MON_CREATEBOUNDARYAN_H +#define MON_CREATEBOUNDARYAN_H + + +#include +#include + +#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(HOMARD_Gen) +#include CORBA_CLIENT_HEADER(HOMARD_Boundary) + +#include +#include + +class MonCreateCase; +class MonCreateBoundaryAn : public QDialog, public Ui_CreateBoundaryAn +{ + Q_OBJECT + +public: + MonCreateBoundaryAn( MonCreateCase* parent, bool modal, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName); + virtual ~MonCreateBoundaryAn(); + +protected : + MonCreateBoundaryAn( MonCreateCase* parent, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName); + + MonCreateCase * _parent; + + QString _aBoundaryAnName; + QString _aCaseName; + + int _BoundaryType; + double _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon; + double _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis; + double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ; + double _Xcentre, _Ycentre, _Zcentre, _Rayon ; + + + bool Chgt; + + HOMARD::HOMARD_Boundary_var aBoundaryAn ; + HOMARD::HOMARD_Gen_var _myHomardGen; + + virtual void InitConnect(); + virtual void InitValBoundaryAn(); + virtual void InitMinMax(); + virtual void SetNewBoundaryAnName(); + virtual bool CreateOrUpdateBoundaryAn(); + +public slots: + virtual void SetCylinder(); + virtual void SetSphere(); + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + +}; + +#endif // MON_CREATEBOUNDARYAN_H diff --git a/src/HOMARDGUI/MonCreateBoundaryDi.cxx b/src/HOMARDGUI/MonCreateBoundaryDi.cxx index db1edcd2..2cd27abb 100644 --- a/src/HOMARDGUI/MonCreateBoundaryDi.cxx +++ b/src/HOMARDGUI/MonCreateBoundaryDi.cxx @@ -89,7 +89,7 @@ bool MonCreateBoundaryDi::PushOnApply() // Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom if ( _aBoundaryName != aBoundaryName ) { - try + try { _aBoundaryName=aBoundaryName; _aBoundary=_myHomardGen->CreateBoundary(CORBA::string_dup(_aBoundaryName.toStdString().c_str()),0); @@ -126,7 +126,7 @@ void MonCreateBoundaryDi::PushOnOK() void MonCreateBoundaryDi::PushOnHelp() // ------------------------------------------------------------------------ { - HOMARD_UTILS::PushOnHelp(QString("gui_create_hypothese.html")); + HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-discrete")); } // ------------------------------------------------------------------------ void MonCreateBoundaryDi::AssocieLesGroupes() diff --git a/src/HOMARDGUI/MonCreateCase.cxx b/src/HOMARDGUI/MonCreateCase.cxx index f84c53fb..71474db5 100644 --- a/src/HOMARDGUI/MonCreateCase.cxx +++ b/src/HOMARDGUI/MonCreateCase.cxx @@ -1,6 +1,8 @@ using namespace std; #include "MonCreateCase.h" +#include "MonCreateBoundaryAn.h" +#include "MonEditBoundaryAn.h" #include "MonCreateBoundaryDi.h" #include "MonEditBoundaryDi.h" @@ -21,7 +23,7 @@ MonCreateCase::MonCreateCase(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var * Sets attributes to default values */ : - Ui_CreateCase(), + Ui_CreateCase(), _aCaseName(""),_aDirName(""), _ConfType(1) { _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); @@ -61,6 +63,8 @@ void MonCreateCase::InitConnect() connect( PBBoundaryDiNew, SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew())); connect( PBBoundaryDiEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryDiEdit()) ); connect( CBBoundaryA, SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryA())); + connect( PBBoundaryAnNew, SIGNAL(pressed()), this, SLOT(PushBoundaryAnNew())); + connect( PBBoundaryAnHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) ); connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); @@ -137,6 +141,38 @@ bool MonCreateCase::PushOnApply() return false; } + if (CBBoundaryA->isChecked()) + { + QStringList ListeGroup ; + QString NomGroup ; + int nbcol = TWBoundary->columnCount(); + int nbrow = TWBoundary->rowCount(); + for ( int col=1; col< nbcol; col++) + { + for ( int row=0; row< nbrow; row++) + { + if ( TWBoundary->item( row, col )->checkState() == Qt::Checked ) + { +// Nom du groupe + NomGroup = QString(TWBoundary->item(row, 0)->text()) ; +// MESSAGE("NomGroup "<SetConfType(_ConfType); +// Enregistrement de la frontiere discrete if (CBBoundaryD->isChecked()) { QString monBoundaryDiName=CBBoundaryDi->currentText(); if (monBoundaryDiName != "" ) { - aCase->AddBoundaryGroup(monBoundaryDiName.toStdString().c_str(), " "); + aCase->AddBoundaryGroup(monBoundaryDiName.toStdString().c_str(), ""); + } + } + +// Enregistrement des liens (groupe,frontiere analytique) + if (CBBoundaryA->isChecked()) + { + QString NomGroup ; + int nbcol = TWBoundary->columnCount(); + int nbrow = TWBoundary->rowCount(); + for ( int col=1; col< nbcol; col++) + { + for ( int row=0; row< nbrow; row++) + { + if ( TWBoundary->item( row, col )->checkState() == Qt::Checked ) + { +// Nom du groupe + NomGroup = QString(TWBoundary->item(row, 0)->text()) ; +// Nom de la frontiere + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem = TWBoundary->horizontalHeaderItem(col); + aCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(), NomGroup.toStdString().c_str()); + } + } } } @@ -275,10 +335,17 @@ void MonCreateCase::SetQuelconque() void MonCreateCase::SetBoundaryD() // ------------------------------------------------------------------------ { - if (CBBoundaryD->isChecked()) - { GBBoundaryD->setVisible(1); } - else - { GBBoundaryD->setVisible(0); } + if (CBBoundaryD->isChecked()) + { + GBBoundaryD->setVisible(1); + bool bOK = PushOnApply(); + if ( ! bOK) { + GBBoundaryD->setVisible(0); + CBBoundaryD->setChecked(0); + CBBoundaryD->setCheckState(Qt::Unchecked); + } + } + else { GBBoundaryD->setVisible(0); } adjustSize(); } // ------------------------------------------------------------------------ @@ -292,7 +359,7 @@ void MonCreateCase::addBoundaryDi(QString newBoundary) void MonCreateCase::PushBoundaryDiNew() // ------------------------------------------------------------------------ { - MonCreateBoundaryDi *BoundaryDlg = new MonCreateBoundaryDi(this, true, + MonCreateBoundaryDi *BoundaryDlg = new MonCreateBoundaryDi(this, true, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, "") ; BoundaryDlg->show(); } @@ -301,7 +368,7 @@ void MonCreateCase::PushBoundaryDiEdit() // ------------------------------------------------------------------------ { if (CBBoundaryDi->currentText() == QString("")) return; - MonEditBoundaryDi *BoundaryDlg = new MonEditBoundaryDi(this, true, + MonEditBoundaryDi *BoundaryDlg = new MonEditBoundaryDi(this, true, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, CBBoundaryDi->currentText() ) ; BoundaryDlg->show(); } @@ -309,9 +376,77 @@ void MonCreateCase::PushBoundaryDiEdit() void MonCreateCase::SetBoundaryA() // ------------------------------------------------------------------------ { - if (CBBoundaryA->isChecked()) { GBBoundaryA->setVisible(1); } + MESSAGE("Debut de SetBoundaryA "); + if (CBBoundaryA->isChecked()) + { + bool bOK = PushOnApply(); + if (bOK) { + GBBoundaryA->setVisible(1); + HOMARD::ListGroupType_var _listeGroupesCas = aCase->GetGroups(); + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(QApplication::translate("CreateCase", "", 0, QApplication::UnicodeUTF8)); + TWBoundary->setHorizontalHeaderItem(0, __colItem); + for ( int i = 0; i < _listeGroupesCas->length(); i++ ) + { + TWBoundary->insertRow(i); + TWBoundary->setItem( i, 0, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed())); + TWBoundary->item( i, 0 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); + } + TWBoundary->resizeColumnsToContents(); + TWBoundary->resizeRowsToContents(); + TWBoundary->clearSelection(); + } + else{ + GBBoundaryA->setVisible(0); + CBBoundaryA->setChecked(0); + CBBoundaryA->setCheckState(Qt::Unchecked); } + } else { GBBoundaryA->setVisible(0); } adjustSize(); +// + MESSAGE("Fin de SetBoundaryA "); +} +// ------------------------------------------------------------------------ +void MonCreateCase::addBoundaryAn(QString newBoundary) +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de addBoundaryAn "); +// Ajout d'une nouvelle colonne + int nbcol = TWBoundary->columnCount(); + MESSAGE("nbcol " << nbcol); + nbcol += 1 ; + TWBoundary->setColumnCount ( nbcol ) ; + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(QApplication::translate("CreateCase", newBoundary.toStdString().c_str(), 0, QApplication::UnicodeUTF8)); + TWBoundary->setHorizontalHeaderItem(nbcol-1, __colItem); +/* TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/ +// Chaque case est a cocher + int nbrow = TWBoundary->rowCount(); + MESSAGE("nbrow " << nbrow); + for ( int i = 0; i < nbrow; i++ ) + { + TWBoundary->setItem( i, nbcol-1, new QTableWidgetItem( QString ("") ) ); + TWBoundary->item( i, nbcol-1 )->setFlags( 0 ); + TWBoundary->item( i, nbcol-1 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); + TWBoundary->item( i, nbcol-1 )->setCheckState( Qt::Unchecked ); + } + TWBoundary->resizeColumnToContents(nbcol-1); +// TWBoundary->resizeRowsToContents(); + MESSAGE("Fin de addBoundaryAn "); +} +// ------------------------------------------------------------------------ +void MonCreateCase::PushBoundaryAnNew() +// ------------------------------------------------------------------------ +{ + MonCreateBoundaryAn *BoundaryDlg = new MonCreateBoundaryAn(this, true, + HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName) ; + BoundaryDlg->show(); +} +// ------------------------------------------------------------------------ +void MonCreateCase::PushBoundaryAnHelp() +// ------------------------------------------------------------------------ +{ + HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-analytique") ) ; } // ------------------------------------------------------------------------ void MonCreateCase::CaseNameChanged() diff --git a/src/HOMARDGUI/MonCreateCase.h b/src/HOMARDGUI/MonCreateCase.h index 1cf0e4dc..0bd2aa98 100644 --- a/src/HOMARDGUI/MonCreateCase.h +++ b/src/HOMARDGUI/MonCreateCase.h @@ -19,6 +19,7 @@ public: MonCreateCase( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen); ~MonCreateCase(); + void addBoundaryAn(QString newBoundary); void addBoundaryDi(QString newBoundary); protected : @@ -49,6 +50,8 @@ public slots: virtual void PushBoundaryDiNew(); virtual void PushBoundaryDiEdit(); virtual void SetBoundaryA(); + virtual void PushBoundaryAnNew(); + virtual void PushBoundaryAnHelp(); virtual void PushOnOK(); virtual bool PushOnApply(); diff --git a/src/HOMARDGUI/MonCreateHypothesis.cxx b/src/HOMARDGUI/MonCreateHypothesis.cxx index 60bd6c85..2ad73d09 100644 --- a/src/HOMARDGUI/MonCreateHypothesis.cxx +++ b/src/HOMARDGUI/MonCreateHypothesis.cxx @@ -279,7 +279,6 @@ void MonCreateHypothesis::GetAllZones() // Recuperation de toutes les zones enregistrees dans l'arbre d'etude { HOMARD::listeZones_var mesZones = _myHomardGen->GetAllZones(); - TWZone->clear(); int stop=TWZone->rowCount(); for ( int row=0; row< stop; row++) { @@ -294,7 +293,7 @@ void MonCreateHypothesis::GetAllZones() TWZone->item( row, 0 )->setFlags( 0 ); TWZone->item( row, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); TWZone->item( row, 0 )->setCheckState( Qt::Unchecked ); - TWZone->setItem( row, 1, new QTableWidgetItem(QString(mesZones[i]))); + TWZone->setItem( row, 1, new QTableWidgetItem(QString(mesZones[i]).trimmed())); TWZone->item( row, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); row=row+1; } @@ -419,7 +418,7 @@ void MonCreateHypothesis::SetFieldName() TWCMP->item( 0, 0 )->setFlags( 0 ); TWCMP->item( 0, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); TWCMP->item( 0, 0 )->setCheckState( Qt::Checked ); - TWCMP->setItem( 0, 1, new QTableWidgetItem(QString((*it)))); + TWCMP->setItem( 0, 1, new QTableWidgetItem(QString((*it)).trimmed())); TWCMP->item( 0, 1 )->setFlags( Qt::ItemIsEnabled |Qt::ItemIsSelectable ); } TWCMP->resizeColumnsToContents(); @@ -702,7 +701,7 @@ void MonCreateHypothesis::SetFieldChosen() TWField->item( row, 0 )->setFlags( 0 ); TWField->item( row, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); TWField->item( row, 0 )->setCheckState( Qt::Unchecked ); - TWField->setItem( row, 1, new QTableWidgetItem(QString(*it))); + TWField->setItem( row, 1, new QTableWidgetItem(QString(*it).trimmed())); TWField->item( row, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); row=row+1; } diff --git a/src/HOMARDGUI/MonCreateListGroup.cxx b/src/HOMARDGUI/MonCreateListGroup.cxx index 47121c7b..8b9dab97 100644 --- a/src/HOMARDGUI/MonCreateListGroup.cxx +++ b/src/HOMARDGUI/MonCreateListGroup.cxx @@ -120,7 +120,7 @@ void MonCreateListGroup::InitGroupes() {TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );} else {TWGroupe->item( i, 0 )->setCheckState( Qt::Unchecked );} - TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]))); + TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed())); TWGroupe->item( i, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); } TWGroupe->resizeColumnsToContents(); diff --git a/src/HOMARDGUI/MonCreateZone.cxx b/src/HOMARDGUI/MonCreateZone.cxx index 6fbea3d2..7e766f83 100644 --- a/src/HOMARDGUI/MonCreateZone.cxx +++ b/src/HOMARDGUI/MonCreateZone.cxx @@ -222,6 +222,7 @@ void MonCreateZone::InitMinMax() SpinBox_Zcentre->setEnabled(false) ; } // Rayon + SpinBox_Rayon->setSingleStep(_Rayon/10.); SpinBox_Rayon->setMinimum(0.); } // ------------------------------------------------------------------------ diff --git a/src/HOMARDGUI/MonEditBoundaryAn.cxx b/src/HOMARDGUI/MonEditBoundaryAn.cxx new file mode 100644 index 00000000..50794ca9 --- /dev/null +++ b/src/HOMARDGUI/MonEditBoundaryAn.cxx @@ -0,0 +1,188 @@ +using namespace std; + +#include "MonEditBoundaryAn.h" + +#include "SalomeApp_Tools.h" +#include "HOMARDGUI_Utils.h" +#include + + +// ------------------------------------------------------------------------ +MonEditBoundaryAn::MonEditBoundaryAn( MonCreateCase* parent, bool modal, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName, QString zoneName ): +// ------------------------------------------------------------------------ +/* Constructs a MonEditBoundaryAn + herite de MonCreateBoundaryAn +*/ + MonCreateBoundaryAn(parent, myHomardGen, caseName) +{ + MESSAGE("Debut de MonEditBoundaryAn pour " << zoneName.toStdString().c_str()); + setWindowTitle("Edit BoundaryAn"); + _aBoundaryAnName=zoneName; + aBoundaryAn = _myHomardGen->GetBoundary(_aBoundaryAnName.toStdString().c_str()); + InitValEdit(); +} +// ------------------------------------------------------------------------ +MonEditBoundaryAn::~MonEditBoundaryAn() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::InitValEdit() +// ------------------------------------------------------------------------ +{ + LEBoundaryName->setText(_aBoundaryAnName); + LEBoundaryName->setReadOnly(true); + _BoundaryType = aBoundaryAn->GetBoundaryType(); + InitValBoundaryAnLimit(); + if (_aCaseName != QString("")) InitValBoundaryAn(); + switch (_BoundaryType) + { + case 1 : // il s agit d une boite + { + InitValBoundaryAnCylindre(); + SetCylinder(); + break; + } + case 2: // il s agit d une sphere + { + InitValBoundaryAnSphere(); + SetSphere(); + break; + } + }; +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::InitValBoundaryAnLimit() +// ------------------------------------------------------------------------ +{ + HOMARD::double_array_var mesCoordLimits = aBoundaryAn->GetLimit(); + ASSERT(mesCoordLimits->length() == 3 ); + _Xincr=mesCoordLimits[0]; + _Yincr=mesCoordLimits[1]; + _Zincr=mesCoordLimits[2]; + +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::InitValBoundaryAnCylindre() +// ------------------------------------------------------------------------ +{ + HOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCylinder(); + ASSERT(mesCoordBoundary->length() == 7 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnXaxis=mesCoordBoundary[3]; + _BoundaryAnYaxis=mesCoordBoundary[4]; + _BoundaryAnZaxis=mesCoordBoundary[5]; + _BoundaryAnRayon=mesCoordBoundary[6]; + +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::InitValBoundaryAnSphere() +// ------------------------------------------------------------------------ +{ + HOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetSphere(); + ASSERT(mesCoordBoundary->length() == 4 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnRayon=mesCoordBoundary[3]; + +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::SetCylinder() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(1); + gBSphere->setVisible(0); + RBCylindre->setChecked(1); + adjustSize(); + _BoundaryType=1; + RBSphere->setDisabled(true); + adjustSize(); + + SpinBox_Xcent->setValue(_BoundaryAnXcentre); + SpinBox_Ycent->setValue(_BoundaryAnYcentre); + SpinBox_Zcent->setValue(_BoundaryAnZcentre); + + SpinBox_Xaxis->setValue(_BoundaryAnXaxis); + SpinBox_Yaxis->setValue(_BoundaryAnYaxis); + SpinBox_Zaxis->setValue(_BoundaryAnZaxis); + + + SpinBox_Xaxis->setSingleStep(0.1); + SpinBox_Xcentre->setSingleStep(_Xincr); + SpinBox_Yaxis->setSingleStep(0.1); + SpinBox_Ycentre->setSingleStep(_Yincr); + SpinBox_Zaxis->setSingleStep(0.1); + SpinBox_Zcentre->setSingleStep(_Zincr); +// Rayon + SpinBox_Radius->setValue(_BoundaryAnRayon); + SpinBox_Radius->setSingleStep(_BoundaryAnRayon/10.); + +} +// ------------------------------------------------------------------------ +void MonEditBoundaryAn::SetSphere() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(0); + gBSphere->setVisible(1); + RBSphere->setChecked(1); + RBCylindre->setDisabled(true); + adjustSize(); + _BoundaryType=2 ; + + SpinBox_Xcentre->setValue(_BoundaryAnXcentre); + if ( _Xincr > 0) { SpinBox_Xcentre->setSingleStep(_Xincr); } + else { SpinBox_Xcentre->setSingleStep(1) ; } + + SpinBox_Ycentre->setValue(_BoundaryAnYcentre); + if ( _Yincr > 0) { SpinBox_Ycentre->setSingleStep(_Yincr); } + else { SpinBox_Ycentre->setSingleStep(1) ; } + + SpinBox_Zcentre->setValue(_BoundaryAnZcentre); + if ( _Zincr > 0) { SpinBox_Zcentre->setSingleStep(_Zincr); } + else { SpinBox_Zcentre->setSingleStep(1);} + + SpinBox_Rayon->setMinimum(0.); + SpinBox_Rayon->setValue(_BoundaryAnRayon); +} + + +// --------------------------------------------------- +bool MonEditBoundaryAn::CreateOrUpdateBoundaryAn() +//---------------------------------------------------- +// Pas de Creation de la zone +// Mise a jour des attributs de la BoundaryAn + +{ + try + { + aBoundaryAn->SetBoundaryType(_BoundaryType); + switch (_BoundaryType) + { + case 1 : // il s agit d un cylindre + { + aBoundaryAn->SetCylinder(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); + break; + } + + case 2 : // il s agit d une sphere + { + aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); + break; + } + } + if (Chgt) _myHomardGen->InvalideBoundary(_aBoundaryAnName.toStdString().c_str()); + HOMARD_UTILS::updateObjBrowser(); + } + catch( const SALOME::SALOME_Exception& S_ex ) { + SalomeApp_Tools::QtCatchCorbaException( S_ex ); + return false; + } + return true; +} + diff --git a/src/HOMARDGUI/MonEditBoundaryAn.h b/src/HOMARDGUI/MonEditBoundaryAn.h new file mode 100644 index 00000000..0a1ce5e0 --- /dev/null +++ b/src/HOMARDGUI/MonEditBoundaryAn.h @@ -0,0 +1,34 @@ +#ifndef MON_EDITBOUNDARYAN_H +#define MON_EDITBOUNDARYAN_H + +#include +#include + +#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(HOMARD_Gen) + +#include + +class MonEditBoundaryAn : public MonCreateBoundaryAn +{ + Q_OBJECT +public: + MonEditBoundaryAn( MonCreateCase* parent, bool modal, + HOMARD::HOMARD_Gen_var myHomardGen, + QString caseName, QString zoneName); + virtual ~MonEditBoundaryAn(); + +protected : + void SetCylinder(); + void SetSphere(); + bool CreateOrUpdateBoundaryAn(); + void InitValEdit(); + void InitValBoundaryAnLimit(); + void InitValBoundaryAnCylindre(); + void InitValBoundaryAnSphere(); + +public slots: + +}; + +#endif // MON_EDITZONE_H diff --git a/src/HOMARDGUI/MonEditCase.cxx b/src/HOMARDGUI/MonEditCase.cxx index ca060e3f..111f271b 100644 --- a/src/HOMARDGUI/MonEditCase.cxx +++ b/src/HOMARDGUI/MonEditCase.cxx @@ -75,36 +75,89 @@ void MonEditCase::InitValEdit() RBNonConforme->setEnabled(false); RBConforme->setEnabled(false); -// Affichage du mode de suivi de frontiere +// Non affichage du mode de suivi de frontiere CBBoundaryA->setVisible(0); GBBoundaryA->setVisible(0); CBBoundaryD->setVisible(0); GBBoundaryD->setVisible(0); +// On passe en revue tous les couples (frontiere,groupe) du cas HOMARD::ListBoundaryGroupType_var mesBoundarys = aCase->GetBoundaryGroup(); if (mesBoundarys->length()>0) { + QStringList ListeFron ; + QString NomFron ; bool BounDi = false ; bool BounAn = false ; for (int i=0; ilength(); i++) { - HOMARD::HOMARD_Boundary_var myBoundary = _myHomardGen->GetBoundary((mesBoundarys)[i]); +// Nom de la frontiere + NomFron = mesBoundarys[i++]; + MESSAGE("NomFron "<GetBoundary(NomFron.toStdString().c_str()); int type_obj = myBoundary->GetBoundaryType() ; - if ( type_obj==0 ) - { CBBoundaryDi->addItem(QString((mesBoundarys)[i++])); +// C'est une frontiere discrete +// Rermarque : on ne gere pas les groupes + if ( type_obj==0 ) + { BounDi = true ; + CBBoundaryDi->addItem(NomFron); } + +// C'est une frontiere analytique else { - i++ ; BounAn = true ; - }; + int nbcol = TWBoundary->columnCount(); +// On ajoute une ligne pour le groupe + TWBoundary->insertRow(0); +// La colonne 0 comporte le nom du groupe + TWBoundary->setItem( 0, 0, new QTableWidgetItem(QString(mesBoundarys[i]).trimmed())); +// TWBoundary->item( 0, 0 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); +// Chacune des colonnes suivantes est associé a une frontiere deja presente : on y met une +// case non cochee + for ( int j = 1; j < nbcol; j++ ) + { + TWBoundary->setItem( 0, j, new QTableWidgetItem( QString ("") ) ); + TWBoundary->item( 0, j )->setFlags( 0 ); + TWBoundary->item( 0, j )->setFlags( Qt::ItemIsUserCheckable ); + TWBoundary->item( 0, j )->setCheckState( Qt::Unchecked ); + } +// On cherche si la frontiere en cours d'examen a deja ete rencontree : +// si oui, on stocke son numero de colonne + int ok = -1 ; + for ( int nufr = 0 ; nufritem( 0, ok )->setCheckState( Qt::Checked ); + } } MESSAGE("BounDi "<setVisible(1); - GBBoundaryA->setDisabled(true);} +// on rend les cases inactives. On ne peut pas le faire pour le tableau sinon on perd l'ascenseur ! + int nbcol = TWBoundary->columnCount(); + int nbrow = TWBoundary->rowCount(); + for ( int i = 0; i < nbrow; i++ ) + { for ( int j = 0; j < nbcol; j++ ) TWBoundary->item( i, j )->setFlags( !Qt::ItemIsEnabled ); } +// on met un nom blanc au coin + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(QApplication::translate("CreateCase", "", 0, QApplication::UnicodeUTF8)); + TWBoundary->setHorizontalHeaderItem(0, __colItem); +// on cache le bouton New + PBBoundaryAnNew->setVisible(0); + } if ( BounDi ) { GBBoundaryD->setVisible(1); CBBoundaryDi->setDisabled(true); diff --git a/src/HOMARDGUI/MonEditFile.cxx b/src/HOMARDGUI/MonEditFile.cxx index c73730c3..5d09d71c 100644 --- a/src/HOMARDGUI/MonEditFile.cxx +++ b/src/HOMARDGUI/MonEditFile.cxx @@ -15,12 +15,12 @@ using namespace std; * MonEditFile classe derivee de EditFile * elle meme generee par uic * Ouvre le fichier passe en parametre - * et affiche le texte correspondant dans la fenêtre de log + * et affiche le texte correspondant dans la fenetre de log * --------------------------------------------------------- */ /* --------------------------------------------------------- - * MonEditFile Constructeur + * MonEditFile Constructeur * --------------------------------------------------------- */ MonEditFile::MonEditFile( QWidget* parent, bool modal, @@ -48,7 +48,6 @@ void MonEditFile::InitConnect() { connect( buttonQuit, SIGNAL(pressed()), this, SLOT(close())); connect( buttonPrint, SIGNAL(pressed()), this, SLOT(PushOnPrint())); - connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); } // ------------------------------------------------------------------------ void MonEditFile::EditText() @@ -89,11 +88,5 @@ void MonEditFile::PushOnPrint() QMessageBox::Ok + QMessageBox::Default ); return; } -// ------------------------------------------------------------------------ -void MonEditFile::PushOnHelp() -// ------------------------------------------------------------------------ -{ - HOMARD_UTILS::PushOnHelp(QString("gui_usage.html")); -} diff --git a/src/HOMARDGUI/MonEditFile.h b/src/HOMARDGUI/MonEditFile.h index 22def7ac..6bca868a 100644 --- a/src/HOMARDGUI/MonEditFile.h +++ b/src/HOMARDGUI/MonEditFile.h @@ -36,7 +36,6 @@ protected : public slots: virtual void PushOnPrint(); - virtual void PushOnHelp(); }; diff --git a/src/HOMARDGUI/MonEditHypothesis.cxx b/src/HOMARDGUI/MonEditHypothesis.cxx index f1667f6f..c7f33432 100644 --- a/src/HOMARDGUI/MonEditHypothesis.cxx +++ b/src/HOMARDGUI/MonEditHypothesis.cxx @@ -201,7 +201,7 @@ void MonEditHypothesis::InitAdaptChamps() TWCMP->item( 0, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); TWCMP->item( 0, 0 )->setCheckState(Qt::Checked ); TWCMP->item( 0, 0 )->setFlags( 0 ); - TWCMP->setItem( 0, 1, new QTableWidgetItem(QString(mesComposantsAvant[i]))); + TWCMP->setItem( 0, 1, new QTableWidgetItem(QString(mesComposantsAvant[i]).trimmed())); TWCMP->item( 0, 1 )->setFlags( Qt::ItemIsEnabled |Qt::ItemIsSelectable ); } TWCMP->resizeColumnsToContents(); @@ -302,7 +302,7 @@ void MonEditHypothesis::InitFieldInterp() TWField->item( 0, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); TWField->item( 0, 0 )->setCheckState(Qt::Checked ); TWField->item( 0, 0 )->setFlags( 0 ); - TWField->setItem( 0, 1, new QTableWidgetItem(QString(mesChampsAvant[i]))); + TWField->setItem( 0, 1, new QTableWidgetItem(QString(mesChampsAvant[i]).trimmed())); TWField->item( 0, 1 )->setFlags( Qt::ItemIsEnabled |Qt::ItemIsSelectable ); } TWField->resizeColumnsToContents(); diff --git a/src/HOMARDGUI/MonEditZone.cxx b/src/HOMARDGUI/MonEditZone.cxx index afebbfbb..50226e8c 100644 --- a/src/HOMARDGUI/MonEditZone.cxx +++ b/src/HOMARDGUI/MonEditZone.cxx @@ -103,20 +103,20 @@ void MonEditZone::SetBox() SpinBox_Xmini->setValue(_ZoneXmin); SpinBox_Xmaxi->setValue(_ZoneXmax); - int incr=1; - if ( _Xincr > 0 ) { incr=_Xincr;}; + double incr ; + if ( _Xincr > 0 ) {incr=_Xincr;} else{incr=1.;} SpinBox_Xmini->setSingleStep(incr); SpinBox_Xmaxi->setSingleStep(incr); SpinBox_Ymini->setValue(_ZoneYmin); SpinBox_Ymaxi->setValue(_ZoneYmax); - if ( _Yincr > 0 ) {incr=_Yincr;} else{incr=1;} + if ( _Yincr > 0 ) {incr=_Yincr;} else{incr=1.;} SpinBox_Ymini->setSingleStep(incr); SpinBox_Ymaxi->setSingleStep(incr); SpinBox_Zmini->setValue(_ZoneZmin); SpinBox_Zmaxi->setValue(_ZoneZmax); - if ( _Zincr > 0 ) {incr=_Zincr;} else{incr=1;} + if ( _Zincr > 0 ) {incr=_Zincr;} else{incr=1.;} SpinBox_Zmini->setSingleStep(incr); SpinBox_Zmaxi->setSingleStep(incr); diff --git a/src/HOMARD_I/HOMARD_Gen_i.cxx b/src/HOMARD_I/HOMARD_Gen_i.cxx index cc2ac949..90496852 100755 --- a/src/HOMARD_I/HOMARD_Gen_i.cxx +++ b/src/HOMARD_I/HOMARD_Gen_i.cxx @@ -38,8 +38,8 @@ using namespace std; //============================================================================= HOMARD_Gen_i::HOMARD_Gen_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, - PortableServer::ObjectId * contId, - const char *instanceName, + PortableServer::ObjectId * contId, + const char *instanceName, const char *interfaceName) : Engines_Component_i(orb, poa, contId, instanceName, interfaceName) { @@ -63,7 +63,7 @@ HOMARD_Gen_i::~HOMARD_Gen_i() } //============================================================================= /*! - * Ajoute le composant homard dans l etude si necessaire + * Ajoute le composant homard dans l etude si necessaire */ //============================================================================= void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy) @@ -71,7 +71,7 @@ void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy) ASSERT(!CORBA::is_nil(theStudy)); MESSAGE("addInStudy: current study ID = " << GetCurrentStudyID()); SALOMEDS::StudyBuilder_var myBuilder = theStudy->NewBuilder(); - + // Create SComponent labelled 'homard' if it doesn't already exit SALOMEDS::SComponent_var homardFather = theStudy->FindComponent(ComponentDataType()); if (CORBA::is_nil(homardFather)) @@ -81,15 +81,15 @@ void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy) bool aLocked = theStudy->GetProperties()->IsLocked(); if (aLocked) theStudy->GetProperties()->SetLocked(false); - + homardFather = myBuilder->NewComponent(ComponentDataType()); SALOMEDS::GenericAttribute_var anAttr = myBuilder->FindOrCreateAttribute(homardFather,"AttributeName"); SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); CORBA::Object_var objVarN = _NS->Resolve("/Kernel/ModulCatalog"); - SALOME_ModuleCatalog::ModuleCatalog_var Catalogue = + SALOME_ModuleCatalog::ModuleCatalog_var Catalogue = SALOME_ModuleCatalog::ModuleCatalog::_narrow(objVarN); SALOME_ModuleCatalog::Acomponent_var Comp = Catalogue->GetComponent(ComponentDataType()); - if (!Comp->_is_nil()) + if (!Comp->_is_nil()) { aName->SetValue(ComponentDataType()); } @@ -178,7 +178,7 @@ void HOMARD_Gen_i::AssociateCaseIter(const char* nomCas, const char* nomIter, co aStudyBuilder->NewCommand(); SALOMEDS::SObject_var newStudyIter = aStudyBuilder->NewObject(aCasSO); - PublishInStudyAttr(aStudyBuilder, newStudyIter, nomIter , labelIter, + PublishInStudyAttr(aStudyBuilder, newStudyIter, nomIter , labelIter, "iter_non_calculee.png", _orb->object_to_string(myIteration)) ; aStudyBuilder->CommitCommand(); @@ -215,17 +215,44 @@ void HOMARD_Gen_i::SetEtatIter(const char* nomIter, const bool EtatCalcul) }; int number = myIteration->GetNumber() ; - if ( number == 0 ) + if ( number == 0 ) PublishInStudyAttr(aStudyBuilder, aIterSO, NULL , NULL, "iter0.png", NULL) ; - else if (EtatCalcul) + else if (EtatCalcul) PublishInStudyAttr(aStudyBuilder, aIterSO, NULL, NULL, "iter_calculee.png", NULL) ; - else + else PublishInStudyAttr(aStudyBuilder, aIterSO, NULL, NULL, "iter_non_calculee.png", NULL) ; aStudyBuilder->CommitCommand(); } //===================================================================================== +void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName) +//===================================================================================== +{ + MESSAGE( "InvalideBoundary, BoundaryName = " << BoundaryName ); + HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName]; + if (CORBA::is_nil(myBoundary)) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid Boundary "; + throw SALOME::SALOME_Exception(es); + return ; + }; + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "No change is allowed in boundary. Ask for evolution."; + throw SALOME::SALOME_Exception(es); + return ; +/* HOMARD::listeHypo* maListe = myBoundary->GetHypo(); + int numberOfHypo = maListe->length(); + for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++) + { + std::string nomHypo = std::string((*maListe)[NumeHypo]); + InvalideHypo(nomHypo.c_str()); + }*/ +} +//===================================================================================== void HOMARD_Gen_i::InvalideZone(const char* ZoneName) //===================================================================================== { @@ -297,7 +324,7 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter) SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration))); SALOMEDS::ChildIterator_var aIter = myCurrentStudy->NewChildIterator(aIterSO); - for (; aIter->More(); aIter->Next()) + for (; aIter->More(); aIter->Next()) { SALOMEDS::SObject_var so = aIter->Value(); SALOMEDS::GenericAttribute_var anAttr; @@ -402,7 +429,7 @@ void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypot { SALOMEDS::SObject_var aHypObj = it->Value(); SALOMEDS::SObject_var ptrObj; - if (aHypObj->ReferencedObject(ptrObj)) + if (aHypObj->ReferencedObject(ptrObj)) { if (std::string(ptrObj->GetName()) == std::string(aZoneSO->GetName())) { @@ -472,7 +499,7 @@ void HOMARD_Gen_i::AssociateIterHypo(const char* nomIter, const char* nomHypo) aStudyBuilder->Addreference(aSubSO, aHypoSO); aStudyBuilder->CommitCommand(); - + myIteration->SetHypoName(nomHypo); myHypo->AddIteration(nomIter); }; @@ -520,7 +547,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* std::vector LesExtremes =GetBoundingBoxInMedFile(FileName); HOMARD::extrema_var aSeq = new HOMARD::extrema(); - if (LesExtremes.size()!=10) { return false; } + if (LesExtremes.size()!=10) { return false; } aSeq->length(10); for (int i =0; i< LesExtremes.size(); i++) aSeq[i]=LesExtremes[i]; @@ -862,7 +889,7 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration]; ASSERT(!CORBA::is_nil(myIteration)); -// on ne calcule pas l iteration 0 +// on ne calcule pas l iteration 0 int NumeIter = myIteration->GetNumber(); if ( NumeIter == 0 ) { @@ -1063,7 +1090,7 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM { codret = 0 ; }; - + // D.4. Les types de raffinement et de deraffinement // Les appels corba sont lourds, il vaut mieux les grouper @@ -1190,7 +1217,7 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM { const char* MeshName = myBoundary->GetMeshName() ; const char* MeshFile = myBoundary->GetMeshFile() ; - myDriver->TexteBoundaryDi( MeshName, MeshFile); + myDriver->TexteBoundaryDi( MeshName, MeshFile, GroupName); BoundaryOption = BoundaryOption*2 ; } else if (BoundaryType == 1) // Cas d un cylindre @@ -1297,7 +1324,7 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM SALOME::ExceptionStruct es; es.type = SALOME::BAD_PARAM; std::string text = "Error during the adaptation.\n" ; - try + try { ifstream fichier(MessFile.c_str(), ios::in); string ligne; @@ -1377,7 +1404,7 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, return aResultSO._retn(); }; //============================================================================= -SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishCaseInStudy(SALOMEDS::Study_ptr theStudy, +SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishCaseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Cas_ptr theObject, const char* theName) { @@ -1395,20 +1422,20 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishCaseInStudy(SALOMEDS::Study_ptr theSt } SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType()); - if (theFatherHomard->_is_nil()) + if (theFatherHomard->_is_nil()) { - MESSAGE("theFatherHomard->_is_nil()"); + MESSAGE("theFatherHomard->_is_nil()"); return aResultSO._retn(); } aResultSO = aStudyBuilder->NewObject(theFatherHomard); - PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "CasHomard", "cas_calcule.png", + PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "CasHomard", "cas_calcule.png", _orb->object_to_string(theObject) ) ; return aResultSO._retn(); } //============================================================================= -SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theStudy, +SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Zone_ptr theObject, const char* theName) { @@ -1416,18 +1443,18 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theSt SALOMEDS::SObject_var aResultSO; SALOMEDS::GenericAttribute_var anAttr; - if (CORBA::is_nil(theObject)) + if (CORBA::is_nil(theObject)) { MESSAGE("HOMARD_Gen_i.cxx::theObject->_is_nil()"); return aResultSO._retn(); } - if (theStudy->_is_nil()) + if (theStudy->_is_nil()) { MESSAGE("HOMARD_Gen_i.cxx::theStudy->_is_nil()"); return aResultSO._retn(); } SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType()); - if (theFatherHomard->_is_nil()) + if (theFatherHomard->_is_nil()) { MESSAGE("theFatherHomard->_is_nil()"); return aResultSO._retn(); @@ -1449,20 +1476,20 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theSt switch (ZoneType) { case 2 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", + { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", "boxdxyz_2.png", _orb->object_to_string(theObject) ) ; - break; + break; } case 4 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", + { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", "spherepoint_2.png", _orb->object_to_string(theObject) ) ; - break; + break; } } return aResultSO._retn(); } //============================================================================= -SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy, +SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Boundary_ptr theObject, const char* theName) { @@ -1496,24 +1523,24 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr t case 0 : { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryDiHomard", "mesh_tree_mesh.png", _orb->object_to_string(theObject)); - break; + break; } case 1 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "cylinderpointvector_2.png", + { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "cylinderpointvector_2.png", _orb->object_to_string(theObject)); - break; + break; } case 2 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "spherepoint_2.png", + { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "spherepoint_2.png", _orb->object_to_string(theObject)); - break; + break; } } return aResultSO._retn(); } //============================================================================= -SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy, +SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Hypothesis_ptr theObject, const char* theName) { @@ -1524,7 +1551,7 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr // On recupere le module pere dans l etude // On ajoute la categorie des hypotheses dans l etude si necessaire SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType()); - if (theFatherHomard->_is_nil()) + if (theFatherHomard->_is_nil()) { MESSAGE("theFatherHomard->_is_nil()"); return aResultSO._retn(); @@ -1672,7 +1699,7 @@ HOMARD::listeIterations* HOMARD_Gen_i::GetAllIterations() ret->length(myContextMap[GetCurrentStudyID()]._mesIterations.size()); std::map::const_iterator it; int i = 0; - for (it = myContextMap[GetCurrentStudyID()]._mesIterations.begin(); + for (it = myContextMap[GetCurrentStudyID()]._mesIterations.begin(); it != myContextMap[GetCurrentStudyID()]._mesIterations.end(); it++) { ret[i++] = CORBA::string_dup((*it).first.c_str()); @@ -1741,7 +1768,7 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy { // On verifie que le fichier n est pas deja publie SALOMEDS::ChildIterator_var aIter = myCurrentStudy->NewChildIterator(aSmeshSO); - for (; aIter->More(); aIter->Next()) + for (; aIter->More(); aIter->Next()) { SALOMEDS::SObject_var aSO = aIter->Value(); SALOMEDS::GenericAttribute_var aGAttr; @@ -1771,7 +1798,7 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy // On met a jour les attributs AttributeExternalFileDef et AttributePixMap SMESH::mesh_array* mesMaillages=aSmeshEngine->CreateMeshesFromMED(NomFich, theStatus); - for (int i = 0; i < mesMaillages->length(); i++) + for (int i = 0; i < mesMaillages->length(); i++) { MESSAGE( ". Mise a jour des attributs"); SMESH::SMESH_Mesh_var monMaillage= (*mesMaillages)[i]; @@ -1814,7 +1841,7 @@ void HOMARD_Gen_i::DeleteResultInSmesh(const char* NomFich, const char* MeshName // On verifie que le fichier est deja publie SALOMEDS::StudyBuilder_var myBuilder = myCurrentStudy->NewBuilder(); SALOMEDS::ChildIterator_var aIter = myCurrentStudy->NewChildIterator(aSmeshSO); - for (; aIter->More(); aIter->Next()) + for (; aIter->More(); aIter->Next()) { SALOMEDS::SObject_var aSO = aIter->Value(); SALOMEDS::GenericAttribute_var aGAttr; @@ -2117,7 +2144,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, f.close(); // Remove temporary files created from the stream - if (!isMultiFile) + if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(tmpDir.c_str(), aFileSeq.in(), true); return true; @@ -2202,7 +2229,7 @@ char* HOMARD_Gen_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject, }; //=========================================================================== -bool HOMARD_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR) +bool HOMARD_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR) { if(CORBA::is_nil(myCurrentStudy)) return false; @@ -2232,7 +2259,7 @@ bool HOMARD_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR) }; //=========================================================================== -CORBA::Boolean HOMARD_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) +CORBA::Boolean HOMARD_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) { // No Copy/Paste support return false; @@ -2371,8 +2398,8 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, aScript += "\n# ====================="; } std::map::const_iterator it_zone; - for ( it_zone = myContextMap[GetCurrentStudyID()]._mesZones.begin(); - it_zone != myContextMap[GetCurrentStudyID()]._mesZones.end(); ++it_zone) + for ( it_zone = myContextMap[GetCurrentStudyID()]._mesZones.begin(); + it_zone != myContextMap[GetCurrentStudyID()]._mesZones.end(); ++it_zone) { HOMARD::HOMARD_Zone_var maZone = (*it_zone).second; CORBA::String_var dumpCorbaZone = maZone->GetDumpPython(); @@ -2415,7 +2442,7 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, std::string mesh0 = cMesh0.in(); CORBA::String_var cMeshName0= myIteration->GetMeshName(); std::string meshName0 = cMeshName0.in(); - dumpCas += meshName0 + std::string("', '")+ mesh0 + std::string("')\n"); + dumpCas += meshName0 + std::string("', '")+ mesh0 + std::string("')\n"); CORBA::String_var dumpCorbaCase = myCase->GetDumpPython(); std::string dumpCas2= dumpCorbaCase.in(); @@ -2426,8 +2453,8 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, aScript += "#\n# Creation of the iterations" ; aScript += "\n# =========================="; std::map::const_iterator it_iter; - for (it_iter = myContextMap[GetCurrentStudyID()]._mesIterations.begin(); - it_iter != myContextMap[GetCurrentStudyID()]._mesIterations.end(); ++it_iter) + for (it_iter = myContextMap[GetCurrentStudyID()]._mesIterations.begin(); + it_iter != myContextMap[GetCurrentStudyID()]._mesIterations.end(); ++it_iter) { HOMARD::HOMARD_Iteration_var aIter = (*it_iter).second; CORBA::String_var dumpCorbaIter = aIter->GetDumpPython(); @@ -2450,9 +2477,9 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, extern "C" { PortableServer::ObjectId* HOMARDEngine_factory(CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, + PortableServer::POA_ptr poa, PortableServer::ObjectId* contId, - const char* instanceName, + const char* instanceName, const char* interfaceName) { MESSAGE("PortableServer::ObjectId* HOMARDEngine_factory()"); diff --git a/src/HOMARD_I/HOMARD_Gen_i.hxx b/src/HOMARD_I/HOMARD_Gen_i.hxx index b6dff452..6f44d12b 100644 --- a/src/HOMARD_I/HOMARD_Gen_i.hxx +++ b/src/HOMARD_I/HOMARD_Gen_i.hxx @@ -23,15 +23,15 @@ class HOMARD_Gen_i: public virtual Engines_Component_i, public virtual POA_HOMARD::HOMARD_Gen -{ +{ public: HOMARD_Gen_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, - PortableServer::ObjectId* contId, - const char* instanceName, + PortableServer::ObjectId* contId, + const char* instanceName, const char* interfaceName); virtual ~HOMARD_Gen_i(); - + SALOMEDS::Study_ptr GetCurrentStudy(); void SetCurrentStudy(SALOMEDS::Study_ptr theStudy); @@ -57,6 +57,7 @@ public: void AssociateHypoZone(const char* nomZone, const char* nomHypothesis); void DissociateHypoZone(const char* nomZone, const char* nomHypothesis); + void InvalideBoundary(const char* nomBoundary); void InvalideZone(const char* nomZone); void InvalideHypo(const char* nomHypo); void InvalideIter(const char* nomIter); @@ -70,10 +71,10 @@ public: HOMARD::listeBoundarys* GetAllBoundarys(); char* GetCaseName(const char* nomIteration); - + CORBA::Boolean Compute(const char* nomIteration, CORBA::Long etatMenage); CORBA::Boolean VerifieDir(const char* nomDir); - + void PublishResultInSmesh(const char* NomFich, CORBA::Long IconeType); void DeleteResultInSmesh(const char* NomFich, const char* MeshName); void PublishFileUnderIteration(const char* NomIter, const char* NomFich, @@ -87,11 +88,11 @@ public: virtual SALOMEDS::TMPFile* Save(SALOMEDS::SComponent_ptr theComponent, const char* theURL, bool isMultiFile); - + virtual SALOMEDS::TMPFile* SaveASCII(SALOMEDS::SComponent_ptr theComponent, const char* theURL, bool isMultiFile); - + virtual bool Load(SALOMEDS::SComponent_ptr theComponent, const SALOMEDS::TMPFile& theStream, const char* theURL, @@ -103,9 +104,9 @@ public: bool isMultiFile); virtual void Close(SALOMEDS::SComponent_ptr IORSComponent); - + virtual char* ComponentDataType(); - + virtual char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject, const char* IORString, CORBA::Boolean isMultiFile, @@ -115,7 +116,7 @@ public: const char* aLocalPersistentID, CORBA::Boolean isMultiFile, CORBA::Boolean isASCII); - + // --> Data publishing virtual bool CanPublishInStudy(CORBA::Object_ptr theIOR); @@ -126,7 +127,7 @@ public: // --> Copy/Paste virtual CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject); - + virtual SALOMEDS::TMPFile* CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID); @@ -141,7 +142,7 @@ private: void addInStudy(SALOMEDS::Study_ptr theStudy); SALOMEDS::SObject_ptr PublishCaseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Cas_ptr theObject, const char* theName); - + SALOMEDS::SObject_ptr PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder, HOMARD::HOMARD_Hypothesis_ptr theObject, const char* theName); @@ -177,7 +178,7 @@ private: std::map _idmap; }; typedef std::map ContextMap; - + ::HOMARD_Gen* myHomard; SALOMEDS::Study_var myCurrentStudy; ContextMap myContextMap; diff --git a/tests/Makefile.am b/tests/Makefile.am index ed66236a..6fb83c0a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -34,4 +34,9 @@ dist_salomeres_DATA = \ test_2.py \ test_2.00.med \ test_2.fr.med \ - test_2.apad.03.bilan + test_2.apad.03.bilan \ + test_3.pdf \ + test_3.py \ + test_3.00.med \ + test_3.fr.med \ + test_3.apad.02.bilan diff --git a/tests/test_1.odt b/tests/test_1.odt index 578a8f13..68551007 100644 Binary files a/tests/test_1.odt and b/tests/test_1.odt differ diff --git a/tests/test_1.pdf b/tests/test_1.pdf index 1aaaa2cd..eea1b0cc 100644 Binary files a/tests/test_1.pdf and b/tests/test_1.pdf differ diff --git a/tests/test_1.py b/tests/test_1.py index abbd6d93..c01a9597 100644 --- a/tests/test_1.py +++ b/tests/test_1.py @@ -36,22 +36,16 @@ Copyright EDF-R&D 2010 # # Creation of the zones # ===================== -# Creation of the box Zone_1 +# Creation of the box Zone_1 Zone_1 = homard.CreateZone('Zone_1', 2) Zone_1.SetBox(-0.01, 1.01, -0.01, 0.4, -0.01, 0.6) -# Creation of the sphere Zone_2 +# Creation of the sphere Zone_2 Zone_2 = homard.CreateZone('Zone_2', 4) Zone_2.SetSphere(0.5, 0.6, 0.7, 0.75) # # Creation of the hypotheses # ========================== -# Creation of the hypothesis Zones_1_et_2 - Zones_1_et_2 = homard.CreateHypothesis('Zones_1_et_2') - Zones_1_et_2.SetAdapRefinUnRef(0, 1, 0) - homard.AssociateHypoZone('Zone_1', 'Zones_1_et_2') - homard.AssociateHypoZone('Zone_2', 'Zones_1_et_2') - # Creation of the hypothesis a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM = homard.CreateHypothesis('a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM') a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetAdapRefinUnRef(1, 1, 0) @@ -59,6 +53,14 @@ Copyright EDF-R&D 2010 a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetUseComp(0) a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddComp('ERREST') a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetRefinThr(3, 10.1) + a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetTypeFieldInterp(2) + a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddFieldInterp('RESU____DEPL____________________') + a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddFieldInterp('RESU____ERRE_ELEM_SIGM__________') +# Creation of the hypothesis Zones_1_et_2 + Zones_1_et_2 = homard.CreateHypothesis('Zones_1_et_2') + Zones_1_et_2.SetAdapRefinUnRef(0, 1, 0) + homard.AssociateHypoZone('Zone_1', 'Zones_1_et_2') + homard.AssociateHypoZone('Zone_2', 'Zones_1_et_2') # # Creation of the cases # ===================== @@ -74,7 +76,7 @@ Copyright EDF-R&D 2010 I1.SetMeshName('M1') I1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med')) I1.SetFieldFile(os.path.join(Rep_Test, Test_Name + '.00.med')) - I1.SetTimeStepRank( 1, 1) + I1.SetTimeStepRank(1, 1) homard.AssociateIterHypo('I1', 'a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM') result1 = homard.Compute('I1', 1) @@ -83,7 +85,7 @@ Copyright EDF-R&D 2010 I2.SetMeshName('M2') I2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med')) I2.SetFieldFile(os.path.join(Rep_Test, Test_Name + '.01.med')) - I2.SetTimeStepRank( 1, 1) + I2.SetTimeStepRank(1, 1) homard.AssociateIterHypo('I2', 'a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM') result2 = homard.Compute('I2', 1) @@ -116,12 +118,14 @@ test_file_suff = "apad.0" + s_iter_test_file + ".bilan" rep_test_file = "I0" + s_iter_test_file # test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff) +mess_error_ref = "\nReference file: " + test_file try : file = open (test_file, "r") mess_ref = file.readlines() file.close() except : - raise Exception('Reference file does not exist.') + mess_error = mess_error_ref + "\nThis file does not exist.\n" + raise Exception(mess_error) sys.exit(2) # test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) @@ -130,12 +134,16 @@ if os.path.isfile (test_file) : mess = file.readlines() file.close() else : - raise Exception('Result file does not exist.') + mess_error = "\nResult file: " + test_file + mess_error += "\nThis file does not exist.\n" + raise Exception(mess_error) sys.exit(2) nblign = len(mess_ref) if ( len(mess) != nblign ): - raise Exception('The number of lines of the files are not the same.') + mess_error = mess_error_ref + "\nResult file: " + test_file + mess_error += "\nThe number of lines of the files are not the same.\n" + raise Exception(mess_error) sys.exit(2) for num in range(nblign) : diff --git a/tests/test_2.odt b/tests/test_2.odt index 76858ccb..bd0dd52b 100644 Binary files a/tests/test_2.odt and b/tests/test_2.odt differ diff --git a/tests/test_2.pdf b/tests/test_2.pdf index 62a67c0b..de07fe71 100644 Binary files a/tests/test_2.pdf and b/tests/test_2.pdf differ diff --git a/tests/test_2.png b/tests/test_2.png index 1762c1b3..dced743d 100644 Binary files a/tests/test_2.png and b/tests/test_2.png differ diff --git a/tests/test_2.py b/tests/test_2.py index 5ff9f386..9b87d93b 100644 --- a/tests/test_2.py +++ b/tests/test_2.py @@ -36,7 +36,7 @@ Copyright EDF-R&D 2010 # # Creation of the boundaries # ========================== -# Creation of the boundaries Boundary_1 +# Creation of the discrete boundary Boundary_1 Boundary_1 = homard.CreateBoundary('internal_boundary', 0) Boundary_1.SetMeshFile(os.path.join(Rep_Test, Test_Name + '.fr.med')) Boundary_1.SetMeshName('plaque') @@ -46,13 +46,13 @@ Copyright EDF-R&D 2010 # Creation of the hypothesis Hypo_1 Hypo_1 = homard.CreateHypothesis('Hypo_1') Hypo_1.SetAdapRefinUnRef(-1, 1, 0) - Hypo_1.AddGroup('BANDE ') - Hypo_1.AddGroup('EG ') + Hypo_1.AddGroup('EG') + Hypo_1.AddGroup('BANDE') # Creation of the hypothesis Hypo_2 Hypo_2 = homard.CreateHypothesis('Hypo_2') Hypo_2.SetAdapRefinUnRef(-1, 1, 0) - Hypo_2.AddGroup('M_D ') + Hypo_2.AddGroup('M_D') # # Creation of the cases # ===================== @@ -60,7 +60,7 @@ Copyright EDF-R&D 2010 Case_1 = homard.CreateCase('Case_1', 'PLAQUE_0', os.path.join(Rep_Test, Test_Name + '.00.med')) Case_1.SetDirName(Rep_Test_Resu) Case_1.SetConfType(1) - Case_1.AddBoundaryGroup( 'internal_boundary', ' ' ) + Case_1.AddBoundaryGroup('internal_boundary', '') # # Creation of the iterations # ========================== @@ -107,12 +107,14 @@ test_file_suff = "apad.0" + s_iter_test_file + ".bilan" rep_test_file = "I0" + s_iter_test_file # test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff) +mess_error_ref = "\nReference file: " + test_file try : file = open (test_file, "r") mess_ref = file.readlines() file.close() except : - raise Exception('Reference file does not exist.') + mess_error = mess_error_ref + "\nThis file does not exist.\n" + raise Exception(mess_error) sys.exit(2) # test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) @@ -121,12 +123,16 @@ if os.path.isfile (test_file) : mess = file.readlines() file.close() else : - raise Exception('Result file does not exist.') + mess_error = "\nResult file: " + test_file + mess_error += "\nThis file does not exist.\n" + raise Exception(mess_error) sys.exit(2) nblign = len(mess_ref) if ( len(mess) != nblign ): - raise Exception('The number of lines of the files are not the same.') + mess_error = mess_error_ref + "\nResult file: " + test_file + mess_error += "\nThe number of lines of the files are not the same.\n" + raise Exception(mess_error) sys.exit(2) for num in range(nblign) : diff --git a/tests/test_3.00.med b/tests/test_3.00.med new file mode 100644 index 00000000..0b41f328 Binary files /dev/null and b/tests/test_3.00.med differ diff --git a/tests/test_3.apad.02.bilan b/tests/test_3.apad.02.bilan new file mode 100644 index 00000000..c89aabd3 --- /dev/null +++ b/tests/test_3.apad.02.bilan @@ -0,0 +1,62 @@ + + +ANALYSE DU MAILLAGE +=================== + + Maillage apres adaptation + MOYEU + Date de creation : mardi 1 fevrier 2011 a 17 h 21 mn 12 s + Dimension : 3 + Degre : 1 + C'est un maillage obtenu apres 2 adaptations. + Le niveau minimum actif est : 2 + Le niveau maximum atteint est : 2 + + Direction | Unite | Minimum | Maximum + --------------------------------------------------------------- + x | m | -36.603 | 536.60 + y | m | -75.000 | 125.00 + z | m | -125.00 | 75.000 + + + NOMBRE D'ENTITES DU CALCUL + ========================== + + + ************************************************************ + * Noeuds * + ************************************************************ + * Nombre total * 3710 * + ************************************************************ + + ************************************************************ + * Segments * + ************************************************************ + * Nombre total * 156 * + * . dont aretes isolees * 0 * + * . dont aretes de bord de regions 2D * 0 * + * . dont aretes internes aux faces/volumes * 156 * + ************************************************************ + + ************************************************************ + * Triangles * + ************************************************************ + * Nombre total * 3232 * + * . dont triangles de regions 2D * 0 * + * . dont triangles de bord * 3232 * + * . dont triangles internes aux volumes * 0 * + ************************************************************ + * . du niveau 0 * 0 * + * . du niveau 1 * 0 * + * . du niveau 2 * 3232 * + ************************************************************ + + ************************************************************ + * Tetraedres * + ************************************************************ + * Nombre total * 17280 * + ************************************************************ + * . du niveau 0 * 0 * + * . du niveau 1 * 0 * + * . du niveau 2 * 17280 * + ************************************************************ diff --git a/tests/test_3.fr.med b/tests/test_3.fr.med new file mode 100644 index 00000000..657ab6d2 Binary files /dev/null and b/tests/test_3.fr.med differ diff --git a/tests/test_3.odt b/tests/test_3.odt new file mode 100644 index 00000000..002d85a1 Binary files /dev/null and b/tests/test_3.odt differ diff --git a/tests/test_3.pdf b/tests/test_3.pdf new file mode 100644 index 00000000..26dc2cac Binary files /dev/null and b/tests/test_3.pdf differ diff --git a/tests/test_3.png b/tests/test_3.png new file mode 100644 index 00000000..19c94e8a Binary files /dev/null and b/tests/test_3.png differ diff --git a/tests/test_3.py b/tests/test_3.py new file mode 100644 index 00000000..c6c5ce0f --- /dev/null +++ b/tests/test_3.py @@ -0,0 +1,156 @@ +# -*- coding: iso-8859-1 -*- +""" +Python script for HOMARD +Copyright EDF-R&D 2011 +Test test_3 +""" +__revision__ = "V1.0" + +###################################################################################### +Test_Name = "test_3" +n_iter_test_file = 2 +###################################################################################### +import os +import sys +import tempfile +import HOMARD +import salome +# +pathHomard=os.getenv('HOMARD_ROOT_DIR') +Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard") +Rep_Test_Resu = tempfile.mktemp() +os.mkdir(Rep_Test_Resu) + +salome.salome_init() +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1)) +ipar.append("AP_MODULES_LIST", "Homard") +###################################################################################### +###################################################################################### +def homard_exec(theStudy): + """ +Python script for HOMARD +Copyright EDF-R&D 2010 + """ + homard.SetCurrentStudy(theStudy) +# +# Creation of the boundaries +# ========================== +# Creation of the discrete boundary + Boundary_1 = homard.CreateBoundary('courbes', 0) + Boundary_1.SetMeshFile(os.path.join(Rep_Test, Test_Name + '.fr.med')) + Boundary_1.SetMeshName('COURBES') +# +# Creation of the external cylinder + Boundary_2 = homard.CreateBoundary('cyl_ext', 1) + Boundary_2.SetCylinder(50.0, 25., -25., 1., 0., 0., 100.) +# +# Creation of the internal cylinder + Boundary_3 = homard.CreateBoundary('cyl_int', 1) + Boundary_3.SetCylinder(50.0, 25., -25., 1., 0., 0., 50.) +# +# Creation of the first sphere + Boundary_4 = homard.CreateBoundary('sphere_1', 2) + Boundary_4.SetSphere(50.0, 25., -25., 100.) +# +# Creation of the second sphere + Boundary_5 = homard.CreateBoundary('sphere_2', 2) + Boundary_5.SetSphere(450.0, 25., -25., 100.) +# +# Creation of the hypotheses +# ========================== +# Uniform refinement + Hypo = homard.CreateHypothesis('Hypo') + Hypo.SetAdapRefinUnRef(-1, 1, 0) +# +# Creation of the cases +# ===================== +# Creation of the case Case_1 + Case_1 = homard.CreateCase('Case_1', 'MOYEU', os.path.join(Rep_Test, Test_Name + '.00.med')) + Case_1.SetDirName(Rep_Test_Resu) + Case_1.SetConfType(1) + Case_1.AddBoundaryGroup('courbes', '') + Case_1.AddBoundaryGroup('cyl_ext', 'EXT') + Case_1.AddBoundaryGroup('cyl_int', 'INT') + Case_1.AddBoundaryGroup('sphere_1', 'END_1') + Case_1.AddBoundaryGroup('sphere_2', 'END_2') +# +# Creation of the iterations +# ========================== +# Creation of the iteration Iter_1 + Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name() ) + Iter_1.SetMeshName('MOYEU_1') + Iter_1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med')) + homard.AssociateIterHypo('Iter_1', 'Hypo') + result1 = homard.Compute('Iter_1', 1) + +# Creation of the iteration Iter_2 + Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1') + Iter_2.SetMeshName('MOYEU_2') + Iter_2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med')) + homard.AssociateIterHypo('Iter_2', 'Hypo') + result2 = homard.Compute('Iter_2', 1) + + return result1*result2 + +###################################################################################### + +homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD') +# +# Exec of HOMARD-SALOME +# +try : + result=homard_exec(salome.myStudy) + if (result != True): + raise Exception('Pb in homard_exec') +except : + raise Exception('Pb in homard_exec') + sys.exit(1) +# +# Test of the result +# +s_iter_test_file = str(n_iter_test_file) +test_file_suff = "apad.0" + s_iter_test_file + ".bilan" +rep_test_file = "I0" + s_iter_test_file +# +test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff) +mess_error_ref = "\nReference file: " + test_file +try : + file = open (test_file, "r") + mess_ref = file.readlines() + file.close() +except : + mess_error = mess_error_ref + "\nThis file does not exist.\n" + raise Exception(mess_error) + sys.exit(2) +# +test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff) +if os.path.isfile (test_file) : + file = open (test_file, "r") + mess = file.readlines() + file.close() +else : + mess_error = "\nResult file: " + test_file + mess_error += "\nThis file does not exist.\n" + raise Exception(mess_error) + sys.exit(2) + +nblign = len(mess_ref) +if ( len(mess) != nblign ): + mess_error = mess_error_ref + "\nResult file: " + test_file + mess_error += "\nThe number of lines of the files are not the same.\n" + raise Exception(mess_error) + sys.exit(2) + +for num in range(nblign) : + if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) : + message_erreur = "\nRefe : " + mess_ref[num] + message_erreur += "Test : " + mess[num][:-1] + message_erreur += "\nThe test is different from the reference." + raise Exception(message_erreur) + sys.exit(10) +# +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(1) + iparameters.getSession().restoreVisualState(1) +