]> SALOME platform Git repositories - modules/homard.git/commitdiff
Salome HOME
version V6_main 20110308
authorprascle <prascle>
Tue, 22 Mar 2011 09:17:38 +0000 (09:17 +0000)
committerprascle <prascle>
Tue, 22 Mar 2011 09:17:38 +0000 (09:17 +0000)
104 files changed:
clean_configure
configure.ac
doc/conf.py
doc/files/tutorial_1.py
doc/files/tutorial_3.py
doc/files/tutorial_4.00.med.gz [new file with mode: 0644]
doc/files/tutorial_4.fr.med.gz [new file with mode: 0644]
doc/files/tutorial_4.py [new file with mode: 0644]
doc/glossaire.rst
doc/gui_create_boundary.rst [new file with mode: 0644]
doc/gui_create_case.rst
doc/gui_create_hypothese.rst
doc/gui_create_iteration.rst
doc/gui_create_zone.rst
doc/gui_usage.rst
doc/images/create_boundary_1.png [new file with mode: 0644]
doc/images/create_boundary_an_1.png [new file with mode: 0644]
doc/images/create_boundary_an_2.png [new file with mode: 0644]
doc/images/create_boundary_an_3.png [new file with mode: 0644]
doc/images/create_boundary_an_4.png [new file with mode: 0644]
doc/images/create_boundary_an_cy.png [new file with mode: 0644]
doc/images/create_boundary_an_sp.png [new file with mode: 0644]
doc/images/create_boundary_di_1.png [new file with mode: 0644]
doc/images/create_boundary_di_2.png [new file with mode: 0644]
doc/images/create_boundary_di_3.png [new file with mode: 0644]
doc/images/create_case_1.png
doc/images/create_case_5.png
doc/images/create_case_6.png [new file with mode: 0644]
doc/images/create_hypothese_2.png
doc/images/create_hypothese_ch_1.png [new file with mode: 0644]
doc/images/create_hypothese_ch_2.png [new file with mode: 0644]
doc/images/create_hypothese_ch_3.png [new file with mode: 0644]
doc/images/create_hypothese_ch_4.png [new file with mode: 0644]
doc/images/create_hypothese_ch_5.png [new file with mode: 0644]
doc/images/create_hypothese_gr_1.png [new file with mode: 0644]
doc/images/create_hypothese_gr_2.png [new file with mode: 0644]
doc/images/create_hypothese_zo_1.png [new file with mode: 0644]
doc/images/create_hypothese_zo_2.png [new file with mode: 0644]
doc/images/create_iteration_1.png
doc/images/create_iteration_2.png
doc/images/create_iteration_3.png
doc/images/create_iteration_4.png
doc/images/create_iteration_5.png
doc/images/create_iteration_6.png
doc/images/create_iteration_7.png [new file with mode: 0644]
doc/index.rst
doc/intro.rst
doc/tui_create_boundary.rst [new file with mode: 0644]
doc/tui_create_case.rst
doc/tui_create_hypothese.rst
doc/tui_create_iteration.rst
doc/tui_create_zone.rst
doc/tui_homard.rst
doc/tui_usage.rst
doc/tutorials.rst
idl/HOMARD_Gen.idl
idl/Makefile.am
src/HOMARD/HOMARD_Boundary.cxx
src/HOMARD/HOMARD_Hypothesis.cxx
src/HOMARD/HomardDriver.cxx
src/HOMARD/HomardDriver.hxx
src/HOMARDGUI/CreateBoundaryAn.h [new file with mode: 0644]
src/HOMARDGUI/CreateBoundaryAn.ui [new file with mode: 0644]
src/HOMARDGUI/CreateCase.h
src/HOMARDGUI/CreateCase.ui
src/HOMARDGUI/CreateHypothesis.h
src/HOMARDGUI/EditFile.h
src/HOMARDGUI/EditFile.ui
src/HOMARDGUI/HOMARDGUI.cxx
src/HOMARDGUI/HOMARDGUI_Utils.cxx
src/HOMARDGUI/HOMARDGUI_Utils.h
src/HOMARDGUI/Makefile.am
src/HOMARDGUI/MonCreateBoundaryAn.cxx [new file with mode: 0644]
src/HOMARDGUI/MonCreateBoundaryAn.h [new file with mode: 0644]
src/HOMARDGUI/MonCreateBoundaryDi.cxx
src/HOMARDGUI/MonCreateCase.cxx
src/HOMARDGUI/MonCreateCase.h
src/HOMARDGUI/MonCreateHypothesis.cxx
src/HOMARDGUI/MonCreateListGroup.cxx
src/HOMARDGUI/MonCreateZone.cxx
src/HOMARDGUI/MonEditBoundaryAn.cxx [new file with mode: 0644]
src/HOMARDGUI/MonEditBoundaryAn.h [new file with mode: 0644]
src/HOMARDGUI/MonEditCase.cxx
src/HOMARDGUI/MonEditFile.cxx
src/HOMARDGUI/MonEditFile.h
src/HOMARDGUI/MonEditHypothesis.cxx
src/HOMARDGUI/MonEditZone.cxx
src/HOMARD_I/HOMARD_Gen_i.cxx
src/HOMARD_I/HOMARD_Gen_i.hxx
tests/Makefile.am
tests/test_1.odt
tests/test_1.pdf
tests/test_1.py
tests/test_2.odt
tests/test_2.pdf
tests/test_2.png
tests/test_2.py
tests/test_3.00.med [new file with mode: 0644]
tests/test_3.apad.02.bilan [new file with mode: 0644]
tests/test_3.fr.med [new file with mode: 0644]
tests/test_3.odt [new file with mode: 0644]
tests/test_3.pdf [new file with mode: 0644]
tests/test_3.png [new file with mode: 0644]
tests/test_3.py [new file with mode: 0644]

index 6ebb5297eb247e1dc4f874cb57452aa51d002ab4..1f84207bdad0191ed0b9c46aa2e5c313afd448e7 100755 (executable)
 #
 #  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
index 90e8b1692641a893a5da6646f19c93daa02b2152..178c51c38cbd682165cec9dcfdfbf80dca1d70ad 100644 (file)
@@ -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
index ca7e356f1ed49dccc3ff1eb250dbd64ce6592859..2b658f9b76ead92c2e01004eba3a62bd9a7d61c7 100644 (file)
@@ -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.
index 607f72c0704a25a59505196dc51455ff34caefc5..fb6be922d4e41811eb3438328c49c1bc58faa68c 100644 (file)
@@ -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)
 #
index c9f3cd16f3866bbede0c36c1d9d65d66174190e1..34a514129c8c04a0a6fa75fd6763582c15579cdf 100644 (file)
@@ -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 (file)
index 0000000..eacc498
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 (file)
index 0000000..1ebca81
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 (file)
index 0000000..1d9783c
--- /dev/null
@@ -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)
index 1e44872538e1fe454753a538e807f78d697cf53e..bd5469f3e91384d937fd071ec433a3df6f4dbfc6 100644 (file)
@@ -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 (file)
index 0000000..3268897
--- /dev/null
@@ -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
+
+
+
index 88b3abc65ecac18ed00753cfb94f759c214874e8..7ebf7c87e6a2601f8ea2eb3c53f2f7588467b342 100644 (file)
@@ -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
+
 
index c3e5c3d5419c8dc0b04a6e063106ed6da454a11a..dfd894f927c4cb9af208ecd66839df5e3aa8a094 100644 (file)
@@ -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
 
 
index 6d0675703d029635d354f8368221c64ddd3554b1..5f4c83d1226fb7ebcee3d7f09c5c832a2bd6949d 100644 (file)
@@ -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
+
 
 
index 083438396e3b045b30be69734f464255e8316d18..e178002f36469fbe9680f965305e522caa71faf8 100644 (file)
@@ -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.
 
 
 
index e7a58f8d64b4ec3b61b40842b08e20a9c6f1d2f0..cf162a2a1c0781d6a8a82c9651c6caaa5fd46136 100644 (file)
@@ -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 (file)
index 0000000..4416bba
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 (file)
index 0000000..a148efb
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 (file)
index 0000000..27d70ef
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 (file)
index 0000000..129868e
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 (file)
index 0000000..7229a76
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 (file)
index 0000000..4b8e648
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 (file)
index 0000000..5e78c78
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 (file)
index 0000000..5ad7b25
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 (file)
index 0000000..9501528
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 (file)
index 0000000..5b548dd
Binary files /dev/null and b/doc/images/create_boundary_di_3.png differ
index c9c88c52f9eaccda851e04e44f0b33d2926209fb..9c4207509dbe4e49cae077264466f5984e4ca28c 100644 (file)
Binary files a/doc/images/create_case_1.png and b/doc/images/create_case_1.png differ
index e607d9b41e8049b21a81777aad88cfefcb73fd9e..239e4b95ff9be64528c75dfc4d3cf95f646f43b8 100644 (file)
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 (file)
index 0000000..e607d9b
Binary files /dev/null and b/doc/images/create_case_6.png differ
index d5a7ee220a3cb9990eb61cf146ec98e7f4bc1133..cdcb199e5637ef05266968c57a92e6efe61ffea9 100644 (file)
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 (file)
index 0000000..6478cb0
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 (file)
index 0000000..96a94cf
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 (file)
index 0000000..bed6fce
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 (file)
index 0000000..18fbc58
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 (file)
index 0000000..290bb99
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 (file)
index 0000000..1bfd0b6
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 (file)
index 0000000..615dba2
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 (file)
index 0000000..d5a7ee2
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 (file)
index 0000000..d8b6ecd
Binary files /dev/null and b/doc/images/create_hypothese_zo_2.png differ
index 3160a9acd2bb82c6cb298972b1bb871d6477a9f4..4d37f73fc72fb5107b5ab1754293d9015afc8dc9 100644 (file)
Binary files a/doc/images/create_iteration_1.png and b/doc/images/create_iteration_1.png differ
index f0b4d5aeee4049b0531358d8ac71ab7c023cc448..b0cb75363e78a138893fdf8daddde7971ae94c36 100644 (file)
Binary files a/doc/images/create_iteration_2.png and b/doc/images/create_iteration_2.png differ
index 414c6db65d1ba04a510321d52c6327e1590d5f7e..c6971c9a7adec788fa65cef1831858a54434c18b 100644 (file)
Binary files a/doc/images/create_iteration_3.png and b/doc/images/create_iteration_3.png differ
index 6a277af642d7ea247fb13f3925100e1b8e07912e..f0b4d5aeee4049b0531358d8ac71ab7c023cc448 100644 (file)
Binary files a/doc/images/create_iteration_4.png and b/doc/images/create_iteration_4.png differ
index 51db52b5f1257b077282aba8512699c499d7f879..414c6db65d1ba04a510321d52c6327e1590d5f7e 100644 (file)
Binary files a/doc/images/create_iteration_5.png and b/doc/images/create_iteration_5.png differ
index cdcb199e5637ef05266968c57a92e6efe61ffea9..51db52b5f1257b077282aba8512699c499d7f879 100644 (file)
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 (file)
index 0000000..cdcb199
Binary files /dev/null and b/doc/images/create_iteration_7.png differ
index bd9da0f29eca82443454322bce10af3bf883f00e..7589e93aeaf5925b846e46ea719fbe54450cfd35 100644 (file)
@@ -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::
index a526864a5cc8068d55687421b6bcf0dc4d39436e..a510bb8d37b5988a3b4cf9343223e0be84b58300 100644 (file)
@@ -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â\80\99adaptation 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â\80\99indicateur dâ\80\99erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de lâ\80\99indicateur 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 <files/HOMARD_0.pdf>`.
+  Pour une description plus complète, voir :download:`Description générale de HOMARD <files/HOMARD_0.pdf>`.
diff --git a/doc/tui_create_boundary.rst b/doc/tui_create_boundary.rst
new file mode 100644 (file)
index 0000000..e116b94
--- /dev/null
@@ -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.)
+
+
index 588c05c99dca187273db41c0075bb8a1ad1dd69d..8750be31978a672beb85723b896cae984910231c 100644 (file)
@@ -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' )
 
 
 
index 29dfe9837a83760fbde4282d726a96540fd52a6a..4f44a4ae5d10cc4067b301cd99f83dbfc723b339 100644 (file)
@@ -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.)
index 45f800694157086d1b13b67da10ad0e46f565356..f09fc5c427c493ba1f03c1a15ea9415ce19b2413 100644 (file)
@@ -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")
index e5e34af5f94909bdc56543f2c2341f301282f42a..98c985a178ffa8f6eed8bb68f448597de4b4a8dd 100644 (file)
@@ -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)
 
 
index d2ef16f3d91235872f666171edd41574b88682f5..29eec9d79799d35f7c0fe4206fe1bce26777089d 100644 (file)
@@ -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)
index 195b2581de948b443334692ab2589ca605ada920..fec8871ef96020a7fa3d7240837c52b653ef18b6 100644 (file)
@@ -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
index 653ac99dd9712413ae4b919d8697f4cd81caf68f..b28733bc0f6af61907a23d8d4c2340780fa354ac 100644 (file)
@@ -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<files/tutorial_1.00.med.gz>`
   * :download:`commandes python<files/tutorial_1.py>`
@@ -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<files/tutorial_2.00.med.gz>`
   * :download:`commandes python<files/tutorial_2.py>`
@@ -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<files/tutorial_3.00.med.gz>`
-  * :download:`maillage et champ étape 1<files/tutorial_3.01.med.gz>`
+  * :download:`maillage et champ étape 0<files/tutorial_3.00.med.gz>`
+  * :download:`maillage et champ étape 1<files/tutorial_3.01.med.gz>`
   * :download:`commandes python<files/tutorial_3.py>`
 
 
+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<files/tutorial_4.00.med.gz>`
+  * :download:`maillage de la frontière discrète<files/tutorial_4.fr.med.gz>`
+  * :download:`commandes python<files/tutorial_4.py>`
+
+
 .. toctree::
    :maxdepth: 2
index a84e17650e86f9a80d75c3155828f80e26cf0b54..8c7a60d2c186f7a68a184a96e803e9ec358fa9ec 100644 (file)
@@ -19,7 +19,7 @@ module HOMARD
   typedef sequence<string> listeCases;
   typedef sequence<string> 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);
index 6f0537d821315daf21a635f3fd5f1ce2b4b96292..a665aa18bf6b58f12d87474677c6b8009acb232b 100644 (file)
@@ -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)
index d819555aace2ffc9089b45ca7a1130a7dffac0df..eceeca34b09db98b51303acc566b091a4052e0c7 100644 (file)
@@ -99,13 +99,6 @@ std::string HOMARD_Boundary::GetDumpPython() const
       break;
     }
   }
-  aScript << "\t" <<_NomBoundary << ".SetCaseCreation('";
-  aScript << _NomCasCreation << "')\n";
-
-  std::list<std::string>::const_iterator it;
-  for ( it=_ListGroupSelected.begin(); it!=_ListGroupSelected.end();it++)
-       aScript << "\t" << _NomBoundary << ".AddGroup('"  << (*it) <<  "')\n" ;
-
 
   return aScript.str();
 }
index 4da42dd200c6fcb8d4908fee39cf87b8deb294ce..41b634ebebc0d823cef9c0318dd13d27621463d9 100644 (file)
@@ -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
index 04c463022a2c4b4e2780317265cfd1b4fbb1d3c3..d1e1ed3b1965af050839126de52014a05711f88e 100644 (file)
@@ -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 ="<<MeshName << std::endl;
+  MESSAGE("Dans TexteBoundaryDi de HomardDriver MeshName  = "<<MeshName);
+  MESSAGE("Dans TexteBoundaryDi de HomardDriver MeshFile  = "<<MeshFile);
+  MESSAGE("Dans TexteBoundaryDi de HomardDriver GroupName = "<<GroupName);
 //
   _Texte += "CCNoMFro " + MeshName + "\n" ;
   _Texte += "CCFronti " + MeshFile + "\n" ;
+  if ( GroupName.size() > 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 = "<<NumeBoundary << std::endl;
-std::cerr << "Dans TexteBoundaryAn de HomardDriver BoundaryType = "<<BoundaryType << std::endl;
-std::cerr << "Dans TexteBoundaryAn de HomardDriver coor = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6 <<std::endl;
+  MESSAGE("Dans TexteBoundaryAn de HomardDriver NumeBoundary = "<<NumeBoundary);
+  MESSAGE("Dans TexteBoundaryAn de HomardDriver BoundaryType = "<<BoundaryType);
+  MESSAGE("Dans TexteBoundaryAn de HomardDriver coor         = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6);
 //
   std::string saux, saux2 ;
 //
index 5324b06757d0100b1347b22b11a88a9f7ad45912..2058e3a651298667816f916cc0c6084fcaf722b9 100644 (file)
@@ -22,7 +22,7 @@ public:
   void        TexteCompo( int NumeComp, const std::string NomCompo);
 
   void        TexteBoundaryOption( int BoundaryOption );
-  void        TexteBoundaryDi( const std::string MeshName, const std::string MeshFile );
+  void        TexteBoundaryDi( const std::string MeshName, const std::string MeshFile, const std::string GroupName );
   void        TexteBoundaryAn( int NumeBoundary, int BoundaryType, const std::string Group, double x0, double x1, double x2, double x3, double x4, double x5, double x6 );
 
   void        TexteFieldInterp( int TypeFieldInterp, const std::string FieldFile, const std::string MeshFile,
diff --git a/src/HOMARDGUI/CreateBoundaryAn.h b/src/HOMARDGUI/CreateBoundaryAn.h
new file mode 100644 (file)
index 0000000..1eaf773
--- /dev/null
@@ -0,0 +1,444 @@
+/********************************************************************************
+** Form generated from reading ui file 'CreateBoundaryAn.ui'
+**
+** Created: Wed Jan 19 15:34:59 2011
+**      by: Qt User Interface Compiler version 4.2.1
+**
+** WARNING! All changes made in this file will be lost when recompiling ui file!
+********************************************************************************/
+
+#ifndef CREATEBOUNDARYAN_H
+#define CREATEBOUNDARYAN_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QDialog>
+#include <QtGui/QDoubleSpinBox>
+#include <QtGui/QGridLayout>
+#include <QtGui/QGroupBox>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QLabel>
+#include <QtGui/QLineEdit>
+#include <QtGui/QPushButton>
+#include <QtGui/QRadioButton>
+
+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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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 (file)
index 0000000..e5a1cc8
--- /dev/null
@@ -0,0 +1,566 @@
+<ui version="4.0" >
+ <class>CreateBoundaryAn</class>
+ <widget class="QDialog" name="CreateBoundaryAn" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>458</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Create Analytical Boundary</string>
+  </property>
+  <property name="autoFillBackground" >
+   <bool>true</bool>
+  </property>
+  <property name="sizeGripEnabled" >
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="2" column="0" colspan="2" >
+    <widget class="QGroupBox" name="gBCylindre" >
+     <property name="sizePolicy" >
+      <sizepolicy>
+       <hsizetype>0</hsizetype>
+       <vsizetype>0</vsizetype>
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title" >
+      <string>Coordinates of the cylindre</string>
+     </property>
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item row="0" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Xcent" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" >
+       <widget class="QLabel" name="TLXcent" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>X centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1" colspan="2" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Radius" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Zcent" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0" >
+       <widget class="QLabel" name="TLradius" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Radius</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" >
+       <widget class="QLabel" name="TLZcent" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Z centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="TLYcent" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Y centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Ycent" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2" >
+       <widget class="QLabel" name="TLXaxis" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>X axis</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" >
+       <widget class="QLabel" name="TLYaxis" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Y axis</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2" >
+       <widget class="QLabel" name="TLZaxis" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Z axis</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="2" >
+    <widget class="QGroupBox" name="GBButtons" >
+     <property name="sizePolicy" >
+      <sizepolicy>
+       <hsizetype>0</hsizetype>
+       <vsizetype>0</vsizetype>
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title" >
+      <string/>
+     </property>
+     <layout class="QHBoxLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item>
+       <widget class="QPushButton" name="buttonOk" >
+        <property name="text" >
+         <string>&amp;Ok</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="buttonApply" >
+        <property name="text" >
+         <string>&amp;Apply</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="buttonCancel" >
+        <property name="text" >
+         <string>&amp;Cancel</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="buttonHelp" >
+        <property name="text" >
+         <string>&amp;Help</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="3" column="0" colspan="2" >
+    <widget class="QGroupBox" name="gBSphere" >
+     <property name="sizePolicy" >
+      <sizepolicy>
+       <hsizetype>0</hsizetype>
+       <vsizetype>0</vsizetype>
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title" >
+      <string>Coordinates of the sphere</string>
+     </property>
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item row="1" column="3" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Rayon" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>0.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Zcentre" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" >
+       <widget class="QLabel" name="TLRayon" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Radius</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" >
+       <widget class="QLabel" name="TLZcentre" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Z centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="TLYcentre" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Y centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Ycentre" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QDoubleSpinBox" name="SpinBox_Xcentre" >
+        <property name="decimals" >
+         <number>5</number>
+        </property>
+        <property name="maximum" >
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="minimum" >
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="value" >
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" >
+       <widget class="QLabel" name="TLXcentre" >
+        <property name="sizePolicy" >
+         <sizepolicy>
+          <hsizetype>0</hsizetype>
+          <vsizetype>0</vsizetype>
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>X centre</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="2" >
+    <widget class="QGroupBox" name="TypeBoundary" >
+     <property name="sizePolicy" >
+      <sizepolicy>
+       <hsizetype>0</hsizetype>
+       <vsizetype>0</vsizetype>
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize" >
+      <size>
+       <width>340</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Type of boundary</string>
+     </property>
+     <layout class="QHBoxLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item>
+       <widget class="QRadioButton" name="RBCylindre" >
+        <property name="text" >
+         <string/>
+        </property>
+        <property name="icon" >
+         <iconset>../../resources/cylinderpointvector.png</iconset>
+        </property>
+        <property name="checkable" >
+         <bool>true</bool>
+        </property>
+        <property name="checked" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="RBSphere" >
+        <property name="text" >
+         <string/>
+        </property>
+        <property name="icon" >
+         <iconset>../../resources/zone_spherepoint.png</iconset>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QLineEdit" name="LEBoundaryName" >
+     <property name="maxLength" >
+      <number>32</number>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" >
+    <widget class="QLabel" name="Name" >
+     <property name="text" >
+      <string>Name</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
index f3010ccb6a8d06ad7dcf99cc0dad0ebf3c1a3bf3..88f472cd7b1f18dc5675fa447414220957d869a4 100644 (file)
@@ -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!
 ********************************************************************************/
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QWidget>
 
-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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(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
index abfe1cf8f667dec36ce18c22289fceb710f05cb9..4bc2dd1634b3b6f0807725858afd028faa273999 100644 (file)
@@ -5,12 +5,14 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>589</width>
-    <height>675</height>
+    <width>597</width>
+    <height>850</height>
    </rect>
   </property>
   <property name="sizePolicy" >
-   <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
+   <sizepolicy>
+    <hsizetype>0</hsizetype>
+    <vsizetype>0</vsizetype>
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
    <string>Create Case</string>
   </property>
   <property name="autoFillBackground" >
-   <bool>false</bool>
+   <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2" >
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="13" column="0" colspan="2" >
+    <widget class="QGroupBox" name="GroupButtons" >
+     <property name="title" >
+      <string/>
+     </property>
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item row="0" column="0" >
+       <widget class="QPushButton" name="buttonOk" >
+        <property name="text" >
+         <string>&amp;Ok</string>
+        </property>
+        <property name="autoDefault" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QPushButton" name="buttonApply" >
+        <property name="text" >
+         <string>&amp;Apply</string>
+        </property>
+        <property name="autoDefault" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2" >
+       <widget class="QPushButton" name="buttonCancel" >
+        <property name="text" >
+         <string>&amp;Cancel</string>
+        </property>
+        <property name="autoDefault" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3" >
+       <widget class="QPushButton" name="buttonHelp" >
+        <property name="text" >
+         <string>&amp;Help</string>
+        </property>
+        <property name="autoDefault" >
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="12" column="0" colspan="2" >
+    <widget class="QGroupBox" name="GBBoundaryA" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>300</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Analytic Boundary</string>
+     </property>
+     <widget class="QWidget" name="layoutWidget" >
+      <property name="geometry" >
+       <rect>
+        <x>410</x>
+        <y>20</y>
+        <width>120</width>
+        <height>110</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item>
+        <widget class="QPushButton" name="PBBoundaryAnNew" >
+         <property name="text" >
+          <string>New</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="PBBoundaryAnHelp" >
+         <property name="text" >
+          <string>Help</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QTableWidget" name="TWBoundary" >
+      <property name="geometry" >
+       <rect>
+        <x>4</x>
+        <y>20</y>
+        <width>371</width>
+        <height>270</height>
+       </rect>
+      </property>
+      <property name="editTriggers" >
+       <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked</set>
+      </property>
+      <property name="showGrid" >
+       <bool>true</bool>
+      </property>
+      <property name="rowCount" >
+       <number>0</number>
+      </property>
+      <property name="columnCount" >
+       <number>1</number>
+      </property>
+      <column>
+       <property name="text" >
+        <string>a_virer</string>
+       </property>
+      </column>
+     </widget>
+    </widget>
+   </item>
    <item row="0" column="0" colspan="2" >
-    <layout class="QHBoxLayout" name="horizontalLayout_5" >
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
      <item>
       <widget class="QLabel" name="Name" >
        <property name="text" >
     </layout>
    </item>
    <item row="1" column="0" >
-    <layout class="QHBoxLayout" name="horizontalLayout_4" >
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
      <item>
       <widget class="QLabel" name="Directory" >
        <property name="text" >
     </layout>
    </item>
    <item row="3" column="0" colspan="2" >
-    <layout class="QHBoxLayout" name="horizontalLayout_3" >
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
      <item>
       <widget class="QLabel" name="Mesh_2" >
        <property name="text" >
     </layout>
    </item>
    <item row="4" column="0" >
-    <spacer name="verticalSpacer_2" >
+    <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
        <width>20</width>
        <height>0</height>
      <property name="title" >
       <string>Conformity Type</string>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout" >
+     <layout class="QHBoxLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
       <item>
        <widget class="QRadioButton" name="RBConforme" >
         <property name="text" >
        </widget>
       </item>
      </layout>
-     <zorder>RBNonConforme</zorder>
-     <zorder>RBConforme</zorder>
     </widget>
    </item>
    <item row="6" column="0" >
-    <spacer name="verticalSpacer_3" >
+    <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
        <width>20</width>
        <height>1</height>
      <property name="title" >
       <string>Non Conformal option</string>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_2" >
+     <layout class="QHBoxLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
       <item>
        <widget class="QRadioButton" name="RB1NpM" >
         <property name="text" >
     </widget>
    </item>
    <item row="8" column="0" >
-    <spacer name="verticalSpacer_4" >
+    <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
        <width>20</width>
        <height>0</height>
     </spacer>
    </item>
    <item row="9" column="0" >
-    <layout class="QHBoxLayout" name="horizontalLayout_6" >
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
      <item>
       <widget class="QCheckBox" name="CBBoundaryD" >
        <property name="text" >
     </layout>
    </item>
    <item row="10" column="0" >
-    <spacer name="verticalSpacer_7" >
+    <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
        <width>20</width>
        <height>2</height>
      </property>
     </spacer>
    </item>
+   <item row="2" column="1" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>18</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
    <item row="11" column="0" >
     <widget class="QGroupBox" name="GBBoundaryD" >
      <property name="sizePolicy" >
-      <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
+      <sizepolicy>
+       <hsizetype>0</hsizetype>
+       <vsizetype>0</vsizetype>
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      <property name="title" >
       <string>Discrete Boundary</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout_3" >
-      <item row="0" column="0" >
-       <widget class="QComboBox" name="CBBoundaryDi" >
-        <property name="currentIndex" >
-         <number>-1</number>
-        </property>
-        <property name="sizeAdjustPolicy" >
-         <enum>QComboBox::AdjustToContents</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <spacer name="spacer_2" >
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType" >
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" stdset="0" >
-         <size>
-          <width>40</width>
-          <height>13</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="PBBoundaryDiEdit" >
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item row="0" column="4" >
+       <widget class="QPushButton" name="PBBoundaryDiHelp" >
         <property name="text" >
-         <string>Edit</string>
+         <string>Help</string>
         </property>
         <property name="autoDefault" >
          <bool>false</bool>
         </property>
        </widget>
       </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="12" column="0" colspan="2" >
-    <widget class="QGroupBox" name="GBBoundaryA" >
-     <property name="minimumSize" >
-      <size>
-       <width>548</width>
-       <height>150</height>
-      </size>
-     </property>
-     <property name="title" >
-      <string>Analytic Boundary</string>
-     </property>
-     <widget class="QTableWidget" name="TWBoundary" >
-      <property name="geometry" >
-       <rect>
-        <x>4</x>
-        <y>20</y>
-        <width>371</width>
-        <height>121</height>
-       </rect>
-      </property>
-      <property name="autoScrollMargin" >
-       <number>16</number>
-      </property>
-      <property name="editTriggers" >
-       <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
-      </property>
-      <property name="showGrid" >
-       <bool>true</bool>
-      </property>
-      <property name="rowCount" >
-       <number>0</number>
-      </property>
-      <property name="columnCount" >
-       <number>2</number>
-      </property>
-      <column>
-       <property name="text" >
-        <string>Group</string>
-       </property>
-      </column>
-      <column>
-       <property name="text" >
-        <string>Boundary</string>
-       </property>
-      </column>
-     </widget>
-     <widget class="QWidget" name="layoutWidget" >
-      <property name="geometry" >
-       <rect>
-        <x>410</x>
-        <y>20</y>
-        <width>120</width>
-        <height>110</height>
-       </rect>
-      </property>
-      <layout class="QVBoxLayout" name="verticalLayout_4" >
-       <item>
-        <widget class="QPushButton" name="PBBoundaryNew" >
-         <property name="text" >
-          <string>New</string>
-         </property>
-         <property name="autoDefault" >
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="PBBoundaryEdit" >
-         <property name="text" >
-          <string>Edit</string>
-         </property>
-         <property name="autoDefault" >
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="PBBoundaryDelete" >
-         <property name="text" >
-          <string/>
-         </property>
-         <property name="autoDefault" >
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item row="13" column="0" colspan="2" >
-    <widget class="QGroupBox" name="GroupButtons" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" name="gridLayout" >
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonOk" >
+      <item row="0" column="2" >
+       <widget class="QPushButton" name="PBBoundaryDiEdit" >
         <property name="text" >
-         <string>&amp;Ok</string>
+         <string>Edit</string>
         </property>
         <property name="autoDefault" >
          <bool>false</bool>
        </widget>
       </item>
       <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonApply" >
-        <property name="text" >
-         <string>&amp;Apply</string>
-        </property>
-        <property name="autoDefault" >
-         <bool>false</bool>
+       <spacer>
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
         </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonCancel" >
-        <property name="text" >
-         <string>&amp;Cancel</string>
+        <property name="sizeType" >
+         <enum>QSizePolicy::Fixed</enum>
         </property>
-        <property name="autoDefault" >
-         <bool>false</bool>
+        <property name="sizeHint" >
+         <size>
+          <width>40</width>
+          <height>13</height>
+         </size>
         </property>
-       </widget>
+       </spacer>
       </item>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
-         <string>&amp;Help</string>
+      <item row="0" column="0" >
+       <widget class="QComboBox" name="CBBoundaryDi" >
+        <property name="currentIndex" >
+         <number>-1</number>
         </property>
-        <property name="autoDefault" >
-         <bool>false</bool>
+        <property name="sizeAdjustPolicy" >
+         <enum>QComboBox::AdjustToContents</enum>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item row="2" column="1" >
-    <spacer name="verticalSpacer_5" >
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>20</width>
-       <height>18</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
   </layout>
  </widget>
  <resources/>
index 1d10a3f2e31e1167dae9b831f5e609ca3cc383f4..dc3fa57321c34007331a7f3930f7bf8334ee5233 100644 (file)
@@ -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);
index d6c0f9aee1fd30cde5d3e4256987db2a5e6b7f72..a3c982f6a2172381701aa77239dc4a5228801f6a 100644 (file)
@@ -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!
 ********************************************************************************/
 #include <QtGui/QButtonGroup>
 #include <QtGui/QGridLayout>
 #include <QtGui/QGroupBox>
-#include <QtGui/QHeaderView>
 #include <QtGui/QPushButton>
 #include <QtGui/QSpacerItem>
 #include <QtGui/QTextBrowser>
 #include <QtGui/QWidget>
 
-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
index cccd2d769d1577b56eb6b4cf840c7e30e97b4bc4..8c7b208778fded42daac3b023bae005430466efa 100644 (file)
   <property name="windowTitle" >
    <string>Edit File</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2" >
-   <item row="0" column="0" colspan="2" >
-    <widget class="QTextBrowser" name="QTBEditFile" >
-     <property name="minimumSize" >
-      <size>
-       <width>530</width>
-       <height>800</height>
-      </size>
-     </property>
-     <property name="font" >
-      <font>
-       <family>Courier New</family>
-      </font>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0" >
-    <spacer name="verticalSpacer" >
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="2" column="1" >
+    <spacer>
      <property name="orientation" >
-      <enum>Qt::Vertical</enum>
+      <enum>Qt::Horizontal</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
-       <width>20</width>
-       <height>14</height>
+       <width>331</width>
+       <height>49</height>
       </size>
      </property>
     </spacer>
      <property name="title" >
       <string/>
      </property>
-     <layout class="QGridLayout" name="gridLayout" >
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>9</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item row="0" column="1" >
+       <widget class="QPushButton" name="buttonPrint" >
+        <property name="text" >
+         <string>&amp;Print</string>
+        </property>
+       </widget>
+      </item>
       <item row="0" column="0" >
        <widget class="QPushButton" name="buttonQuit" >
         <property name="text" >
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonPrint" >
-        <property name="text" >
-         <string>&amp;Print</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
-         <string>&amp;Help</string>
-        </property>
-       </widget>
-      </item>
      </layout>
     </widget>
    </item>
-   <item row="2" column="1" >
-    <spacer name="horizontalSpacer" >
+   <item row="1" column="0" colspan="2" >
+    <spacer>
      <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" >
       <size>
-       <width>249</width>
-       <height>20</height>
+       <width>20</width>
+       <height>14</height>
       </size>
      </property>
     </spacer>
    </item>
+   <item row="0" column="0" colspan="2" >
+    <widget class="QTextBrowser" name="QTBEditFile" >
+     <property name="minimumSize" >
+      <size>
+       <width>530</width>
+       <height>800</height>
+      </size>
+     </property>
+     <property name="font" >
+      <font>
+       <family>Courier New</family>
+      </font>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources/>
index cd7a585b0a230a78660013856ce805c20770f883..41b6721f8d1288d8040afeabb84bd6c3ccbfedb4 100644 (file)
@@ -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()));
index 2db82b832b4367c272dc0fb5538e83930474eb52..eb5a9861a430eadb9028eda0c04a136e18581fbe 100644 (file)
@@ -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)
index 54fe680627da304380f5aa4452348def24123bb1..257383fb8c34630f40592e9ca0b62670b029da5e 100644 (file)
@@ -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);
index 940c38ef56c54df8a93c50e162f927b3979556e9..e46c3acdec0993c2dbaabb105be11aff5c922bde 100644 (file)
@@ -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 (file)
index 0000000..08cd647
--- /dev/null
@@ -0,0 +1,341 @@
+using namespace std;
+
+#include "MonCreateBoundaryAn.h"
+#include "MonCreateCase.h"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include <utilities.h>
+
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_ViewManager.h>
+
+// ------------------------------------------------------------------------------------------------------------------------
+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; i<MyBoundaryAns->length(); 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 (file)
index 0000000..78fdbf9
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef MON_CREATEBOUNDARYAN_H
+#define MON_CREATEBOUNDARYAN_H
+
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+#include CORBA_CLIENT_HEADER(HOMARD_Boundary)
+
+#include <CreateBoundaryAn.h>
+#include <QDialog>
+
+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
index db1edcd2dbfc344c66b2bf2b9aedc3a7f220fabe..2cd27abbea3f79147d11af0a6f6a50a0dcb91fc4 100644 (file)
@@ -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()
index f84c53fb098f57e657df658ea9f65d2dabf5369e..71474db588e5ef0da9f8a7d10e040d9afff4eaaa 100644 (file)
@@ -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 "<<NomGroup.toStdString().c_str());
+          for ( int nugr = 0 ; nugr<ListeGroup.size(); nugr++)
+          {
+//             MESSAGE("....... "<<ListeGroup[nugr].toStdString().c_str());
+            if ( NomGroup == ListeGroup[nugr] )
+            {
+              QMessageBox::information( 0, "Error",
+                        QString("Group "+NomGroup+" cannot be given for more than 1 boundary."),
+                        QMessageBox::Ok + QMessageBox::Default );
+              return false;
+            }
+          }
+          ListeGroup.insert(0, NomGroup );
+        }
+      }
+    }
+  }
+
   if (aCaseName != _aCaseName )
   {
     _aCaseName = aCaseName;
@@ -147,7 +183,7 @@ bool MonCreateCase::PushOnApply()
             CORBA::string_dup(aMeshName.toStdString().c_str()),  \
             CORBA::string_dup(aFileName.toStdString().c_str()) );
     }
-    catch( SALOME::SALOME_Exception& S_ex ) 
+    catch( SALOME::SALOME_Exception& S_ex )
     {
      QMessageBox::information( 0, "Error",
             QString(CORBA::string_dup(S_ex.details.text)),
@@ -173,12 +209,36 @@ bool MonCreateCase::PushOnApply()
   _aDirName=aDirName;
   aCase->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()
index 1cf0e4dc0697efc225a90203e45f58d52029aa06..0bd2aa98bfa43d3d036b4905757d59e53706a9b5 100644 (file)
@@ -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();
index 60bd6c85a6b79aed9e041b395af7da4cec1ae238..2ad73d0987a291b6ce85f217228d87498bde606e 100644 (file)
@@ -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;
   }
index 47121c7b17ca45af13d023636a979bffefe4ab05..8b9dab973d0d1c4c3b7f4b0bc94dff7a656c7d2a 100644 (file)
@@ -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();
index 6fbea3d2fea526bcc8da4721a5eea58d0f75f824..7e766f83202df91994a3eab7aa112d1270c87cfa 100644 (file)
@@ -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 (file)
index 0000000..50794ca
--- /dev/null
@@ -0,0 +1,188 @@
+using namespace std;
+
+#include "MonEditBoundaryAn.h"
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include <utilities.h>
+
+
+// ------------------------------------------------------------------------
+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 (file)
index 0000000..0a1ce5e
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef MON_EDITBOUNDARYAN_H
+#define MON_EDITBOUNDARYAN_H
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+
+#include <MonCreateBoundaryAn.h>
+
+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
index ca060e3fde98675b2070a7dcc08f9c214d4f4316..111f271b80435ec592aead515b1a125cc98830f2 100644 (file)
@@ -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; i<mesBoundarys->length(); i++)
         {
-          HOMARD::HOMARD_Boundary_var myBoundary = _myHomardGen->GetBoundary((mesBoundarys)[i]);
+//        Nom de la frontiere
+          NomFron = mesBoundarys[i++];
+          MESSAGE("NomFron "<<NomFron.toStdString().c_str());
+//        L'objet associe pour en deduire le type
+          HOMARD::HOMARD_Boundary_var myBoundary = _myHomardGen->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 ; nufr<ListeFron.size(); nufr++)
+            {
+              if ( ListeFron[nufr] == NomFron ) ok = nufr+1 ;
+            }
+//            si non, on ajoute une colonne
+            if ( ok < 0 )
+            {
+              ListeFron.append(NomFron);
+              ok = ListeFron.size() ;
+              addBoundaryAn(NomFron);
+            }
+//          on coche la case correspondant au couple (frontiere,groupe) en cours d'examen
+            TWBoundary->item( 0, ok )->setCheckState( Qt::Checked );
+          }
         }
         MESSAGE("BounDi "<<BounDi<<", BounAn "<<BounAn);
         if ( BounAn )
         { GBBoundaryA->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);
index c73730c368587cf269894e45e80b1d7c14959c30..5d09d71cdbd0039671925f539f5298cb94ad73a3 100644 (file)
@@ -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"));
-}
 
 
index 22def7ac6739ad4082fa991e3fb34cf9d95a111b..6bca868a158a8bbd623ef60d275328281c617100 100644 (file)
@@ -36,7 +36,6 @@ protected :
 
 public slots:
     virtual void PushOnPrint();
-    virtual void PushOnHelp();
 
 };
 
index f1667f6fc1f73adfd5ce14785ac93acdfa82c025..c7f33432f206257551379725f1554e9d3a72b1b6 100644 (file)
@@ -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();
index afebbfbb82ec7c60a7bb0a93ce145a1e3d5d4760..50226e8ce4628f19159e200bc5f1d186bdb8e82f 100644 (file)
@@ -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);
 
index cc2ac949bde9ea684f8508aaa001b8700d0c380d..904968527ebbe8810de356fbaabce649b64bab20 100755 (executable)
@@ -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<double> 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<std::string, HOMARD::HOMARD_Iteration_var>::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<std::string, HOMARD::HOMARD_Zone_var>::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<std::string, HOMARD::HOMARD_Iteration_var>::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()");
index b6dff452bfaf98a30649db45dd5b9578e218cbcc..6f44d12b3fb48a6488ce40b55a25a441f696408c 100644 (file)
 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<int, PortableServer::ServantBase*>          _idmap;
   };
   typedef std::map<int, StudyContext> ContextMap;
-  
+
   ::HOMARD_Gen*                 myHomard;
   SALOMEDS::Study_var           myCurrentStudy;
   ContextMap                    myContextMap;
index ed66236a24cef7e1ea8d4072eae2c4fab524a54a..6fb83c0aad19bb6f8be52a10cb00e70e5215c222 100644 (file)
@@ -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 
index 578a8f13c6f0d58df89aff8343c8f5a1a2d6396e..6855100700211648c983c2d0bda0d6ed3028fee2 100644 (file)
Binary files a/tests/test_1.odt and b/tests/test_1.odt differ
index 1aaaa2cd93c0ee4d75b7874bbe62573e323a1e92..eea1b0ccdbf74ba1ecc8c0471df6360eb626333f 100644 (file)
Binary files a/tests/test_1.pdf and b/tests/test_1.pdf differ
index abbd6d93889c9e8192b3f4b2156e3d07060fce5c..c01a9597676020b92b06e9bfdb38a7921b9f35a2 100644 (file)
@@ -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) :
index 76858ccb33d6042ef6cdb18e044d5d8f3d6ead9a..bd0dd52b00d6fd699ed73001d6fd137dd4689e8b 100644 (file)
Binary files a/tests/test_2.odt and b/tests/test_2.odt differ
index 62a67c0bae782a140a3a9ab789aa8e29a2ff47ae..de07fe717aaad0ca7f03d4360f461f7e30a90f35 100644 (file)
Binary files a/tests/test_2.pdf and b/tests/test_2.pdf differ
index 1762c1b3eea6b37ea8347f492ebf55ae1610a225..dced743d92d5653a911bbc6dfbab39136732d117 100644 (file)
Binary files a/tests/test_2.png and b/tests/test_2.png differ
index 5ff9f386d699e6870524a3daedd394b2015d2909..9b87d93b2b91fd1954ad76a3196ceea446f3da3c 100644 (file)
@@ -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 (file)
index 0000000..0b41f32
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 (file)
index 0000000..c89aabd
--- /dev/null
@@ -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 (file)
index 0000000..657ab6d
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 (file)
index 0000000..002d85a
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 (file)
index 0000000..26dc2ca
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 (file)
index 0000000..19c94e8
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 (file)
index 0000000..c6c5ce0
--- /dev/null
@@ -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)
+