From 634b7718bcfdb14d61ba3fc09cf976a61e134e27 Mon Sep 17 00:00:00 2001 From: pnoyret Date: Fri, 16 Sep 2011 11:40:36 +0000 Subject: [PATCH] Modif Gerald 09/11 --- doc/files/tutorial_5.00.med.gz | Bin 0 -> 10561 bytes doc/files/tutorial_5.fr.med.gz | Bin 0 -> 190677 bytes doc/files/tutorial_5.py | 92 +++ doc/images/create_zone_21.png | Bin 0 -> 21131 bytes doc/images/create_zone_22.png | Bin 0 -> 21395 bytes doc/images/create_zone_23.png | Bin 0 -> 22723 bytes doc/images/create_zone_3.png | Bin 0 -> 28120 bytes doc/images/create_zone_4.png | Bin 0 -> 22410 bytes doc/images/homard_1.png | Bin 0 -> 12754 bytes doc/images/lancement_2.png | Bin 0 -> 23848 bytes doc/images/lancement_3.png | Bin 0 -> 27974 bytes src/HOMARD/HOMARD_Boundary.cxx | 74 +-- src/HOMARD/HOMARD_Boundary.hxx | 4 +- src/HOMARD/HOMARD_Cas.cxx | 32 +- src/HOMARD/HOMARD_Cas.hxx | 8 + src/HOMARD/HOMARD_DriverTools.cxx | 180 +++--- src/HOMARD/HOMARD_Hypothesis.cxx | 32 +- src/HOMARD/HOMARD_Hypothesis.hxx | 10 +- src/HOMARD/HOMARD_Zone.cxx | 222 +++++-- src/HOMARD/HOMARD_Zone.hxx | 24 +- src/HOMARD/HomardDriver.cxx | 319 +++++++++- src/HOMARD/HomardDriver.hxx | 6 +- src/HOMARDGUI/CreateBoundaryAn.h | 496 +++++++-------- src/HOMARDGUI/CreateBoundaryAn.ui | 494 +++++++-------- src/HOMARDGUI/CreateBoundaryDi.h | 108 ++-- src/HOMARDGUI/CreateBoundaryDi.ui | 126 ++-- src/HOMARDGUI/CreateCase.h | 425 +++++++------ src/HOMARDGUI/CreateCase.ui | 411 +++++++----- src/HOMARDGUI/CreateHypothesis.h | 13 +- src/HOMARDGUI/CreateHypothesis.ui | 11 +- src/HOMARDGUI/CreateIteration.h | 244 ++++---- src/HOMARDGUI/CreateIteration.ui | 332 +++++----- src/HOMARDGUI/CreateListGroup.h | 84 +-- src/HOMARDGUI/CreateListGroup.ui | 86 +-- src/HOMARDGUI/CreateZone.h | 869 +++++++++++++++++++------- src/HOMARDGUI/CreateZone.ui | 817 +++++++++++++++++++++--- src/HOMARDGUI/HOMARDGUI.cxx | 54 +- src/HOMARDGUI/HOMARDGUI_Utils.cxx | 139 +--- src/HOMARDGUI/HOMARDGUI_Utils.h | 13 +- src/HOMARDGUI/HOMARD_msg_en.ts | 12 + src/HOMARDGUI/HOMARD_msg_fr.ts | 68 +- src/HOMARDGUI/MonCreateBoundaryAn.cxx | 87 ++- src/HOMARDGUI/MonCreateBoundaryDi.cxx | 6 +- src/HOMARDGUI/MonCreateCase.cxx | 147 +++-- src/HOMARDGUI/MonCreateCase.h | 8 +- src/HOMARDGUI/MonCreateHypothesis.cxx | 28 +- src/HOMARDGUI/MonCreateHypothesis.h | 4 +- src/HOMARDGUI/MonCreateListGroup.cxx | 1 - src/HOMARDGUI/MonCreateZone.cxx | 630 +++++++++++++------ src/HOMARDGUI/MonCreateZone.h | 12 +- src/HOMARDGUI/MonEditBoundaryAn.cxx | 117 ++-- src/HOMARDGUI/MonEditCase.cxx | 228 +++---- src/HOMARDGUI/MonEditHypothesis.cxx | 9 +- src/HOMARDGUI/MonEditIteration.cxx | 2 - src/HOMARDGUI/MonEditZone.cxx | 333 ++++++++-- src/HOMARDGUI/MonEditZone.h | 4 + src/HOMARD_I/HOMARD_Boundary_i.cxx | 19 +- src/HOMARD_I/HOMARD_Boundary_i.hxx | 22 +- src/HOMARD_I/HOMARD_Cas_i.cxx | 24 + src/HOMARD_I/HOMARD_Cas_i.hxx | 6 + src/HOMARD_I/HOMARD_Gen_i.cxx | 656 ++++++++++--------- src/HOMARD_I/HOMARD_Gen_i.hxx | 43 +- src/HOMARD_I/HOMARD_Hypothesis_i.cxx | 3 +- src/HOMARD_I/HOMARD_Hypothesis_i.hxx | 2 +- src/HOMARD_I/HOMARD_Zone_i.cxx | 31 +- src/HOMARD_I/HOMARD_Zone_i.hxx | 38 +- 66 files changed, 5362 insertions(+), 2903 deletions(-) create mode 100644 doc/files/tutorial_5.00.med.gz create mode 100644 doc/files/tutorial_5.fr.med.gz create mode 100644 doc/files/tutorial_5.py create mode 100644 doc/images/create_zone_21.png create mode 100644 doc/images/create_zone_22.png create mode 100644 doc/images/create_zone_23.png create mode 100644 doc/images/create_zone_3.png create mode 100644 doc/images/create_zone_4.png create mode 100644 doc/images/homard_1.png create mode 100644 doc/images/lancement_2.png create mode 100644 doc/images/lancement_3.png diff --git a/doc/files/tutorial_5.00.med.gz b/doc/files/tutorial_5.00.med.gz new file mode 100644 index 0000000000000000000000000000000000000000..e017044031edbd500ec21b855f5a7aa7273e25f5 GIT binary patch literal 10561 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 literal 0 HcmV?d00001 diff --git a/doc/files/tutorial_5.fr.med.gz b/doc/files/tutorial_5.fr.med.gz new file mode 100644 index 0000000000000000000000000000000000000000..4c9ccbdd11b066ea381bcdb2805ce9ef936cc8f4 GIT binary patch literal 190677 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ïY1Ex= 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

1+O;o^l$^ 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 NXmN#jH6PTHe*%LcwXXmG literal 0 HcmV?d00001 diff --git a/doc/files/tutorial_5.py b/doc/files/tutorial_5.py new file mode 100644 index 00000000..6f2a6d10 --- /dev/null +++ b/doc/files/tutorial_5.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- + +# Copyright (C) 2011 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +""" +Exemple de couplage HOMARD-Salome +Copyright EDF-R&D 1996, 2010 +""" +__revision__ = "V1.1" +# +# ================================== +# Repertoire a personnaliser +# Ce repertoire contient les fichiers de donnees : tutorial_5.00.med, tutorial_5.fr.med +# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med +dircase = "/tmp" +# ================================== +# +import salome +salome.salome_init() +import HOMARD +# +homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD") +study_main = salome.myStudyManager.NewStudy("HOMARD") +homard.SetCurrentStudy(salome.myStudy) +# +# Creation of the boundaries +# ========================== +# Creation of the discrete boundary Boun_1 +Boun_1 = homard.CreateBoundaryDi('Boun_1', 'MAIL_EXT', dircase+'/tutorial_5.fr.med') +# +# Creation of the zones +# ===================== +# Creation of the disk with hole enveloppe +enveloppe = homard.CreateZoneDiskWithHole( 'enveloppe', 0., 0., 250., 193., 1 ) +# Creation of the rectangle quart_sup +quart_sup = homard.CreateZoneBox2D( 'quart_sup', 0., 250., 0., 250., 1 ) +# +# Hypothesis +# ========== +# Creation of the hypothesis Hypo_1 +Hypo_1 = homard.CreateHypothesis('Hypo_1') +Hypo_1.SetAdapRefinUnRef(0, 1, 0) +homard.AssociateHypoZone('enveloppe', 'Hypo_1') +# Creation of the hypothesis Hypo_2 +Hypo_2 = homard.CreateHypothesis('Hypo_2') +Hypo_2.SetAdapRefinUnRef(0, 1, 0) +homard.AssociateHypoZone('quart_sup', 'Hypo_2') +# +# Case "Case_1" +# ============= +Case_1 = homard.CreateCase('Case_1', 'COEUR_2D', dircase+'/tutorial_5.00.med') +Case_1.SetDirName(dircase) +Case_1.SetConfType(3) +Case_1.AddBoundaryGroup('Boun_1', '') +# +# Iteration "Iter_1" +# ================== +Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name()) +Iter_1.SetMeshName('COEUR_2D_01') +Iter_1.SetMeshFile(dircase+'/maill.01.med') +homard.AssociateIterHypo('Iter_1', 'Hypo_1') +codret = homard.Compute('Iter_1', 1) +# +# Iteration "Iter_2" +# ================== +Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1') +Iter_2.SetMeshName('COEUR_2D_02') +Iter_2.SetMeshFile(dircase+'/maill.02.med') +homard.AssociateIterHypo('Iter_2', 'Hypo_2') +result = homard.Compute('Iter_2', 1) + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(1) diff --git a/doc/images/create_zone_21.png b/doc/images/create_zone_21.png new file mode 100644 index 0000000000000000000000000000000000000000..8d156f16ed50eeb6bdca714961db91e1c7ddbd6e GIT binary patch literal 21131 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 Jw!tPKfg>TKE0`DFuHdP#=P?T(%Sp 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 OiSWRAx>jLBkN*J~5dXsf literal 0 HcmV?d00001 diff --git a/doc/images/create_zone_23.png b/doc/images/create_zone_23.png new file mode 100644 index 0000000000000000000000000000000000000000..8bce36d58a3e2791c1cbf9fc785483b8e9dfcecd GIT binary patch literal 22723 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 KTcmyE_J07s$R2nA literal 0 HcmV?d00001 diff --git a/doc/images/create_zone_3.png b/doc/images/create_zone_3.png new file mode 100644 index 0000000000000000000000000000000000000000..abaf4068b58a3d953e8b1b6693ad7162b74da731 GIT binary patch literal 28120 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 literal 0 HcmV?d00001 diff --git a/doc/images/homard_1.png b/doc/images/homard_1.png new file mode 100644 index 0000000000000000000000000000000000000000..80006888b6d53ded57399db6b21a01c4b82c3dc8 GIT binary patch literal 12754 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

blJ@TRU$g1+ZuVz&Ai2c1{?DgoUlf>%Xchs7p#p z0vCU8ZS{QZ#Ft{nqZU!n$Ht N2?eecI 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 literal 0 HcmV?d00001 diff --git a/doc/images/lancement_2.png b/doc/images/lancement_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5713d51ddf823b88d24c24f61841d2f1ccd60d3 GIT binary patch literal 23848 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 TcY^-|0xx3&6a740`_O*@kr8j_ literal 0 HcmV?d00001 diff --git a/doc/images/lancement_3.png b/doc/images/lancement_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1eb64444cae32697a7fb54a5218e66db9687bf GIT binary patch literal 27974 zcmagGbyQVf)HZr(q?M8eK@g;oZcsqFkp@AK?(S5iOB$r4ySt=ITDrSC58QQr@Auv@ zzH$G!dmO@j4r{NN@yt1&X^5h{Bqka$8UzBt{3!Ka83KVHhCtx>P~pLy&&oG@;Kwr? z2?+=A6BT^ojY7~(ZMyPfSfEpzlwVO zOy+$sIzB$>uMfGCf_DB07TxA0{us|Q;n-A?z2K*h#J3BFho?lZ{QM)@+wtS1e{aTzR zK@2uREhlTb-ReV7ZzM(A=Sqe`-j+rucJ49F`mdR5q;>)bAK6)1>s?pZ^2f6CaXi0K z2LAmft|Uw?z}V~&DfD>|F2ecuY}vqL(Z8mpauGwG=|;zuo_D*IEy zP%q)DscG-+;hs%=o{j_7h= zlk>c6qZhJw%NZiA$nc|aI$D_Rnpn@v@J{A1#Uc`G73Z>9(ot1)g!VX9d?Kx7v>g1& z^j4#khB^)}VWHLGek~|8lPYr}Pod4}e!3f-aHdTAX@5#T#lr^dDQCoiw?uoG?{Vur z7V2N_cWX0o>i7bNiRM)U`qOCDL1L@LvsKQ=b6&!m-p4{M``h247&IT>-~|T<%BOHy zbp}4`>FGJyBC`jZO)VLjn3M$9UZ_@NGMtQ$kN<&Iv)Q#GJ$)!wn&xEQo~p_Hvv5zorNS0 z(;LrL)rc5PDjGagCPqeDx#a5eZ)sqm0o=z?m6hz;B--}#BO|57#bNH-FG)zyk;IY- zTQ-`D#&KOEj-ut@TAy%hJY<$@l&#FN;0@InI#zlfcmQ({tRa^V{=n$q3Tu>&!@f zWT_Xo-hao&o?&4tIT>CQY z(pTeU=wkpowO`g|eWWXan(2Z^fY0TEk7Hg{{Z2E{oR0_*4pG#~p+Tp?j>hN}P!p;3 zcXOlPzkmPg{<(01l3+#<2~zP%L0?}&HtE@Om}Sr`F%=MJM6UQ$Sfr$){gzCwP)79k zt95Z`eV~8TU;@ka!K{jc!szhu;aYcSjNR42EOpY}K>S-}O{e|o5{K;(W!_j>S=on& zhjbw?2BOmJY$H=sZm+uw6m0VRb5u$&2jbk4BY3b_tFJDwuVzAv&Z`Kv}-M+W$&+- zeb5o%1qEB$9`6PR2W7I3K11@0i@_XHc^$Ueo*rd_Lf>bB3n=dW-QDBk{V_Q?xw+sQ z*eRIgw`9QC-{E4Wibs>yePvDF_ynJn6W#LTZf$*?+wvbPctK7sFT+DaLn9-FJ+2sU z3nL>(PuF{ah(CjDk7l?yI5gRKUP@9!mXc-)3Iep%c0Tg{Ux+gzU`M9Rr2SlTTw%`&m*_(mWCvAFuY|Ls0Pi zOYj6`T+DD&oa3y{{wlihZN-hz1y$LF8`(eL&hYT?;J`qB-j^?5wzjrnp0z!k4PugT z73(%}y?dw1o+@A_W{rY`L?+;>SjiYI6_=E>dvNe@b83`yNl#B7&G4VNx4fGijk+yQ?ibm!wGIcr?R%%Yl72B zgOl)}ZUz+mP3kztl+@hYur6%hp` zB^h=xe=7IwT5V6MqEW7km~U{%%g)X&Ewu(#i$c)-Ju+HQ=g!VozBKEvUthj_*=JJK ze*zH2#m<D+phP717#~HD3GNEmOZjD zVE`CTU~*M-b<>HdI~{!`1tf19s7reF(HYv zznhvol$4%B91s4nF)~_?=X?Y>A|@%yZNL+sYVuS45s%p31X>TrcbAWwv@8l;3k%6Y zUbF;+`X;QzjAC0>`}|IO8=IR>Yk!_aOF4q&19Psjx)B^3i|aJ%LL0lgvGLxTpP!$Q zkZ|yA=z%fBH#0L+gp#uE{QP`zaj~YR#_U~kO$}%K!(@TV$B!R@I{^~_XA(OgeOd$z ziDH$-?m35uJe}`=oL>4u5c;>hopN0r3GR34nId2V#Kbz&_+5~J;VCOqK;GKeh$5Mt zot>VZ-rx%8h{7;^Gu9AoY-ALhlJXV@HBc<`6C*(jZ}&u*e%tx>XhK}v0dN9iSs#=O z@Y;UB)U-*RHGK@R`Q&8x!v}6AMhp%PxRuPbMLCj`^YDiw6o`U?0yTAZet!OJm8ps! zSWNeS7Znv1hv^6n0s=gIXJ@Chv~=HzuP=msVQ7dExYG`Q0%o0;q@=0w@vm`E$H&Lv z5fBP2GlaYb)=%HRidK9RC!Kqv21GZ1wkG+KBkm7$4SmJdb7JBNC)DlscDJ^+`;}6S z)VqcpnvTw_XG9Y3-+SI}CI|@$seX@)Q~-`klX1G*YywD{IC4*SHup0WewLO8&XmUPuzd121Q2n9* z0cOF|B)0v`4WMCKHZ~J+c=qPKQAj##EDAD*}pv zlX)K^P2U+lPz!QjOR7wmdU_LN=-(U#74O>6>N1o8M9jvF@5`O&mBHkq zXd-I{0ZbIL-R&1@0d@oclE7x`+6t_bU9xDa?FSW4vhTT~;+RYDr29qPRoCpx(X0=8 zd^}f?-lS?GWVhJ}hRp)b>ee0C?b_YSQfPB?6Nr-c)qy5J4RF4r+w-%txw*MxyB9Y% zH^94BeJTb%?&+ip+uhwA(!Of@lTp+DY~v#&QON7AZrNLAkpzYk?tXdVoO3M2HZ-`2 zh_sKS@%QHeA4I}x;2R&0522x>69!nAjxMjf+;*x^%{VYIG11@Oe`sh37{!H!g@6D4 zZ58suyg;*72UKfW*ebiP853IhWf11Bm`!2x+p9Hy_Usu3a)5ju9SsdBuYDkffcL{q z1R4L1BVRy=l&q|P^FgACc?4{Q@2orp#7*-22INfA*=@v^3smS>Sjuqe&+P49-K{)exL%?`R;J!2@@w3wRotYt)mTu`N*vbE4T50R%J#)v*r=6D=|t8YKrVJ3A#e z;b)^|33+LM?YduC@U-%Qx99ut+}43{cv5mmw73@+lnjNMTF9`y#2Fb?Olxp3gu2_> z`Vz7jOfm4-ib$kxk5aMXFzX?{EvoZ#cD7wdu5W~g*k?yaimEyJpU-}WQ3gUFu-%mBNzYVmI3r)STY)(4Kp-nC zlufZpdRSE^9UTG3j_eTMenh&wMj*#;n7!{`%=SYd;^H`{d$s519gAeuHGUEZ7W*!1 z)Id;~o<*2`Ma#f8>J?MPySbBYGd4xxw($r4RYU^$=1xqHT%^Sgb*~@*VW9!x>S}-> ze4PlDJ`j9^S)H!{NU|CQhsh&D5D`T_y^M>xATSUpJH4SM?d`=EgUJ;w5osvF6G# z3pcIW4`VxU>QTQ}T!Vj0m1IygR0g#Q9n2!c$17?+^SJVDeVnIJ=8dYZrsN~Gckt^4 z$R~(iC5{OXoW?jK>HkSjt++~PQ#nZ>kH!E?X%1J-srfR(H2--zfhdsFvlSqH;31Pp zV0ZsBq;qqw$f7tP21{O`2RBgrCy;wNJhMkql9E7lYPIt>Gn`>9B`Ds<)|gXAP`{Xp!e6Ys{m+$w2h3k^xF9?aBBRnCzNUOD82w*zL$_N zF*g1;H&?3DVBg`71fj%3Gcq!|KAi9UTmi)0jTdB!&A%cfiY3x;^Q1G%*8GAzDlQar`bvVZ@w;-Z%Aj z>tbSJKR|>W8rtM?Oin-`5j+YEC9ru@Q&au@{ntl})Ck>%tElPAY}Ig*1lR0^_f{)}@>PL07s1g$`{Di%t~@b<0E zaw`+ZM*!1bJK;J%Q%Dz};>N(h08#bv&W@B2=eu`9qobzmNdS;}Tpds$fJM825YfZK z0|HQoi;K(CQPZ(80oaJJ@bG>sT-;a?Eeuy<06EI}SYjX$;F_Rn&3=w|W`0A;)mGbB z7_6_^Rc3HLTAbo&-G%3th5=#a;P8OnIYCdrV()HlK*)xRXlQJ#s--0zoWbYBKu_P_ z)z#I};g|drosn^TbW~bWB9}c@Tv7ryXcOPm(sJl?Mc*NKE-o&v962gXayhg*E@{_b zc$Gt;LW+jqS)gaB@1UUrqHx*8Fv#om^(iV2{1Odd)^F7j_5{ItC_vtWgSa8@AR3mj4wh0;iIEmnBB|SO<#l4$;!_5xj*D4kGy`kJy#Hh#$l9|lz{W( zWM%Ce9)3;d5d#ko4^lk;iw0>B2>(BDaT6b?K`HZS^|3toLvS;@~o`jkdVj(A1}B0%vOE@(!c*VQ{32iBLtVO z@8lUS?alqYu+L*Nh=RUhQ_v!4fV3!1U`B?%sHk5`ingq5So50D(*wYW87{|5X$y}B zRip3zvcqgr@bh06+^6>wLw7_F5&8A@?lK&)fj5i{)fKf=-1+ULx{b&vDBmOlxm^x% z%onvTTzl@reEv^F>s(^uEs;H5n=g;7q~I_EhQk?;A`nc^EUX?b`rzaaTbi7C3IGwZ zq2TvS+OFFec2~?DY{&sI7sQrV2O>2(WPT+5pVjhvl_SJ-=Up-!G^Hnb=&!?ThB06||{Q91m{Ktfl>xscoBHQoZzmbuV0j5T? zmS7Un!Jf6D;d3&w@b!<^uru5)q`l0Dcp)=*1-@^!D~r@HtB9Z7epqEH^ss0~86At-)@+r`79T zb)prFt%weeaOsSg=a+)wD+nqgJQ$kr#|`{*eaf{^)K*l;%3h+3`6oe$?ge%pGnacaRM^6xkF|ARM9)ve^@@KdzAx9o4lnDzf`hVTeH z|HiU$h6GQp(7sMD1=BqrAD`Fzu|I!q?e2cG_HcF0$<5_-n}O~3&x3$Z!r2vO4W3ky zEO@BzJ^i9s@X&%@5tsM{yMw<3D7oKi@8U;u2R1?I7fVZ7>y*UAHx4P>KnwFZ?|geW zHUyOm3mJ;c-PCFXuoU_>pEY>GMY7a7# z5;W-Q>RNsNoHd{>0d__!40{J4^vKK88+h`J(d~0Y&(f$-{Idp30yg8mC?J$?H7S6% zi32gp{Uh`qoSEDbCu|C@@4*y^FB+Rub-TXI*jmgo!bQGau?u|AqROD&aJZ>adzfQ@ z{Eczw@7K`xx}4I`Clhq9E-d`fyS~`$rXnipur(AC9u89bjBnn24+%-)cPVAiB7{L4 zJ6rEyomX%QG#jCT@D)<;zjFSi+Mg<#VQG7Kfs0#Z&;eiZ=>X)E23gwrLLY9oGhpfk z(o!2&rWsz-8@l4Kg|U;4x)xRbc#U@w2%j$U1_u>MOh|$8Md*z{g(Bt3G+KQPFd5egD*Wq1*i+?0$;rPg^V@?4n$h&5J)*sEw% ze%Js}XSUuF)Hy9lbGz&76Ky^|z|zNaVFTrvoCXL)ncVB)bbYmpERxKKJqhF|?6ChW zm|i(w^DfWL&Q{D?a&i*FK0CL1M}#SLc|!U1-QV$7U#mfGkWsgB(!p8`GhuWylt;jD z)a@QbJs^Do%QNMH05J7l%&IvL`8f4IX#EBNW?$z1{?0vf!!Mgtr|ZD`1B9;Lzol00 z7H_GClrmUgh|nH@f<5`q`~`8d0~+kHSt}1=$T^ogr>~gh`%GffLMkgO(YVU|yNgUJ z+zzDmG_ohqMW9hUJE{+ycx5cAh8LIX$cbu<7dV7mzlY(71J<4>SoVA1{@zLkL`*eo%h_o ze+vx`-~I&##E?C&u+_hiz9|AZSc=4wC`U`JDH=z%392`{_7mjqNn z)yvds)i%how0&%hjhkDevIu~Sje~R2SzTQXTufy@-)`8t!CQy>4$>yvSJ&36 zKRSj;8QfpM_YP5xO6 zaJhy`_jY;U0gH)BDa-3^N~E#DztC&*S#-N$NogQjM!0DqvNpQ{UE!jurdu zGr%A?uWB~;<&vYO7Z;%^HmzgEDKNBX^^*B*2+rMKd;6EO%)`D`J4jt~e4f)P-RH$IFc{d$y2^Q{*w{Z-WwEx31CNl~tqmL($ZMU31y95*;<-hRC$rwOv%h%p zVr7KvrNGOJ%YAqU`#rA8s*brv>y!>xy3~%Z|NHoT5X*{6xrow;2V)@#QE*uYQi<>B z5py7WKRky}zCm4Bq!J>BP`-j^XE#_D!U?5%gX(_aTcS;(@kT74Tn7|VFFQ^#IDcEI zvPETJ3klhXdwTvdRoIz)R$O8@oZQ%6&tt&a-i@TA+p$DGU6znS#fgNdF$VDOq^GSw z_LrMSkG|1wm?V4YYdnZz#Qz&6=d+bmGQ6c?drrWj?g0W$P%d0`m2jX&{WS)*kATUY zPVqKC`KcO}TrrRsp_c5drDhTYJkU2wFcN^$ z&5z!x;TFkcE1}ONd&yW7r_U)!PEpGx)SjXMp@QlX#5-rpOpxYnqkwIFt@Xsfwd%{{ zqnGVt?vcmyZ)Pcpu`*ftWV9!l+#=do#w+OuL8b2LZNjl~$Amq2PD=V#^*$(F7 zEA79$aI4=4l2Pv;88PmSi1zlDM@HtOr$~uKaXVl+_iTCDboo>u88`Ubt1eWlSG{ec} zZ`VF>db_cFT48f77r#DwqDEc2*fj%q1_TAFNUJewe0HDrhEp2Q3H6LCTmz7K-%Gf2 z8wrb7W+G#hPfSm**$3(AUHL%c^ZK*!>lkLKqIh*bcKE5^*2~~xHJZG+kphuCUo4a^ zL&!mEsmSS^LsfbF8?UhVS%D(Px#{hBAgj+$pA$Z3b{iBn@Ustzg+s|-$Y(q$xprfunxQSM#J4nR2 z_dO>Q$)yeTZ5sAb9Rqw8^t@R}*CuU31 zkr3_nS?2%xwSNum_q>Pc_$M>*{-<_LN>Wq41_?+MS!wjl4 z0N_Iu6eMomef7P&==D9?Wn{Gfw92E1Omo`a05RvlW`8V;Yjc^sgE%4MNt7l9lH7$5 z3K?W!kw{ZhrhxgKX#4rLjK}5YzPCzXRARo9&A~759SlkFlBiyN)grm;L_esjhuA`{ zKfbLQgnxb@=o$Ple?CFPWVIOTlS9sbZF;s$bVx*ozagGS;&fyQ5G)G~0=MM}DAm|G z$sH{4j*X2mGLIx+=vSG1jU>Nl^>X3mea*v@7~@CCj7UqfkULQ~zN?)f#5CKg>n`y< zB}GkI8m__X$s0tJ@vyC3Y|}4yJ}j3{8_GGeELU`Ef<>kqDwRb6=C;yC#t7m^2Gk{wh9kJpku~C#;*hYUDD-Z2pg6Lb);%LY-u)&@Q>~kftGIO6(~Cbo!GT=xGsBw-ADORXrkv~6S6gA_jI!^UZ$r8C-QZt%y@%bu$7M6+yY78 z%Sn)%TeT3?$VitURMJ{Q<6Ktu0`HrQy4gTnELc#J*F6UU!r@>72Q{@1%bR@l-~Vmr z{`8`8)$KQI;khOkftnVJ8J@GLQK5Z)lcDJ5W(LToinYjZ*o0oUn_mjF!bxT}$EdeL z3F9GA$yz+#o(UN~-e?d%Kf!NUf{Mz@2oNf&w%>U^vj(_9fe!=5mHpusGyYjwkBVn6 z`z=}|$ae0`&2OBYX)%IN2NU8uItYz>qG#S8JN%^=e!Mw;xb*_+1Lu2teh);u?S~8o zb{jx}*`Ay9wOmb^N3;Tge+1o784w}95coZ@rT536J*iF*PtKDXcg<9w(5HIm@P%~T6>Q2n zC*$-gAb?d>gZ+owqk{!@-XJl>kjifR3;L5OAKy^xvnt!XM}mTH3~` zDV=U$0|!RSKzigHVqj%ON+x)-(O(dN@{})|dFBiU(Q7M3f-q~mX^_jFs>w@B>+kv& z3h|{Bk=Z}Im#$P76+HqLg0c>q+!F_HGUdSZlQzlr#w0$&tRkBETcV7PD53l8mH*xD z-?F^7QySu*jl6(}$Rz0Tx*WCL*==x+-IF>FL{mqut$Bj-B`Ul`grjElPR!a1bac(| zLIJUzF28e*IO(^?O6CbjuU60u7F?fB*P*?U*V|~m3op5s^xr%Y7Dq%(_fohtdh)6; zr1l#-?HS8k^YbRf3fIH^Dlebw@7G~C8x>Z7EnYxSOCV=DPGQDu!Y z-_^y%RPtW5zL^0Zze2rKc5iuEzF%zfP%HoqT@&bLb)o@oa%6CK7BCTVlwL7=E+-?<)3XFBCSqNb+OuhOC+5efBnhFyXW@Y zlsQ${;qif}6q4VIzCHTpCH?j3ZeqHgM7mBCsDsBI&P#sMBpTn9c=n7slFUOkm_p!& zmCY`$#fzVV0~#0@ZT!p64=a+cxMY)`FZpmuu+*C#Xh~S;c})ddZ4KvadB=6T9|~G$ zZlUAp=ancbvdhbw`8sZ$iq9tjC?BK=7;FfMs~t=S(goLbbQr5^Y8DoXBgoSj)ryih zJji*^5>v}W9?AGFSXs;IAf$qKt^fz9W~!#6nKv2rO7Sgz5A)fO(tZ7wfk(IT6N8Y% znO2Pwik5nl+|kmav_``3+z)@hYF+MAmxZh>hUySI{mmVZ$&(klFUEEoe=iy`p!z7T zP5+YWea9(G4ZK=HP(3AYVtqWR6eC-y@xo2RfUh5aO=PrNQ8AM!tFAshJ~Z^&%}os$ zqBIQsrmLPR(_Cx{=AjX+{{8|=1YzjK!gNWOW^w$-kD}Z*ThpUfGo^9!b^1bHjXX?; zp()(@2lEMqlsbjd!Vk7KQ1|5@Kk!F0SPmEG`6yT7U=B41xx05+THYJb2_4MMKLh(O z?68%jTH^2TF5^|8qLEgt=arok2wm&0?2ROh=D;8>wz5A91;1}@1mfXWOcytZB6~wG z)8gWgHVAW?jcCf$3ed%A%5VxYp4}Essxd)M23dAZM`TT_GZ(a|RzrBxju}j{~F$#3D zXZn0Dq#_1TS$6iHvKf!(ZBGQ8*Gttq3{G%%iqV|~-ilnW>*{s}PMZ={ zWye8FKn_rT+q|^VGA_-TCWYv;?8+ZAW?KH#R=1ZPLA<@Z0XWYfbj6GK&k^ZPPX#}V zeJBt{DXLR&s!7p7%F%O807)?zs&*}_R+g)CJmP`ntpAemq@U`UEiZ10ynX~>M<%w^ z;vLb(^`?hV?dm1RhLYOEDz%WeVx(NVN$)$ROj#EF-~v|e*NY8RBIiK^4jU&ITcz-K zic#0xR4f-L@d6Bg*^iaZgv`|D9Ra+i=%f~*CYah;oWIM7@13=JogW+$FX+5D|h!f zg$x1;o)en@mp&B=Q@YTT?~w#7k3pWvQLO4Rp`RKrI`20bx~`WM?$$!9VyMXY621BA z^mTN`BgobhnD`ZHm;O~OqF^~feA|v%Z!TvVYqr<9r%JG!>~k+#TrDl<hWU=4Ev|t=-uQ8A3i# z%j8gb^2$A%RvGH<`zj%i!eQ-pbAG@6_5#3`CoFQTeXn zYvA9Vu~LoFcg@Nku}Fv)XBX8ZLJuo_(ZZN74TPP{vDrQEF4D=#YqKRO$oa2qpB}Gb z>6(;2g0vgWjN5#p)1Od6e4}1+A_3Q9Y~crSXX)h7ygc2376JSDsT#p>2~@ zUpwU1(+cBD4F(=7?Gb5wnwE?1M*B0|X=#l2*AA3j8t?VBo_l>Xq1A2t%fW8UGT&wx zuplon;dpFqWn|^PX1q6=_gGWIb~qj+8tig7V8ALnlJ4btv>^yhj z`zdF++7%0|ZQOv*0A8Kdyfq6Y$kkcB1Y zxuw-SXgBC1;TCGTG(CwR%LdG;9JHyaT#(Fj+?4(sKPVa<9pL0-W_(j)aSo5LIGUDn zdp-&W0-&M9vHgqP_VwO857)`XFbSE^ME<(tvFwSF)FdLJ+h|a@9sDOCc&MU$)_-Uy zo@Tw!*Wkusx}!+P;1AZ=8H9j!ka5>_joTZsD;=b*NfZ=_F;_F_bG+1VXh>0Gq2Y4A zh_N@CC&437Yc+wRsgEkU~Ozxacj>=1o?rb6ZyU zLtCx8;mo2j&$KJUFO6S2*A#Eilb&`9*S>3Zmff{==1gk&13F4W(>$DraSjV4@EbNd zI*CLN73$}|lzB)UOQCHyUpKy6^YK;R5jpP;-E1#~CKKz)VIJ!ZgpSzU;W9H{OipUl z)HH*;du?SpsU?X1-94ZL@l0@<4zr7N$iiBq&jPV3N$0h@%YN)l}B7d87|-oFVFzQu2Q@8)mgAAJakyX@W0W z(Wrr)bv|Wp%?~U~Sae&>O-!Z@<|Zd60sDr#AszF@|6P;*Egw6Go=~jp?fnQ?XMk9H zd3g!)o1UxwdniWnbW@6pjZP{mO;b;IIX`~u#mu;)NmNaG{rX}qCYbV9h{5#BmyJDh zyZbAd{&uyZ;D7%TFLtXYx{MM60?aInv5Cm>IqS9Su3B4B1O#1XXKSbteD3Tljq>jfq0AkmQ&5SdzV)==SrSogi;{ z@Cb#6xZYK7gtFYJd{J^fc_PJbjQBU3m$f&%i0fSHjM z`xA%4-fIU3C=rJ|_%IazZE#`=$xy1>S-amPQis#xZ=wm0hQ?a`#*4L~B)VJAv4sY5 zHsa}%E-paA&uQTk8SywZBI;IJ^0TwxwFoSwM zF>z;Xw`Vk??dO81g+*+0Gnzd=OPPNMtCHuh@G!@DZQ@o>%~GDZdON|#=1b4{D-y|w zrMe1h6o_`69)hpce5uW{p37d2j}Hp+;>J$Jy~owkbF>djOY)cJAj`{0UqD+YBcr*s z6|CxNX0~XBH#qRg#N^l!XK>Ks#*->Q$)%ns%-J*jS5{@MwuXfRdY5oax^DA@6wQlk z+p6rC#3Yg>S@|~GQ#i=Q(P31QlH+AvugjCSwYmAHHgyS!yQ!&~4QD6L-aaYpIkf-e z&kuD=(sJ{ef%l*3+vnQoGKH>USq=%-gv?NruV3?d4!c7Mdn3r^H{7|tf(m|}^`iUT z#cnK}g7rduh0U@MEN}q4N_W7j0vU2pnV%`qzJ^{e7nP-B##rV9;=MK{&d%N*jEGIl ztYxBO-s|^tY=xwd1i0`1JN>4nwyPC}wlO)XWwY(Oaf zZ`bgai9M*jZJq|!9dFe04DvYSWQ(t#?-%xNqZhDYTUjNGP*SI!2{iq=9j5#i8>{9l zPY-e2GrnBuD4Nqs7oqe#qgfsq3Hy=p^XKULvp%a##hkLT?7Td%RFAXwJww>Ua-rrD znTk^3q1AAJ)-+HJ|J*V%bOY7ELuVrbGrE|#RRlvI`e&2m@6ckiba|u`n zTvl_&W@ctqR?vByw&>@9Vup^6@6zPC-@OCu5#y@aON$TcLT}!D9ZBT{RyF69ZNmZ} zJxuoX^#S%CXlzlfZ=QRBSmAbVf*b(qG4E`a1eg=hZEOrrMr@#Wy;7q4oUXq})F_Zn zHxG|Jrd48w?j|Wl70V?7O~%pDadK)3kTJ{7HY3On-8ZFws#2y|$E9dL{{CaXr-~Y2 z_^|dNNYxk{d){FizOqv6?3@~WXJpK2y65Ed6c;D6pYM}O7~bkfn*ls+bPD!AY`hKD za|U*79+!I--rgv*a(wDaN=3lCO-d*;lLsAd1j+MnvWD%x7a&|{x<7M(<|)y{(q?_`rZ+HG&>f$~wCpqV{X zf~&!6UE(T=%1L-gXX{|@ylOKYL%i$R}m-jtKV|6vN_s3^V zy8OE>l$W+f0w0Z}k?b491X~(e%s_T9;jNUbhq|_ z2=emf4#rc?z424)W2`_=*imj?o_P1R?akyBbW&&ViZ-BG*Xx^;DXZ-MjPx5kB`yWyYF7yvnW5!C@?jWI!-_hQ~VTO+gu$nm7*@fUZK$NRR@TFMPHoB>|-{}8MJbpjhbw$+ja#&fE&cAf6( zqGn=}v#U3b7Z4CoFVjnljirt^4S;25AqMP8pq*|GFvyBEs}g0mV1zWwe>mji@~w^k zZ%LLmwjeK$5FcNyO|b(!Sk&~S5KuXcR{{9TpbwSayF z_*w(~{q&5CIyL6_QaXVjq2>v&Bw{){N~6-H5{~}TW2=H-ZeOv27uwYudivez5^d0P z2*|dom5O9!C5Bz3K2WvB3?-eRqkm&z3(k)3-qIVkxk*;!+YT(XtY05L)!8hkU0vzB z9Nt+$RRoEMzO=YcLH&=%0@9N-C9F+NeqQb<5gu(xj1GBXLgwbQ5K!ixZcR&7X#sB| zB*aJMl-q{<@qARFCjx5L-k#PIuCl3!U#NhWV5 zy#8-VSb;#>!#F=Z{o8jJop~9L58Z^@G!~%$P}lSA+w1{pdFUNTLx2p0pclj9=o^N@ z+PX4+f~zYNS(6(7w5%~yQ#$l7cSJ!!YI*X4vNv3}ds9!rKI3X8q+BU=$GuI@(83qk+B_>X$6|k|5 znN~GOx4zX9`X6_WGu`vPG$KTY1h;{Uc6@SjsL1D7!4t*#@W9g8ve+OM#v=Ci_U7Z` zi}3@5jO7X=lr(u$)|Vk6A;8a5cVUz9#U&>G%M?d(a5yL9caHJ{qD{nQnds*y3V8N_ zVyA$Kp$Iqv6?TilRR6=AgMk1(r#)3o%~`-s8yX%4d@oH!#b3t%n zl_F;)?4iz0&Tn*$IWtbpmW(_C zq=tck9~}lXG&G8@8S<^f#NY!ueogEGDmiEXReA)OMZqsvjz;^`EUnE@uMBr-rQcq7 z$729QA08e8dPMwjJvR9Q8+CTro`j7aKOwP<~od%Ld{1Qi*VA2krVcERctv)#sb!>bdU`R@S1UguCtxZRTv}=bz zd)s$;ZZynGA&)D1h^zbD=7wssx9;`j`J#)FprF;|#a9!PyA1C+I>DAWjG2jvt@95$ zrR_aEG<QHrYgQH(V%g8JuuP((Dd0pv zz2f14p^}32PoBzI25)R0X%hS9P8_`?5X9uvR6$o;Nl3lZes?Ob*L)4=4U+e{N)=K~ zZ)|+$C-P_g83-=3Xg#A$WL>z~#yHrQ zngOlzt>$!ow63!98Qwvhk!0w&G8bn|PWzu{g0O+cs%d(O8g%?NSf{dkk-WWihlVh! zt5Idpv!8c0MX!buwh7|w5)C~<`9Mt$yspj<5~DS_PkzR$jn~1#I z0X8K>@qdV2JUW%q&d$yoL{Pwu1Wo4PbqEaQ03Jw;LfSh!;UO0n7c_N2osE724-cMz ze*^)n;#bk%2Q(|yH$LLp^S^ns1N!+utLE#svjr-P!cP6c%8J_kH?qGkA~}$HrS$gc z9e$B$Q@Ft(#Qmho5B9@s*GNXD{VfeH9;J|1=Q+_VAKzGT`KK}Nt zQQm@&W}7?6=q1&1Bnp+VKmHCCP3cpYSyISJ7of zL<92X%^Ma*M!F{?rF~Nj@<~jH_42Jkzl+SEsISD9LyftyhWHXSemLd#RAoCP^!K0t zx?eBSzYxE7{yP>EH9P4klp&u7u8Cd8s82?dBO^zkeUX_N;J)bS)&2dHgai}_8K8Jd zOUE>tWQu>o()WR0et%94TJDO9iU6ajUp9ZCxupdZg+0Bz;8sA>S&@3lt9vx|uG~VJ zkYSUQl$3K=t*bT~uk@_v}uhrPxfC>~%FW1~9y{i>ETN|9${}^7F7l%Cm zZSLy{RD{oAD=fif@%2kke1r3S2$94Q@h*;?H!}-09p*bfF?^0A@`&ikVYX%E$-qt| zsi$t^^Vq7du2DJ^@xA_T+2^&BX7m`o>4#RdN(&?>1(H6rrNF)+^X-ukux?Z5k$smv z3~A%bT2AB1yVME#^8Jnyl1LGdrW`4^X1DhQe_yt2f@(piLDvp#3L z9C@2w!JwQ6m@;Y4+#+Lc#H9XJaIzU%bVig|k}F1rJk!RP4V0FbKN`=Kf!bX7`udia zmjiM)=t2TLNU$C~0T8P6$AJ2V8$fCRZyJNrT}f$aDR9-+)<^zG>_55FIZWj(EiFN( z5@-aKl^p{7H~c^uH8a2y1kL0dwmhIs?DX^$G#;y0g3{~XU!da~@SZ`U=ozAab#--n zyGVf+86dZT&gPh+_@N|@?VYh~2oC6DB_@`}m)5|*stIxF{Q##(tI~LvvQxQ@{EoyhG4U3j97`qbURfG~EaYr$*7du2YEz zPmUg*j|x+~`>F`i8;c7I;QvuMn>Ed#M@=Xk&-xJBdbjtMgM$OKTY!L2ae|SUQFV#= z-Pi6P_<(K=a8z(`aFxmM+4Xfo;S^{q%WY*W_<#C34{)mgw~wEYtw^@4kQte&>=D_U zV`gL}va+&6qKqgcGg(I=TOyHF#6d>pF*1rHWIy-O^Z!53@ArHDPghr0*Okurem~>> zyzlq>^)1#KEVXd4w};gHN63C9zMEt!LH)@(LgduW)%ER-PmChM931Z<^|05LdPF$K<}G}M1^m1(>)a@thssI)rwG>Av>RrYQ2KK!&o8ZR zVimAXj!JfJ0mHfd5CN2d6ElP}AM+}UBCV6r#{8`g6b2@55>t8fGmSJm*13x=4QIEN zAlv+?haGsvcN^{_%k{Q9PF!*8V}uO%9(gi5@$@*^TCrqqQO+Hv%Cl#7yl>7-u%Zmq zcP-tVHgu(y9e_x&%fML`{* zyRuS+5fF{g=`t`e_-f6}+~Y_^oP0htYh(=Rk&Vg`*>D*UDSlZNqdUU@M392Yv%3tw zZ|_I;X+0Ib4k=#U&+& zhK5+L_^!gFK^yn9Nf>}WhDP7ocsDwJNYA@{m-lBDrCWh*FqMMpx77n~KJ{I&Rj+RE zjUP*gB^6HXFEmc2Rx=uB|J`0s=;w9^=S%tz(psGJ-<7pGr^n3f@pp9E>pwVIYs33l zd`LUR!ZL2u|Byj6a*STsx+y1PYo2SoqN++lR8;?2QSjjbq?T>Uo?aq_EHjwVK?8$I zXC*8=91@Wo?ktb!XlVz5y8%8}aOft4LO7Y4TSFLRmi~SwDG$!14$hXsF`yi@?}3jP z66H|)J>ZAXGDuw?S+X@;{E(uQyu@ms-BPrb0X1@ z@;yTbSN}xR*`Td@^SKLp=7)r4`3I4l$BC3JPjwil4_0AEG*McaG8Q@}I`G@Xz{Fh7 z9BG8Kw6rue?XW3xc6O;TKM#S0`$~)jBnk`C35O|f;Tut;2IHDO*I|aU-u*>Y3nuHA zH)}<&&!8^2yy9QzxR9y=s{+fTb1A=RNua|Z?Jt(pA;8DCgGtgZu>1`26U0#t;HU*_ zP*g-jd?MLaSYeU&kEeoy6a3Fxivz_)MMa=$owsbL2|`_Deh7dOc%Pu4 z#uqQRhGn7fOh`z8g^?GwdpR&iWj zH(m)lkY9;v@X_aoAQ<|_o0=dMGS(#D%s2Zx8@o0``>=z@YbP`Ck3iJzF|U5XZ%iZ# z<*K4WSi3(Fd^kKZk~q4#xe1#9sfTUFF!7C;m3<`GCVD{iJ6kQgjY$F# zI&l<=aWFSyeEj|Ex>KGMq3i-7vS0WX{86We-ZiJ_j`hH#IL(<5Sn1?itWjV1ENzDY zEqe*u_6t4|<5#)}F}XS3XgGBSVLQ(4?Cj9e(n1J-gf+5uxzd7i<~cxc%dO1h9y@`%tMcXccDG=X^*f4T@d!Geak+^5EPur(IuSn#!zN$LSnbco zN@1ioej%~?n{`)#_mx~HSN>Pu&|nrMFWP`(_(c63H;QF41xB`Y);XY=2w62kq6{P> zI;%h^>_!E=U2gBk(#mkJ$-t*+E2+Q0F(=ZVR%0wH^XMZC-r``=iNQgmxt}*vXBgmq z9i=mbU?M=4Y~x)UqqwYM(X~W4=tFGakI~^B*=4VV)x`n+;}orSB9)aBrfbS(X7vRH z(Iv^<6SFv{&&2q6V^AyR%vrxtimF)Tyn|S_E6tm9WMO?KJM9B0=7&(7m>hgKjrctk z#d^tSxga+e5=EKttrMp-pIe|YydsFzPm&W}3%&AlP4o)Wkq6tryOBr-t#3%cTR%TD zbSS-mF#Xe9xuw-NVdUP8P=Z%}B>N6SnkB`ovQkpDP*r+evfu+g2AhCDNnTzaB#l5e zU}Fm*KS@f8EVomGxv#9Otg1@PU}9zlHLi=bHPEN(t((JkUO;^VI&u{hT3K1(vcK_T ztQKd65rf+U!`0*BGYCjQq#mXtziB~(g=6nO!vO{;2v8|#`m=rd5494gf_8gH5ppP% zFhi&?TTbn8LH$h3KoRytiii`eTBIW=!{U;Xv2uH|?T6oLZrcKu0YVo^9q9gkm;pqu^iNfC+-0K6y#!MjIh`Z1xb>I@@ za2R{v(vlpTmBsxh$x$T7=J+E;5j6m0gdej5MK$@swm_WS|haHEu_eUxA1atXWl6K0pU*U($Nv0g*&1Dk}JX z@Jm-$7wx8$I;Ce==est2mGy2O+)G&cpgg)^Z_kUnjvkE_X<{c0ruuy4fJv+&t9 zIIj`OTd`{2bu(TmcmuQzK(bAk-$lqBg)hU{lsKr+0r)!Fu;JF4 zpN~_)CH-LWlhZOwh!ygzZzjGrNRYjAxfOQjmzj{P9BFCEHC>Ec3N2zoVLxmH zUE_m;+n2t^CaCYys*MCIM zCN8g9h66-dK}T*P_~&S~o9ECA==OxlC|%V1HYaHE+8Qcn*vD7l9I?JGDkkU73*apJhJ2s*{_T`+B@3(dM{B>5)x*_JE< z2q_4i7V2Xmcj+EA{Mu!7;Q>=ofh!~t?vOJG+$p5qJs-pUOV75Uh;ey;rFsG&Znxmd zJ2^=KI16|Y$#%G)rjuTJMrL-F8@roti_2t)jQo8B+w@RK%6TiEX)>k2YE7!Wn&ejE+57E87I;^a$66tRt%Lq6;A)x5gGSRTpfO8K}A)Vbly$gOx09)hE zJaAM%rmiJ3j8an71+ru=J3NctWUAi0!==tC%g}MPyqf)=5pArD8G(G@`X@=a@IpL1 z@wMZtFsC~x0ObM%AEb$iSlJg`uw`ytzPm?9&lMM&BtwV^POd8lhDM*GJcf88L`jm2 zG>C#R>~ST$t}wK)@H-qSfne3R`{Oc}3!6^}_t#B$)abR3v_hQ2r`NZT@8R>hj%uXU z?+~-|@Z9`uspaZ-CAXvIzw?yyL$Pecln<_MD_c1ujs8QXi?_d{2Auo8zQ18pEK0q5 zRW+$y-Wb9{gKb0jT;s}w;OygMRWme9HmqzYLb61i!(b!K4@UbL#?r3c(zK`Mi~nnI zn(L(}B)G($?!lq}yD*$}A|8-gn!$}L*l?N|N^fsiIx}pa5cv5044H4>!2pGALA)$= zT8--J?if0&vc%#M+~SV@wvVEWv)+DE^^skrQ-kHEcr3;DZwKSTqdT;F8+xV}!2EeJorMsj8 z%WYao!`Og(2a7QvQEY5%9+$}Z`d&nMLHwAsu(T8==b#B0Tb|mTTNAv3f-p0Z$vKGy zPek<((lL19f{Eb)Ly%Av(W(ZbYJy^jM>|EUnHDA3mu1aKmW_ z(%JB9wlykJL}@`0s@nzGj)~#nWKyaaCFT>7;^MQNubx2NcnP-CH_sfp7ZT!y6SX8c zqAL?eWAyL07Bj`>=Bd~Z2#71GqDGb>;rz?#VC+Kp2zPX~1w|RX`**eow7dZA`n_rI z31+;Igcd>>-^7mDwR4Y{=BA`VT45bNwl_FoF?Pcj7cS8W{-(&>Eyv1OW+FiO zp8W7aWF#R?vf((s^aqaHYJRR1+L*<`k5R3Se(Q62YDsxoC8`XaVyoT?Wa{sO0Cs`;vg=RcKTR#Z$`H~V>M8)k3w;M`f!Pubn))$WDA(y36F1Z zD}I_*_{ zm_px)Kt~8g#B>%V4jE$Ve2_@7Y#kF*%e_VW(#FtZ#c8cYH+X*&6}-HfF7avQWhM)Y z%${TC;~)P1V!rD$&)EhOgV9xX@5NmrHy7l8j^25aqz^|sUYdioj~Rp~559B@9E{Z- zZvHr#0#B^OiOjapWod z!NDvjwor$GkBf{y0DcdZ{@8q&@kyXWdN*Ket{Fc19(u{ruH38L;DP{` zjlMqF$45VN>}oydYJ^NZX5k2f_0V!$7`=Cg?tH`3C&q^QEr&Zxm+$VNH7T~2D;l%2 z-_6Y$8XB(~mHf8td|YiDaWBeBP!Of76Cd`5uOwTfRouid!hm?*;Z3gx)lTnf#A?s} z?nAB8lRqYohhzuY_8kNeBWj0JS$BQKd}S{1wC_(g6Ja)+!%u=k7fK*~`%dsacYHqo ziq+D{Nc|QX4M~xupv2+f)GL8C#92R-itJv1^*e@4FW%^$xIummVR1}6Y2`4a5K*5K z=?ZvGJfYL)D)8gHIEr6+Dv;ge!t(Gk@)f&n5q}qU9qZ*qF)F$oH)@K#7uf3b-77cY ztVP?ymB7g+B@rby$_w-=8r=2G9w2dLJnI$}>3m#hcb&a!G{DNz(vaHcb%zs^pVV@Ojw}({Ag`LMUG%4bdHI zYi;{ZY2VfBHq$%-yFSos0*^S&)$v+U`<~~w&!4A-hU~3dMpqwc83hrgKdaIeH&8RA z(qn&?nf+H@51*Q!l!>W4*pu{SSQor_c#nmJd`b^(Mw~tSRPtnv8?F5OUpYReBLMHC zjGnX~Y@tg%`E#P~@fzk9gXp7t+j#$7y}6|Ny~unkqT?Gf?vtT*(HO&XF(`|Gnc<2) zhkeNq9~HDkWYb62~j$j#pmZo z$#UYH_WQ@YaEP#WJN#UX{hTgfLF#qsLmM8#{4MFkT_U>k2>GUkFRL?;GyW1`H^{?3Hi+&~YFeNs(__-Zn$vvm&~K5{+HNtsVl z87D|c+`%b7xi<6K zmZr}c!=Xw#xZ>`242~Pa?5A8H4!o$y z1Pf+d&U00lo&nmi?(-+eS;%*GyhEj=yqSiF<-QGu{)u^(O315L!trBp_=}~Ld3K9X z@u5T3*&l;%%{+%7$aos3GE9CaQBk3!InE^6NI_0T?<)B%ds(BI08pmDxo}b!>Zka%NrP!$%_j%?PcGrV+-$ zl0vfB2l#~e=H^WUG|MYMcdBL3)0g9%4?7~w+#5=NLp~9Fa(nyrb;WP`4O#@17U&J` z(Z=yXjK-=zbp#U6zErY#L(VLu^O~wgL|)!pDUkvr4HbiY?vdt*6ay{|V_d#+Kt1aB zc)ROH3nF{)UY(f5F}N3F#CVQksu~1lqxth}$3H6Igii8{vbnYQAs*V4qudu7*C{_o zQvo8Uj%UjnIsECdi1~Gp3dL|?If%3EIOP-ljBz9M9;LIlJ7h!A&pIuih+k)c*lVSu z%M3%({CV*TZyHi%yzF=(%5s;B;@u^Otyh6{WMO$KmDRx)B?LwDuLEG1M54#EJ6>YT z`y?tQy%qogQb}N=z=L-TP#@3)%ySvKg$-g+^X3JK>Eq1QnRNKH>@<$whtiL@nFGrs zq!L2&-}lD?=tx=21^uv0@Ag{bFtT@k4sS)BA~Rr?_Wy;m{2kuN&^!@E&CGlg;Em4C zbwHIk5v3SOO;F}JuLXOig#|QzcV+y4MUw;J69Rc&m%jD(3JVLzf4Y%0Wn60h{Y!2X zNCmmMGr&#~AD+Wq9Z_fTEf+(qo#2zM;#pD`t9LsdpKCU{=t>@uTe8+)nXI5(KVhMr zDfRN=3e>Z3CaH(&v#8{6h8>gp^>5GpZg`%zW_R3~hg@=v&G{{|Y!mH>euqA#HE?T4C|)6i%L?XiuQt;2IVMwyK^ zT!*LRdPPw&pRz)B0|(Tt0Ali9os{S2=kIXG!7UB$+y5AU8cLQgdxeKmP!8wlH6K zWp?Fka_z~^2kY0!Jk+tCUkzyjafF$U`iO|0`JSg2Y(cyOjXBx>{$I|dw+&ry-UQL& zI9@1x{G)z3IrMxd;35Lq3XWBks?OiFaTkBZ8QwOod~f}Gc*dKR?l&LAq#L6PW=SK& z!aIxjjJ%Uo1rk&3fOaK%qZ@$Ds6#!#nVFcFfYJ>Wn5wF(oLtCs-#-~eg@OMAF*y@$!Cr6i&3bJ%}o|)N6$ zORqY1rlhaIlLVF=;#uuMC6cgenBFU=*pXyeU{zb-FpWIQ=SlT2FYW$_f}Wk zVa$Tk1an$nxy!uq(KRkZQU%s%BT-lvBOdGi8+VfMce5ZMh!6oRweiNgqX6vX)6&$8gQFKFo-nxzh@@?8`9W18NpQ?! zhtod@QhGEvb;)=T^!^KQ3|rq$EIj=!8!lYvR`R zJQ+-mIH=h``ho?68z16=OEWXJAZt-ZBqZoMITd!lNwhko;0850&uBG?({o$K?*&`l zl`?`3cgDCuP_aR}VY%p@RlCGvte%-!W(VD2^%TeQ#F(iUF2t2~e-nxj!rqH$FnB{_ z{=QNUv?A;y-Iz3NfH@0L-m%>noil)$v1d2SN|AY9=G4!9=1c})FrnEcQEMK?mRG7+ z?=efdNe=`cfJj3l=plmdq zt;U>_U*G@<#4>RELZ7#<(q#zF(sQK==7M*wD5|SJXn0izA0LHUxyPEaeRp#s`Zx)+ zAoiiD!)W&A5AnTY1?1NH+FD&9l6(Iz)j46WiKC;zivnn`{AwC#J@eDlBHn2 z_}ciDWv8+2+H@<3*xcv70D0ZWqremX$Nxq?FOMOb{?2^n3krWyilc)>=iQ&Rv3q{r z>2+qaO<7G~!qzWC^%Q|?!1$kjAe6%q+4If)9-AB|;o(BRdE?iyv1hF|33QKmah_Dz z)1VJdivS-2H0BGRfVJ@5fmRfs4o85(~eC-e-O0m^ozG`JS9nRf@Y_qd8nKJ|Wba0|6ME+FNm zh}G?b=XLDwjfGSHSSL`Bsg_t+AeHJno*J5ANS*Z#k#&bn@p<+`a+|KZ{JDi73TAT*=ENxYcmKtZZ#*=+$tE^DV&# zJ*ZDFI*~|3zDl^&B=n9d&hnm>xjG;Cmkn zPwwb`nthSKL5Bi{rJh{weyqw}elrk*T5XJuC$$t^q?NP>!l#{f&a+fAGsCu0zPpKm z9)LxJ8w4*6_bBEZ2+crSTo?P&<2bU?->#*oIj}^{^fDnM7B&rkZBkT_h410eTZAwy z=-~5%+V3QzSbJ;h@m)}KRkSjmjmuI;#B&4Ei;vZGWj~gC?6T&mfsPvAHJf)|$i60X zoqTnM;gS~*jwc0mXuyYPDtO^G7D5G-L9WbeNV{rvWn{{;?@|M0ui=iLBqH|AWm-gg zmnjhiV?+jd1hTSx$X-k^4Q?Bl8#oU8`=Hn8`%*DtBr;{ZhnRxGzRUz8&JBV)7!L3d zSB#IaW2Az0nQPF-!F3HrM!@WJD9FcG=fA;s!WQ?1QK}DqIN%6Z_4P^Nv;wqUFvf<5 z8KN%0{mCB8QQi_g+BnS%R_01iz{rSTyqdeEi{riZ65+l%?t0T5p+Ui2@EUe?_!;l! zAVP%#LH&>ZRyC3I&fCb(^{3%SvnBq)S4EEv$gA4hHC7w;C9#dac-U!++gNFFj?3`| zKlmn~gaWt_9Q7gXWqA+EoaSm%&kVIc->3#QahOwfjQ~OOg5(D*I?yrs3_BG$c>Dj}kDES( z&I|1Ic%cXclz8i4$%hEv^71l#qasf22u9_(fOO`7c*Y3FR5#JEB0wxVH9-roq2Vo1 z6o}#M2sW(5-AXXY!Bbiwn?R#QsRa8y6y^wcp{HqS*zG`syO&o3u+!3kEG(R=0p&wZ z4u?n(kS^omC{i0>MSv<7E{W0g=fvVMVOv$0p=$J~#-d>=yN+9YZrOh5`y7RTi4h)4 z6Jr$7lnQ*-H*Re1Y`F0A7w-rqoWVl~i;3k0EzZu*!!W@Q0p|RDrNqpt#4};<-z%Iu zcWz+rzD_QWubXsPnGk!Qh_ex?sy7^)JJ{Py7cUy3mtv*Y>fk`PJOS8!`6y3bhNJhvqHC5A^U6l zHu@SCUJ&!P`crpzUw=Pvz9?Fb#>(oy0itk>!qF_f7Ia$IfDAe{Gcz+k@8IZo5xnTZ z!NI9t{$3*#9^I?)fXhebtcux^k6b4|1FGHWaoSucM}(Mms$Uj#zWzP(VNRg`^V9%B zp~5Fc0ov*}Oc&T93{C(W3Z_indE6`Xz3DheO0OpcT2`}n9qev(aC4Ykn0zZ1C<|Sl zltMgeifZbU#bp2}?x|9?mL{{QC>9GuL$@FfjfJdJxW8bVE3OQ}@BI_$py D)idsI literal 0 HcmV?d00001 diff --git a/src/HOMARD/HOMARD_Boundary.cxx b/src/HOMARD/HOMARD_Boundary.cxx index b20cb409..185be49f 100644 --- a/src/HOMARD/HOMARD_Boundary.cxx +++ b/src/HOMARD/HOMARD_Boundary.cxx @@ -64,36 +64,30 @@ std::string HOMARD_Boundary::GetDumpPython() const { std::ostringstream aScript; aScript << "\n# Creation of the "; - if ( _BoundaryType == 0 ) { aScript << "discrete boundary " << _NomBoundary << "\n";} - if ( _BoundaryType == 1 ) { aScript << "cylinder " << _NomBoundary << "\n";} - if ( _BoundaryType == 2 ) { aScript << "sphere " << _NomBoundary << "\n"; } - - aScript << "\t" << _NomBoundary << " = homard.CreateBoundary('" << _NomBoundary ; - aScript << "', " << _BoundaryType << ")\n"; // switch (_BoundaryType) { case 0: { - aScript << "\t" <<_NomBoundary << ".SetMeshFile('"; - aScript << _MeshFile << "')\n"; - aScript << "\t" <<_NomBoundary << ".SetMeshName('"; - aScript << _MeshName << "')\n"; - break; + aScript << "discrete boundary " << _NomBoundary << "\n"; + aScript << "\t" << _NomBoundary << " = homard.CreateBoundaryDi('" << _NomBoundary << "', "; + aScript << "'" << _MeshName << "', "; + aScript << "'" << _MeshFile << "')\n"; + break ; } - case 1: { - aScript << "\t" << _NomBoundary << ".SetCylinder(" ; + aScript << "cylinder " << _NomBoundary << "\n"; + aScript << "\t" << _NomBoundary << " = homard.CreateBoundaryCylinder('" << _NomBoundary << "', "; aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _rayon << ")\n"; - break; + break ; } - case 2: { - aScript << "\t" << _NomBoundary << ".SetSphere(" ; + aScript << "sphere" << _NomBoundary << "\n"; + aScript << "\t" << _NomBoundary << " = homard.CreateBoundarySphere('" << _NomBoundary << "', "; aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _rayon << ")\n"; - break; + break ; } } @@ -167,27 +161,35 @@ std::vector HOMARD_Boundary::GetLimit() const } //======================================================================================= -std::vector HOMARD_Boundary::GetCylinder() const -{ - std::vector mesCoor; - mesCoor.push_back( _Xcentre ); - mesCoor.push_back( _Ycentre ); - mesCoor.push_back( _Zcentre ); - mesCoor.push_back( _Xaxe ); - mesCoor.push_back( _Yaxe ); - mesCoor.push_back( _Zaxe ); - mesCoor.push_back( _rayon ); - return mesCoor; -} - -//======================================================================================= -std::vector HOMARD_Boundary::GetSphere() const +std::vector HOMARD_Boundary::GetCoords() const { std::vector mesCoor; - mesCoor.push_back( _Xcentre ); - mesCoor.push_back( _Ycentre ); - mesCoor.push_back( _Zcentre ); - mesCoor.push_back( _rayon ); +// + switch (_BoundaryType) + { +// Cylindre + case 1: + { + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + mesCoor.push_back( _Xaxe ); + mesCoor.push_back( _Yaxe ); + mesCoor.push_back( _Zaxe ); + mesCoor.push_back( _rayon ); + break ; + } +// Sphere + case 2: + { + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + mesCoor.push_back( _rayon ); + break ; + } + ASSERT ( _BoundaryType == -1 ) ; + } return mesCoor; } //============================================================================= diff --git a/src/HOMARD/HOMARD_Boundary.hxx b/src/HOMARD/HOMARD_Boundary.hxx index bc5631c0..0d69a704 100644 --- a/src/HOMARD/HOMARD_Boundary.hxx +++ b/src/HOMARD/HOMARD_Boundary.hxx @@ -50,10 +50,8 @@ public: void SetCylinder( double X0, double X1, double X2, double X3, double X4, double X5, double X6 ); - std::vector GetCylinder() const; - void SetSphere( double X0, double X1, double X2, double X3 ); - std::vector GetSphere() const; + std::vector GetCoords() const; void SetBoundaryType( int BoundaryType ); int GetBoundaryType() const; diff --git a/src/HOMARD/HOMARD_Cas.cxx b/src/HOMARD/HOMARD_Cas.cxx index eef11842..83403f6f 100644 --- a/src/HOMARD/HOMARD_Cas.cxx +++ b/src/HOMARD/HOMARD_Cas.cxx @@ -102,9 +102,15 @@ std::string HOMARD_Cas::GetDumpPython() const aScript << *it << "')\n"; it++; } + if ( _NivMax > 0 ) + { + aScript << "\t" <<_NomCas << ".SetNivMax("; + aScript << _NivMax << ")\n"; + aScript << "\t" <<_NomCas << ".SetDiamMin("; + aScript << _DiamMin << ")\n"; + } return aScript.str(); } -//AddBoundaryGroup( 'cyl_4', 'T2_INT' ) //============================================================================= void HOMARD_Cas::AddIteration( const char* NomIteration ) //============================================================================= @@ -224,4 +230,28 @@ void HOMARD_Cas::SupprBoundaryGroup() { _ListBoundaryGroup.clear(); } +//============================================================================= +void HOMARD_Cas::SetNivMax( int NivMax ) +//============================================================================= +{ + _NivMax = NivMax; +} +//============================================================================= +const int HOMARD_Cas::GetNivMax() const +//============================================================================= +{ + return _NivMax; +} +//============================================================================= +void HOMARD_Cas::SetDiamMin( double DiamMin ) +//============================================================================= +{ + _DiamMin = DiamMin; +} +//============================================================================= +const double HOMARD_Cas::GetDiamMin() const +//============================================================================= +{ + return _DiamMin; +} diff --git a/src/HOMARD/HOMARD_Cas.hxx b/src/HOMARD/HOMARD_Cas.hxx index 0c393040..b9f580ea 100644 --- a/src/HOMARD/HOMARD_Cas.hxx +++ b/src/HOMARD/HOMARD_Cas.hxx @@ -45,6 +45,12 @@ public: const int GetConfType() const; int GetNumber(); + void SetNivMax( int NivMax ); + const int GetNivMax() const; + + void SetDiamMin( double DiamMin ); + const double GetDiamMin() const; + void AddIteration( const char* NomIteration ); const std::list& GetIterations() const; void SupprIterations(); @@ -71,6 +77,8 @@ private: std::string _NomCas; std::string _NomDir; int _ConfType; + int _NivMax; + double _DiamMin; std::vector _Boite; // cf HomardQTCommun pour structure du vecteur std::list _ListGroup; diff --git a/src/HOMARD/HOMARD_DriverTools.cxx b/src/HOMARD/HOMARD_DriverTools.cxx index d04d0067..897069ae 100644 --- a/src/HOMARD/HOMARD_DriverTools.cxx +++ b/src/HOMARD/HOMARD_DriverTools.cxx @@ -39,13 +39,13 @@ namespace HOMARD /*! \brief Read next chunk of data from the string \internal - + The function tries to read next chunk of the data from the input string \a str. The parameter \a start specifies the start position of next chunk. If the operation read the chunk successfully, after its completion this parameter will refer to the start position of the next chunk. The function returns resulting chunk as a string. The status of the operation is returned via \a ok parameter. - + \param str source data stream string \param start start position to get next chunk \param ok in this variable the status of the chunk reading operation is returned @@ -129,6 +129,11 @@ namespace HOMARD os << separator() << ListString.size(); for ( it = ListString.begin(); it != ListString.end(); ++it ) os << separator() << *it; + + os << separator() << cas.GetNivMax(); + os << separator() << cas.GetDiamMin(); + +// MESSAGE( ". Fin avec "< ListString = hypothesis.GetIterations(); std::list::const_iterator it; os << separator() << ListString.size(); @@ -219,6 +226,8 @@ namespace HOMARD os << separator() << ListString.size(); for ( it = ListString.begin(); it != ListString.end(); ++it ) os << separator() << *it; + +// MESSAGE( ". Fin avec "< box = zone.GetBox(); - for ( int i = 0; i < box.size(); i++ ) - os << separator() << ( i < box.size() ? box[i] : 0. ); - - std::vector sphere = zone.GetSphere(); - for ( int i = 0; i < 4; i++ ) - os << separator() << ( i < sphere.size() ? sphere[i] : 0. ); + std::vector coords = zone.GetCoords(); + for ( int i = 0; i < coords.size(); i++ ) + os << separator() << ( i < coords.size() ? coords[i] : 0. ); std::vector limit = zone.GetLimit(); for ( int i = 0; i < 3; i++ ) @@ -253,9 +259,9 @@ namespace HOMARD std::list::const_iterator it; for ( it = hypos.begin(); it != hypos.end(); ++it ) os << separator() << *it; - return os.str(); - +// MESSAGE( ". Fin avec "< coor = boundary.GetLimit(); - for ( int i = 0; i < coor.size(); i++ ) - os << separator() << coor[i]; - - coor = boundary.GetCylinder() ; - for ( int i = 0; i < coor.size(); i++ ) - os << separator() << coor[i]; - coor = boundary.GetSphere() ; - for ( int i = 0; i < coor.size(); i++ ) - os << separator() << coor[i]; - return os.str(); + if ( BoundaryType == 0 ) + { + os << separator() << boundary.GetMeshName(); + os << separator() << boundary.GetMeshFile(); + } + else { + std::vector coor = boundary.GetCoords() ; + for ( int i = 0; i < coor.size(); i++ ) + os << separator() << coor[i]; + std::vector limit = boundary.GetLimit(); + for ( int i = 0; i < limit.size(); i++ ) + os << separator() << limit[i]; + } std::list ListString = boundary.GetGroups(); std::list::const_iterator it; @@ -295,6 +303,8 @@ namespace HOMARD for ( it = ListString.begin(); it != ListString.end(); ++it ) os << separator() << *it; +// MESSAGE( ". Fin avec "< coords; - coords.resize( 6 ); - for ( int i = 0; i < 6; i++ ) { - chunk = getNextChunk( stream, start, ok ); - if ( !ok ) return false; - coords[i] = strtod( chunk.c_str(), 0 ); - } - zone.SetBox( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5] ); - // - for ( int i = 0; i < 4; i++ ) { + int lgcoords ; + if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) ) { lgcoords = 6 ; } + else if ( ZoneType == 4 ) { lgcoords = 4 ; } + else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) ) { lgcoords = 8 ; } + else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) ) { lgcoords = 9 ; } + else return false; + coords.resize( lgcoords ); + for ( int i = 0; i < lgcoords; i++ ) { chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; coords[i] = strtod( chunk.c_str(), 0 ); } - zone.SetSphere( coords[0], coords[1], coords[2], coords[3] ); - - // + if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) ) + { zone.SetBox( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5] ); } + else if ( ZoneType == 4 ) + { zone.SetSphere( coords[0], coords[1], coords[2], coords[3] ); } + else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) ) + { zone.SetCylinder( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7] ); } + else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) ) + { zone.SetPipe( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7], coords[8] ); } + // Remarque : la taille de coords est suffisante pour les limites for ( int i = 0; i < 3; i++ ) { chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; @@ -611,7 +641,6 @@ namespace HOMARD return true; } - // // 2.5. Restauration d'une frontiere // ================================= @@ -634,46 +663,51 @@ namespace HOMARD chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; - boundary.SetBoundaryType(atoi( chunk.c_str()) ); + int BoundaryType = atoi( chunk.c_str() ) ; + boundary.SetBoundaryType( BoundaryType ); chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; boundary.SetCaseCreation( chunk.c_str() ); - chunk = getNextChunk( stream, start, ok ); - if ( !ok ) return false; - boundary.SetMeshFile( chunk.c_str() ); - - chunk = getNextChunk( stream, start, ok ); - if ( !ok ) return false; - boundary.SetMeshName( chunk.c_str() ); - - - std::vector coords; - coords.resize( 3 ); - for ( int i = 0; i < 3; i++ ) { + // Si analytique, les coordonnees des frontieres : le nombre depend du type + // Si discret, le maillage + int lgcoords ; + if ( BoundaryType == 1 ) { lgcoords = 7 ; } + else if ( BoundaryType == 2 ) { lgcoords = 4 ; } + else { lgcoords = 0 ; } +// + if ( lgcoords == 0 ) + { chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; - coords[i] = strtod( chunk.c_str(), 0 ); - } - boundary.SetLimit( coords[0], coords[1], coords[2]); + boundary.SetMeshName( chunk.c_str() ); - coords.resize( 7 ); - for ( int i = 0; i < 7; i++ ) { chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; - coords[i] = strtod( chunk.c_str(), 0 ); + boundary.SetMeshFile( chunk.c_str() ); } - boundary.SetCylinder(coords[0],coords[1],coords[2],coords[3],coords[4],coords[5],coords[6]); - - coords.resize( 4 ); - for ( int i = 0; i < 4; i++ ) { - chunk = getNextChunk( stream, start, ok ); - if ( !ok ) return false; - coords[i] = strtod( chunk.c_str(), 0 ); + else + { std::vector coords; + coords.resize( lgcoords ); + for ( int i = 0; i < lgcoords; i++ ) { + chunk = getNextChunk( stream, start, ok ); + if ( !ok ) return false; + coords[i] = strtod( chunk.c_str(), 0 ); + } + if ( BoundaryType == 1 ) + { boundary.SetCylinder(coords[0],coords[1],coords[2],coords[3],coords[4],coords[5],coords[6]); } + else if ( BoundaryType == 2 ) + { boundary.SetSphere( coords[0], coords[1], coords[2], coords[3]); } + // Remarque : la taille de coords est suffisante pour les limites + for ( int i = 0; i < 3; i++ ) { + chunk = getNextChunk( stream, start, ok ); + if ( !ok ) return false; + coords[i] = strtod( chunk.c_str(), 0 ); + } + boundary.SetLimit( coords[0], coords[1], coords[2]); } - boundary.SetSphere( coords[0], coords[1], coords[2], coords[3]); - + // Les groupes chunk = getNextChunk( stream, start, ok ); if ( !ok ) return false; int size = atoi( chunk.c_str() ); diff --git a/src/HOMARD/HOMARD_Hypothesis.cxx b/src/HOMARD/HOMARD_Hypothesis.cxx index f43067f7..15b226ab 100644 --- a/src/HOMARD/HOMARD_Hypothesis.cxx +++ b/src/HOMARD/HOMARD_Hypothesis.cxx @@ -36,7 +36,7 @@ HOMARD_Hypothesis::HOMARD_Hypothesis(): _Field(""), _TypeThR(0), _ThreshR(0), _TypeThC(0), _ThreshC(0), - _UsCmpI(0), _TypeFieldInterp(0) + _UsField(0), _UsCmpI(0), _TypeFieldInterp(0) { MESSAGE("HOMARD_Hypothesis"); } @@ -88,7 +88,7 @@ std::string HOMARD_Hypothesis::GetName() const std::string HOMARD_Hypothesis::GetDumpPython() const { std::ostringstream aScript; - aScript << "\n# Creation of the hypothesis " << _NomHypo << "\n" ; + aScript << "\n# Creation of the hypothesis " << _NomHypo << "\n" ; aScript << "\t" << _NomHypo << " = homard.CreateHypothesis('" << _NomHypo << "')\n"; aScript << "\t" << _NomHypo << ".SetAdapRefinUnRef(" << _TypeAdap << ", " << _TypeRaff << ", " << _TypeDera << ")\n"; @@ -104,9 +104,10 @@ std::string HOMARD_Hypothesis::GetDumpPython() const if ( _TypeAdap == 1 ) { aScript << "\t" << _NomHypo << ".SetField('" << _Field << "')\n"; + aScript << "\t" << _NomHypo << ".SetUseField(" << _UsField << ")\n"; aScript << "\t" << _NomHypo << ".SetUseComp(" << _UsCmpI << ")\n"; std::list::const_iterator it_comp = _ListComposant.begin(); - while(it_comp != _ListComposant.end()) + while(it_comp != _ListComposant.end()) { aScript << "\t" << _NomHypo << ".AddComp('" << *it_comp << "')\n"; it_comp++; @@ -225,7 +226,7 @@ void HOMARD_Hypothesis::SetUseComp( int UsCmpI ) void HOMARD_Hypothesis::SetUseField( int UsField ) { ASSERT(!((UsField < 0) or (UsField > 1 ))); - MESSAGE( "SetUseField a programmer "); + _UsField = UsField; } //============================================================================= @@ -236,45 +237,32 @@ std::string HOMARD_Hypothesis::GetFieldName() const { return _Field; } - -//============================================================================= -/*! -*/ //============================================================================= int HOMARD_Hypothesis::GetRefinThrType() const { return _TypeThR; } - -//============================================================================= -/*! -*/ //============================================================================= double HOMARD_Hypothesis::GetThreshR() const { return _ThreshR; } - -//============================================================================= -/*! -*/ //============================================================================= int HOMARD_Hypothesis::GetUnRefThrType() const { return _TypeThC; } -//============================================================================= -/*! -*/ //============================================================================= double HOMARD_Hypothesis::GetThreshC() const { return _ThreshC; } //============================================================================= -/*! -*/ +int HOMARD_Hypothesis::GetUseField() const +{ + return _UsField; +} //============================================================================= int HOMARD_Hypothesis::GetUseCompI() const { @@ -357,7 +345,7 @@ void HOMARD_Hypothesis::SetGroups( const std::list& ListGroup ) { _ListGroupSelected.clear(); std::list::const_iterator it = ListGroup.begin(); - while(it != ListGroup.end()) + while(it != ListGroup.end()) _ListGroupSelected.push_back((*it++)); } //============================================================================= diff --git a/src/HOMARD/HOMARD_Hypothesis.hxx b/src/HOMARD/HOMARD_Hypothesis.hxx index d380aca4..6b6faebb 100644 --- a/src/HOMARD/HOMARD_Hypothesis.hxx +++ b/src/HOMARD/HOMARD_Hypothesis.hxx @@ -57,6 +57,7 @@ public: double GetThreshR() const; int GetUnRefThrType() const; double GetThreshC() const; + int GetUseField() const; int GetUseCompI() const; void AddComp( const char* NomComposant ); @@ -89,8 +90,8 @@ private: std::string _NomHypo; std::string _NomCasCreation; - int _TypeAdap; // -1 pour une adapation Uniforme, - // 0 si l adaptation depend des zones, + int _TypeAdap; // -1 pour une adapation Uniforme, + // 0 si l adaptation depend des zones, // 1 pour des champs int _TypeRaff; @@ -101,9 +102,10 @@ private: int _TypeThC; double _ThreshR; double _ThreshC; + int _UsField; int _UsCmpI; - int _TypeFieldInterp; // 0 pour aucune interpolation, - // 1 pour interpolation de tous les champs, + int _TypeFieldInterp; // 0 pour aucune interpolation, + // 1 pour interpolation de tous les champs, // 2 pour une liste std::list _ListIter; diff --git a/src/HOMARD/HOMARD_Zone.cxx b/src/HOMARD/HOMARD_Zone.cxx index 924d0e3f..9adfdeb8 100644 --- a/src/HOMARD/HOMARD_Zone.cxx +++ b/src/HOMARD/HOMARD_Zone.cxx @@ -33,22 +33,23 @@ HOMARD_Zone::HOMARD_Zone(): _NomZone( "" ),_ZoneType( 2 ), _Xmin( 0 ), _Xmax( 0 ), _Ymin( 0 ), _Ymax( 0 ), _Zmin( 0 ), _Zmax( 0 ), - _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _rayon( 0 ), + _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _Rayon( 0 ), + _Xaxe( 0 ), _Yaxe( 0 ), _Zaxe( 0 ), _Haut( 0 ), _Xincr( 0 ), _Yincr( 0 ), _Zincr( 0 ) { - MESSAGE("HOMARD_Zone"); + MESSAGE("HOMARD_Zone") ; } //============================================================================= HOMARD_Zone::~HOMARD_Zone() { - MESSAGE("~HOMARD_Zone"); + MESSAGE("~HOMARD_Zone") ; } //============================================================================= void HOMARD_Zone::SetName( const char* NomZone ) { - _NomZone = std::string( NomZone ); + _NomZone = std::string( NomZone ) ; } //============================================================================= @@ -60,32 +61,81 @@ std::string HOMARD_Zone::GetName() const //============================================================================= std::string HOMARD_Zone::GetDumpPython() const { +// MESSAGE("GetDumpPython avec _ZoneType " << _ZoneType) ; +// MESSAGE("GetDumpPython avec _NomZone " << _NomZone) ; std::ostringstream aScript; aScript << "\n# Creation of the "; - if ( _ZoneType == 2 ) { aScript << "box " << _NomZone << "\n";} - if ( _ZoneType == 4 ) { aScript << "sphere " << _NomZone << "\n"; } - - aScript << "\t" << _NomZone << " = homard.CreateZone('" << _NomZone ; - aScript << "', " << _ZoneType << ")\n"; + if ( _ZoneType >= 11 and _ZoneType <= 13 ) { aScript << "rectangle " ; } + else if ( _ZoneType == 2 ) { aScript << "box " ;} + else if ( _ZoneType >= 31 and _ZoneType <= 33 ) { aScript << "disk " ;} + else if ( _ZoneType == 4 ) { aScript << "sphere " ; } + else if ( _ZoneType == 5 ) { aScript << "cylinder " ; } + else if ( _ZoneType >= 61 and _ZoneType <= 63 ) { aScript << "disk with hole " ;} + else if ( _ZoneType == 7 ) { aScript << "pipe " ; } + aScript << _NomZone << "\n" ; +// + aScript << "\t" << _NomZone << " = homard.CreateZone" ; // switch (_ZoneType) { + case 11: + { aScript << "Box2D( '" << _NomZone << "', " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", 1 )\n"; + break ; + } + case 12: + { aScript << "Box2D( '" << _NomZone << "', " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ", 2 )\n"; + break ; + } + case 13: + { aScript << "Box2D( '" << _NomZone << "', " << _Zmin << ", " << _Zmax << ", " << _Xmin << ", " << _Xmax << ", 3 )\n"; + break ; + } case 2: - { - aScript << "\t" << _NomZone << ".SetBox(" ; - aScript << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ")\n"; - break; + { aScript << "Box( '" << _NomZone << "', " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ")\n"; + break ; } case 4: - { - aScript << "\t" << _NomZone << ".SetSphere(" ; - aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _rayon << ")\n"; - break; + { aScript << "Sphere( '" << _NomZone << "', " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ")\n"; + break ; + } + + case 31: + { aScript << "Disk( '" << _NomZone << "', " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", 1 )\n"; + break ; + } + case 32: + { aScript << "Disk( '" << _NomZone << "', " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", 2 )\n"; + break ; + } + case 33: + { aScript << "Disk( '" << _NomZone << "', " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", 3 )\n"; + break ; + } + case 5: + { aScript << "Cylinder( '" << _NomZone << "', " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ")\n"; + break ; + } + + case 61: + { aScript << "DiskWithHole( '" << _NomZone << "', " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", " << _Rayonint << ", 1 )\n"; + break ; + } + case 62: + { aScript << "DiskWithHole( '" << _NomZone << "', " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", " << _Rayonint << ", 2 )\n"; + break ; + } + case 63: + { aScript << "DiskWithHole( '" << _NomZone << "', " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", " << _Rayonint << ", 3 )\n"; + break ; + } + case 7: + { aScript << "Pipe( '" << _NomZone << "', " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ", " << _Rayonint << ")\n"; + break ; } } - return aScript.str(); + return aScript.str() ; } @@ -117,55 +167,141 @@ void HOMARD_Zone::SetBox( double X0, double X1, double X2, double X3, double X4, //====================================================================== void HOMARD_Zone::SetSphere( double X0, double X1, double X2, double X3 ) { - _Xcentre = X0; _Ycentre = X1; _Zcentre = X2; - _rayon = X3; + _Xcentre = X0; + _Ycentre = X1; + _Zcentre = X2; + _Rayon = X3; } //======================================================================================= -std::vector HOMARD_Zone::GetLimit() const +void HOMARD_Zone::SetCylinder( double X0, double X1, double X2, + double X3, double X4, double X5, double X6, double X7 ) { - std::vector mesLimit; - mesLimit.push_back( _Xincr ); - mesLimit.push_back( _Yincr ); - mesLimit.push_back( _Zincr ); - return mesLimit; + _Xcentre = X0; + _Ycentre = X1; + _Zcentre = X2; + _Xaxe = X3; + _Yaxe = X4; + _Zaxe = X5; + _Rayon = X6; + _Haut = X7; +} +//======================================================================================= +void HOMARD_Zone::SetPipe( double X0, double X1, double X2, + double X3, double X4, double X5, double X6, double X7, double X8 ) +{ + _Xcentre = X0; + _Ycentre = X1; + _Zcentre = X2; + _Xaxe = X3; + _Yaxe = X4; + _Zaxe = X5; + _Rayon = X6; + _Haut = X7; + _Rayonint = X8; } //======================================================================================= -std::vector HOMARD_Zone::GetBox() const +std::vector HOMARD_Zone::GetLimit() const { - std::vector mesCoor; - mesCoor.push_back( _Xmin ); mesCoor.push_back( _Xmax ); - mesCoor.push_back( _Ymin ); mesCoor.push_back( _Ymax ); - mesCoor.push_back( _Zmin ); mesCoor.push_back( _Zmax ); - return mesCoor; + std::vector mesLimit; + mesLimit.push_back( _Xincr ) ; + mesLimit.push_back( _Yincr ) ; + mesLimit.push_back( _Zincr ) ; + return mesLimit; } //======================================================================================= -std::vector HOMARD_Zone::GetSphere() const +std::vector HOMARD_Zone::GetCoords() const { std::vector mesCoor; - mesCoor.push_back( _Xcentre ); - mesCoor.push_back( _Ycentre ); - mesCoor.push_back( _Zcentre ); - mesCoor.push_back( _rayon ); +// + switch (_ZoneType) + { +// Rectangle ou parallelepipede + case 11: + { } + case 12: + { } + case 13: + { } + case 2: + { + mesCoor.push_back( _Xmin ) ; + mesCoor.push_back( _Xmax ) ; + mesCoor.push_back( _Ymin ) ; + mesCoor.push_back( _Ymax ) ; + mesCoor.push_back( _Zmin ) ; + mesCoor.push_back( _Zmax ) ; + break ; + } +// Sphere + case 4: + { + mesCoor.push_back( _Xcentre ) ; + mesCoor.push_back( _Ycentre ) ; + mesCoor.push_back( _Zcentre ) ; + mesCoor.push_back( _Rayon ) ; + break ; + } +// Disque ou cylindre + case 31: + { } + case 32: + { } + case 33: + { } + case 5: + { + mesCoor.push_back( _Xcentre ) ; + mesCoor.push_back( _Ycentre ) ; + mesCoor.push_back( _Zcentre ) ; + mesCoor.push_back( _Xaxe ) ; + mesCoor.push_back( _Yaxe ) ; + mesCoor.push_back( _Zaxe ) ; + mesCoor.push_back( _Rayon ) ; + mesCoor.push_back( _Haut ) ; + break ; + } +// Disque avec trou ou tuyau + case 61: + { } + case 62: + { } + case 63: + { } + case 7: + { + mesCoor.push_back( _Xcentre ) ; + mesCoor.push_back( _Ycentre ) ; + mesCoor.push_back( _Zcentre ) ; + mesCoor.push_back( _Xaxe ) ; + mesCoor.push_back( _Yaxe ) ; + mesCoor.push_back( _Zaxe ) ; + mesCoor.push_back( _Rayon ) ; + mesCoor.push_back( _Haut ) ; + mesCoor.push_back( _Rayonint ) ; + break ; + } + ASSERT ( _ZoneType == -1 ) ; + } return mesCoor; } //============================================================================= void HOMARD_Zone::AddHypo( const char* NomHypo ) { - _ListHypo.push_back( std::string( NomHypo ) ); + _ListHypo.push_back( std::string( NomHypo ) ) ; } //============================================================================= void HOMARD_Zone::SupprHypo( const char* NomHypo ) { - std::list::iterator it = find( _ListHypo.begin(), _ListHypo.end(), NomHypo ); - if ( it != _ListHypo.end() ) + std::list::iterator it = find( _ListHypo.begin(), _ListHypo.end(), NomHypo ) ; + if ( it != _ListHypo.end() ) { - MESSAGE ("Dans SupprHypo pour " << NomHypo); - _ListHypo.erase( it ); + MESSAGE ("Dans SupprHypo pour " << NomHypo) ; + _ListHypo.erase( it ) ; } } @@ -178,5 +314,5 @@ const std::list& HOMARD_Zone::GetHypo() const //============================================================================= void HOMARD_Zone::SupprHypos() { - _ListHypo.clear(); + _ListHypo.clear() ; } diff --git a/src/HOMARD/HOMARD_Zone.hxx b/src/HOMARD/HOMARD_Zone.hxx index 8b99d31d..0bc99e41 100644 --- a/src/HOMARD/HOMARD_Zone.hxx +++ b/src/HOMARD/HOMARD_Zone.hxx @@ -38,21 +38,24 @@ public: void SetName( const char* NomZone ); std::string GetName() const; std::string GetDumpPython() const; - - void SetBox( double X0, double X1, double X2, - double X3, double X4, double X5 ); - std::vector GetBox() const; - void SetSphere( double X0, double X1, - double X2, double X3 ); - std::vector GetSphere() const; + void SetBox( double X0, double X1, double X2, + double X3, double X4, double X5 ); + std::vector GetCoords() const; + + void SetSphere( double X0, double X1, double X2, double X3 ); + + void SetCylinder( double X0, double X1, double X2, double X3, + double X4, double X5, double X6, double X7 ); + void SetPipe( double X0, double X1, double X2, double X3, + double X4, double X5, double X6, double X7, double X8 ); void SetLimit( double X0, double X1, double X2 ); std::vector GetLimit() const; - + void SetZoneType( int ZoneType ); int GetZoneType() const; - + void AddHypo( const char* NomHypo ); void SupprHypo( const char* NomHypo ); const std::list& GetHypo() const; @@ -63,7 +66,8 @@ private: int _ZoneType; std::list _ListHypo; double _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax; - double _Xcentre, _Ycentre, _Zcentre, _rayon; + double _Xcentre, _Ycentre, _Zcentre, _Rayon, _Rayonint; + double _Xaxe, _Yaxe, _Zaxe, _Haut; double _Xincr, _Yincr, _Zincr; }; diff --git a/src/HOMARD/HomardDriver.cxx b/src/HOMARD/HomardDriver.cxx index 6395dc6e..5d0e6171 100644 --- a/src/HOMARD/HomardDriver.cxx +++ b/src/HOMARD/HomardDriver.cxx @@ -39,15 +39,15 @@ HomardDriver::HomardDriver(const std::string siter, const std::string siterp1): std::string dir; std::string executable; if ( !(dirchar = getenv("HOMARD_REP_EXE")) ) - dir = "/logiciels/HOMARD/HOMARD_PUBLIC/Linux64" ; + dir = "/local00/HOMARD_SVN/trunk/bin" ; else dir = std::string(dirchar); if ( !(execchar = getenv("HOMARD_EXE")) ) - executable = "HOMARD"; + executable = "HOMARD.out"; else executable = std::string(execchar); _HOMARD_Exec = dir + "/" + executable ; - MESSAGE("Dans HomardDriver::HomardDriver, _HOMARD_Exec ="<<_HOMARD_Exec); + MESSAGE("Dans HomardDriver, _HOMARD_Exec ="<<_HOMARD_Exec); // _siter = siter ; _siterp1 = siterp1 ; @@ -62,7 +62,7 @@ HomardDriver::~HomardDriver() ////============================================================================= void HomardDriver::TexteInit( const std::string DirCompute, const std::string DirComputePa, const std::string MessFile ) { - MESSAGE("Dans HomardDriver::TexteInit, MessFile ="<= 11 and ZoneType <= 13 ) { ZoneTypeHOMARD = 1 ; } + else if ( ZoneType >= 31 and ZoneType <= 33 ) { ZoneTypeHOMARD = 3 ; } + else if ( ZoneType >= 61 and ZoneType <= 63 ) { ZoneTypeHOMARD = 6 ; } + else { ZoneTypeHOMARD = ZoneType ; } // std::stringstream saux1 ; saux1 << NumeZone ; @@ -190,14 +196,94 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, double x0, double x1, saux = "#\n# Zone numero " + saux2 + "\n" ; // { std::stringstream saux1 ; - saux1 << NumeZone << " " << ZoneType ; + saux1 << NumeZone << " " << ZoneTypeHOMARD ; saux2 = saux1.str() ; saux += "ZoRaType " + saux2 + "\n" ; } // -// Cas du rectangle/parallelepipede +// Cas du rectangle +// + if ( ZoneType == 11 ) // Z est constant X Homard <=> X Salome +// Y Homard <=> Y Salome + { + saux += "#Rectangle\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x0 ; + saux2 = saux1.str() ; + saux += "ZoRaXmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x1 ; + saux2 = saux1.str() ; + saux += "ZoRaXmax " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x2 ; + saux2 = saux1.str() ; + saux += "ZoRaYmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x3 ; + saux2 = saux1.str() ; + saux += "ZoRaYmax " + saux2 + "\n" ; + } + } // - if ( ZoneType == 2 ) + else if ( ZoneType == 12 ) // X est constant X Homard <=> Y Salome +// Y Homard <=> Z Salome + { + saux += "#Rectangle\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x2 ; + saux2 = saux1.str() ; + saux += "ZoRaXmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x3 ; + saux2 = saux1.str() ; + saux += "ZoRaXmax " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x4 ; + saux2 = saux1.str() ; + saux += "ZoRaYmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x5 ; + saux2 = saux1.str() ; + saux += "ZoRaYmax " + saux2 + "\n" ; + } + } +// + else if ( ZoneType == 13 ) // Y est constant X Homard <=> X Salome +// Y Homard <=> Z Salome + { + saux += "#Rectangle\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x0 ; + saux2 = saux1.str() ; + saux += "ZoRaXmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x1 ; + saux2 = saux1.str() ; + saux += "ZoRaXmax " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x4 ; + saux2 = saux1.str() ; + saux += "ZoRaYmin " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x5 ; + saux2 = saux1.str() ; + saux += "ZoRaYmax " + saux2 + "\n" ; + } + } +// +// Cas du parallelepipede +// + else if ( ZoneType == 2 ) { saux += "# Boite\n" ; { std::stringstream saux1 ; @@ -232,7 +318,88 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, double x0, double x1, } } // -// Cas du cercle/sphere +// Cas du disque +// + else if ( ZoneType == 31 or ZoneType == 61 ) + { + saux += "# Sphere\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x0 ; + saux2 = saux1.str() ; + saux += "ZoRaXCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x1 ; + saux2 = saux1.str() ; + saux += "ZoRaYCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x6 ; + saux2 = saux1.str() ; + if ( ZoneType == 61 ) { saux += "ZoRaRayE " + saux2 + "\n" ; } + else { saux += "ZoRaRayo " + saux2 + "\n" ; } + } + if ( ZoneType == 61 ) + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x8 ; + saux2 = saux1.str() ; + saux += "ZoRaRayI " + saux2 + "\n" ; + } + } + else if ( ZoneType == 32 or ZoneType == 62 ) + { + saux += "# Sphere\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x1 ; + saux2 = saux1.str() ; + saux += "ZoRaXCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x2 ; + saux2 = saux1.str() ; + saux += "ZoRaYCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x6 ; + saux2 = saux1.str() ; + if ( ZoneType == 62 ) { saux += "ZoRaRayE " + saux2 + "\n" ; } + else { saux += "ZoRaRayo " + saux2 + "\n" ; } + } + if ( ZoneType == 62 ) + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x8 ; + saux2 = saux1.str() ; + saux += "ZoRaRayI " + saux2 + "\n" ; + } + } + else if ( ZoneType == 33 or ZoneType == 63 ) + { + saux += "# Sphere\n" ; + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x0 ; + saux2 = saux1.str() ; + saux += "ZoRaXCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x2 ; + saux2 = saux1.str() ; + saux += "ZoRaYCen " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x6 ; + saux2 = saux1.str() ; + if ( ZoneType == 63 ) { saux += "ZoRaRayE " + saux2 + "\n" ; } + else { saux += "ZoRaRayo " + saux2 + "\n" ; } + } + if ( ZoneType == 63 ) + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x8 ; + saux2 = saux1.str() ; + saux += "ZoRaRayI " + saux2 + "\n" ; + } + } +// +// Cas de la sphere // else if ( ZoneType == 4 ) { @@ -258,6 +425,61 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, double x0, double x1, saux += "ZoRaRayo " + saux2 + "\n" ; } } +// +// Cas du cylindre ou du tuyau +// + else if ( ZoneType == 5 or ZoneType == 7 ) + { + if ( ZoneType == 5 ) { saux += "# Cylindre\n" ; } + else { saux += "# Tuyau\n" ; } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x0 ; + saux2 = saux1.str() ; + saux += "ZoRaXBas " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x1 ; + saux2 = saux1.str() ; + saux += "ZoRaYBas " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x2 ; + saux2 = saux1.str() ; + saux += "ZoRaZBas " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x3 ; + saux2 = saux1.str() ; + saux += "ZoRaXAxe " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x4 ; + saux2 = saux1.str() ; + saux += "ZoRaYAxe " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x5 ; + saux2 = saux1.str() ; + saux += "ZoRaZAxe " + saux2 + "\n" ; + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x6 ; + saux2 = saux1.str() ; + if ( ZoneType == 5 ) { saux += "ZoRaRayo " + saux2 + "\n" ; } + else { saux += "ZoRaRayE " + saux2 + "\n" ; } + } + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x7 ; + saux2 = saux1.str() ; + saux += "ZoRaHaut " + saux2 + "\n" ; + } + if ( ZoneType == 7 ) + { std::stringstream saux1 ; + saux1 << NumeZone << " " << x8 ; + saux2 = saux1.str() ; + saux += "ZoRaRayI " + saux2 + "\n" ; + } + } // _Texte += saux + "#\n" ; // @@ -266,10 +488,11 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, double x0, double x1, ////============================================================================= void HomardDriver::TexteField( const std::string FieldName, const std::string FieldFile, int TimeStep, int Rank, - int TypeThR, double ThreshR, int TypeThC, double ThreshC, int UsCmpI ) + int TypeThR, double ThreshR, int TypeThC, double ThreshC, + int UsField, int UsCmpI ) { - MESSAGE("Dans HomardDriver::TexteField, FieldName = "<setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - gBCylindre = new QGroupBox(CreateBoundaryAn); - gBCylindre->setObjectName(QString::fromUtf8("gBCylindre")); + GBButtons = new QGroupBox(CreateBoundaryAn); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); QSizePolicy sizePolicy(static_cast(0), static_cast(0)); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth()); - gBCylindre->setSizePolicy(sizePolicy); - gridLayout1 = new QGridLayout(gBCylindre); + sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); + GBButtons->setSizePolicy(sizePolicy); + gridLayout1 = new QGridLayout(GBButtons); gridLayout1->setSpacing(6); gridLayout1->setMargin(9); gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - SpinBox_Xcent = new QDoubleSpinBox(gBCylindre); - SpinBox_Xcent->setObjectName(QString::fromUtf8("SpinBox_Xcent")); - SpinBox_Xcent->setDecimals(5); - SpinBox_Xcent->setMaximum(1e+09); - SpinBox_Xcent->setMinimum(-1e+09); - SpinBox_Xcent->setValue(0); - - gridLayout1->addWidget(SpinBox_Xcent, 0, 1, 1, 1); - - TLXcent = new QLabel(gBCylindre); - TLXcent->setObjectName(QString::fromUtf8("TLXcent")); - QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth()); - TLXcent->setSizePolicy(sizePolicy1); - TLXcent->setWordWrap(false); - - gridLayout1->addWidget(TLXcent, 0, 0, 1, 1); - - SpinBox_Radius = new QDoubleSpinBox(gBCylindre); - SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius")); - SpinBox_Radius->setDecimals(5); - SpinBox_Radius->setMaximum(1e+09); - - gridLayout1->addWidget(SpinBox_Radius, 3, 1, 1, 2); - - SpinBox_Zcent = new QDoubleSpinBox(gBCylindre); - SpinBox_Zcent->setObjectName(QString::fromUtf8("SpinBox_Zcent")); - SpinBox_Zcent->setDecimals(5); - SpinBox_Zcent->setMaximum(1e+09); - SpinBox_Zcent->setMinimum(-1e+09); - SpinBox_Zcent->setValue(0); - - gridLayout1->addWidget(SpinBox_Zcent, 2, 1, 1, 1); - - TLradius = new QLabel(gBCylindre); - TLradius->setObjectName(QString::fromUtf8("TLradius")); - QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); - sizePolicy2.setHorizontalStretch(0); - sizePolicy2.setVerticalStretch(0); - sizePolicy2.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth()); - TLradius->setSizePolicy(sizePolicy2); - TLradius->setWordWrap(false); - - gridLayout1->addWidget(TLradius, 3, 0, 1, 1); - - TLZcent = new QLabel(gBCylindre); - TLZcent->setObjectName(QString::fromUtf8("TLZcent")); - QSizePolicy sizePolicy3(static_cast(0), static_cast(0)); - sizePolicy3.setHorizontalStretch(0); - sizePolicy3.setVerticalStretch(0); - sizePolicy3.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth()); - TLZcent->setSizePolicy(sizePolicy3); - TLZcent->setWordWrap(false); - - gridLayout1->addWidget(TLZcent, 2, 0, 1, 1); - - TLYcent = new QLabel(gBCylindre); - TLYcent->setObjectName(QString::fromUtf8("TLYcent")); - QSizePolicy sizePolicy4(static_cast(0), static_cast(0)); - sizePolicy4.setHorizontalStretch(0); - sizePolicy4.setVerticalStretch(0); - sizePolicy4.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth()); - TLYcent->setSizePolicy(sizePolicy4); - TLYcent->setWordWrap(false); - - gridLayout1->addWidget(TLYcent, 1, 0, 1, 1); - - SpinBox_Ycent = new QDoubleSpinBox(gBCylindre); - SpinBox_Ycent->setObjectName(QString::fromUtf8("SpinBox_Ycent")); - SpinBox_Ycent->setDecimals(5); - SpinBox_Ycent->setMaximum(1e+09); - SpinBox_Ycent->setMinimum(-1e+09); - SpinBox_Ycent->setValue(0); - - gridLayout1->addWidget(SpinBox_Ycent, 1, 1, 1, 1); - - TLXaxis = new QLabel(gBCylindre); - TLXaxis->setObjectName(QString::fromUtf8("TLXaxis")); - QSizePolicy sizePolicy5(static_cast(0), static_cast(0)); - sizePolicy5.setHorizontalStretch(0); - sizePolicy5.setVerticalStretch(0); - sizePolicy5.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth()); - TLXaxis->setSizePolicy(sizePolicy5); - TLXaxis->setWordWrap(false); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - gridLayout1->addWidget(TLXaxis, 0, 2, 1, 1); + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); - TLYaxis = new QLabel(gBCylindre); - TLYaxis->setObjectName(QString::fromUtf8("TLYaxis")); - QSizePolicy sizePolicy6(static_cast(0), static_cast(0)); - sizePolicy6.setHorizontalStretch(0); - sizePolicy6.setVerticalStretch(0); - sizePolicy6.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth()); - TLYaxis->setSizePolicy(sizePolicy6); - TLYaxis->setWordWrap(false); + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - gridLayout1->addWidget(TLYaxis, 1, 2, 1, 1); + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); - TLZaxis = new QLabel(gBCylindre); - TLZaxis->setObjectName(QString::fromUtf8("TLZaxis")); - QSizePolicy sizePolicy7(static_cast(0), static_cast(0)); - sizePolicy7.setHorizontalStretch(0); - sizePolicy7.setVerticalStretch(0); - sizePolicy7.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth()); - TLZaxis->setSizePolicy(sizePolicy7); - TLZaxis->setWordWrap(false); + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); - gridLayout1->addWidget(TLZaxis, 2, 2, 1, 1); + gridLayout1->addWidget(buttonApply, 0, 1, 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); + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - gridLayout1->addWidget(SpinBox_Zaxis, 2, 3, 1, 1); + gridLayout1->addWidget(buttonOk, 0, 0, 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); + gridLayout->addWidget(GBButtons, 4, 0, 1, 2); - 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); + Name = new QLabel(CreateBoundaryAn); + Name->setObjectName(QString::fromUtf8("Name")); - gridLayout1->addWidget(SpinBox_Xaxis, 0, 3, 1, 1); + gridLayout->addWidget(Name, 0, 0, 1, 1); + LEBoundaryName = new QLineEdit(CreateBoundaryAn); + LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName")); + LEBoundaryName->setMaxLength(32); - gridLayout->addWidget(gBCylindre, 2, 0, 1, 2); + gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 1); - GBButtons = new QGroupBox(CreateBoundaryAn); - GBButtons->setObjectName(QString::fromUtf8("GBButtons")); - QSizePolicy sizePolicy8(static_cast(0), static_cast(0)); - sizePolicy8.setHorizontalStretch(0); - sizePolicy8.setVerticalStretch(0); - sizePolicy8.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); - GBButtons->setSizePolicy(sizePolicy8); - hboxLayout = new QHBoxLayout(GBButtons); + TypeBoundary = new QGroupBox(CreateBoundaryAn); + TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary")); + QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth()); + TypeBoundary->setSizePolicy(sizePolicy1); + TypeBoundary->setMinimumSize(QSize(340, 0)); + hboxLayout = new QHBoxLayout(TypeBoundary); 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")); + RBCylindre = new QRadioButton(TypeBoundary); + RBCylindre->setObjectName(QString::fromUtf8("RBCylindre")); + RBCylindre->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png"))); + RBCylindre->setCheckable(true); + RBCylindre->setChecked(true); - hboxLayout->addWidget(buttonCancel); + hboxLayout->addWidget(RBCylindre); - buttonHelp = new QPushButton(GBButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + RBSphere = new QRadioButton(TypeBoundary); + RBSphere->setObjectName(QString::fromUtf8("RBSphere")); + RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png"))); - hboxLayout->addWidget(buttonHelp); + hboxLayout->addWidget(RBSphere); - gridLayout->addWidget(GBButtons, 4, 0, 1, 2); + gridLayout->addWidget(TypeBoundary, 1, 0, 1, 2); gBSphere = new QGroupBox(CreateBoundaryAn); gBSphere->setObjectName(QString::fromUtf8("gBSphere")); - QSizePolicy sizePolicy9(static_cast(0), static_cast(0)); - sizePolicy9.setHorizontalStretch(0); - sizePolicy9.setVerticalStretch(0); - sizePolicy9.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); - gBSphere->setSizePolicy(sizePolicy9); + QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); + gBSphere->setSizePolicy(sizePolicy2); gridLayout2 = new QGridLayout(gBSphere); gridLayout2->setSpacing(6); gridLayout2->setMargin(9); @@ -293,33 +181,33 @@ public: TLRayon = new QLabel(gBSphere); TLRayon->setObjectName(QString::fromUtf8("TLRayon")); - QSizePolicy sizePolicy10(static_cast(0), static_cast(0)); - sizePolicy10.setHorizontalStretch(0); - sizePolicy10.setVerticalStretch(0); - sizePolicy10.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); - TLRayon->setSizePolicy(sizePolicy10); + QSizePolicy sizePolicy3(static_cast(0), static_cast(0)); + sizePolicy3.setHorizontalStretch(0); + sizePolicy3.setVerticalStretch(0); + sizePolicy3.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); + TLRayon->setSizePolicy(sizePolicy3); TLRayon->setWordWrap(false); gridLayout2->addWidget(TLRayon, 1, 2, 1, 1); TLZcentre = new QLabel(gBSphere); TLZcentre->setObjectName(QString::fromUtf8("TLZcentre")); - QSizePolicy sizePolicy11(static_cast(0), static_cast(0)); - sizePolicy11.setHorizontalStretch(0); - sizePolicy11.setVerticalStretch(0); - sizePolicy11.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); - TLZcentre->setSizePolicy(sizePolicy11); + QSizePolicy sizePolicy4(static_cast(0), static_cast(0)); + sizePolicy4.setHorizontalStretch(0); + sizePolicy4.setVerticalStretch(0); + sizePolicy4.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); + TLZcentre->setSizePolicy(sizePolicy4); TLZcentre->setWordWrap(false); gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1); TLYcentre = new QLabel(gBSphere); TLYcentre->setObjectName(QString::fromUtf8("TLYcentre")); - QSizePolicy sizePolicy12(static_cast(0), static_cast(0)); - sizePolicy12.setHorizontalStretch(0); - sizePolicy12.setVerticalStretch(0); - sizePolicy12.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); - TLYcentre->setSizePolicy(sizePolicy12); + QSizePolicy sizePolicy5(static_cast(0), static_cast(0)); + sizePolicy5.setHorizontalStretch(0); + sizePolicy5.setVerticalStretch(0); + sizePolicy5.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); + TLYcentre->setSizePolicy(sizePolicy5); TLYcentre->setWordWrap(false); gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1); @@ -344,11 +232,11 @@ public: TLXcentre = new QLabel(gBSphere); TLXcentre->setObjectName(QString::fromUtf8("TLXcentre")); - QSizePolicy sizePolicy13(static_cast(0), static_cast(0)); - sizePolicy13.setHorizontalStretch(0); - sizePolicy13.setVerticalStretch(0); - sizePolicy13.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); - TLXcentre->setSizePolicy(sizePolicy13); + QSizePolicy sizePolicy6(static_cast(0), static_cast(0)); + sizePolicy6.setHorizontalStretch(0); + sizePolicy6.setVerticalStretch(0); + sizePolicy6.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); + TLXcentre->setSizePolicy(sizePolicy6); TLXcentre->setWordWrap(false); gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1); @@ -356,45 +244,157 @@ public: gridLayout->addWidget(gBSphere, 3, 0, 1, 2); - TypeBoundary = new QGroupBox(CreateBoundaryAn); - TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary")); + gBCylindre = new QGroupBox(CreateBoundaryAn); + gBCylindre->setObjectName(QString::fromUtf8("gBCylindre")); + QSizePolicy sizePolicy7(static_cast(0), static_cast(0)); + sizePolicy7.setHorizontalStretch(0); + sizePolicy7.setVerticalStretch(0); + sizePolicy7.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth()); + gBCylindre->setSizePolicy(sizePolicy7); + gridLayout3 = new QGridLayout(gBCylindre); + gridLayout3->setSpacing(6); + gridLayout3->setMargin(9); + gridLayout3->setObjectName(QString::fromUtf8("gridLayout3")); + 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); + + gridLayout3->addWidget(SpinBox_Xcent, 0, 1, 1, 1); + + TLXcent = new QLabel(gBCylindre); + TLXcent->setObjectName(QString::fromUtf8("TLXcent")); + QSizePolicy sizePolicy8(static_cast(0), static_cast(0)); + sizePolicy8.setHorizontalStretch(0); + sizePolicy8.setVerticalStretch(0); + sizePolicy8.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth()); + TLXcent->setSizePolicy(sizePolicy8); + TLXcent->setWordWrap(false); + + gridLayout3->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); + + gridLayout3->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); + + gridLayout3->addWidget(SpinBox_Zcent, 2, 1, 1, 1); + + TLradius = new QLabel(gBCylindre); + TLradius->setObjectName(QString::fromUtf8("TLradius")); + QSizePolicy sizePolicy9(static_cast(0), static_cast(0)); + sizePolicy9.setHorizontalStretch(0); + sizePolicy9.setVerticalStretch(0); + sizePolicy9.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth()); + TLradius->setSizePolicy(sizePolicy9); + TLradius->setWordWrap(false); + + gridLayout3->addWidget(TLradius, 3, 0, 1, 1); + + TLZcent = new QLabel(gBCylindre); + TLZcent->setObjectName(QString::fromUtf8("TLZcent")); + QSizePolicy sizePolicy10(static_cast(0), static_cast(0)); + sizePolicy10.setHorizontalStretch(0); + sizePolicy10.setVerticalStretch(0); + sizePolicy10.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth()); + TLZcent->setSizePolicy(sizePolicy10); + TLZcent->setWordWrap(false); + + gridLayout3->addWidget(TLZcent, 2, 0, 1, 1); + + TLYcent = new QLabel(gBCylindre); + TLYcent->setObjectName(QString::fromUtf8("TLYcent")); + QSizePolicy sizePolicy11(static_cast(0), static_cast(0)); + sizePolicy11.setHorizontalStretch(0); + sizePolicy11.setVerticalStretch(0); + sizePolicy11.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth()); + TLYcent->setSizePolicy(sizePolicy11); + TLYcent->setWordWrap(false); + + gridLayout3->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); + + gridLayout3->addWidget(SpinBox_Ycent, 1, 1, 1, 1); + + TLXaxis = new QLabel(gBCylindre); + TLXaxis->setObjectName(QString::fromUtf8("TLXaxis")); + QSizePolicy sizePolicy12(static_cast(0), static_cast(0)); + sizePolicy12.setHorizontalStretch(0); + sizePolicy12.setVerticalStretch(0); + sizePolicy12.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth()); + TLXaxis->setSizePolicy(sizePolicy12); + TLXaxis->setWordWrap(false); + + gridLayout3->addWidget(TLXaxis, 0, 2, 1, 1); + + TLYaxis = new QLabel(gBCylindre); + TLYaxis->setObjectName(QString::fromUtf8("TLYaxis")); + QSizePolicy sizePolicy13(static_cast(0), static_cast(0)); + sizePolicy13.setHorizontalStretch(0); + sizePolicy13.setVerticalStretch(0); + sizePolicy13.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth()); + TLYaxis->setSizePolicy(sizePolicy13); + TLYaxis->setWordWrap(false); + + gridLayout3->addWidget(TLYaxis, 1, 2, 1, 1); + + TLZaxis = new QLabel(gBCylindre); + TLZaxis->setObjectName(QString::fromUtf8("TLZaxis")); QSizePolicy sizePolicy14(static_cast(0), static_cast(0)); sizePolicy14.setHorizontalStretch(0); sizePolicy14.setVerticalStretch(0); - sizePolicy14.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth()); - TypeBoundary->setSizePolicy(sizePolicy14); - TypeBoundary->setMinimumSize(QSize(340, 0)); - hboxLayout1 = new QHBoxLayout(TypeBoundary); - hboxLayout1->setSpacing(6); - hboxLayout1->setMargin(9); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - RBCylindre = new QRadioButton(TypeBoundary); - RBCylindre->setObjectName(QString::fromUtf8("RBCylindre")); - RBCylindre->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png"))); - RBCylindre->setCheckable(true); - RBCylindre->setChecked(true); + sizePolicy14.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth()); + TLZaxis->setSizePolicy(sizePolicy14); + TLZaxis->setWordWrap(false); - hboxLayout1->addWidget(RBCylindre); + gridLayout3->addWidget(TLZaxis, 2, 2, 1, 1); - RBSphere = new QRadioButton(TypeBoundary); - RBSphere->setObjectName(QString::fromUtf8("RBSphere")); - RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png"))); + 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); - hboxLayout1->addWidget(RBSphere); + gridLayout3->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); - gridLayout->addWidget(TypeBoundary, 1, 0, 1, 2); + gridLayout3->addWidget(SpinBox_Yaxis, 1, 3, 1, 1); - LEBoundaryName = new QLineEdit(CreateBoundaryAn); - LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName")); - LEBoundaryName->setMaxLength(32); + 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); - gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 1); + gridLayout3->addWidget(SpinBox_Xaxis, 0, 3, 1, 1); - Name = new QLabel(CreateBoundaryAn); - Name->setObjectName(QString::fromUtf8("Name")); - gridLayout->addWidget(Name, 0, 0, 1, 1); + gridLayout->addWidget(gBCylindre, 2, 0, 1, 2); retranslateUi(CreateBoundaryAn); @@ -410,7 +410,21 @@ public: void retranslateUi(QDialog *CreateBoundaryAn) { CreateBoundaryAn->setWindowTitle(QApplication::translate("CreateBoundaryAn", "Create an analytical boundary", 0, QApplication::UnicodeUTF8)); - gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates of the cylindre", 0, QApplication::UnicodeUTF8)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateBoundaryAn", "Help", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateBoundaryAn", "Cancel", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateBoundaryAn", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("CreateBoundaryAn", "OK", 0, QApplication::UnicodeUTF8)); + Name->setText(QApplication::translate("CreateBoundaryAn", "Name", 0, QApplication::UnicodeUTF8)); + TypeBoundary->setTitle(QApplication::translate("CreateBoundaryAn", "Type of boundary", 0, QApplication::UnicodeUTF8)); + RBCylindre->setText(QApplication::translate("CreateBoundaryAn", "Cylinder", 0, QApplication::UnicodeUTF8)); + RBSphere->setText(QApplication::translate("CreateBoundaryAn", "Sphere", 0, QApplication::UnicodeUTF8)); + gBSphere->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", 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)); + gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", 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)); @@ -418,20 +432,6 @@ public: 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 diff --git a/src/HOMARDGUI/CreateBoundaryAn.ui b/src/HOMARDGUI/CreateBoundaryAn.ui index e7e67a70..0750df02 100644 --- a/src/HOMARDGUI/CreateBoundaryAn.ui +++ b/src/HOMARDGUI/CreateBoundaryAn.ui @@ -25,8 +25,8 @@ 6 - - + + 0 @@ -36,7 +36,7 @@ - Coordinates of the cylindre + @@ -45,52 +45,128 @@ 6 - - - - 5 - - - 999999999.000000000000000 + + + + Help - - -999999999.000000000000000 + + + + + + Cancel - - 0.000000000000000 + + + + + + Apply - - - - 0 - 0 - 0 - 0 - + + + OK + + + + + + + + + Name + + + + + + + 32 + + + + + + + + 0 + 0 + 0 + 0 + + + + + 340 + 0 + + + + Type of boundary + + + + 9 + + + 6 + + + - X centre + Cylinder - - false + + ../../resources/cylinderpointvector.png + + + true + + + true - - - - 5 + + + + Sphere - - 1000000000.000000000000000 + + ../../resources/zone_spherepoint.png - - + + + + + + + + 0 + 0 + 0 + 0 + + + + Coordinates + + + + 9 + + + 6 + + + 5 @@ -98,69 +174,15 @@ 999999999.000000000000000 - -999999999.000000000000000 + 0.000000000000000 0.000000000000000 - - - - - 0 - 0 - 0 - 0 - - - - Radius - - - false - - - - - - - - 0 - 0 - 0 - 0 - - - - Z centre - - - false - - - - - - - - 0 - 0 - 0 - 0 - - - - Y centre - - - false - - - - - + + 5 @@ -175,8 +197,8 @@ - - + + 0 @@ -186,15 +208,15 @@ - X axis + Radius false - - + + 0 @@ -204,15 +226,15 @@ - Y axis + Z centre false - - + + 0 @@ -222,15 +244,15 @@ - Z axis + Y centre false - - + + 5 @@ -245,8 +267,8 @@ - - + + 5 @@ -261,27 +283,29 @@ - - - - 5 - - - 999999999.000000000000000 + + + + + 0 + 0 + 0 + 0 + - - -999999999.000000000000000 + + X centre - - 0.000000000000000 + + false - - + + 0 @@ -291,84 +315,61 @@ - + Coordinates - + 9 6 - - - - OK + + + + 5 - - - - - - Apply + + 999999999.000000000000000 - - - - - - Cancel + + -999999999.000000000000000 + + + 0.000000000000000 - - + + + + + 0 + 0 + 0 + 0 + + - Help + X centre + + + false - - - - - - - - 0 - 0 - 0 - 0 - - - - Coordinates of the sphere - - - - 9 - - - 6 - - - + + 5 - 999999999.000000000000000 - - - 0.000000000000000 - - - 0.000000000000000 + 1000000000.000000000000000 - + 5 @@ -383,8 +384,8 @@ - - + + 0 @@ -402,7 +403,7 @@ - + 0 @@ -420,7 +421,7 @@ - + 0 @@ -438,7 +439,7 @@ - + 5 @@ -453,24 +454,26 @@ - - - - 5 - - - 999999999.000000000000000 + + + + + 0 + 0 + 0 + 0 + - - -999999999.000000000000000 + + X axis - - 0.000000000000000 + + false - - + + 0 @@ -480,85 +483,82 @@ - X centre + Y axis false - - - - - - - - 0 - 0 - 0 - 0 - - - - - 340 - 0 - - - - Type of boundary - - - - 9 - - - 6 - - - + + + + + 0 + 0 + 0 + 0 + + - + Z axis - - ../../resources/cylinderpointvector.png + + false - - true + + + + + + 5 - - true + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 - - - - + + + + 5 - - ../../resources/zone_spherepoint.png + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 - - - - 32 - - - - - - - Name - - - diff --git a/src/HOMARDGUI/CreateBoundaryDi.h b/src/HOMARDGUI/CreateBoundaryDi.h index 2b99f0f7..7caf93da 100644 --- a/src/HOMARDGUI/CreateBoundaryDi.h +++ b/src/HOMARDGUI/CreateBoundaryDi.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateBoundaryDi.ui' ** -** Created: Thu Feb 24 09:10:36 2011 +** Created: Thu Sep 1 16:37:21 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -26,18 +26,18 @@ class Ui_CreateBoundaryDi { public: QGridLayout *gridLayout; - QLabel *Name; - QLineEdit *LEBoundaryName; - QLabel *Mesh; - QPushButton *PushFichier; - QLineEdit *LEFileName; - QCheckBox *CBGroupe; QGroupBox *GBButtons; QGridLayout *gridLayout1; - QPushButton *buttonOk; - QPushButton *buttonApply; - QPushButton *buttonCancel; QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + QCheckBox *CBGroupe; + QLineEdit *LEFileName; + QPushButton *PushFichier; + QLabel *Mesh; + QLineEdit *LEBoundaryName; + QLabel *Name; void setupUi(QDialog *CreateBoundaryDi) { @@ -53,67 +53,67 @@ public: gridLayout->setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - Name = new QLabel(CreateBoundaryDi); - Name->setObjectName(QString::fromUtf8("Name")); + GBButtons = new QGroupBox(CreateBoundaryDi); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + gridLayout1 = new QGridLayout(GBButtons); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - gridLayout->addWidget(Name, 0, 0, 1, 1); + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); - LEBoundaryName = new QLineEdit(CreateBoundaryDi); - LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName")); - LEBoundaryName->setMinimumSize(QSize(382, 21)); - LEBoundaryName->setMaxLength(32); + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 2); + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); - Mesh = new QLabel(CreateBoundaryDi); - Mesh->setObjectName(QString::fromUtf8("Mesh")); + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); - gridLayout->addWidget(Mesh, 1, 0, 1, 1); + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); - PushFichier = new QPushButton(CreateBoundaryDi); - PushFichier->setObjectName(QString::fromUtf8("PushFichier")); + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - gridLayout->addWidget(PushFichier, 1, 1, 1, 1); + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); - LEFileName = new QLineEdit(CreateBoundaryDi); - LEFileName->setObjectName(QString::fromUtf8("LEFileName")); - LEFileName->setMinimumSize(QSize(370, 21)); - gridLayout->addWidget(LEFileName, 1, 2, 1, 1); + gridLayout->addWidget(GBButtons, 3, 0, 1, 3); CBGroupe = new QCheckBox(CreateBoundaryDi); CBGroupe->setObjectName(QString::fromUtf8("CBGroupe")); gridLayout->addWidget(CBGroupe, 2, 0, 1, 3); - GBButtons = new QGroupBox(CreateBoundaryDi); - GBButtons->setObjectName(QString::fromUtf8("GBButtons")); - gridLayout1 = new QGridLayout(GBButtons); - gridLayout1->setSpacing(6); - gridLayout1->setMargin(9); - gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - buttonOk = new QPushButton(GBButtons); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + LEFileName = new QLineEdit(CreateBoundaryDi); + LEFileName->setObjectName(QString::fromUtf8("LEFileName")); + LEFileName->setMinimumSize(QSize(370, 21)); - gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + gridLayout->addWidget(LEFileName, 1, 2, 1, 1); - buttonApply = new QPushButton(GBButtons); - buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + PushFichier = new QPushButton(CreateBoundaryDi); + PushFichier->setObjectName(QString::fromUtf8("PushFichier")); - gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + gridLayout->addWidget(PushFichier, 1, 1, 1, 1); - buttonCancel = new QPushButton(GBButtons); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + Mesh = new QLabel(CreateBoundaryDi); + Mesh->setObjectName(QString::fromUtf8("Mesh")); - gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + gridLayout->addWidget(Mesh, 1, 0, 1, 1); - buttonHelp = new QPushButton(GBButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + LEBoundaryName = new QLineEdit(CreateBoundaryDi); + LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName")); + LEBoundaryName->setMinimumSize(QSize(382, 21)); + LEBoundaryName->setMaxLength(32); - gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 2); + Name = new QLabel(CreateBoundaryDi); + Name->setObjectName(QString::fromUtf8("Name")); - gridLayout->addWidget(GBButtons, 3, 0, 1, 3); + gridLayout->addWidget(Name, 0, 0, 1, 1); retranslateUi(CreateBoundaryDi); @@ -129,15 +129,15 @@ public: void retranslateUi(QDialog *CreateBoundaryDi) { CreateBoundaryDi->setWindowTitle(QApplication::translate("CreateBoundaryDi", "Create a discrete boundary", 0, QApplication::UnicodeUTF8)); - Name->setText(QApplication::translate("CreateBoundaryDi", "Name", 0, QApplication::UnicodeUTF8)); - Mesh->setText(QApplication::translate("CreateBoundaryDi", "Mesh", 0, QApplication::UnicodeUTF8)); - PushFichier->setText(QString()); - CBGroupe->setText(QApplication::translate("CreateBoundaryDi", "Filtering with groups", 0, QApplication::UnicodeUTF8)); GBButtons->setTitle(QString()); - buttonOk->setText(QApplication::translate("CreateBoundaryDi", "OK", 0, QApplication::UnicodeUTF8)); - buttonApply->setText(QApplication::translate("CreateBoundaryDi", "Apply", 0, QApplication::UnicodeUTF8)); - buttonCancel->setText(QApplication::translate("CreateBoundaryDi", "Cancel", 0, QApplication::UnicodeUTF8)); buttonHelp->setText(QApplication::translate("CreateBoundaryDi", "Help", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateBoundaryDi", "Cancel", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateBoundaryDi", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("CreateBoundaryDi", "OK", 0, QApplication::UnicodeUTF8)); + CBGroupe->setText(QApplication::translate("CreateBoundaryDi", "Filtering with groups", 0, QApplication::UnicodeUTF8)); + PushFichier->setText(QString()); + Mesh->setText(QApplication::translate("CreateBoundaryDi", "Mesh", 0, QApplication::UnicodeUTF8)); + Name->setText(QApplication::translate("CreateBoundaryDi", "Name", 0, QApplication::UnicodeUTF8)); Q_UNUSED(CreateBoundaryDi); } // retranslateUi diff --git a/src/HOMARDGUI/CreateBoundaryDi.ui b/src/HOMARDGUI/CreateBoundaryDi.ui index 5df5cb02..3cc0ec09 100644 --- a/src/HOMARDGUI/CreateBoundaryDi.ui +++ b/src/HOMARDGUI/CreateBoundaryDi.ui @@ -33,57 +33,6 @@ 6 - - - - Name - - - - - - - - 382 - 21 - - - - 32 - - - - - - - Mesh - - - - - - - - - - - - - - - 370 - 21 - - - - - - - - Filtering with groups - - - @@ -96,37 +45,88 @@ 6 - - + + - OK + Help - - + + - Apply + Cancel - - + + - Cancel + Apply - - + + - Help + OK + + + + Filtering with groups + + + + + + + + 370 + 21 + + + + + + + + + + + + + + + Mesh + + + + + + + + 382 + 21 + + + + 32 + + + + + + + Name + + + diff --git a/src/HOMARDGUI/CreateCase.h b/src/HOMARDGUI/CreateCase.h index 44a27c33..e976bca2 100644 --- a/src/HOMARDGUI/CreateCase.h +++ b/src/HOMARDGUI/CreateCase.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateCase.ui' ** -** Created: Tue Mar 15 09:25:40 2011 +** Created: Mon Sep 12 15:31:56 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,61 +26,70 @@ #include #include #include +#include #include -#include #include class Ui_CreateCase { public: QGridLayout *gridLayout; - QGroupBox *GroupButtons; + QGroupBox *GBAdvancedOptions; QGridLayout *gridLayout1; - QPushButton *buttonOk; - QPushButton *buttonApply; - QPushButton *buttonCancel; - QPushButton *buttonHelp; + QSpacerItem *spacerItem; + QLabel *TLMinimalDiameter; + QSpinBox *spinBoxNivMax; + QDoubleSpinBox *doubleSpinBoxDiamMin; + QLabel *TLMaximalLevel; QGroupBox *GBBoundaryA; + QTableWidget *TWBoundary; QWidget *layoutWidget; - QVBoxLayout *vboxLayout; + QGridLayout *gridLayout2; + QPushButton *PBBoundaryAnEdit; QPushButton *PBBoundaryAnNew; QPushButton *PBBoundaryAnHelp; - QTableWidget *TWBoundary; + QCheckBox *CBAdvanced; + QGroupBox *GBBoundaryD; + QGridLayout *gridLayout3; + QPushButton *PBBoundaryDiEdit; + QPushButton *PBBoundaryDiNew; + QComboBox *CBBoundaryDi; + QSpacerItem *spacerItem1; + QPushButton *PBBoundaryDiHelp; + QGroupBox *GroupButtons; + QGridLayout *gridLayout4; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; QHBoxLayout *hboxLayout; + QCheckBox *CBBoundaryD; + QCheckBox *CBBoundaryA; + QHBoxLayout *hboxLayout1; QLabel *Name; QLineEdit *LECaseName; - QHBoxLayout *hboxLayout1; + QHBoxLayout *hboxLayout2; QLabel *Directory; QPushButton *PushDir; QLineEdit *LEDirName; - QHBoxLayout *hboxLayout2; + QHBoxLayout *hboxLayout3; QLabel *Mesh_2; QPushButton *PushFichier; QLineEdit *LEFileName; - QSpacerItem *spacerItem; + QSpacerItem *spacerItem2; QGroupBox *GBTypeConf; - QHBoxLayout *hboxLayout3; + QHBoxLayout *hboxLayout4; QRadioButton *RBConforme; QRadioButton *RBNonConforme; - QSpacerItem *spacerItem1; + QSpacerItem *spacerItem3; QGroupBox *GBTypeNoConf; - QHBoxLayout *hboxLayout4; + QHBoxLayout *hboxLayout5; QRadioButton *RB1NpM; QRadioButton *RB1NpA; QRadioButton *RBQuelconque; - QSpacerItem *spacerItem2; - QHBoxLayout *hboxLayout5; - QCheckBox *CBBoundaryD; - QCheckBox *CBBoundaryA; - QSpacerItem *spacerItem3; QSpacerItem *spacerItem4; - QGroupBox *GBBoundaryD; - QGridLayout *gridLayout2; - QPushButton *PBBoundaryDiHelp; - QPushButton *PBBoundaryDiNew; - QPushButton *PBBoundaryDiEdit; QSpacerItem *spacerItem5; - QComboBox *CBBoundaryDi; + QSpacerItem *spacerItem6; void setupUi(QDialog *CreateCase) { @@ -94,264 +104,322 @@ public: gridLayout->setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - GroupButtons = new QGroupBox(CreateCase); - GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); - gridLayout1 = new QGridLayout(GroupButtons); + GBAdvancedOptions = new QGroupBox(CreateCase); + GBAdvancedOptions->setObjectName(QString::fromUtf8("GBAdvancedOptions")); + gridLayout1 = new QGridLayout(GBAdvancedOptions); gridLayout1->setSpacing(6); gridLayout1->setMargin(9); gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - buttonOk = new QPushButton(GroupButtons); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - buttonOk->setAutoDefault(false); + spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + gridLayout1->addItem(spacerItem, 0, 2, 1, 1); - buttonApply = new QPushButton(GroupButtons); - buttonApply->setObjectName(QString::fromUtf8("buttonApply")); - buttonApply->setAutoDefault(false); + TLMinimalDiameter = new QLabel(GBAdvancedOptions); + TLMinimalDiameter->setObjectName(QString::fromUtf8("TLMinimalDiameter")); + QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(TLMinimalDiameter->sizePolicy().hasHeightForWidth()); + TLMinimalDiameter->setSizePolicy(sizePolicy1); + TLMinimalDiameter->setWordWrap(false); - gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + gridLayout1->addWidget(TLMinimalDiameter, 0, 0, 1, 1); - buttonCancel = new QPushButton(GroupButtons); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - buttonCancel->setAutoDefault(false); + spinBoxNivMax = new QSpinBox(GBAdvancedOptions); + spinBoxNivMax->setObjectName(QString::fromUtf8("spinBoxNivMax")); + spinBoxNivMax->setValue(99); - gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + gridLayout1->addWidget(spinBoxNivMax, 0, 4, 1, 1); - buttonHelp = new QPushButton(GroupButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - buttonHelp->setAutoDefault(false); + doubleSpinBoxDiamMin = new QDoubleSpinBox(GBAdvancedOptions); + doubleSpinBoxDiamMin->setObjectName(QString::fromUtf8("doubleSpinBoxDiamMin")); + doubleSpinBoxDiamMin->setDecimals(5); + + gridLayout1->addWidget(doubleSpinBoxDiamMin, 0, 1, 1, 1); + + TLMaximalLevel = new QLabel(GBAdvancedOptions); + TLMaximalLevel->setObjectName(QString::fromUtf8("TLMaximalLevel")); + QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(TLMaximalLevel->sizePolicy().hasHeightForWidth()); + TLMaximalLevel->setSizePolicy(sizePolicy2); + TLMaximalLevel->setWordWrap(false); - gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + gridLayout1->addWidget(TLMaximalLevel, 0, 3, 1, 1); - gridLayout->addWidget(GroupButtons, 13, 0, 1, 2); + gridLayout->addWidget(GBAdvancedOptions, 14, 0, 1, 1); GBBoundaryA = new QGroupBox(CreateCase); GBBoundaryA->setObjectName(QString::fromUtf8("GBBoundaryA")); - GBBoundaryA->setMinimumSize(QSize(548, 300)); + GBBoundaryA->setMinimumSize(QSize(548, 200)); + TWBoundary = new QTableWidget(GBBoundaryA); + TWBoundary->setObjectName(QString::fromUtf8("TWBoundary")); + TWBoundary->setGeometry(QRect(4, 20, 371, 161)); + TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked); + TWBoundary->setShowGrid(true); + TWBoundary->setRowCount(0); + TWBoundary->setColumnCount(1); 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")); + layoutWidget->setGeometry(QRect(430, 40, 77, 95)); + gridLayout2 = new QGridLayout(layoutWidget); + gridLayout2->setSpacing(6); + gridLayout2->setMargin(0); + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + PBBoundaryAnEdit = new QPushButton(layoutWidget); + PBBoundaryAnEdit->setObjectName(QString::fromUtf8("PBBoundaryAnEdit")); + PBBoundaryAnEdit->setAutoDefault(false); + + gridLayout2->addWidget(PBBoundaryAnEdit, 1, 0, 1, 1); + PBBoundaryAnNew = new QPushButton(layoutWidget); PBBoundaryAnNew->setObjectName(QString::fromUtf8("PBBoundaryAnNew")); PBBoundaryAnNew->setAutoDefault(false); - vboxLayout->addWidget(PBBoundaryAnNew); + gridLayout2->addWidget(PBBoundaryAnNew, 0, 0, 1, 1); PBBoundaryAnHelp = new QPushButton(layoutWidget); PBBoundaryAnHelp->setObjectName(QString::fromUtf8("PBBoundaryAnHelp")); PBBoundaryAnHelp->setAutoDefault(false); - vboxLayout->addWidget(PBBoundaryAnHelp); + gridLayout2->addWidget(PBBoundaryAnHelp, 2, 0, 1, 1); - 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); + CBAdvanced = new QCheckBox(CreateCase); + CBAdvanced->setObjectName(QString::fromUtf8("CBAdvanced")); + + gridLayout->addWidget(CBAdvanced, 13, 0, 1, 1); + + GBBoundaryD = new QGroupBox(CreateCase); + GBBoundaryD->setObjectName(QString::fromUtf8("GBBoundaryD")); + QSizePolicy sizePolicy3(static_cast(0), static_cast(0)); + sizePolicy3.setHorizontalStretch(0); + sizePolicy3.setVerticalStretch(0); + sizePolicy3.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth()); + GBBoundaryD->setSizePolicy(sizePolicy3); + gridLayout3 = new QGridLayout(GBBoundaryD); + gridLayout3->setSpacing(6); + gridLayout3->setMargin(9); + gridLayout3->setObjectName(QString::fromUtf8("gridLayout3")); + PBBoundaryDiEdit = new QPushButton(GBBoundaryD); + PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit")); + PBBoundaryDiEdit->setAutoDefault(false); + + gridLayout3->addWidget(PBBoundaryDiEdit, 0, 3, 1, 1); + + PBBoundaryDiNew = new QPushButton(GBBoundaryD); + PBBoundaryDiNew->setObjectName(QString::fromUtf8("PBBoundaryDiNew")); + PBBoundaryDiNew->setAutoDefault(false); + + gridLayout3->addWidget(PBBoundaryDiNew, 0, 2, 1, 1); + + CBBoundaryDi = new QComboBox(GBBoundaryD); + CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi")); + CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + gridLayout3->addWidget(CBBoundaryDi, 0, 0, 1, 1); + + spacerItem1 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); + + gridLayout3->addItem(spacerItem1, 0, 1, 1, 1); + + PBBoundaryDiHelp = new QPushButton(GBBoundaryD); + PBBoundaryDiHelp->setObjectName(QString::fromUtf8("PBBoundaryDiHelp")); + PBBoundaryDiHelp->setAutoDefault(false); + + gridLayout3->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1); + + + gridLayout->addWidget(GBBoundaryD, 11, 0, 1, 1); + + GroupButtons = new QGroupBox(CreateCase); + GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); + gridLayout4 = new QGridLayout(GroupButtons); + gridLayout4->setSpacing(6); + gridLayout4->setMargin(9); + gridLayout4->setObjectName(QString::fromUtf8("gridLayout4")); + buttonHelp = new QPushButton(GroupButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + buttonHelp->setAutoDefault(false); + + gridLayout4->addWidget(buttonHelp, 0, 3, 1, 1); + + buttonCancel = new QPushButton(GroupButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + buttonCancel->setAutoDefault(false); + + gridLayout4->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GroupButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + buttonApply->setAutoDefault(false); + + gridLayout4->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GroupButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + buttonOk->setAutoDefault(false); + + gridLayout4->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout->addWidget(GroupButtons, 15, 0, 1, 1); + hboxLayout = new QHBoxLayout(); hboxLayout->setSpacing(6); hboxLayout->setMargin(0); hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + CBBoundaryD = new QCheckBox(CreateCase); + CBBoundaryD->setObjectName(QString::fromUtf8("CBBoundaryD")); + + hboxLayout->addWidget(CBBoundaryD); + + CBBoundaryA = new QCheckBox(CreateCase); + CBBoundaryA->setObjectName(QString::fromUtf8("CBBoundaryA")); + + hboxLayout->addWidget(CBBoundaryA); + + + gridLayout->addLayout(hboxLayout, 9, 0, 1, 1); + + hboxLayout1 = new QHBoxLayout(); + hboxLayout1->setSpacing(6); + hboxLayout1->setMargin(0); + hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); Name = new QLabel(CreateCase); Name->setObjectName(QString::fromUtf8("Name")); - hboxLayout->addWidget(Name); + hboxLayout1->addWidget(Name); LECaseName = new QLineEdit(CreateCase); LECaseName->setObjectName(QString::fromUtf8("LECaseName")); LECaseName->setMinimumSize(QSize(382, 21)); - hboxLayout->addWidget(LECaseName); + hboxLayout1->addWidget(LECaseName); - gridLayout->addLayout(hboxLayout, 0, 0, 1, 2); + gridLayout->addLayout(hboxLayout1, 0, 0, 1, 2); - hboxLayout1 = new QHBoxLayout(); - hboxLayout1->setSpacing(6); - hboxLayout1->setMargin(0); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); + hboxLayout2 = new QHBoxLayout(); + hboxLayout2->setSpacing(6); + hboxLayout2->setMargin(0); + hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); Directory = new QLabel(CreateCase); Directory->setObjectName(QString::fromUtf8("Directory")); - hboxLayout1->addWidget(Directory); + hboxLayout2->addWidget(Directory); PushDir = new QPushButton(CreateCase); PushDir->setObjectName(QString::fromUtf8("PushDir")); PushDir->setAutoDefault(false); - hboxLayout1->addWidget(PushDir); + hboxLayout2->addWidget(PushDir); LEDirName = new QLineEdit(CreateCase); LEDirName->setObjectName(QString::fromUtf8("LEDirName")); LEDirName->setMinimumSize(QSize(382, 21)); - hboxLayout1->addWidget(LEDirName); + hboxLayout2->addWidget(LEDirName); - gridLayout->addLayout(hboxLayout1, 1, 0, 1, 1); + gridLayout->addLayout(hboxLayout2, 1, 0, 1, 1); - hboxLayout2 = new QHBoxLayout(); - hboxLayout2->setSpacing(6); - hboxLayout2->setMargin(0); - hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); + hboxLayout3 = new QHBoxLayout(); + hboxLayout3->setSpacing(6); + hboxLayout3->setMargin(0); + hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); Mesh_2 = new QLabel(CreateCase); Mesh_2->setObjectName(QString::fromUtf8("Mesh_2")); - hboxLayout2->addWidget(Mesh_2); + hboxLayout3->addWidget(Mesh_2); PushFichier = new QPushButton(CreateCase); PushFichier->setObjectName(QString::fromUtf8("PushFichier")); PushFichier->setAutoDefault(false); - hboxLayout2->addWidget(PushFichier); + hboxLayout3->addWidget(PushFichier); LEFileName = new QLineEdit(CreateCase); LEFileName->setObjectName(QString::fromUtf8("LEFileName")); LEFileName->setMinimumSize(QSize(382, 21)); - hboxLayout2->addWidget(LEFileName); + hboxLayout3->addWidget(LEFileName); - gridLayout->addLayout(hboxLayout2, 3, 0, 1, 2); + gridLayout->addLayout(hboxLayout3, 3, 0, 1, 2); - spacerItem = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem2 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem, 4, 0, 1, 1); + gridLayout->addItem(spacerItem2, 4, 0, 1, 1); GBTypeConf = new QGroupBox(CreateCase); GBTypeConf->setObjectName(QString::fromUtf8("GBTypeConf")); - hboxLayout3 = new QHBoxLayout(GBTypeConf); - hboxLayout3->setSpacing(6); - hboxLayout3->setMargin(9); - hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); + hboxLayout4 = new QHBoxLayout(GBTypeConf); + hboxLayout4->setSpacing(6); + hboxLayout4->setMargin(9); + hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4")); RBConforme = new QRadioButton(GBTypeConf); RBConforme->setObjectName(QString::fromUtf8("RBConforme")); RBConforme->setChecked(true); - hboxLayout3->addWidget(RBConforme); + hboxLayout4->addWidget(RBConforme); RBNonConforme = new QRadioButton(GBTypeConf); RBNonConforme->setObjectName(QString::fromUtf8("RBNonConforme")); - hboxLayout3->addWidget(RBNonConforme); + hboxLayout4->addWidget(RBNonConforme); gridLayout->addWidget(GBTypeConf, 5, 0, 1, 2); - spacerItem1 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem3 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem1, 6, 0, 1, 1); + gridLayout->addItem(spacerItem3, 6, 0, 1, 1); GBTypeNoConf = new QGroupBox(CreateCase); GBTypeNoConf->setObjectName(QString::fromUtf8("GBTypeNoConf")); - hboxLayout4 = new QHBoxLayout(GBTypeNoConf); - hboxLayout4->setSpacing(6); - hboxLayout4->setMargin(9); - hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4")); + hboxLayout5 = new QHBoxLayout(GBTypeNoConf); + hboxLayout5->setSpacing(6); + hboxLayout5->setMargin(9); + hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5")); RB1NpM = new QRadioButton(GBTypeNoConf); RB1NpM->setObjectName(QString::fromUtf8("RB1NpM")); - hboxLayout4->addWidget(RB1NpM); + hboxLayout5->addWidget(RB1NpM); RB1NpA = new QRadioButton(GBTypeNoConf); RB1NpA->setObjectName(QString::fromUtf8("RB1NpA")); - hboxLayout4->addWidget(RB1NpA); + hboxLayout5->addWidget(RB1NpA); RBQuelconque = new QRadioButton(GBTypeNoConf); RBQuelconque->setObjectName(QString::fromUtf8("RBQuelconque")); - hboxLayout4->addWidget(RBQuelconque); + hboxLayout5->addWidget(RBQuelconque); gridLayout->addWidget(GBTypeNoConf, 7, 0, 1, 2); - spacerItem2 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout->addItem(spacerItem2, 8, 0, 1, 1); - - hboxLayout5 = new QHBoxLayout(); - hboxLayout5->setSpacing(6); - hboxLayout5->setMargin(0); - hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5")); - CBBoundaryD = new QCheckBox(CreateCase); - CBBoundaryD->setObjectName(QString::fromUtf8("CBBoundaryD")); - - hboxLayout5->addWidget(CBBoundaryD); - - CBBoundaryA = new QCheckBox(CreateCase); - CBBoundaryA->setObjectName(QString::fromUtf8("CBBoundaryA")); - - hboxLayout5->addWidget(CBBoundaryA); - - - gridLayout->addLayout(hboxLayout5, 9, 0, 1, 1); + spacerItem4 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - spacerItem3 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Expanding); + gridLayout->addItem(spacerItem4, 8, 0, 1, 1); - gridLayout->addItem(spacerItem3, 10, 0, 1, 1); + spacerItem5 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Expanding); - spacerItem4 = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout->addItem(spacerItem4, 2, 1, 1, 1); - - GBBoundaryD = new QGroupBox(CreateCase); - GBBoundaryD->setObjectName(QString::fromUtf8("GBBoundaryD")); - QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth()); - GBBoundaryD->setSizePolicy(sizePolicy1); - gridLayout2 = new QGridLayout(GBBoundaryD); - gridLayout2->setSpacing(6); - gridLayout2->setMargin(9); - gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); - PBBoundaryDiHelp = new QPushButton(GBBoundaryD); - PBBoundaryDiHelp->setObjectName(QString::fromUtf8("PBBoundaryDiHelp")); - PBBoundaryDiHelp->setAutoDefault(false); + gridLayout->addItem(spacerItem5, 10, 0, 1, 1); - gridLayout2->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1); + spacerItem6 = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); - PBBoundaryDiNew = new QPushButton(GBBoundaryD); - PBBoundaryDiNew->setObjectName(QString::fromUtf8("PBBoundaryDiNew")); - PBBoundaryDiNew->setAutoDefault(false); - - gridLayout2->addWidget(PBBoundaryDiNew, 0, 3, 1, 1); - - PBBoundaryDiEdit = new QPushButton(GBBoundaryD); - PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit")); - PBBoundaryDiEdit->setAutoDefault(false); - - gridLayout2->addWidget(PBBoundaryDiEdit, 0, 2, 1, 1); - - spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); - - gridLayout2->addItem(spacerItem5, 0, 1, 1, 1); - - CBBoundaryDi = new QComboBox(GBBoundaryD); - CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi")); - CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents); - - gridLayout2->addWidget(CBBoundaryDi, 0, 0, 1, 1); - - - gridLayout->addWidget(GBBoundaryD, 11, 0, 1, 1); + gridLayout->addItem(spacerItem6, 2, 1, 1, 1); retranslateUi(CreateCase); - QSize size(597, 850); + QSize size(599, 925); size = size.expandedTo(CreateCase->minimumSizeHint()); CreateCase->resize(size); @@ -365,20 +433,31 @@ public: void retranslateUi(QDialog *CreateCase) { CreateCase->setWindowTitle(QApplication::translate("CreateCase", "Create a 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)); + GBAdvancedOptions->setTitle(QApplication::translate("CreateCase", "Advanced options", 0, QApplication::UnicodeUTF8)); + TLMinimalDiameter->setText(QApplication::translate("CreateCase", "Minimal diameter", 0, QApplication::UnicodeUTF8)); + TLMaximalLevel->setText(QApplication::translate("CreateCase", "Maximal level", 0, QApplication::UnicodeUTF8)); GBBoundaryA->setTitle(QApplication::translate("CreateCase", "Analytical 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); + PBBoundaryAnEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); + PBBoundaryAnNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); + PBBoundaryAnHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); + CBAdvanced->setText(QApplication::translate("CreateCase", "Advanced options", 0, QApplication::UnicodeUTF8)); + GBBoundaryD->setTitle(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8)); + PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); + PBBoundaryDiNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); + PBBoundaryDiHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); + GroupButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateCase", "Cancel", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateCase", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("CreateCase", "OK", 0, QApplication::UnicodeUTF8)); + CBBoundaryD->setText(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8)); + CBBoundaryA->setText(QApplication::translate("CreateCase", "Analytical boundary", 0, QApplication::UnicodeUTF8)); Name->setText(QApplication::translate("CreateCase", "Name", 0, QApplication::UnicodeUTF8)); Directory->setText(QApplication::translate("CreateCase", "Directory", 0, QApplication::UnicodeUTF8)); PushDir->setText(QString()); @@ -391,12 +470,6 @@ public: RB1NpM->setText(QApplication::translate("CreateCase", "1 hanging node per mesh", 0, QApplication::UnicodeUTF8)); RB1NpA->setText(QApplication::translate("CreateCase", "1 node per edge", 0, QApplication::UnicodeUTF8)); RBQuelconque->setText(QApplication::translate("CreateCase", "Free", 0, QApplication::UnicodeUTF8)); - CBBoundaryD->setText(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8)); - CBBoundaryA->setText(QApplication::translate("CreateCase", "Analytical boundary", 0, QApplication::UnicodeUTF8)); - GBBoundaryD->setTitle(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8)); - PBBoundaryDiHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8)); - PBBoundaryDiNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8)); - PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8)); Q_UNUSED(CreateCase); } // retranslateUi diff --git a/src/HOMARDGUI/CreateCase.ui b/src/HOMARDGUI/CreateCase.ui index 64884b5c..9deb2cde 100644 --- a/src/HOMARDGUI/CreateCase.ui +++ b/src/HOMARDGUI/CreateCase.ui @@ -5,8 +5,8 @@ 0 0 - 597 - 850 + 599 + 925 @@ -30,10 +30,10 @@ 6 - - + + - + Advanced options @@ -42,42 +42,65 @@ 6 - - - - OK + + + + Qt::Horizontal - - false + + + 40 + 20 + - + - - + + + + + 0 + 0 + 0 + 0 + + - Apply + Minimal diameter - + false - - - - Cancel + + + + 99 - - false + + + + + + 5 - + + + + 0 + 0 + 0 + 0 + + - Help + Maximal level - + false @@ -90,29 +113,66 @@ 548 - 300 + 200 Analytical boundary - + - 410 + 4 20 - 120 - 110 + 371 + 161 + + + + QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked + + + true + + + 0 + + + 1 + + + + a_virer + + + + + + + 430 + 40 + 77 + 95 - + 0 6 - + + + + Edit + + + false + + + + New @@ -122,7 +182,7 @@ - + Help @@ -134,34 +194,172 @@ - - - - 4 - 20 - 371 - 270 - - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers|QAbstractItemView::SelectedClicked + + + + + + Advanced options + + + + + + + + 0 + 0 + 0 + 0 + + + + Discrete boundary + + + + 9 - - true + + 6 - - 0 + + + + Edit + + + false + + + + + + + New + + + false + + + + + + + -1 + + + QComboBox::AdjustToContents + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 13 + + + + + + + + Help + + + false + + + + + + + + + + + + + + 9 - - 1 + + 6 - + + + + Help + + + false + + + + + + + Cancel + + + false + + + + + + + Apply + + + false + + + + + + + OK + + + false + + + + + + + + + + 0 + + + 6 + + + - a_virer + Discrete boundary - - - + + + + + + Analytical boundary + + + + @@ -371,30 +569,6 @@ - - - - 0 - - - 6 - - - - - Discrete boundary - - - - - - - Analytical boundary - - - - - @@ -421,85 +595,6 @@ - - - - - 0 - 0 - 0 - 0 - - - - Discrete boundary - - - - 9 - - - 6 - - - - - Help - - - false - - - - - - - New - - - false - - - - - - - Edit - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 13 - - - - - - - - -1 - - - QComboBox::AdjustToContents - - - - - - diff --git a/src/HOMARDGUI/CreateHypothesis.h b/src/HOMARDGUI/CreateHypothesis.h index edac2890..2d7d60d2 100644 --- a/src/HOMARDGUI/CreateHypothesis.h +++ b/src/HOMARDGUI/CreateHypothesis.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateHypothesis.ui' ** -** Created: Tue Mar 15 11:33:40 2011 +** Created: Fri Sep 2 15:33:39 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -61,6 +61,7 @@ public: QHBoxLayout *hboxLayout3; QRadioButton *RBL2; QRadioButton *RBInf; + QCheckBox *CBJump; QHBoxLayout *hboxLayout4; QGroupBox *GBRefinementThresholds; QGridLayout *gridLayout4; @@ -274,6 +275,11 @@ public: vboxLayout->addLayout(hboxLayout3); + CBJump = new QCheckBox(GBFieldManagement); + CBJump->setObjectName(QString::fromUtf8("CBJump")); + + vboxLayout->addWidget(CBJump); + hboxLayout2->addLayout(vboxLayout); @@ -333,7 +339,7 @@ public: SpinBox_RAbs = new QDoubleSpinBox(GBRefinementThresholds); SpinBox_RAbs->setObjectName(QString::fromUtf8("SpinBox_RAbs")); SpinBox_RAbs->setEnabled(false); - SpinBox_RAbs->setDecimals(3); + SpinBox_RAbs->setDecimals(8); SpinBox_RAbs->setMaximum(100); SpinBox_RAbs->setSingleStep(0.1); @@ -391,7 +397,7 @@ public: SpinBox_CAbs = new QDoubleSpinBox(GBCoarseningThresholds); SpinBox_CAbs->setObjectName(QString::fromUtf8("SpinBox_CAbs")); SpinBox_CAbs->setEnabled(false); - SpinBox_CAbs->setDecimals(3); + SpinBox_CAbs->setDecimals(8); SpinBox_CAbs->setMaximum(100); SpinBox_CAbs->setSingleStep(0.1); @@ -579,6 +585,7 @@ public: TWCMP->setHorizontalHeaderItem(1, __colItem1); RBL2->setText(QApplication::translate("CreateHypothesis", "L2 norm", 0, QApplication::UnicodeUTF8)); RBInf->setText(QApplication::translate("CreateHypothesis", "Infinite norm", 0, QApplication::UnicodeUTF8)); + CBJump->setText(QApplication::translate("CreateHypothesis", "Jump between elements", 0, QApplication::UnicodeUTF8)); GBRefinementThresholds->setTitle(QApplication::translate("CreateHypothesis", "Refinement threshold", 0, QApplication::UnicodeUTF8)); RBRPE->setText(QApplication::translate("CreateHypothesis", "Percentage of meshes", 0, QApplication::UnicodeUTF8)); SpinBox_RPE->setSuffix(QApplication::translate("CreateHypothesis", " %", 0, QApplication::UnicodeUTF8)); diff --git a/src/HOMARDGUI/CreateHypothesis.ui b/src/HOMARDGUI/CreateHypothesis.ui index 7bc8b7f4..a5a91ed4 100644 --- a/src/HOMARDGUI/CreateHypothesis.ui +++ b/src/HOMARDGUI/CreateHypothesis.ui @@ -309,6 +309,13 @@ + + + + Jump between elements + + + @@ -412,7 +419,7 @@ false - 3 + 8 100.000000000000000 @@ -515,7 +522,7 @@ false - 3 + 8 100.000000000000000 diff --git a/src/HOMARDGUI/CreateIteration.h b/src/HOMARDGUI/CreateIteration.h index b116d885..36fa710d 100644 --- a/src/HOMARDGUI/CreateIteration.h +++ b/src/HOMARDGUI/CreateIteration.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateIteration.ui' ** -** Created: Tue Mar 15 10:16:06 2011 +** Created: Thu Sep 1 13:07:29 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -29,34 +29,34 @@ class Ui_CreateIteration { public: QGridLayout *gridLayout; + QGroupBox *GBField; + QGridLayout *gridLayout1; + QLineEdit *LEFieldFile; + QSpacerItem *spacerItem; + QRadioButton *RBChosen; + QSpacerItem *spacerItem1; + QSpinBox *SpinBox_Rank; + QLabel *Rank; + QSpacerItem *spacerItem2; + QSpinBox *SpinBox_TimeStep; + QLabel *TimeStep; + QSpacerItem *spacerItem3; + QRadioButton *RBLast; + QRadioButton *RBNo; + QPushButton *PushFieldFile; + QLabel *FieldFile; QLabel *Iteration_Name; QLineEdit *LEIterationName; QLabel *Iter_Parent; - QSpacerItem *spacerItem; + QSpacerItem *spacerItem4; QPushButton *PBIterParent; QLineEdit *LEIterationParentName; QLabel *Mesh_n; - QSpacerItem *spacerItem1; + QSpacerItem *spacerItem5; QLineEdit *LEMeshName_n; - QSpacerItem *spacerItem2; + QSpacerItem *spacerItem6; QLabel *Mesh_np1; QLineEdit *LEMeshName_np1; - QSpacerItem *spacerItem3; - QGroupBox *GBField; - QGridLayout *gridLayout1; - QLabel *FieldFile; - QPushButton *PushFieldFile; - QLineEdit *LEFieldFile; - QSpacerItem *spacerItem4; - QRadioButton *RBNo; - QRadioButton *RBLast; - QRadioButton *RBChosen; - QSpacerItem *spacerItem5; - QLabel *TimeStep; - QSpinBox *SpinBox_TimeStep; - QSpacerItem *spacerItem6; - QLabel *Rank; - QSpinBox *SpinBox_Rank; QSpacerItem *spacerItem7; QSpacerItem *spacerItem8; QGroupBox *Hypothese; @@ -80,6 +80,90 @@ public: gridLayout->setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + GBField = new QGroupBox(CreateIteration); + GBField->setObjectName(QString::fromUtf8("GBField")); + gridLayout1 = new QGridLayout(GBField); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + LEFieldFile = new QLineEdit(GBField); + LEFieldFile->setObjectName(QString::fromUtf8("LEFieldFile")); + LEFieldFile->setMinimumSize(QSize(282, 21)); + + gridLayout1->addWidget(LEFieldFile, 0, 2, 1, 5); + + spacerItem = new QSpacerItem(138, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); + + gridLayout1->addItem(spacerItem, 1, 3, 1, 4); + + RBChosen = new QRadioButton(GBField); + RBChosen->setObjectName(QString::fromUtf8("RBChosen")); + + gridLayout1->addWidget(RBChosen, 2, 6, 1, 1); + + spacerItem1 = new QSpacerItem(255, 13, QSizePolicy::Expanding, QSizePolicy::Minimum); + + gridLayout1->addItem(spacerItem1, 4, 6, 1, 1); + + SpinBox_Rank = new QSpinBox(GBField); + SpinBox_Rank->setObjectName(QString::fromUtf8("SpinBox_Rank")); + SpinBox_Rank->setMaximum(1010000); + SpinBox_Rank->setMinimum(-1); + SpinBox_Rank->setValue(1); + + gridLayout1->addWidget(SpinBox_Rank, 4, 5, 1, 1); + + Rank = new QLabel(GBField); + Rank->setObjectName(QString::fromUtf8("Rank")); + + gridLayout1->addWidget(Rank, 4, 4, 1, 1); + + spacerItem2 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); + + gridLayout1->addItem(spacerItem2, 4, 2, 1, 2); + + SpinBox_TimeStep = new QSpinBox(GBField); + SpinBox_TimeStep->setObjectName(QString::fromUtf8("SpinBox_TimeStep")); + SpinBox_TimeStep->setMaximum(100000); + SpinBox_TimeStep->setMinimum(-2); + SpinBox_TimeStep->setValue(-1); + + gridLayout1->addWidget(SpinBox_TimeStep, 4, 1, 1, 1); + + TimeStep = new QLabel(GBField); + TimeStep->setObjectName(QString::fromUtf8("TimeStep")); + + gridLayout1->addWidget(TimeStep, 4, 0, 1, 1); + + spacerItem3 = new QSpacerItem(138, 28, QSizePolicy::Minimum, QSizePolicy::Expanding); + + gridLayout1->addItem(spacerItem3, 3, 0, 1, 4); + + RBLast = new QRadioButton(GBField); + RBLast->setObjectName(QString::fromUtf8("RBLast")); + + gridLayout1->addWidget(RBLast, 2, 3, 1, 3); + + RBNo = new QRadioButton(GBField); + RBNo->setObjectName(QString::fromUtf8("RBNo")); + RBNo->setCheckable(true); + RBNo->setChecked(true); + + gridLayout1->addWidget(RBNo, 2, 0, 1, 3); + + PushFieldFile = new QPushButton(GBField); + PushFieldFile->setObjectName(QString::fromUtf8("PushFieldFile")); + + gridLayout1->addWidget(PushFieldFile, 0, 1, 1, 1); + + FieldFile = new QLabel(GBField); + FieldFile->setObjectName(QString::fromUtf8("FieldFile")); + + gridLayout1->addWidget(FieldFile, 0, 0, 1, 1); + + + gridLayout->addWidget(GBField, 6, 0, 1, 4); + Iteration_Name = new QLabel(CreateIteration); Iteration_Name->setObjectName(QString::fromUtf8("Iteration_Name")); @@ -97,9 +181,9 @@ public: gridLayout->addWidget(Iter_Parent, 1, 0, 1, 1); - spacerItem = new QSpacerItem(20, 24, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem4 = new QSpacerItem(20, 24, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem, 1, 1, 1, 1); + gridLayout->addItem(spacerItem4, 1, 1, 1, 1); PBIterParent = new QPushButton(CreateIteration); PBIterParent->setObjectName(QString::fromUtf8("PBIterParent")); @@ -121,9 +205,9 @@ public: gridLayout->addWidget(Mesh_n, 2, 0, 1, 1); - spacerItem1 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem5 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem1, 2, 1, 1, 1); + gridLayout->addItem(spacerItem5, 2, 1, 1, 1); LEMeshName_n = new QLineEdit(CreateIteration); LEMeshName_n->setObjectName(QString::fromUtf8("LEMeshName_n")); @@ -133,9 +217,9 @@ public: gridLayout->addWidget(LEMeshName_n, 2, 2, 1, 2); - spacerItem2 = new QSpacerItem(20, 22, QSizePolicy::Minimum, QSizePolicy::Expanding); + spacerItem6 = new QSpacerItem(20, 22, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem2, 3, 1, 1, 1); + gridLayout->addItem(spacerItem6, 3, 1, 1, 1); Mesh_np1 = new QLabel(CreateIteration); Mesh_np1->setObjectName(QString::fromUtf8("Mesh_np1")); @@ -149,93 +233,9 @@ public: gridLayout->addWidget(LEMeshName_np1, 4, 2, 1, 2); - spacerItem3 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout->addItem(spacerItem3, 5, 1, 1, 1); - - GBField = new QGroupBox(CreateIteration); - GBField->setObjectName(QString::fromUtf8("GBField")); - gridLayout1 = new QGridLayout(GBField); - gridLayout1->setSpacing(6); - gridLayout1->setMargin(9); - gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - FieldFile = new QLabel(GBField); - FieldFile->setObjectName(QString::fromUtf8("FieldFile")); - - gridLayout1->addWidget(FieldFile, 0, 0, 1, 1); - - PushFieldFile = new QPushButton(GBField); - PushFieldFile->setObjectName(QString::fromUtf8("PushFieldFile")); - - gridLayout1->addWidget(PushFieldFile, 0, 1, 1, 1); - - LEFieldFile = new QLineEdit(GBField); - LEFieldFile->setObjectName(QString::fromUtf8("LEFieldFile")); - LEFieldFile->setMinimumSize(QSize(282, 21)); - - gridLayout1->addWidget(LEFieldFile, 0, 2, 1, 6); - - spacerItem4 = new QSpacerItem(138, 18, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(spacerItem4, 1, 3, 1, 4); - - RBNo = new QRadioButton(GBField); - RBNo->setObjectName(QString::fromUtf8("RBNo")); - RBNo->setCheckable(true); - RBNo->setChecked(true); - - gridLayout1->addWidget(RBNo, 2, 0, 1, 3); - - RBLast = new QRadioButton(GBField); - RBLast->setObjectName(QString::fromUtf8("RBLast")); - - gridLayout1->addWidget(RBLast, 2, 3, 1, 3); - - RBChosen = new QRadioButton(GBField); - RBChosen->setObjectName(QString::fromUtf8("RBChosen")); - - gridLayout1->addWidget(RBChosen, 2, 7, 1, 1); + spacerItem7 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding); - spacerItem5 = new QSpacerItem(138, 28, QSizePolicy::Minimum, QSizePolicy::Expanding); - - gridLayout1->addItem(spacerItem5, 3, 0, 1, 4); - - TimeStep = new QLabel(GBField); - TimeStep->setObjectName(QString::fromUtf8("TimeStep")); - - gridLayout1->addWidget(TimeStep, 4, 0, 1, 1); - - SpinBox_TimeStep = new QSpinBox(GBField); - SpinBox_TimeStep->setObjectName(QString::fromUtf8("SpinBox_TimeStep")); - SpinBox_TimeStep->setMaximum(100000); - SpinBox_TimeStep->setMinimum(-2); - SpinBox_TimeStep->setValue(-1); - - gridLayout1->addWidget(SpinBox_TimeStep, 4, 1, 1, 1); - - spacerItem6 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); - - gridLayout1->addItem(spacerItem6, 4, 2, 1, 2); - - Rank = new QLabel(GBField); - Rank->setObjectName(QString::fromUtf8("Rank")); - - gridLayout1->addWidget(Rank, 4, 4, 1, 1); - - SpinBox_Rank = new QSpinBox(GBField); - SpinBox_Rank->setObjectName(QString::fromUtf8("SpinBox_Rank")); - SpinBox_Rank->setMaximum(1010000); - SpinBox_Rank->setMinimum(-1); - SpinBox_Rank->setValue(1); - - gridLayout1->addWidget(SpinBox_Rank, 4, 5, 1, 1); - - spacerItem7 = new QSpacerItem(255, 13, QSizePolicy::Expanding, QSizePolicy::Minimum); - - gridLayout1->addItem(spacerItem7, 4, 6, 1, 2); - - - gridLayout->addWidget(GBField, 6, 0, 1, 4); + gridLayout->addItem(spacerItem7, 5, 1, 1, 1); spacerItem8 = new QSpacerItem(20, 22, QSizePolicy::Minimum, QSizePolicy::Expanding); @@ -272,7 +272,7 @@ public: spacerItem10 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding); - gridLayout->addItem(spacerItem10, 9, 0, 1, 2); + gridLayout->addItem(spacerItem10, 9, 0, 1, 1); GroupButtons = new QGroupBox(CreateIteration); GroupButtons->setObjectName(QString::fromUtf8("GroupButtons")); @@ -308,7 +308,7 @@ public: retranslateUi(CreateIteration); - QSize size(587, 598); + QSize size(610, 598); size = size.expandedTo(CreateIteration->minimumSizeHint()); CreateIteration->resize(size); @@ -322,19 +322,19 @@ public: void retranslateUi(QWidget *CreateIteration) { CreateIteration->setWindowTitle(QApplication::translate("CreateIteration", "Create an iteration", 0, QApplication::UnicodeUTF8)); + GBField->setTitle(QApplication::translate("CreateIteration", "Field information", 0, QApplication::UnicodeUTF8)); + RBChosen->setText(QApplication::translate("CreateIteration", "Chosen time step", 0, QApplication::UnicodeUTF8)); + Rank->setText(QApplication::translate("CreateIteration", "Rank", 0, QApplication::UnicodeUTF8)); + TimeStep->setText(QApplication::translate("CreateIteration", "Time step", 0, QApplication::UnicodeUTF8)); + RBLast->setText(QApplication::translate("CreateIteration", "Last time step", 0, QApplication::UnicodeUTF8)); + RBNo->setText(QApplication::translate("CreateIteration", "No time step", 0, QApplication::UnicodeUTF8)); + PushFieldFile->setText(QString()); + FieldFile->setText(QApplication::translate("CreateIteration", "Field file", 0, QApplication::UnicodeUTF8)); Iteration_Name->setText(QApplication::translate("CreateIteration", "Iteration Name", 0, QApplication::UnicodeUTF8)); Iter_Parent->setText(QApplication::translate("CreateIteration", "Previous iteration", 0, QApplication::UnicodeUTF8)); PBIterParent->setText(QString()); Mesh_n->setText(QApplication::translate("CreateIteration", "Mesh n", 0, QApplication::UnicodeUTF8)); Mesh_np1->setText(QApplication::translate("CreateIteration", "Mesh n+1", 0, QApplication::UnicodeUTF8)); - GBField->setTitle(QApplication::translate("CreateIteration", "Field information", 0, QApplication::UnicodeUTF8)); - FieldFile->setText(QApplication::translate("CreateIteration", "Field file", 0, QApplication::UnicodeUTF8)); - PushFieldFile->setText(QString()); - RBNo->setText(QApplication::translate("CreateIteration", "No time step", 0, QApplication::UnicodeUTF8)); - RBLast->setText(QApplication::translate("CreateIteration", "Last time step", 0, QApplication::UnicodeUTF8)); - RBChosen->setText(QApplication::translate("CreateIteration", "Chosen time step", 0, QApplication::UnicodeUTF8)); - TimeStep->setText(QApplication::translate("CreateIteration", "Time step", 0, QApplication::UnicodeUTF8)); - Rank->setText(QApplication::translate("CreateIteration", "Rank", 0, QApplication::UnicodeUTF8)); Hypothese->setTitle(QApplication::translate("CreateIteration", "Hypothesis", 0, QApplication::UnicodeUTF8)); PBHypoEdit->setText(QApplication::translate("CreateIteration", "Edit", 0, QApplication::UnicodeUTF8)); PBHypoNew->setText(QApplication::translate("CreateIteration", "New", 0, QApplication::UnicodeUTF8)); diff --git a/src/HOMARDGUI/CreateIteration.ui b/src/HOMARDGUI/CreateIteration.ui index 1b2eb8e4..01a0d38b 100644 --- a/src/HOMARDGUI/CreateIteration.ui +++ b/src/HOMARDGUI/CreateIteration.ui @@ -5,7 +5,7 @@ 0 0 - 587 + 610 598 @@ -19,6 +19,170 @@ 6 + + + + Field information + + + + 9 + + + 6 + + + + + + 282 + 21 + + + + + + + + Qt::Vertical + + + + 138 + 18 + + + + + + + + Chosen time step + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 255 + 13 + + + + + + + + 1010000 + + + -1 + + + 1 + + + + + + + Rank + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 13 + + + + + + + + 100000 + + + -2 + + + -1 + + + + + + + Time step + + + + + + + Qt::Vertical + + + + 138 + 28 + + + + + + + + Last time step + + + + + + + No time step + + + true + + + true + + + + + + + + + + + + + + Field file + + + + + + @@ -173,170 +337,6 @@ - - - - Field information - - - - 9 - - - 6 - - - - - Field file - - - - - - - - - - - - - - - 282 - 21 - - - - - - - - Qt::Vertical - - - - 138 - 18 - - - - - - - - No time step - - - true - - - true - - - - - - - Last time step - - - - - - - Chosen time step - - - - - - - Qt::Vertical - - - - 138 - 28 - - - - - - - - Time step - - - - - - - 100000 - - - -2 - - - -1 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 13 - - - - - - - - Rank - - - - - - - 1010000 - - - -1 - - - 1 - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 255 - 13 - - - - - - - @@ -405,7 +405,7 @@ - + Qt::Vertical diff --git a/src/HOMARDGUI/CreateListGroup.h b/src/HOMARDGUI/CreateListGroup.h index 49c5a17f..f57ebc20 100644 --- a/src/HOMARDGUI/CreateListGroup.h +++ b/src/HOMARDGUI/CreateListGroup.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateListGroup.ui' ** -** Created: Thu Feb 24 09:10:36 2011 +** Created: Thu Sep 1 16:35:32 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -24,15 +24,15 @@ class Ui_CreateListGroup { public: QGridLayout *gridLayout; - QGroupBox *GBOptions; - QGridLayout *gridLayout1; - QTableWidget *TWGroupe; QGroupBox *GBButtons; - QGridLayout *gridLayout2; - QPushButton *buttonOk; - QPushButton *buttonApply; - QPushButton *buttonCancel; + QGridLayout *gridLayout1; QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + QGroupBox *GBOptions; + QGridLayout *gridLayout2; + QTableWidget *TWGroupe; void setupUi(QDialog *CreateListGroup) { @@ -48,51 +48,51 @@ public: gridLayout->setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - GBOptions = new QGroupBox(CreateListGroup); - GBOptions->setObjectName(QString::fromUtf8("GBOptions")); - gridLayout1 = new QGridLayout(GBOptions); + GBButtons = new QGroupBox(CreateListGroup); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + gridLayout1 = new QGridLayout(GBButtons); gridLayout1->setSpacing(6); gridLayout1->setMargin(9); gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - TWGroupe = new QTableWidget(GBOptions); - TWGroupe->setObjectName(QString::fromUtf8("TWGroupe")); - TWGroupe->setShowGrid(true); - TWGroupe->setRowCount(0); - TWGroupe->setColumnCount(2); - - gridLayout1->addWidget(TWGroupe, 0, 0, 1, 1); - + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - gridLayout->addWidget(GBOptions, 0, 0, 1, 1); + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); - GBButtons = new QGroupBox(CreateListGroup); - GBButtons->setObjectName(QString::fromUtf8("GBButtons")); - gridLayout2 = new QGridLayout(GBButtons); - gridLayout2->setSpacing(6); - gridLayout2->setMargin(9); - gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); - buttonOk = new QPushButton(GBButtons); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - gridLayout2->addWidget(buttonOk, 0, 0, 1, 1); + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); buttonApply = new QPushButton(GBButtons); buttonApply->setObjectName(QString::fromUtf8("buttonApply")); - gridLayout2->addWidget(buttonApply, 0, 1, 1, 1); + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); - buttonCancel = new QPushButton(GBButtons); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); - gridLayout2->addWidget(buttonCancel, 0, 2, 1, 1); + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); - buttonHelp = new QPushButton(GBButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - gridLayout2->addWidget(buttonHelp, 0, 3, 1, 1); + gridLayout->addWidget(GBButtons, 1, 0, 1, 1); + + GBOptions = new QGroupBox(CreateListGroup); + GBOptions->setObjectName(QString::fromUtf8("GBOptions")); + gridLayout2 = new QGridLayout(GBOptions); + gridLayout2->setSpacing(6); + gridLayout2->setMargin(9); + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + TWGroupe = new QTableWidget(GBOptions); + TWGroupe->setObjectName(QString::fromUtf8("TWGroupe")); + TWGroupe->setShowGrid(true); + TWGroupe->setRowCount(0); + TWGroupe->setColumnCount(2); + + gridLayout2->addWidget(TWGroupe, 0, 0, 1, 1); - gridLayout->addWidget(GBButtons, 1, 0, 1, 1); + gridLayout->addWidget(GBOptions, 0, 0, 1, 1); retranslateUi(CreateListGroup); @@ -108,6 +108,11 @@ public: void retranslateUi(QDialog *CreateListGroup) { CreateListGroup->setWindowTitle(QApplication::translate("CreateListGroup", "Selection of groups", 0, QApplication::UnicodeUTF8)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateListGroup", "Help", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateListGroup", "Cancel", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateListGroup", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("CreateListGroup", "OK", 0, QApplication::UnicodeUTF8)); GBOptions->setTitle(QApplication::translate("CreateListGroup", "Selected groups", 0, QApplication::UnicodeUTF8)); if (TWGroupe->columnCount() < 2) TWGroupe->setColumnCount(2); @@ -119,11 +124,6 @@ public: QTableWidgetItem *__colItem1 = new QTableWidgetItem(); __colItem1->setText(QApplication::translate("CreateListGroup", "Group", 0, QApplication::UnicodeUTF8)); TWGroupe->setHorizontalHeaderItem(1, __colItem1); - GBButtons->setTitle(QString()); - buttonOk->setText(QApplication::translate("CreateListGroup", "OK", 0, QApplication::UnicodeUTF8)); - buttonApply->setText(QApplication::translate("CreateListGroup", "Apply", 0, QApplication::UnicodeUTF8)); - buttonCancel->setText(QApplication::translate("CreateListGroup", "Cancel", 0, QApplication::UnicodeUTF8)); - buttonHelp->setText(QApplication::translate("CreateListGroup", "Help", 0, QApplication::UnicodeUTF8)); Q_UNUSED(CreateListGroup); } // retranslateUi diff --git a/src/HOMARDGUI/CreateListGroup.ui b/src/HOMARDGUI/CreateListGroup.ui index f20fdde0..06c60611 100644 --- a/src/HOMARDGUI/CreateListGroup.ui +++ b/src/HOMARDGUI/CreateListGroup.ui @@ -33,6 +33,49 @@ 6 + + + + + + + + 9 + + + 6 + + + + + Help + + + + + + + Cancel + + + + + + + Apply + + + + + + + OK + + + + + + @@ -71,49 +114,6 @@ - - - - - - - - 9 - - - 6 - - - - - OK - - - - - - - Apply - - - - - - - Cancel - - - - - - - Help - - - - - - diff --git a/src/HOMARDGUI/CreateZone.h b/src/HOMARDGUI/CreateZone.h index 1bbdb5a3..70b1d125 100644 --- a/src/HOMARDGUI/CreateZone.h +++ b/src/HOMARDGUI/CreateZone.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading ui file 'CreateZone.ui' ** -** Created: Thu Feb 24 09:10:36 2011 +** Created: Thu Sep 1 13:03:50 2011 ** by: Qt User Interface Compiler version 4.2.1 ** ** WARNING! All changes made in this file will be lost when recompiling ui file! @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -28,14 +27,48 @@ class Ui_CreateZone { public: QGridLayout *gridLayout; - QLabel *Name; - QLineEdit *LEZoneName; + QGroupBox *GBButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; QGroupBox *TypeZone; - QHBoxLayout *hboxLayout; - QRadioButton *RBBox; + QGridLayout *gridLayout2; QRadioButton *RBSphere; + QRadioButton *RBPipe; + QRadioButton *RBCylinder; + QRadioButton *RBBox; + QGroupBox *gBCylindre; + QGridLayout *gridLayout3; + QDoubleSpinBox *SpinBox_Haut; + QLabel *TLHaut; + QLabel *TLRadius; + QDoubleSpinBox *SpinBox_Xaxis; + QDoubleSpinBox *SpinBox_Yaxis; + QDoubleSpinBox *SpinBox_Zaxis; + QLabel *TLZaxis; + QLabel *TLYaxis; + QLabel *TLXaxis; + QDoubleSpinBox *SpinBox_Ybase; + QLabel *TLYbase; + QLabel *TLZbase; + QDoubleSpinBox *SpinBox_Zbase; + QDoubleSpinBox *SpinBox_Radius; + QLabel *TLXbase; + QDoubleSpinBox *SpinBox_Xbase; + QGroupBox *gBSphere; + QGridLayout *gridLayout4; + QLabel *TLXcentre; + QDoubleSpinBox *SpinBox_Xcentre; + QLabel *TLYcentre; + QDoubleSpinBox *SpinBox_Ycentre; + QLabel *TLRayon; + QDoubleSpinBox *SpinBox_Rayon; + QLabel *TLZcentre; + QDoubleSpinBox *SpinBox_Zcentre; QGroupBox *gBBox; - QGridLayout *gridLayout1; + QGridLayout *gridLayout5; QLabel *TLXmini; QDoubleSpinBox *SpinBox_Xmini; QLabel *TLYmini; @@ -48,22 +81,28 @@ public: QLabel *TLYmaxi; QDoubleSpinBox *SpinBox_Xmaxi; QDoubleSpinBox *SpinBox_Ymaxi; - QGroupBox *gBSphere; - QGridLayout *gridLayout2; - QLabel *TLXcentre; - QDoubleSpinBox *SpinBox_Xcentre; - QLabel *TLYcentre; - QDoubleSpinBox *SpinBox_Ycentre; - QLabel *TLRayon; - QDoubleSpinBox *SpinBox_Rayon; - QLabel *TLZcentre; - QDoubleSpinBox *SpinBox_Zcentre; - QGroupBox *GBButtons; - QHBoxLayout *hboxLayout1; - QPushButton *buttonOk; - QPushButton *buttonApply; - QPushButton *buttonCancel; - QPushButton *buttonHelp; + QLineEdit *LEZoneName; + QLabel *Name; + QGroupBox *gBPipe; + QGridLayout *gridLayout6; + QLabel *TLHaut_p; + QDoubleSpinBox *SpinBox_Xbase_p; + QLabel *TLXbase_p; + QDoubleSpinBox *SpinBox_Radius_int; + QDoubleSpinBox *SpinBox_Zbase_p; + QLabel *TLRadius_int; + QLabel *TLZbase_p; + QLabel *TLYbase_p; + QDoubleSpinBox *SpinBox_Ybase_p; + QLabel *TLXaxis_p; + QLabel *TLYaxis_p; + QLabel *TLZaxis_p; + QDoubleSpinBox *SpinBox_Zaxis_p; + QDoubleSpinBox *SpinBox_Yaxis_p; + QDoubleSpinBox *SpinBox_Xaxis_p; + QDoubleSpinBox *SpinBox_Radius_ext; + QLabel *TLRadius_ext; + QDoubleSpinBox *SpinBox_Haut_p; void setupUi(QDialog *CreateZone) { @@ -74,201 +113,273 @@ public: gridLayout->setSpacing(6); gridLayout->setMargin(9); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); - Name = new QLabel(CreateZone); - Name->setObjectName(QString::fromUtf8("Name")); + GBButtons = new QGroupBox(CreateZone); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + QSizePolicy sizePolicy(static_cast(0), static_cast(0)); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); + GBButtons->setSizePolicy(sizePolicy); + gridLayout1 = new QGridLayout(GBButtons); + gridLayout1->setSpacing(6); + gridLayout1->setMargin(9); + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); - gridLayout->addWidget(Name, 0, 0, 1, 1); + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); - LEZoneName = new QLineEdit(CreateZone); - LEZoneName->setObjectName(QString::fromUtf8("LEZoneName")); - LEZoneName->setMaxLength(32); + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); - gridLayout->addWidget(LEZoneName, 0, 1, 1, 1); + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout->addWidget(GBButtons, 6, 0, 1, 2); TypeZone = new QGroupBox(CreateZone); TypeZone->setObjectName(QString::fromUtf8("TypeZone")); - QSizePolicy sizePolicy(static_cast(0), static_cast(0)); - sizePolicy.setHorizontalStretch(0); - sizePolicy.setVerticalStretch(0); - sizePolicy.setHeightForWidth(TypeZone->sizePolicy().hasHeightForWidth()); - TypeZone->setSizePolicy(sizePolicy); + QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(TypeZone->sizePolicy().hasHeightForWidth()); + TypeZone->setSizePolicy(sizePolicy1); TypeZone->setMinimumSize(QSize(340, 0)); - hboxLayout = new QHBoxLayout(TypeZone); - hboxLayout->setSpacing(6); - hboxLayout->setMargin(9); - hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); + gridLayout2 = new QGridLayout(TypeZone); + gridLayout2->setSpacing(6); + gridLayout2->setMargin(9); + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + RBSphere = new QRadioButton(TypeZone); + RBSphere->setObjectName(QString::fromUtf8("RBSphere")); + RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png"))); + + gridLayout2->addWidget(RBSphere, 0, 3, 1, 1); + + RBPipe = new QRadioButton(TypeZone); + RBPipe->setObjectName(QString::fromUtf8("RBPipe")); + RBPipe->setIcon(QIcon(QString::fromUtf8("../../resources/pipe.png"))); + + gridLayout2->addWidget(RBPipe, 0, 2, 1, 1); + + RBCylinder = new QRadioButton(TypeZone); + RBCylinder->setObjectName(QString::fromUtf8("RBCylinder")); + RBCylinder->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png"))); + + gridLayout2->addWidget(RBCylinder, 0, 1, 1, 1); + RBBox = new QRadioButton(TypeZone); RBBox->setObjectName(QString::fromUtf8("RBBox")); RBBox->setIcon(QIcon(QString::fromUtf8("../../resources/zone_boxdxyz.png"))); RBBox->setCheckable(true); RBBox->setChecked(true); - hboxLayout->addWidget(RBBox); - - RBSphere = new QRadioButton(TypeZone); - RBSphere->setObjectName(QString::fromUtf8("RBSphere")); - RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png"))); - - hboxLayout->addWidget(RBSphere); + gridLayout2->addWidget(RBBox, 0, 0, 1, 1); gridLayout->addWidget(TypeZone, 1, 0, 1, 2); - gBBox = new QGroupBox(CreateZone); - gBBox->setObjectName(QString::fromUtf8("gBBox")); - QSizePolicy sizePolicy1(static_cast(0), static_cast(0)); - sizePolicy1.setHorizontalStretch(0); - sizePolicy1.setVerticalStretch(0); - sizePolicy1.setHeightForWidth(gBBox->sizePolicy().hasHeightForWidth()); - gBBox->setSizePolicy(sizePolicy1); - gridLayout1 = new QGridLayout(gBBox); - gridLayout1->setSpacing(6); - gridLayout1->setMargin(9); - gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); - TLXmini = new QLabel(gBBox); - TLXmini->setObjectName(QString::fromUtf8("TLXmini")); + gBCylindre = new QGroupBox(CreateZone); + gBCylindre->setObjectName(QString::fromUtf8("gBCylindre")); QSizePolicy sizePolicy2(static_cast(0), static_cast(0)); sizePolicy2.setHorizontalStretch(0); sizePolicy2.setVerticalStretch(0); - sizePolicy2.setHeightForWidth(TLXmini->sizePolicy().hasHeightForWidth()); - TLXmini->setSizePolicy(sizePolicy2); - TLXmini->setWordWrap(false); - - gridLayout1->addWidget(TLXmini, 0, 0, 1, 1); - - SpinBox_Xmini = new QDoubleSpinBox(gBBox); - SpinBox_Xmini->setObjectName(QString::fromUtf8("SpinBox_Xmini")); - SpinBox_Xmini->setDecimals(5); - SpinBox_Xmini->setMaximum(1e+09); - SpinBox_Xmini->setMinimum(-1e+09); - SpinBox_Xmini->setValue(0); - - gridLayout1->addWidget(SpinBox_Xmini, 0, 1, 1, 1); - - TLYmini = new QLabel(gBBox); - TLYmini->setObjectName(QString::fromUtf8("TLYmini")); + sizePolicy2.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth()); + gBCylindre->setSizePolicy(sizePolicy2); + gBCylindre->setFocusPolicy(Qt::TabFocus); + gridLayout3 = new QGridLayout(gBCylindre); + gridLayout3->setSpacing(6); + gridLayout3->setMargin(9); + gridLayout3->setObjectName(QString::fromUtf8("gridLayout3")); + SpinBox_Haut = new QDoubleSpinBox(gBCylindre); + SpinBox_Haut->setObjectName(QString::fromUtf8("SpinBox_Haut")); + SpinBox_Haut->setDecimals(5); + SpinBox_Haut->setMaximum(1e+09); + + gridLayout3->addWidget(SpinBox_Haut, 4, 1, 1, 1); + + TLHaut = new QLabel(gBCylindre); + TLHaut->setObjectName(QString::fromUtf8("TLHaut")); QSizePolicy sizePolicy3(static_cast(0), static_cast(0)); sizePolicy3.setHorizontalStretch(0); sizePolicy3.setVerticalStretch(0); - sizePolicy3.setHeightForWidth(TLYmini->sizePolicy().hasHeightForWidth()); - TLYmini->setSizePolicy(sizePolicy3); - TLYmini->setWordWrap(false); + sizePolicy3.setHeightForWidth(TLHaut->sizePolicy().hasHeightForWidth()); + TLHaut->setSizePolicy(sizePolicy3); + TLHaut->setWordWrap(false); - gridLayout1->addWidget(TLYmini, 1, 0, 1, 1); + gridLayout3->addWidget(TLHaut, 4, 0, 1, 1); - SpinBox_Ymini = new QDoubleSpinBox(gBBox); - SpinBox_Ymini->setObjectName(QString::fromUtf8("SpinBox_Ymini")); - SpinBox_Ymini->setDecimals(5); - SpinBox_Ymini->setMaximum(1e+09); - SpinBox_Ymini->setMinimum(-1e+09); - SpinBox_Ymini->setValue(0); - - gridLayout1->addWidget(SpinBox_Ymini, 1, 1, 1, 1); - - TLZmini = new QLabel(gBBox); - TLZmini->setObjectName(QString::fromUtf8("TLZmini")); + TLRadius = new QLabel(gBCylindre); + TLRadius->setObjectName(QString::fromUtf8("TLRadius")); QSizePolicy sizePolicy4(static_cast(0), static_cast(0)); sizePolicy4.setHorizontalStretch(0); sizePolicy4.setVerticalStretch(0); - sizePolicy4.setHeightForWidth(TLZmini->sizePolicy().hasHeightForWidth()); - TLZmini->setSizePolicy(sizePolicy4); - TLZmini->setWordWrap(false); + sizePolicy4.setHeightForWidth(TLRadius->sizePolicy().hasHeightForWidth()); + TLRadius->setSizePolicy(sizePolicy4); + TLRadius->setWordWrap(false); - gridLayout1->addWidget(TLZmini, 2, 0, 1, 1); + gridLayout3->addWidget(TLRadius, 3, 0, 1, 1); - SpinBox_Zmini = new QDoubleSpinBox(gBBox); - SpinBox_Zmini->setObjectName(QString::fromUtf8("SpinBox_Zmini")); - SpinBox_Zmini->setDecimals(5); - SpinBox_Zmini->setMaximum(1e+09); - SpinBox_Zmini->setMinimum(-1e+09); - SpinBox_Zmini->setValue(0); + 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_Zmini, 2, 1, 1, 1); + gridLayout3->addWidget(SpinBox_Xaxis, 0, 3, 1, 1); - TLXmaxi = new QLabel(gBBox); - TLXmaxi->setObjectName(QString::fromUtf8("TLXmaxi")); + 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); + + gridLayout3->addWidget(SpinBox_Yaxis, 1, 3, 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); + + gridLayout3->addWidget(SpinBox_Zaxis, 2, 3, 1, 1); + + TLZaxis = new QLabel(gBCylindre); + TLZaxis->setObjectName(QString::fromUtf8("TLZaxis")); QSizePolicy sizePolicy5(static_cast(0), static_cast(0)); sizePolicy5.setHorizontalStretch(0); sizePolicy5.setVerticalStretch(0); - sizePolicy5.setHeightForWidth(TLXmaxi->sizePolicy().hasHeightForWidth()); - TLXmaxi->setSizePolicy(sizePolicy5); - TLXmaxi->setWordWrap(false); + sizePolicy5.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth()); + TLZaxis->setSizePolicy(sizePolicy5); + TLZaxis->setWordWrap(false); - gridLayout1->addWidget(TLXmaxi, 0, 2, 1, 1); + gridLayout3->addWidget(TLZaxis, 2, 2, 1, 1); - TLZmaxi = new QLabel(gBBox); - TLZmaxi->setObjectName(QString::fromUtf8("TLZmaxi")); + TLYaxis = new QLabel(gBCylindre); + TLYaxis->setObjectName(QString::fromUtf8("TLYaxis")); QSizePolicy sizePolicy6(static_cast(0), static_cast(0)); sizePolicy6.setHorizontalStretch(0); sizePolicy6.setVerticalStretch(0); - sizePolicy6.setHeightForWidth(TLZmaxi->sizePolicy().hasHeightForWidth()); - TLZmaxi->setSizePolicy(sizePolicy6); - TLZmaxi->setWordWrap(false); + sizePolicy6.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth()); + TLYaxis->setSizePolicy(sizePolicy6); + TLYaxis->setWordWrap(false); - gridLayout1->addWidget(TLZmaxi, 2, 2, 1, 1); + gridLayout3->addWidget(TLYaxis, 1, 2, 1, 1); - SpinBox_Zmaxi = new QDoubleSpinBox(gBBox); - SpinBox_Zmaxi->setObjectName(QString::fromUtf8("SpinBox_Zmaxi")); - SpinBox_Zmaxi->setDecimals(5); - SpinBox_Zmaxi->setMaximum(1e+09); - SpinBox_Zmaxi->setMinimum(-1e+09); - SpinBox_Zmaxi->setValue(0); - - gridLayout1->addWidget(SpinBox_Zmaxi, 2, 3, 1, 1); - - TLYmaxi = new QLabel(gBBox); - TLYmaxi->setObjectName(QString::fromUtf8("TLYmaxi")); + TLXaxis = new QLabel(gBCylindre); + TLXaxis->setObjectName(QString::fromUtf8("TLXaxis")); QSizePolicy sizePolicy7(static_cast(0), static_cast(0)); sizePolicy7.setHorizontalStretch(0); sizePolicy7.setVerticalStretch(0); - sizePolicy7.setHeightForWidth(TLYmaxi->sizePolicy().hasHeightForWidth()); - TLYmaxi->setSizePolicy(sizePolicy7); - TLYmaxi->setWordWrap(false); + sizePolicy7.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth()); + TLXaxis->setSizePolicy(sizePolicy7); + TLXaxis->setWordWrap(false); - gridLayout1->addWidget(TLYmaxi, 1, 2, 1, 1); + gridLayout3->addWidget(TLXaxis, 0, 2, 1, 1); - SpinBox_Xmaxi = new QDoubleSpinBox(gBBox); - SpinBox_Xmaxi->setObjectName(QString::fromUtf8("SpinBox_Xmaxi")); - SpinBox_Xmaxi->setDecimals(5); - SpinBox_Xmaxi->setMaximum(1e+09); - SpinBox_Xmaxi->setMinimum(-1e+09); - SpinBox_Xmaxi->setValue(0); + SpinBox_Ybase = new QDoubleSpinBox(gBCylindre); + SpinBox_Ybase->setObjectName(QString::fromUtf8("SpinBox_Ybase")); + SpinBox_Ybase->setDecimals(5); + SpinBox_Ybase->setMaximum(1e+09); + SpinBox_Ybase->setMinimum(-1e+09); + SpinBox_Ybase->setValue(0); - gridLayout1->addWidget(SpinBox_Xmaxi, 0, 3, 1, 1); + gridLayout3->addWidget(SpinBox_Ybase, 1, 1, 1, 1); - SpinBox_Ymaxi = new QDoubleSpinBox(gBBox); - SpinBox_Ymaxi->setObjectName(QString::fromUtf8("SpinBox_Ymaxi")); - SpinBox_Ymaxi->setDecimals(5); - SpinBox_Ymaxi->setMaximum(1e+09); - SpinBox_Ymaxi->setMinimum(-1e+09); - SpinBox_Ymaxi->setValue(0); + TLYbase = new QLabel(gBCylindre); + TLYbase->setObjectName(QString::fromUtf8("TLYbase")); + QSizePolicy sizePolicy8(static_cast(0), static_cast(0)); + sizePolicy8.setHorizontalStretch(0); + sizePolicy8.setVerticalStretch(0); + sizePolicy8.setHeightForWidth(TLYbase->sizePolicy().hasHeightForWidth()); + TLYbase->setSizePolicy(sizePolicy8); + TLYbase->setWordWrap(false); + + gridLayout3->addWidget(TLYbase, 1, 0, 1, 1); - gridLayout1->addWidget(SpinBox_Ymaxi, 1, 3, 1, 1); + TLZbase = new QLabel(gBCylindre); + TLZbase->setObjectName(QString::fromUtf8("TLZbase")); + QSizePolicy sizePolicy9(static_cast(0), static_cast(0)); + sizePolicy9.setHorizontalStretch(0); + sizePolicy9.setVerticalStretch(0); + sizePolicy9.setHeightForWidth(TLZbase->sizePolicy().hasHeightForWidth()); + TLZbase->setSizePolicy(sizePolicy9); + TLZbase->setWordWrap(false); + gridLayout3->addWidget(TLZbase, 2, 0, 1, 1); - gridLayout->addWidget(gBBox, 2, 0, 1, 2); + SpinBox_Zbase = new QDoubleSpinBox(gBCylindre); + SpinBox_Zbase->setObjectName(QString::fromUtf8("SpinBox_Zbase")); + SpinBox_Zbase->setDecimals(5); + SpinBox_Zbase->setMaximum(1e+09); + SpinBox_Zbase->setMinimum(-1e+09); + SpinBox_Zbase->setValue(0); + + gridLayout3->addWidget(SpinBox_Zbase, 2, 1, 1, 1); + + SpinBox_Radius = new QDoubleSpinBox(gBCylindre); + SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius")); + SpinBox_Radius->setDecimals(5); + SpinBox_Radius->setMaximum(1e+09); + + gridLayout3->addWidget(SpinBox_Radius, 3, 1, 1, 1); + + TLXbase = new QLabel(gBCylindre); + TLXbase->setObjectName(QString::fromUtf8("TLXbase")); + QSizePolicy sizePolicy10(static_cast(0), static_cast(0)); + sizePolicy10.setHorizontalStretch(0); + sizePolicy10.setVerticalStretch(0); + sizePolicy10.setHeightForWidth(TLXbase->sizePolicy().hasHeightForWidth()); + TLXbase->setSizePolicy(sizePolicy10); + TLXbase->setWordWrap(false); + + gridLayout3->addWidget(TLXbase, 0, 0, 1, 1); + + SpinBox_Xbase = new QDoubleSpinBox(gBCylindre); + SpinBox_Xbase->setObjectName(QString::fromUtf8("SpinBox_Xbase")); + SpinBox_Xbase->setDecimals(5); + SpinBox_Xbase->setMaximum(1e+09); + SpinBox_Xbase->setMinimum(-1e+09); + SpinBox_Xbase->setValue(0); + + gridLayout3->addWidget(SpinBox_Xbase, 0, 1, 1, 1); + + + gridLayout->addWidget(gBCylindre, 4, 0, 1, 2); gBSphere = new QGroupBox(CreateZone); gBSphere->setObjectName(QString::fromUtf8("gBSphere")); - QSizePolicy sizePolicy8(static_cast(0), static_cast(0)); - sizePolicy8.setHorizontalStretch(0); - sizePolicy8.setVerticalStretch(0); - sizePolicy8.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); - gBSphere->setSizePolicy(sizePolicy8); - gridLayout2 = new QGridLayout(gBSphere); - gridLayout2->setSpacing(6); - gridLayout2->setMargin(9); - gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + QSizePolicy sizePolicy11(static_cast(0), static_cast(0)); + sizePolicy11.setHorizontalStretch(0); + sizePolicy11.setVerticalStretch(0); + sizePolicy11.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); + gBSphere->setSizePolicy(sizePolicy11); + gridLayout4 = new QGridLayout(gBSphere); + gridLayout4->setSpacing(6); + gridLayout4->setMargin(9); + gridLayout4->setObjectName(QString::fromUtf8("gridLayout4")); TLXcentre = new QLabel(gBSphere); TLXcentre->setObjectName(QString::fromUtf8("TLXcentre")); - QSizePolicy sizePolicy9(static_cast(0), static_cast(0)); - sizePolicy9.setHorizontalStretch(0); - sizePolicy9.setVerticalStretch(0); - sizePolicy9.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); - TLXcentre->setSizePolicy(sizePolicy9); + QSizePolicy sizePolicy12(static_cast(0), static_cast(0)); + sizePolicy12.setHorizontalStretch(0); + sizePolicy12.setVerticalStretch(0); + sizePolicy12.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); + TLXcentre->setSizePolicy(sizePolicy12); TLXcentre->setWordWrap(false); - gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1); + gridLayout4->addWidget(TLXcentre, 0, 0, 1, 1); SpinBox_Xcentre = new QDoubleSpinBox(gBSphere); SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre")); @@ -277,18 +388,18 @@ public: SpinBox_Xcentre->setMinimum(-1e+09); SpinBox_Xcentre->setValue(0); - gridLayout2->addWidget(SpinBox_Xcentre, 0, 1, 1, 1); + gridLayout4->addWidget(SpinBox_Xcentre, 0, 1, 1, 1); TLYcentre = new QLabel(gBSphere); TLYcentre->setObjectName(QString::fromUtf8("TLYcentre")); - QSizePolicy sizePolicy10(static_cast(0), static_cast(0)); - sizePolicy10.setHorizontalStretch(0); - sizePolicy10.setVerticalStretch(0); - sizePolicy10.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); - TLYcentre->setSizePolicy(sizePolicy10); + QSizePolicy sizePolicy13(static_cast(0), static_cast(0)); + sizePolicy13.setHorizontalStretch(0); + sizePolicy13.setVerticalStretch(0); + sizePolicy13.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); + TLYcentre->setSizePolicy(sizePolicy13); TLYcentre->setWordWrap(false); - gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1); + gridLayout4->addWidget(TLYcentre, 1, 0, 1, 1); SpinBox_Ycentre = new QDoubleSpinBox(gBSphere); SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre")); @@ -297,18 +408,18 @@ public: SpinBox_Ycentre->setMinimum(-1e+09); SpinBox_Ycentre->setValue(0); - gridLayout2->addWidget(SpinBox_Ycentre, 1, 1, 1, 1); + gridLayout4->addWidget(SpinBox_Ycentre, 1, 1, 1, 1); TLRayon = new QLabel(gBSphere); TLRayon->setObjectName(QString::fromUtf8("TLRayon")); - QSizePolicy sizePolicy11(static_cast(0), static_cast(0)); - sizePolicy11.setHorizontalStretch(0); - sizePolicy11.setVerticalStretch(0); - sizePolicy11.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); - TLRayon->setSizePolicy(sizePolicy11); + QSizePolicy sizePolicy14(static_cast(0), static_cast(0)); + sizePolicy14.setHorizontalStretch(0); + sizePolicy14.setVerticalStretch(0); + sizePolicy14.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); + TLRayon->setSizePolicy(sizePolicy14); TLRayon->setWordWrap(false); - gridLayout2->addWidget(TLRayon, 1, 2, 1, 1); + gridLayout4->addWidget(TLRayon, 1, 2, 1, 1); SpinBox_Rayon = new QDoubleSpinBox(gBSphere); SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon")); @@ -317,18 +428,18 @@ public: SpinBox_Rayon->setMinimum(-1e+09); SpinBox_Rayon->setValue(0); - gridLayout2->addWidget(SpinBox_Rayon, 1, 3, 1, 1); + gridLayout4->addWidget(SpinBox_Rayon, 1, 3, 1, 1); TLZcentre = new QLabel(gBSphere); TLZcentre->setObjectName(QString::fromUtf8("TLZcentre")); - QSizePolicy sizePolicy12(static_cast(0), static_cast(0)); - sizePolicy12.setHorizontalStretch(0); - sizePolicy12.setVerticalStretch(0); - sizePolicy12.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); - TLZcentre->setSizePolicy(sizePolicy12); + QSizePolicy sizePolicy15(static_cast(0), static_cast(0)); + sizePolicy15.setHorizontalStretch(0); + sizePolicy15.setVerticalStretch(0); + sizePolicy15.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); + TLZcentre->setSizePolicy(sizePolicy15); TLZcentre->setWordWrap(false); - gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1); + gridLayout4->addWidget(TLZcentre, 2, 0, 1, 1); SpinBox_Zcentre = new QDoubleSpinBox(gBSphere); SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre")); @@ -337,49 +448,348 @@ public: SpinBox_Zcentre->setMinimum(-1e+09); SpinBox_Zcentre->setValue(0); - gridLayout2->addWidget(SpinBox_Zcentre, 2, 1, 1, 1); + gridLayout4->addWidget(SpinBox_Zcentre, 2, 1, 1, 1); gridLayout->addWidget(gBSphere, 3, 0, 1, 2); - GBButtons = new QGroupBox(CreateZone); - GBButtons->setObjectName(QString::fromUtf8("GBButtons")); - QSizePolicy sizePolicy13(static_cast(0), static_cast(0)); - sizePolicy13.setHorizontalStretch(0); - sizePolicy13.setVerticalStretch(0); - sizePolicy13.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); - GBButtons->setSizePolicy(sizePolicy13); - hboxLayout1 = new QHBoxLayout(GBButtons); - hboxLayout1->setSpacing(6); - hboxLayout1->setMargin(9); - hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); - buttonOk = new QPushButton(GBButtons); - buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + gBBox = new QGroupBox(CreateZone); + gBBox->setObjectName(QString::fromUtf8("gBBox")); + QSizePolicy sizePolicy16(static_cast(0), static_cast(0)); + sizePolicy16.setHorizontalStretch(0); + sizePolicy16.setVerticalStretch(0); + sizePolicy16.setHeightForWidth(gBBox->sizePolicy().hasHeightForWidth()); + gBBox->setSizePolicy(sizePolicy16); + gridLayout5 = new QGridLayout(gBBox); + gridLayout5->setSpacing(6); + gridLayout5->setMargin(9); + gridLayout5->setObjectName(QString::fromUtf8("gridLayout5")); + TLXmini = new QLabel(gBBox); + TLXmini->setObjectName(QString::fromUtf8("TLXmini")); + QSizePolicy sizePolicy17(static_cast(0), static_cast(0)); + sizePolicy17.setHorizontalStretch(0); + sizePolicy17.setVerticalStretch(0); + sizePolicy17.setHeightForWidth(TLXmini->sizePolicy().hasHeightForWidth()); + TLXmini->setSizePolicy(sizePolicy17); + TLXmini->setWordWrap(false); - hboxLayout1->addWidget(buttonOk); + gridLayout5->addWidget(TLXmini, 0, 0, 1, 1); - buttonApply = new QPushButton(GBButtons); - buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + SpinBox_Xmini = new QDoubleSpinBox(gBBox); + SpinBox_Xmini->setObjectName(QString::fromUtf8("SpinBox_Xmini")); + SpinBox_Xmini->setDecimals(5); + SpinBox_Xmini->setMaximum(1e+09); + SpinBox_Xmini->setMinimum(-1e+09); + SpinBox_Xmini->setValue(0); - hboxLayout1->addWidget(buttonApply); + gridLayout5->addWidget(SpinBox_Xmini, 0, 1, 1, 1); - buttonCancel = new QPushButton(GBButtons); - buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + TLYmini = new QLabel(gBBox); + TLYmini->setObjectName(QString::fromUtf8("TLYmini")); + QSizePolicy sizePolicy18(static_cast(0), static_cast(0)); + sizePolicy18.setHorizontalStretch(0); + sizePolicy18.setVerticalStretch(0); + sizePolicy18.setHeightForWidth(TLYmini->sizePolicy().hasHeightForWidth()); + TLYmini->setSizePolicy(sizePolicy18); + TLYmini->setWordWrap(false); - hboxLayout1->addWidget(buttonCancel); + gridLayout5->addWidget(TLYmini, 1, 0, 1, 1); - buttonHelp = new QPushButton(GBButtons); - buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + SpinBox_Ymini = new QDoubleSpinBox(gBBox); + SpinBox_Ymini->setObjectName(QString::fromUtf8("SpinBox_Ymini")); + SpinBox_Ymini->setDecimals(5); + SpinBox_Ymini->setMaximum(1e+09); + SpinBox_Ymini->setMinimum(-1e+09); + SpinBox_Ymini->setValue(0); - hboxLayout1->addWidget(buttonHelp); + gridLayout5->addWidget(SpinBox_Ymini, 1, 1, 1, 1); + TLZmini = new QLabel(gBBox); + TLZmini->setObjectName(QString::fromUtf8("TLZmini")); + QSizePolicy sizePolicy19(static_cast(0), static_cast(0)); + sizePolicy19.setHorizontalStretch(0); + sizePolicy19.setVerticalStretch(0); + sizePolicy19.setHeightForWidth(TLZmini->sizePolicy().hasHeightForWidth()); + TLZmini->setSizePolicy(sizePolicy19); + TLZmini->setWordWrap(false); - gridLayout->addWidget(GBButtons, 4, 0, 1, 2); + gridLayout5->addWidget(TLZmini, 2, 0, 1, 1); + + SpinBox_Zmini = new QDoubleSpinBox(gBBox); + SpinBox_Zmini->setObjectName(QString::fromUtf8("SpinBox_Zmini")); + SpinBox_Zmini->setDecimals(5); + SpinBox_Zmini->setMaximum(1e+09); + SpinBox_Zmini->setMinimum(-1e+09); + SpinBox_Zmini->setValue(0); + + gridLayout5->addWidget(SpinBox_Zmini, 2, 1, 1, 1); + + TLXmaxi = new QLabel(gBBox); + TLXmaxi->setObjectName(QString::fromUtf8("TLXmaxi")); + QSizePolicy sizePolicy20(static_cast(0), static_cast(0)); + sizePolicy20.setHorizontalStretch(0); + sizePolicy20.setVerticalStretch(0); + sizePolicy20.setHeightForWidth(TLXmaxi->sizePolicy().hasHeightForWidth()); + TLXmaxi->setSizePolicy(sizePolicy20); + TLXmaxi->setWordWrap(false); + + gridLayout5->addWidget(TLXmaxi, 0, 2, 1, 1); + + TLZmaxi = new QLabel(gBBox); + TLZmaxi->setObjectName(QString::fromUtf8("TLZmaxi")); + QSizePolicy sizePolicy21(static_cast(0), static_cast(0)); + sizePolicy21.setHorizontalStretch(0); + sizePolicy21.setVerticalStretch(0); + sizePolicy21.setHeightForWidth(TLZmaxi->sizePolicy().hasHeightForWidth()); + TLZmaxi->setSizePolicy(sizePolicy21); + TLZmaxi->setWordWrap(false); + + gridLayout5->addWidget(TLZmaxi, 2, 2, 1, 1); + + SpinBox_Zmaxi = new QDoubleSpinBox(gBBox); + SpinBox_Zmaxi->setObjectName(QString::fromUtf8("SpinBox_Zmaxi")); + SpinBox_Zmaxi->setDecimals(5); + SpinBox_Zmaxi->setMaximum(1e+09); + SpinBox_Zmaxi->setMinimum(-1e+09); + SpinBox_Zmaxi->setValue(0); + + gridLayout5->addWidget(SpinBox_Zmaxi, 2, 3, 1, 1); + + TLYmaxi = new QLabel(gBBox); + TLYmaxi->setObjectName(QString::fromUtf8("TLYmaxi")); + QSizePolicy sizePolicy22(static_cast(0), static_cast(0)); + sizePolicy22.setHorizontalStretch(0); + sizePolicy22.setVerticalStretch(0); + sizePolicy22.setHeightForWidth(TLYmaxi->sizePolicy().hasHeightForWidth()); + TLYmaxi->setSizePolicy(sizePolicy22); + TLYmaxi->setWordWrap(false); + + gridLayout5->addWidget(TLYmaxi, 1, 2, 1, 1); + + SpinBox_Xmaxi = new QDoubleSpinBox(gBBox); + SpinBox_Xmaxi->setObjectName(QString::fromUtf8("SpinBox_Xmaxi")); + SpinBox_Xmaxi->setDecimals(5); + SpinBox_Xmaxi->setMaximum(1e+09); + SpinBox_Xmaxi->setMinimum(-1e+09); + SpinBox_Xmaxi->setValue(0); + + gridLayout5->addWidget(SpinBox_Xmaxi, 0, 3, 1, 1); + + SpinBox_Ymaxi = new QDoubleSpinBox(gBBox); + SpinBox_Ymaxi->setObjectName(QString::fromUtf8("SpinBox_Ymaxi")); + SpinBox_Ymaxi->setDecimals(5); + SpinBox_Ymaxi->setMaximum(1e+09); + SpinBox_Ymaxi->setMinimum(-1e+09); + SpinBox_Ymaxi->setValue(0); + + gridLayout5->addWidget(SpinBox_Ymaxi, 1, 3, 1, 1); + + + gridLayout->addWidget(gBBox, 2, 0, 1, 2); + + LEZoneName = new QLineEdit(CreateZone); + LEZoneName->setObjectName(QString::fromUtf8("LEZoneName")); + LEZoneName->setMaxLength(32); + + gridLayout->addWidget(LEZoneName, 0, 1, 1, 1); + + Name = new QLabel(CreateZone); + Name->setObjectName(QString::fromUtf8("Name")); + + gridLayout->addWidget(Name, 0, 0, 1, 1); + + gBPipe = new QGroupBox(CreateZone); + gBPipe->setObjectName(QString::fromUtf8("gBPipe")); + QSizePolicy sizePolicy23(static_cast(0), static_cast(0)); + sizePolicy23.setHorizontalStretch(0); + sizePolicy23.setVerticalStretch(0); + sizePolicy23.setHeightForWidth(gBPipe->sizePolicy().hasHeightForWidth()); + gBPipe->setSizePolicy(sizePolicy23); + gridLayout6 = new QGridLayout(gBPipe); + gridLayout6->setSpacing(6); + gridLayout6->setMargin(9); + gridLayout6->setObjectName(QString::fromUtf8("gridLayout6")); + TLHaut_p = new QLabel(gBPipe); + TLHaut_p->setObjectName(QString::fromUtf8("TLHaut_p")); + QSizePolicy sizePolicy24(static_cast(0), static_cast(0)); + sizePolicy24.setHorizontalStretch(0); + sizePolicy24.setVerticalStretch(0); + sizePolicy24.setHeightForWidth(TLHaut_p->sizePolicy().hasHeightForWidth()); + TLHaut_p->setSizePolicy(sizePolicy24); + TLHaut_p->setWordWrap(false); + + gridLayout6->addWidget(TLHaut_p, 4, 0, 1, 1); + + SpinBox_Xbase_p = new QDoubleSpinBox(gBPipe); + SpinBox_Xbase_p->setObjectName(QString::fromUtf8("SpinBox_Xbase_p")); + SpinBox_Xbase_p->setDecimals(5); + SpinBox_Xbase_p->setMaximum(1e+09); + SpinBox_Xbase_p->setMinimum(-1e+09); + SpinBox_Xbase_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Xbase_p, 0, 1, 1, 1); + + TLXbase_p = new QLabel(gBPipe); + TLXbase_p->setObjectName(QString::fromUtf8("TLXbase_p")); + QSizePolicy sizePolicy25(static_cast(0), static_cast(0)); + sizePolicy25.setHorizontalStretch(0); + sizePolicy25.setVerticalStretch(0); + sizePolicy25.setHeightForWidth(TLXbase_p->sizePolicy().hasHeightForWidth()); + TLXbase_p->setSizePolicy(sizePolicy25); + TLXbase_p->setWordWrap(false); + + gridLayout6->addWidget(TLXbase_p, 0, 0, 1, 1); + + SpinBox_Radius_int = new QDoubleSpinBox(gBPipe); + SpinBox_Radius_int->setObjectName(QString::fromUtf8("SpinBox_Radius_int")); + SpinBox_Radius_int->setDecimals(5); + SpinBox_Radius_int->setMaximum(1e+09); + + gridLayout6->addWidget(SpinBox_Radius_int, 3, 1, 1, 1); + + SpinBox_Zbase_p = new QDoubleSpinBox(gBPipe); + SpinBox_Zbase_p->setObjectName(QString::fromUtf8("SpinBox_Zbase_p")); + SpinBox_Zbase_p->setDecimals(5); + SpinBox_Zbase_p->setMaximum(1e+09); + SpinBox_Zbase_p->setMinimum(-1e+09); + SpinBox_Zbase_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Zbase_p, 2, 1, 1, 1); + + TLRadius_int = new QLabel(gBPipe); + TLRadius_int->setObjectName(QString::fromUtf8("TLRadius_int")); + QSizePolicy sizePolicy26(static_cast(0), static_cast(0)); + sizePolicy26.setHorizontalStretch(0); + sizePolicy26.setVerticalStretch(0); + sizePolicy26.setHeightForWidth(TLRadius_int->sizePolicy().hasHeightForWidth()); + TLRadius_int->setSizePolicy(sizePolicy26); + TLRadius_int->setWordWrap(false); + + gridLayout6->addWidget(TLRadius_int, 3, 0, 1, 1); + + TLZbase_p = new QLabel(gBPipe); + TLZbase_p->setObjectName(QString::fromUtf8("TLZbase_p")); + QSizePolicy sizePolicy27(static_cast(0), static_cast(0)); + sizePolicy27.setHorizontalStretch(0); + sizePolicy27.setVerticalStretch(0); + sizePolicy27.setHeightForWidth(TLZbase_p->sizePolicy().hasHeightForWidth()); + TLZbase_p->setSizePolicy(sizePolicy27); + TLZbase_p->setWordWrap(false); + + gridLayout6->addWidget(TLZbase_p, 2, 0, 1, 1); + + TLYbase_p = new QLabel(gBPipe); + TLYbase_p->setObjectName(QString::fromUtf8("TLYbase_p")); + QSizePolicy sizePolicy28(static_cast(0), static_cast(0)); + sizePolicy28.setHorizontalStretch(0); + sizePolicy28.setVerticalStretch(0); + sizePolicy28.setHeightForWidth(TLYbase_p->sizePolicy().hasHeightForWidth()); + TLYbase_p->setSizePolicy(sizePolicy28); + TLYbase_p->setWordWrap(false); + + gridLayout6->addWidget(TLYbase_p, 1, 0, 1, 1); + + SpinBox_Ybase_p = new QDoubleSpinBox(gBPipe); + SpinBox_Ybase_p->setObjectName(QString::fromUtf8("SpinBox_Ybase_p")); + SpinBox_Ybase_p->setDecimals(5); + SpinBox_Ybase_p->setMaximum(1e+09); + SpinBox_Ybase_p->setMinimum(-1e+09); + SpinBox_Ybase_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Ybase_p, 1, 1, 1, 1); + + TLXaxis_p = new QLabel(gBPipe); + TLXaxis_p->setObjectName(QString::fromUtf8("TLXaxis_p")); + QSizePolicy sizePolicy29(static_cast(0), static_cast(0)); + sizePolicy29.setHorizontalStretch(0); + sizePolicy29.setVerticalStretch(0); + sizePolicy29.setHeightForWidth(TLXaxis_p->sizePolicy().hasHeightForWidth()); + TLXaxis_p->setSizePolicy(sizePolicy29); + TLXaxis_p->setWordWrap(false); + + gridLayout6->addWidget(TLXaxis_p, 0, 2, 1, 1); + + TLYaxis_p = new QLabel(gBPipe); + TLYaxis_p->setObjectName(QString::fromUtf8("TLYaxis_p")); + QSizePolicy sizePolicy30(static_cast(0), static_cast(0)); + sizePolicy30.setHorizontalStretch(0); + sizePolicy30.setVerticalStretch(0); + sizePolicy30.setHeightForWidth(TLYaxis_p->sizePolicy().hasHeightForWidth()); + TLYaxis_p->setSizePolicy(sizePolicy30); + TLYaxis_p->setWordWrap(false); + + gridLayout6->addWidget(TLYaxis_p, 1, 2, 1, 1); + + TLZaxis_p = new QLabel(gBPipe); + TLZaxis_p->setObjectName(QString::fromUtf8("TLZaxis_p")); + QSizePolicy sizePolicy31(static_cast(0), static_cast(0)); + sizePolicy31.setHorizontalStretch(0); + sizePolicy31.setVerticalStretch(0); + sizePolicy31.setHeightForWidth(TLZaxis_p->sizePolicy().hasHeightForWidth()); + TLZaxis_p->setSizePolicy(sizePolicy31); + TLZaxis_p->setWordWrap(false); + + gridLayout6->addWidget(TLZaxis_p, 2, 2, 1, 1); + + SpinBox_Zaxis_p = new QDoubleSpinBox(gBPipe); + SpinBox_Zaxis_p->setObjectName(QString::fromUtf8("SpinBox_Zaxis_p")); + SpinBox_Zaxis_p->setDecimals(5); + SpinBox_Zaxis_p->setMaximum(1e+09); + SpinBox_Zaxis_p->setMinimum(-1e+09); + SpinBox_Zaxis_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Zaxis_p, 2, 3, 1, 1); + + SpinBox_Yaxis_p = new QDoubleSpinBox(gBPipe); + SpinBox_Yaxis_p->setObjectName(QString::fromUtf8("SpinBox_Yaxis_p")); + SpinBox_Yaxis_p->setDecimals(5); + SpinBox_Yaxis_p->setMaximum(1e+09); + SpinBox_Yaxis_p->setMinimum(-1e+09); + SpinBox_Yaxis_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Yaxis_p, 1, 3, 1, 1); + + SpinBox_Xaxis_p = new QDoubleSpinBox(gBPipe); + SpinBox_Xaxis_p->setObjectName(QString::fromUtf8("SpinBox_Xaxis_p")); + SpinBox_Xaxis_p->setDecimals(5); + SpinBox_Xaxis_p->setMaximum(1e+09); + SpinBox_Xaxis_p->setMinimum(-1e+09); + SpinBox_Xaxis_p->setValue(0); + + gridLayout6->addWidget(SpinBox_Xaxis_p, 0, 3, 1, 1); + + SpinBox_Radius_ext = new QDoubleSpinBox(gBPipe); + SpinBox_Radius_ext->setObjectName(QString::fromUtf8("SpinBox_Radius_ext")); + SpinBox_Radius_ext->setDecimals(5); + SpinBox_Radius_ext->setMaximum(1e+09); + + gridLayout6->addWidget(SpinBox_Radius_ext, 3, 3, 1, 1); + + TLRadius_ext = new QLabel(gBPipe); + TLRadius_ext->setObjectName(QString::fromUtf8("TLRadius_ext")); + QSizePolicy sizePolicy32(static_cast(0), static_cast(0)); + sizePolicy32.setHorizontalStretch(0); + sizePolicy32.setVerticalStretch(0); + sizePolicy32.setHeightForWidth(TLRadius_ext->sizePolicy().hasHeightForWidth()); + TLRadius_ext->setSizePolicy(sizePolicy32); + TLRadius_ext->setWordWrap(false); + + gridLayout6->addWidget(TLRadius_ext, 3, 2, 1, 1); + + SpinBox_Haut_p = new QDoubleSpinBox(gBPipe); + SpinBox_Haut_p->setObjectName(QString::fromUtf8("SpinBox_Haut_p")); + SpinBox_Haut_p->setDecimals(5); + SpinBox_Haut_p->setMaximum(1e+09); + + gridLayout6->addWidget(SpinBox_Haut_p, 4, 1, 1, 1); + + + gridLayout->addWidget(gBPipe, 5, 0, 1, 2); retranslateUi(CreateZone); - QSize size(454, 472); + QSize size(551, 880); size = size.expandedTo(CreateZone->minimumSizeHint()); CreateZone->resize(size); @@ -390,10 +800,30 @@ public: void retranslateUi(QDialog *CreateZone) { CreateZone->setWindowTitle(QApplication::translate("CreateZone", "Create a zone", 0, QApplication::UnicodeUTF8)); - Name->setText(QApplication::translate("CreateZone", "Name", 0, QApplication::UnicodeUTF8)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateZone", "Help", 0, QApplication::UnicodeUTF8)); + buttonCancel->setText(QApplication::translate("CreateZone", "Cancel", 0, QApplication::UnicodeUTF8)); + buttonApply->setText(QApplication::translate("CreateZone", "Apply", 0, QApplication::UnicodeUTF8)); + buttonOk->setText(QApplication::translate("CreateZone", "OK", 0, QApplication::UnicodeUTF8)); TypeZone->setTitle(QApplication::translate("CreateZone", "Type of zone", 0, QApplication::UnicodeUTF8)); - RBBox->setText(QString()); - RBSphere->setText(QString()); + RBSphere->setText(QApplication::translate("CreateZone", "Sphere", 0, QApplication::UnicodeUTF8)); + RBPipe->setText(QApplication::translate("CreateZone", "Pipe", 0, QApplication::UnicodeUTF8)); + RBCylinder->setText(QApplication::translate("CreateZone", "Cylinder", 0, QApplication::UnicodeUTF8)); + RBBox->setText(QApplication::translate("CreateZone", "Box", 0, QApplication::UnicodeUTF8)); + gBCylindre->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8)); + TLHaut->setText(QApplication::translate("CreateZone", "Height", 0, QApplication::UnicodeUTF8)); + TLRadius->setText(QApplication::translate("CreateZone", "Radius", 0, QApplication::UnicodeUTF8)); + TLZaxis->setText(QApplication::translate("CreateZone", "Z axis", 0, QApplication::UnicodeUTF8)); + TLYaxis->setText(QApplication::translate("CreateZone", "Y axis", 0, QApplication::UnicodeUTF8)); + TLXaxis->setText(QApplication::translate("CreateZone", "X axis", 0, QApplication::UnicodeUTF8)); + TLYbase->setText(QApplication::translate("CreateZone", "Y base", 0, QApplication::UnicodeUTF8)); + TLZbase->setText(QApplication::translate("CreateZone", "Z base", 0, QApplication::UnicodeUTF8)); + TLXbase->setText(QApplication::translate("CreateZone", "X base", 0, QApplication::UnicodeUTF8)); + gBSphere->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8)); + TLXcentre->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); + TLYcentre->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); + TLRayon->setText(QApplication::translate("CreateZone", "Radius", 0, QApplication::UnicodeUTF8)); + TLZcentre->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); gBBox->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8)); TLXmini->setText(QApplication::translate("CreateZone", "X mini", 0, QApplication::UnicodeUTF8)); TLYmini->setText(QApplication::translate("CreateZone", "Y mini", 0, QApplication::UnicodeUTF8)); @@ -401,16 +831,17 @@ public: TLXmaxi->setText(QApplication::translate("CreateZone", "X maxi", 0, QApplication::UnicodeUTF8)); TLZmaxi->setText(QApplication::translate("CreateZone", "Z maxi", 0, QApplication::UnicodeUTF8)); TLYmaxi->setText(QApplication::translate("CreateZone", "Y maxi", 0, QApplication::UnicodeUTF8)); - gBSphere->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8)); - TLXcentre->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); - TLYcentre->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); - TLRayon->setText(QApplication::translate("CreateZone", "Radius", 0, QApplication::UnicodeUTF8)); - TLZcentre->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); - GBButtons->setTitle(QString()); - buttonOk->setText(QApplication::translate("CreateZone", "OK", 0, QApplication::UnicodeUTF8)); - buttonApply->setText(QApplication::translate("CreateZone", "Apply", 0, QApplication::UnicodeUTF8)); - buttonCancel->setText(QApplication::translate("CreateZone", "Cancel", 0, QApplication::UnicodeUTF8)); - buttonHelp->setText(QApplication::translate("CreateZone", "Help", 0, QApplication::UnicodeUTF8)); + Name->setText(QApplication::translate("CreateZone", "Name", 0, QApplication::UnicodeUTF8)); + gBPipe->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8)); + TLHaut_p->setText(QApplication::translate("CreateZone", "Height", 0, QApplication::UnicodeUTF8)); + TLXbase_p->setText(QApplication::translate("CreateZone", "X base", 0, QApplication::UnicodeUTF8)); + TLRadius_int->setText(QApplication::translate("CreateZone", "Internal radius", 0, QApplication::UnicodeUTF8)); + TLZbase_p->setText(QApplication::translate("CreateZone", "Z base", 0, QApplication::UnicodeUTF8)); + TLYbase_p->setText(QApplication::translate("CreateZone", "Y base", 0, QApplication::UnicodeUTF8)); + TLXaxis_p->setText(QApplication::translate("CreateZone", "X axis", 0, QApplication::UnicodeUTF8)); + TLYaxis_p->setText(QApplication::translate("CreateZone", "Y axis", 0, QApplication::UnicodeUTF8)); + TLZaxis_p->setText(QApplication::translate("CreateZone", "Z axis", 0, QApplication::UnicodeUTF8)); + TLRadius_ext->setText(QApplication::translate("CreateZone", "External radius", 0, QApplication::UnicodeUTF8)); Q_UNUSED(CreateZone); } // retranslateUi diff --git a/src/HOMARDGUI/CreateZone.ui b/src/HOMARDGUI/CreateZone.ui index e851ad47..aef1b45f 100644 --- a/src/HOMARDGUI/CreateZone.ui +++ b/src/HOMARDGUI/CreateZone.ui @@ -5,8 +5,8 @@ 0 0 - 454 - 472 + 551 + 880 @@ -25,18 +25,55 @@ 6 - - - - Name + + + + + 0 + 0 + 0 + 0 + - - - - - - 32 + + + + + 9 + + + 6 + + + + + Help + + + + + + + Cancel + + + + + + + Apply + + + + + + + OK + + + + @@ -58,44 +95,64 @@ Type of zone - + 9 6 - - + + - + Sphere - ../../resources/zone_boxdxyz.png + ../../resources/zone_spherepoint.png - - true + + + + + + Pipe - - true + + ../../resources/pipe.png - - + + - + Cylinder - ../../resources/zone_spherepoint.png + ../../resources/cylinderpointvector.png + + + + + + + Box + + + ../../resources/zone_boxdxyz.png + + + true + + + true - - + + 0 @@ -104,6 +161,9 @@ 0 + + Qt::TabFocus + Coordinates @@ -114,8 +174,18 @@ 6 - - + + + + 5 + + + 1000000000.000000000000000 + + + + + 0 @@ -125,15 +195,33 @@ - X mini + Height false - - + + + + + 0 + 0 + 0 + 0 + + + + Radius + + + false + + + + + 5 @@ -148,8 +236,40 @@ - - + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + 0 @@ -159,31 +279,33 @@ - Y mini + Z axis false - - - - 5 - - - 999999999.000000000000000 + + + + + 0 + 0 + 0 + 0 + - - -999999999.000000000000000 + + Y axis - - 0.000000000000000 + + false - - + + 0 @@ -193,15 +315,15 @@ - Z mini + X axis false - - + + 5 @@ -216,8 +338,8 @@ - - + + 0 @@ -227,15 +349,15 @@ - X maxi + Y base false - - + + 0 @@ -245,15 +367,15 @@ - Z maxi + Z base false - - + + 5 @@ -268,8 +390,18 @@ - - + + + + 5 + + + 1000000000.000000000000000 + + + + + 0 @@ -279,31 +411,15 @@ - Y maxi + X base false - - - - 5 - - - 999999999.000000000000000 - - - -999999999.000000000000000 - - - 0.000000000000000 - - - - - + + 5 @@ -480,8 +596,8 @@ - - + + 0 @@ -491,40 +607,541 @@ - + Coordinates - + 9 6 - - - - OK + + + + + 0 + 0 + 0 + 0 + - - - - - Apply + X mini + + + false - - - - Cancel + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 - - + + + + + 0 + 0 + 0 + 0 + + - Help + Y mini + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + Z mini + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X maxi + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z maxi + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + Y maxi + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + + + 32 + + + + + + + Name + + + + + + + + 0 + 0 + 0 + 0 + + + + Coordinates + + + + 9 + + + 6 + + + + + + 0 + 0 + 0 + 0 + + + + Height + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X base + + + false + + + + + + + 5 + + + 1000000000.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + Internal radius + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z base + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Y base + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + X axis + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Y axis + + + false + + + + + + + + 0 + 0 + 0 + 0 + + + + Z axis + + + false + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 999999999.000000000000000 + + + -999999999.000000000000000 + + + 0.000000000000000 + + + + + + + 5 + + + 1000000000.000000000000000 + + + + + + + + 0 + 0 + 0 + 0 + + + + External radius + + + false + + + + + + + 5 + + + 1000000000.000000000000000 diff --git a/src/HOMARDGUI/HOMARDGUI.cxx b/src/HOMARDGUI/HOMARDGUI.cxx index 36ede587..eaa4dde3 100644 --- a/src/HOMARDGUI/HOMARDGUI.cxx +++ b/src/HOMARDGUI/HOMARDGUI.cxx @@ -23,34 +23,33 @@ using namespace std; #include "HOMARDGUI.h" -#include // SALOME Includes -#include -#include -#include - -#include -#include -#include -#include -#include +#include "Utils_ORB_INIT.hxx" +#include "Utils_SINGLETON.hxx" +#include "SALOME_LifeCycleCORBA.hxx" + +#include "SUIT_ResourceMgr.h" +#include "SUIT_MessageBox.h" +#include "SUIT_Session.h" +#include "SUIT_ViewWindow.h" +#include "SUIT_ViewManager.h" #include -#include -#include +#include "CAM_Module.h" +#include "OB_Browser.h" -#include -#include +#include "SALOME_ListIO.hxx" +#include "SALOME_ListIteratorOfListIO.hxx" -#include -#include -#include -#include -#include +#include "SalomeApp_Application.h" +#include "SalomeApp_DataModel.h" +#include "SalomeApp_Study.h" +#include "LightApp_SelectionMgr.h" +#include "LightApp_Selection.h" #include -#include -#include +#include "SalomeApp_Module.h" +#include "SALOMEconfig.h" #include #include @@ -73,7 +72,7 @@ using namespace std; #include //Pour le _CAST -#include +#include "SALOMEDS_Study.hxx" #include "HOMARDGUI_Utils.h" static CORBA::ORB_var _orb; @@ -127,7 +126,7 @@ void HOMARDGUI::initialize( CAM_Application* app ) //================================================ void HOMARDGUI::createHOMARDAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle ) { - MESSAGE("HOMARDGUI::createHOMARDAction"); +// MESSAGE("HOMARDGUI::createHOMARDAction"); QIcon icon; QWidget* parent = application()->desktop(); SUIT_ResourceMgr* resMgr = application()->resourceMgr(); @@ -208,9 +207,9 @@ void HOMARDGUI::OnGUIEvent() if ( !obj || !obj->inherits( "QAction" ) ) return; int id = actionId((QAction*)obj); - // bool ret; + bool ret; if ( id != -1 ) - /*ret = */OnGUIEvent( id ); + ret = OnGUIEvent( id ); MESSAGE("************** End of HOMARDGUI::OnGUIEvent()"); } @@ -556,10 +555,5 @@ extern "C" { { return new HOMARDGUI(""); } - - char* getModuleVersion() - { - return (char*)HOMARD_VERSION_STR; - } } diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.cxx b/src/HOMARDGUI/HOMARDGUI_Utils.cxx index c96ec9cf..5007818f 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.cxx +++ b/src/HOMARDGUI/HOMARDGUI_Utils.cxx @@ -55,8 +55,8 @@ SALOME_ListIO HOMARD_UTILS::mySelected; { return theStudy->studyDS(); } - - + + //================================================================ // Function : GetActiveStudy // Returne un pointeur sur l'etude active @@ -69,7 +69,7 @@ SUIT_Study* HOMARD_UTILS::GetActiveStudy() else return NULL; } - + //================================================================ // Function : GetActiveStudyDocument // Returne un pointeur sur l'etude active @@ -83,7 +83,7 @@ _PTR(Study) HOMARD_UTILS::GetActiveStudyDocument() else return _PTR(Study)(); } - + //================================================================ // Function : updateObjBrowser // Purpose : met a jour l arbre d 'etude pour Homard @@ -93,14 +93,14 @@ void HOMARD_UTILS::updateObjBrowser() SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); if (app) { // Le nom identifiant doit etre la valeur du parametre - // name de la section HOMARD du fichier SalomeApp.xml + // name de la section HOMARD du fichier SalomeApp.xml CAM_Module* module = app->module("Homard" ); SalomeApp_Module* appMod = dynamic_cast( module ); if ( appMod ) { app->updateObjectBrowser(); appMod->updateObjBrowser( true ); } - else + else MESSAGE( "--- HOMARD::updateObjBrowser: appMod = NULL"); } } @@ -116,13 +116,13 @@ const SALOME_ListIO& HOMARD_UTILS::selectedIO() if( aSelectionMgr ) { aSelectionMgr->selectedObjects( mySelected ); - for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next()) + for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next()) SCRUTE(it.Value()->getEntry()); }; return mySelected; - + } - + //================================================================ // Function : IObjectCount // Return the number of selected objects @@ -139,7 +139,7 @@ int HOMARD_UTILS::IObjectCount() } return 0; } - + //================================================================ // Function : firstIObject // Purpose : Return the first selected object in the selected object list @@ -265,125 +265,6 @@ bool HOMARD_UTILS::isFileSummary(_PTR(SObject) MonObj) { return isObject( MonObj, QString("Summary"), 0 ) ; } -//================================================================ -// Function : ChercheFileDansSelection -// Retourne Le nom du fichier associe -//================================================================ -QString HOMARD_UTILS::ChercheFileDansSelection() -{ - MESSAGE("ChercheFileDansSelection"); - int nbSel = HOMARD_UTILS::IObjectCount() ; - if (nbSel > 1 or nbSel == 0) return QString::null; - - Handle(SALOME_InteractiveObject) aIO = HOMARD_UTILS::firstIObject(); - ASSERT(aIO); - if (!( aIO->hasEntry())) return QString::null; - - _PTR(Study) myStudy = HOMARD_UTILS::GetActiveStudyDocument(); - _PTR(SObject) aSObj ( myStudy->FindObjectID( aIO->getEntry() ) ); - if (!aSObj) return QString::null; - - _PTR(GenericAttribute) anAttr; - if (!aSObj->FindAttribute(anAttr, "AttributeExternalFileDef")) return QString::null; - _PTR(AttributeExternalFileDef) aFileName (anAttr); - std::string aFile = aFileName->Value(); - SCRUTE(aFile); - return QString(aFile.c_str()); -} - -//============================================================ -// Function ChercheDansDir -// Cherche tous les fichiers dans la directory qui correspondent -// a la fois a la base et au numero d iteration, numero d iteration +1 -// exple info.00.bilan -// ou qual.tetr.00.dat -//================================================================================ -QStringList HOMARD_UTILS::ChercheDansDir(QString direct, QString base, int numIter) -//================================================================================ -{ - QStringList liste; - - - QString strNum = QString(""); - if (numIter != -1) strNum = HOMARD_UTILS::Transforme(numIter); - QString strNum1 = QString(""); - if (numIter != -1) strNum1 = HOMARD_UTILS::Transforme(numIter+1); - - struct dirent **namelist; - int n = scandir(direct.toLatin1(), &namelist, 0, alphasort); - while(n--) - { - QString fich =QString( namelist[n]->d_name); - if (fich.contains(base) > 0) - { - if (numIter != -1) - { - if ((fich.contains(strNum)>0) or (fich.contains(strNum1)>0)) - liste.append(fich); - } - else - { - liste.append(fich); - } - } - } - return liste; -} - -QString HOMARD_UTILS::Transforme(int num) -{ - std::ostringstream nb ; - nb << std::setw(2) << std::setfill('0') << num ; - QString retour= QString(nb.str().c_str()); - return retour; - -} - -//============================================================================= -void HOMARD_UTILS::AddNewRoot(int Tag, QString Racine) -//============================================================================= -{ - _PTR(Study) myStudy = HOMARD_UTILS::GetActiveStudyDocument(); - ASSERT(myStudy); - _PTR(StudyBuilder) myBuilder( myStudy->NewBuilder() ); - ASSERT(myBuilder); - _PTR(SComponent) aFather=myStudy->FindComponent("HOMARD"); - ASSERT(aFather); - - _PTR(SObject) InfoRoot = myBuilder->NewObjectToTag (aFather, Tag); - _PTR(GenericAttribute) anAttr; - anAttr = myBuilder->FindOrCreateAttribute(InfoRoot, "AttributeName"); - _PTR(AttributeName) aName (anAttr); - aName->SetValue(Racine.toStdString()); -} -//============================================================================= -void HOMARD_UTILS::RangeSousTag(int Tag,QString FileName, int TagFichier, QString Comment,QString FileDir) -//============================================================================= -{ - _PTR(SObject) Root; - _PTR(Study) myStudy = HOMARD_UTILS::GetActiveStudyDocument(); - ASSERT(myStudy); - _PTR(StudyBuilder) myBuilder( myStudy->NewBuilder() ); - ASSERT(myBuilder); - _PTR(SComponent) aFather=myStudy->FindComponent("HOMARD"); - ASSERT(aFather); - bool found = aFather->FindSubObject(Tag,Root); - ASSERT(found); - - _PTR(SObject) MonInfo = myBuilder->NewObjectToTag (Root, TagFichier); - ASSERT(MonInfo); - _PTR(GenericAttribute) anAttr; - anAttr = myBuilder->FindOrCreateAttribute(MonInfo, "AttributeName"); - _PTR(AttributeName) aName (anAttr); - aName->SetValue(FileName.toStdString()); - QString FileComplet = FileDir +QString("/") +FileName; - anAttr = myBuilder->FindOrCreateAttribute(MonInfo, "AttributeExternalFileDef"); - _PTR(AttributeExternalFileDef) aFile (anAttr); - aFile->SetValue((FileComplet).toStdString()); - anAttr = myBuilder->FindOrCreateAttribute(MonInfo, "AttributeComment"); - _PTR(AttributeComment) aComment (anAttr); - aComment->SetValue(Comment.toStdString()); -} //========================================================================================================= void HOMARD_UTILS::PushOnHelp(QString monFichierAide) diff --git a/src/HOMARDGUI/HOMARDGUI_Utils.h b/src/HOMARDGUI/HOMARDGUI_Utils.h index 12bfc0ce..0f802794 100644 --- a/src/HOMARDGUI/HOMARDGUI_Utils.h +++ b/src/HOMARDGUI/HOMARDGUI_Utils.h @@ -51,19 +51,19 @@ class SalomeApp_Module; class LightApp_SelectionMgr; namespace HOMARD_UTILS { - + _PTR(Study) GetCStudy(const SalomeApp_Study* theStudy); SUIT_Study* GetActiveStudy(); _PTR(Study) GetActiveStudyDocument(); void updateObjBrowser(); - + const SALOME_ListIO& selectedIO(); // Function returns a list of SALOME_InteractiveObject's from // selection manager in GUI int IObjectCount() ; // Function returns the number of selected objects - + Handle(SALOME_InteractiveObject) firstIObject() ; // Function returns the first selected object in the list // of selected objects @@ -83,15 +83,8 @@ namespace HOMARD_UTILS { bool isFileSummary(_PTR(SObject) MonObj); bool isObject(_PTR(SObject) MonObj, QString TypeObject, int option ); - QString ChercheFileDansSelection(); - QStringList ChercheDansDir (QString direct, QString base, int numIter); - void RangeSousTag (int Tag,QString FileName, int TagFichier, QString Comment,QString FileDir); - void PushOnHelp(QString monFichierAide); - QString Transforme(int num); - - void AddNewRoot(int Tag, QString Racine); extern SALOME_ListIO mySelected; } diff --git a/src/HOMARDGUI/HOMARD_msg_en.ts b/src/HOMARDGUI/HOMARD_msg_en.ts index 6f5f7684..db4b63ab 100644 --- a/src/HOMARDGUI/HOMARD_msg_en.ts +++ b/src/HOMARDGUI/HOMARD_msg_en.ts @@ -291,6 +291,10 @@ HOM_ZONE_LIMIT %1 maxi must be greater than %1 mini. + + HOM_ZONE_RAYON + The external radius must be greater than the internal radius. + HOM_ZONE_EDIT_WINDOW_TITLE Edition of a zone @@ -307,6 +311,10 @@ HOM_BOUN_CASE The meshfile of the case is unknown. + + HOM_AXE + The axis must be a non 0 vector. + HOM_BOUN_A_EDIT_WINDOW_TITLE Edition of an analytical boundary @@ -315,5 +323,9 @@ HOM_BOUN_D_EDIT_WINDOW_TITLE Edition of a discrete boundary + + HOM_GROU_EDIT_WINDOW_TITLE + Selected groups + diff --git a/src/HOMARDGUI/HOMARD_msg_fr.ts b/src/HOMARDGUI/HOMARD_msg_fr.ts index 5e0bbe15..bb336547 100644 --- a/src/HOMARDGUI/HOMARD_msg_fr.ts +++ b/src/HOMARDGUI/HOMARD_msg_fr.ts @@ -335,6 +335,18 @@ 1 node per edge 1 noeud pendant par arête + + Advanced options + Options avancées + + + Minimal diameter + Diamètre minimal + + + Maximal level + Niveau maximal + Create an iteration Création d'une itération @@ -471,6 +483,10 @@ Field name Nom du champ + + Jump between elements + Saut entre éléments + Component Composante @@ -523,6 +539,10 @@ HOM_ZONE_LIMIT %1 maxi doit être plus grand que %1 mini. + + HOM_ZONE_RAYON + Le rayon externe doit être supérieur au rayon interne. + HOM_ZONE_EDIT_WINDOW_TITLE Edition d'une zone @@ -531,6 +551,30 @@ Type of zone Type de la zone + + Box + Boîte + + + Sphere + Sphère + + + Cylinder + Cylindre + + + Disk + Disque + + + Disk with hole + Disque avec trou + + + Pipe + Tuyau + Coordinates Coordonnées @@ -548,16 +592,20 @@ Type de la frontière - Coordinates of the cylindre - Coordonnées du cylindre + Radius + Rayon - Coordinates of the sphere - Coordonnées de la sphère + External radius + Rayon externe - Radius - Rayon + Internal radius + Rayon interne + + + Height + Hauteur X axis @@ -583,6 +631,10 @@ HOM_BOUN_CASE Le fichier du maillage du cas est inconnu. + + HOM_AXE + L'axe doit être un vecteur non nul. + HOM_BOUN_A_EDIT_WINDOW_TITLE Edition d'une frontière analytique @@ -591,6 +643,10 @@ HOM_BOUN_D_EDIT_WINDOW_TITLE Edition d'une frontière discrète + + HOM_GROU_EDIT_WINDOW_TITLE + Groupes choisis + Filtering with groups Filtrage par les groupes diff --git a/src/HOMARDGUI/MonCreateBoundaryAn.cxx b/src/HOMARDGUI/MonCreateBoundaryAn.cxx index c0543b17..0d603476 100644 --- a/src/HOMARDGUI/MonCreateBoundaryAn.cxx +++ b/src/HOMARDGUI/MonCreateBoundaryAn.cxx @@ -73,8 +73,8 @@ MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal, InitConnect( ); SetNewBoundaryAnName() ; - InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage - InitMinMax(); // Initialise les bornes des boutons + InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage + InitMinMax(); // Initialise les bornes des boutons SetCylinder(); // Propose un cylindre en premier choix } // -------------------------------------------------------------------------------------------------------------- @@ -149,7 +149,7 @@ void MonCreateBoundaryAn::InitValBoundaryAn() MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ; MESSAGE ("_DMax : " << _DMax); -// 2. Caracteristiques des zones +// 2. Caracteristiques des frontieres // en X _Xcentre=(_Xmin + _Xmax)/2.; // en Y @@ -168,16 +168,16 @@ void MonCreateBoundaryAn::InitMinMax() SpinBox_Xaxis->setSingleStep(0.1); SpinBox_Xcentre->setSingleStep(_Xincr); //en Y - SpinBox_Yaxis->setSingleStep(0.1); - SpinBox_Ycentre->setSingleStep(_Yincr); + SpinBox_Yaxis->setSingleStep(0.1); + SpinBox_Ycentre->setSingleStep(_Yincr); //en Z - SpinBox_Zaxis->setSingleStep(0.1); - SpinBox_Zcentre->setSingleStep(_Zincr); + 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.); + SpinBox_Radius->setSingleStep(_Rayon/10.); + SpinBox_Radius->setMinimum(0.); + SpinBox_Rayon->setSingleStep(_Rayon/10.); + SpinBox_Rayon->setMinimum(0.); } // ------------------------------------------------------------------------ bool MonCreateBoundaryAn::PushOnApply() @@ -205,19 +205,26 @@ bool MonCreateBoundaryAn::PushOnApply() (_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(); + 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(); + double daux = _BoundaryAnXaxis*_BoundaryAnXaxis + _BoundaryAnYaxis*_BoundaryAnYaxis + _BoundaryAnZaxis*_BoundaryAnZaxis ; + if ( daux < 0.0000001 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_AXE") ); + return false; + } } break; } - case 4 : // il s agit d une sphere + case 2 : // il s agit d une sphere { if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) or (_BoundaryAnYcentre != SpinBox_Ycentre->value()) or @@ -242,42 +249,28 @@ bool MonCreateBoundaryAn::PushOnApply() 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 ) + _aBoundaryAnName = LEBoundaryName->text().trimmed(); + switch (_BoundaryType) { - QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QString(CORBA::string_dup(S_ex.details.text)) ); - 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 ); + aBoundaryAn = _myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aBoundaryAnName.toStdString().c_str()), \ + _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); break; } - case 2 : // il s agit d une sphere { - aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); + aBoundaryAn = _myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aBoundaryAnName.toStdString().c_str()), \ + _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); break; } + } + _parent->addBoundaryAn(_aBoundaryAnName); } +// Mise en place des attributs aBoundaryAn->SetLimit(_Xincr, _Yincr, _Zincr); HOMARD_UTILS::updateObjBrowser(); @@ -331,13 +324,13 @@ void MonCreateBoundaryAn::SetCylinder() adjustSize(); _BoundaryType=1; SpinBox_Xcent->setValue(_Xcentre); - SpinBox_Xaxis->setValue(1.); + SpinBox_Xaxis->setValue(0.); SpinBox_Ycent->setValue(_Ycentre); - SpinBox_Yaxis->setValue(1.); + SpinBox_Yaxis->setValue(0.); SpinBox_Zcent->setValue(_Zcentre); SpinBox_Zaxis->setValue(1.); SpinBox_Radius->setValue(_Rayon); - MESSAGE("Fin de SetCylinder") +// MESSAGE("Fin de SetCylinder") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetSphere() @@ -352,7 +345,7 @@ void MonCreateBoundaryAn::SetSphere() SpinBox_Ycentre->setValue(_Ycentre); SpinBox_Zcentre->setValue(_Zcentre); SpinBox_Rayon->setValue(_Rayon); - MESSAGE("Fin de SetSphere") +// MESSAGE("Fin de SetSphere") } diff --git a/src/HOMARDGUI/MonCreateBoundaryDi.cxx b/src/HOMARDGUI/MonCreateBoundaryDi.cxx index 70994860..a96fd9ae 100644 --- a/src/HOMARDGUI/MonCreateBoundaryDi.cxx +++ b/src/HOMARDGUI/MonCreateBoundaryDi.cxx @@ -108,7 +108,7 @@ bool MonCreateBoundaryDi::PushOnApply() try { _aBoundaryName=aBoundaryName; - _aBoundary=_myHomardGen->CreateBoundary(CORBA::string_dup(_aBoundaryName.toStdString().c_str()),0); + _aBoundary=_myHomardGen->CreateBoundaryDi(CORBA::string_dup(_aBoundaryName.toStdString().c_str()), aMeshName.toStdString().c_str(), aMeshFile.toStdString().c_str()); _parent->addBoundaryDi(_aBoundaryName); _aBoundary->SetCaseCreation(_aCaseName.toStdString().c_str()); } @@ -120,9 +120,7 @@ bool MonCreateBoundaryDi::PushOnApply() } } -// Mise en place des attributs - _aBoundary->SetMeshFile(aMeshFile.toStdString().c_str()); - _aBoundary->SetMeshName(aMeshName.toStdString().c_str()); +// Les groupes AssocieLesGroupes(); HOMARD_UTILS::updateObjBrowser(); diff --git a/src/HOMARDGUI/MonCreateCase.cxx b/src/HOMARDGUI/MonCreateCase.cxx index 402a7ae5..36da0c36 100644 --- a/src/HOMARDGUI/MonCreateCase.cxx +++ b/src/HOMARDGUI/MonCreateCase.cxx @@ -43,7 +43,9 @@ MonCreateCase::MonCreateCase(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var */ : Ui_CreateCase(), - _aCaseName(""),_aDirName(""), _ConfType(1) + _aCaseName(""),_aDirName(""), _ConfType(1), + _NivMax(-1), + _DiamMin(-1.) { _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); setupUi(this); @@ -54,9 +56,8 @@ MonCreateCase::MonCreateCase(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var GBBoundaryA->setVisible(0); GBBoundaryD->setVisible(0); GBTypeNoConf->setVisible(0); + GBAdvancedOptions->setVisible(0); adjustSize(); - GetBoundarys(); - } // ------------------------------------------------------------------------ @@ -81,10 +82,14 @@ void MonCreateCase::InitConnect() connect( CBBoundaryD, SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryD())); connect( PBBoundaryDiNew, SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew())); connect( PBBoundaryDiEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryDiEdit()) ); + connect( PBBoundaryDiHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryDiHelp()) ); connect( CBBoundaryA, SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryA())); connect( PBBoundaryAnNew, SIGNAL(pressed()), this, SLOT(PushBoundaryAnNew())); + connect( PBBoundaryAnEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryAnEdit()) ); connect( PBBoundaryAnHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) ); + connect( CBAdvanced, SIGNAL(stateChanged(int)), this, SLOT(SetAdvanced())); + connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); @@ -92,24 +97,44 @@ void MonCreateCase::InitConnect() connect( LECaseName, SIGNAL(textChanged(QString)), this, SLOT(CaseNameChanged())); } // ------------------------------------------------------------------------ -void MonCreateCase::GetBoundarys() +void MonCreateCase::InitBoundarys() // ------------------------------------------------------------------------ +// Initialisation des menus avec les frontieres deja enregistrees { - HOMARD::HOMARD_Boundary_var myBoundary ; - HOMARD::listeBoundarys_var mesBoundarys = _myHomardGen->GetAllBoundarys(); - for (int i=0; ilength(); i++) - { - myBoundary = _myHomardGen->GetBoundary(mesBoundarys[i]); - int type_obj = myBoundary->GetBoundaryType() ; - if ( type_obj==0 ) { CBBoundaryDi->addItem(QString(mesBoundarys[i])); } - } + MESSAGE("InitBoundarys"); +// Pour les frontieres analytiques : la colonne des groupes + 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 ); + } +// Pour les frontieres discretes : la liste a saisir +// Pour les frontieres analytiques : les colonnes de chaque frontiere + HOMARD::HOMARD_Boundary_var myBoundary ; + HOMARD::listeBoundarys_var mesBoundarys = _myHomardGen->GetAllBoundarys(); +// MESSAGE("Nombre de frontieres enregistrees : "<length()); + for (int i=0; ilength(); i++) + { + myBoundary = _myHomardGen->GetBoundary(mesBoundarys[i]); + int type_obj = myBoundary->GetBoundaryType() ; + if ( type_obj==0 ) { CBBoundaryDi->addItem(QString(mesBoundarys[i])); } + else { addBoundaryAn(QString(mesBoundarys[i])); } + } +// Ajustement + TWBoundary->resizeColumnsToContents(); + TWBoundary->resizeRowsToContents(); + TWBoundary->clearSelection(); } - // ------------------------------- bool MonCreateCase::PushOnApply() // -------------------------------- { - MESSAGE("MonCreateCase::PushOnApply"); + MESSAGE("PushOnApply"); QString aCaseName=LECaseName->text().trimmed(); if ( aCaseName == "" ) { @@ -214,6 +239,7 @@ bool MonCreateCase::PushOnApply() } LEFileName->setReadOnly(true); PushFichier->hide(); + InitBoundarys(); } aCase->SetDirName(aDirName.toStdString().c_str()); @@ -252,6 +278,16 @@ bool MonCreateCase::PushOnApply() } } } +// Options avancees + if (CBAdvanced->isChecked()) + { +// Enregistrement du niveau maximal + _NivMax = spinBoxNivMax->value() ; +// Enregistrement du diametre minimal + _DiamMin = doubleSpinBoxDiamMin->value() ; + } + aCase->SetNivMax(_NivMax); + aCase->SetDiamMin(_DiamMin); HOMARD_UTILS::updateObjBrowser(); return true; @@ -348,15 +384,14 @@ void MonCreateCase::SetQuelconque() void MonCreateCase::SetBoundaryD() // ------------------------------------------------------------------------ { - if (CBBoundaryD->isChecked()) + MESSAGE("Debut de SetBoundaryD "); + if (CBBoundaryD->isChecked()) { - GBBoundaryD->setVisible(1); bool bOK = PushOnApply(); - if ( ! bOK) { - GBBoundaryD->setVisible(0); - CBBoundaryD->setChecked(0); - CBBoundaryD->setCheckState(Qt::Unchecked); - } + if (bOK) { GBBoundaryD->setVisible(1); } + else { GBBoundaryD->setVisible(0); + CBBoundaryD->setChecked(0); + CBBoundaryD->setCheckState(Qt::Unchecked); } } else { GBBoundaryD->setVisible(0); } adjustSize(); @@ -386,47 +421,37 @@ void MonCreateCase::PushBoundaryDiEdit() BoundaryDlg->show(); } // ------------------------------------------------------------------------ +void MonCreateCase::PushBoundaryDiHelp() +// ------------------------------------------------------------------------ +{ + HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-discrete") ) ; +} +// ------------------------------------------------------------------------ void MonCreateCase::SetBoundaryA() // ------------------------------------------------------------------------ { - MESSAGE("Debut de MonCreateCase::SetBoundaryA "); + 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); } + if (bOK) { GBBoundaryA->setVisible(1); } + else { GBBoundaryA->setVisible(0); + CBBoundaryA->setChecked(0); + CBBoundaryA->setCheckState(Qt::Unchecked); } } else { GBBoundaryA->setVisible(0); } adjustSize(); // -// MESSAGE("Fin de MonCreateCase::SetBoundaryA "); +// MESSAGE("Fin de SetBoundaryA "); } // ------------------------------------------------------------------------ void MonCreateCase::addBoundaryAn(QString newBoundary) // ------------------------------------------------------------------------ { - MESSAGE("Debut de MonCreateCase::addBoundaryAn "); + MESSAGE("Debut de addBoundaryAn "); // Ajout d'une nouvelle colonne int nbcol = TWBoundary->columnCount(); - MESSAGE("nbcol " << nbcol); +// MESSAGE("nbcol " << nbcol); nbcol += 1 ; TWBoundary->setColumnCount ( nbcol ) ; QTableWidgetItem *__colItem = new QTableWidgetItem(); @@ -435,7 +460,7 @@ void MonCreateCase::addBoundaryAn(QString newBoundary) /* TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/ // Chaque case est a cocher int nbrow = TWBoundary->rowCount(); - MESSAGE("nbrow " << nbrow); +// MESSAGE("nbrow " << nbrow); for ( int i = 0; i < nbrow; i++ ) { TWBoundary->setItem( i, nbcol-1, new QTableWidgetItem( QString ("") ) ); @@ -456,6 +481,24 @@ void MonCreateCase::PushBoundaryAnNew() BoundaryDlg->show(); } // ------------------------------------------------------------------------ +void MonCreateCase::PushBoundaryAnEdit() +// ------------------------------------------------------------------------ +{ + QString nom=""; + int nbcol = TWBoundary->columnCount(); + for ( int i = 1; i < nbcol; i++ ) + { + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem = TWBoundary->horizontalHeaderItem(i); + nom = QString(__colItem->text()) ; + MESSAGE("nom "<show(); } + } +} +// ------------------------------------------------------------------------ void MonCreateCase::PushBoundaryAnHelp() // ------------------------------------------------------------------------ { @@ -471,3 +514,15 @@ void MonCreateCase::CaseNameChanged() PushFichier->show(); } } +// ------------------------------------------------------------------------ +void MonCreateCase::SetAdvanced() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetAdvanced "); + if (CBAdvanced->isChecked()) { GBAdvancedOptions->setVisible(1); } + else + { GBAdvancedOptions->setVisible(0); + _NivMax = -1 ; + _DiamMin = -1. ; } + adjustSize(); +} diff --git a/src/HOMARDGUI/MonCreateCase.h b/src/HOMARDGUI/MonCreateCase.h index 725bbc5f..b1459141 100644 --- a/src/HOMARDGUI/MonCreateCase.h +++ b/src/HOMARDGUI/MonCreateCase.h @@ -46,13 +46,15 @@ protected : QString _aDirName; int _ConfType; + int _NivMax; + double _DiamMin; HOMARD::HOMARD_Cas_var aCase ; HOMARD::HOMARD_Gen_var _myHomardGen; virtual void InitConnect(); - virtual void GetBoundarys(); + virtual void InitBoundarys(); virtual void SetNewCaseName(); public slots: @@ -68,10 +70,14 @@ public slots: virtual void SetBoundaryD(); virtual void PushBoundaryDiNew(); virtual void PushBoundaryDiEdit(); + virtual void PushBoundaryDiHelp(); virtual void SetBoundaryA(); virtual void PushBoundaryAnNew(); + virtual void PushBoundaryAnEdit(); virtual void PushBoundaryAnHelp(); + virtual void SetAdvanced(); + virtual void PushOnOK(); virtual bool PushOnApply(); virtual void PushOnHelp(); diff --git a/src/HOMARDGUI/MonCreateHypothesis.cxx b/src/HOMARDGUI/MonCreateHypothesis.cxx index ff390327..bf5e275b 100644 --- a/src/HOMARDGUI/MonCreateHypothesis.cxx +++ b/src/HOMARDGUI/MonCreateHypothesis.cxx @@ -48,7 +48,7 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal, _aTypeAdap(-2), _aTypeRaff(1), _aTypeDera(0), _TypeThR(3), _ThreshR(0), _TypeThC(0), _ThreshC(0), - _UsCmpI(0), _TypeFieldInterp(0) + _UsField(0), _UsCmpI(0), _TypeFieldInterp(0) { MESSAGE("Constructeur") ; _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen); @@ -57,12 +57,13 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal, InitConnect(); SetNewHypothesisName(); - if (_aFieldFile != QString("")) { - RBChamp->setChecked(1); - SetChamp(); - } else { - RBUniforme->setChecked(1); - SetUniforme(); + if (_aFieldFile != QString("")) + { RBChamp->setChecked(1); + SetChamp(); + } + else + { RBUniforme->setChecked(1); + SetUniforme(); } SetFieldNo(); } @@ -93,6 +94,7 @@ void MonCreateHypothesis::InitConnect() connect( RBCNo, SIGNAL(clicked()), this, SLOT(SetCNo())); connect( RBL2, SIGNAL(clicked()), this, SLOT(SetUCL2())); connect( RBInf, SIGNAL(clicked()), this, SLOT(SetUCInf())); + connect( CBJump, SIGNAL(stateChanged(int)), this, SLOT(SetUseField())); connect( PBZoneNew, SIGNAL(pressed()), this, SLOT(PushZoneNew())); connect( PBZoneEdit, SIGNAL(pressed()), this, SLOT(PushZoneEdit()) ); connect( PBZoneDelete, SIGNAL(pressed()), this, SLOT(PushZoneDelete()) ); @@ -290,8 +292,9 @@ void MonCreateHypothesis::PushZoneDelete() // ------------------------------------------------------------------------ void MonCreateHypothesis::GetAllZones() // ------------------------------------------------------------------------ -// Recuperation de toutes les zones enregistrees dans l'arbre d'etude +// Recuperation de toutes les zones enregistrees dans l'arbre d'etude et affichage { + MESSAGE("GetAllZones") ; HOMARD::listeZones_var mesZones = _myHomardGen->GetAllZones(); int nbrow=TWZone->rowCount(); for ( int row=0; row< nbrow; row++) @@ -320,6 +323,7 @@ void MonCreateHypothesis::GetAllZones() void MonCreateHypothesis::addZone(QString newZone) // ------------------------------------------------------------------------ { + MESSAGE("addZone") ; int row = TWZone->rowCount() ; TWZone->setRowCount( row+1 ); TWZone->setItem( row, 0, new QTableWidgetItem( 0 ) ); @@ -555,6 +559,13 @@ void MonCreateHypothesis::SetUCInf() RBInf->setChecked(true); } // ------------------------------------------------------------------------ +void MonCreateHypothesis::SetUseField() +// ------------------------------------------------------------------------ +{ + if ( CBJump->isChecked() ) { _UsField = 1 ; } + else { _UsField = 0 ; } +} +// ------------------------------------------------------------------------ void MonCreateHypothesis::SetFiltrage() // ------------------------------------------------------------------------ { @@ -629,6 +640,7 @@ void MonCreateHypothesis::AssocieComposants() _aHypothesis->SetField(CORBA::string_dup(_aFieldName.toStdString().c_str()) ) ; _aHypothesis->SetRefinThr( _TypeThR, _ThreshR ) ; _aHypothesis->SetUnRefThr( _TypeThC, _ThreshC ) ; + _aHypothesis->SetUseField( _UsField ) ; _aHypothesis->SetUseComp( _UsCmpI ) ; _aListeComposant = GetListCompChecked() ; for ( int i=0 ; i< _aListeComposant.count() ; i++ ) diff --git a/src/HOMARDGUI/MonCreateHypothesis.h b/src/HOMARDGUI/MonCreateHypothesis.h index dd6abee3..d554f427 100644 --- a/src/HOMARDGUI/MonCreateHypothesis.h +++ b/src/HOMARDGUI/MonCreateHypothesis.h @@ -33,7 +33,7 @@ class MonCreateIteration; class MonCreateHypothesis : public QDialog, public Ui_CreateHypothesis -{ +{ Q_OBJECT public: @@ -64,6 +64,7 @@ protected : int _TypeThC; double _ThreshC; + int _UsField; int _UsCmpI; int _TypeFieldInterp; @@ -107,6 +108,7 @@ public slots: virtual void SetCNo(); virtual void SetUCL2(); virtual void SetUCInf(); + virtual void SetUseField(); virtual void PushZoneNew(); virtual void PushZoneEdit(); virtual void PushZoneDelete(); diff --git a/src/HOMARDGUI/MonCreateListGroup.cxx b/src/HOMARDGUI/MonCreateListGroup.cxx index 7f0c23bd..12db4782 100644 --- a/src/HOMARDGUI/MonCreateListGroup.cxx +++ b/src/HOMARDGUI/MonCreateListGroup.cxx @@ -24,7 +24,6 @@ using namespace std; #include "MonCreateBoundaryDi.h" #include -#include #include "SalomeApp_Tools.h" #include "HOMARDGUI_Utils.h" diff --git a/src/HOMARDGUI/MonCreateZone.cxx b/src/HOMARDGUI/MonCreateZone.cxx index da63ed1a..a8677430 100644 --- a/src/HOMARDGUI/MonCreateZone.cxx +++ b/src/HOMARDGUI/MonCreateZone.cxx @@ -49,33 +49,28 @@ MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, bool modal, _parent(parent), _aZoneName (""), _aCaseName(caseName), + _Orient(0), _ZoneType(2), _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0), + _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _ZoneXmin(0), _ZoneXmax(0), _ZoneYmin(0), _ZoneYmax(0), _ZoneZmin(0), _ZoneZmax(0), - _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0), + _Xaxis(0), _Yaxis(0), _Zaxis(0), _RayonInt(0), _Haut(0), + _ZoneXaxis(0), _ZoneYaxis(0), _ZoneZaxis(0), _ZoneRayonInt(0), _ZoneHaut(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", "boxdxyz.png" ); - QIcon IS2=QIcon(pix2); - RBBox->setIcon(IS2); - - InitConnect( ); + _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen) ; + setupUi(this) ; + setModal(modal) ; + InitConnect( ) ; SetNewZoneName() ; - InitValZone(); // Cherche les valeurs de la boite englobante le maillage - InitMinMax(); // Initialise les bornes des boutons - SetBox(); // Propose une boite en premier choix + InitValZone() ; // Cherche les valeurs de la boite englobante le maillage + InitMinMax() ; // Initialise les bornes des boutons + SetBox() ; // Propose une boite en premier choix + } // -------------------------------------------------------------------------------------------------------------- MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, @@ -89,25 +84,23 @@ MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, _parent(parent), _aZoneName (""), _aCaseName(caseName), + _Orient(0), _ZoneType(2), _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0), _ZoneXmin(0), _ZoneXmax(0), _ZoneYmin(0), _ZoneYmax(0), _ZoneZmin(0), _ZoneZmax(0), + _Xaxis(0), _Yaxis(0), _Zaxis(0), _RayonInt(0), _Haut(0), + _ZoneXaxis(0), _ZoneYaxis(0), _ZoneZaxis(0), _ZoneRayonInt(0), _ZoneHaut(0), // Pour affichage lors de l edition d une Zone sans nom de Cas - _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1), + _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 MonCreateZone") - 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", "boxdxyz.png" ); - QIcon IS2=QIcon(pix2); - RBBox->setIcon(IS2); - setModal(true); - InitConnect(); + setupUi(this) ; + + setModal(true) ; + InitConnect() ; } // ------------------------------------------------------------------------ @@ -122,10 +115,12 @@ void MonCreateZone::InitConnect() { connect( RBBox, SIGNAL(clicked()) , this, SLOT(SetBox()) ) ; 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() ) ); + connect( RBCylinder, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ; + connect( RBPipe, SIGNAL(clicked()) , this, SLOT(SetPipe()) ) ; + 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 MonCreateZone::InitValZone() @@ -134,60 +129,96 @@ void MonCreateZone::InitValZone() // // 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); + 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]; + if ( _Xincr < 0 ) { _Orient = 2 ; } + else if ( _Yincr < 0 ) { _Orient = 3 ; } + else if ( _Zincr < 0 ) { _Orient = 1 ; } + MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ; + MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ; + MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ; + MESSAGE ("_DMax : " << _DMax) ; + MESSAGE ("_Orient : " << _Orient) ; // 2. Caracteristiques des zones // en X - if ( _Xincr < 0 ) - { - _ZoneXmin = _Xmin; - _ZoneXmax = _Xmax; - } - else - { - _ZoneXmin = _Xmin - _Xincr; - _ZoneXmax = _Xmax + _Xincr; - } - _Xcentre=(_Xmin + _Xmax)/2.; + if ( _Xincr < 0 ) + { + _ZoneXmin = _Xmin; + _ZoneXmax = _Xmax; + } + else + { + _ZoneXmin = _Xmin - _Xincr; + _ZoneXmax = _Xmax + _Xincr; + } + _Xcentre=(_Xmin + _Xmax)/2.; // en Y - if ( _Yincr < 0 ) - { - _ZoneYmin = _Ymin; - _ZoneYmax = _Ymax; - } - else - { - _ZoneYmin = _Ymin - _Yincr; - _ZoneYmax = _Ymax + _Yincr; - } - _Ycentre=(_Ymin + _Ymax)/2.; + if ( _Yincr < 0 ) + { + _ZoneYmin = _Ymin; + _ZoneYmax = _Ymax; + } + else + { + _ZoneYmin = _Ymin - _Yincr; + _ZoneYmax = _Ymax + _Yincr; + } + _Ycentre=(_Ymin + _Ymax)/2.; // en Z - if ( _Zincr < 0 ) - { - _ZoneZmin = _Zmin; - _ZoneZmax = _Zmax; - } - else - { - _ZoneZmin = _Zmin - _Zincr; - _ZoneZmax = _Zmax + _Zincr; - } - _Zcentre=(_Zmin + _Zmax)/2.; -// Rayon - _Rayon= _DMax/4.; + if ( _Zincr < 0 ) + { + _ZoneZmin = _Zmin; + _ZoneZmax = _Zmax; + } + else + { + _ZoneZmin = _Zmin - _Zincr; + _ZoneZmax = _Zmax + _Zincr; + } + _Zcentre=(_Zmin + _Zmax)/2.; +// Rayons + _Rayon= _DMax/4.; + _RayonInt= _DMax/8.; +// Axe et hauteur pour cylindre et tuyau + _Haut= _DMax/2.; +// 3. Gestion des icones + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ; + QPixmap pix = resMgr->loadPixmap( "HOMARD", "boxdxyz.png" ) ; + if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "boxdxyz.png" ) ; } + else { pix = resMgr->loadPixmap( "HOMARD", "boxdxy.png" ) ; } + QIcon IS=QIcon(pix) ; + RBBox->setIcon(IS) ; + + if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ) ; } + else { pix = resMgr->loadPixmap( "HOMARD", "disk.png" ) ; + RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8)); + TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); + TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); + TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); } + IS=QIcon(pix) ; + RBCylinder->setIcon(IS) ; + + if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "pipe.png" ) ; } + else { pix = resMgr->loadPixmap( "HOMARD", "diskwithhole.png" ) ; + RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8)); + TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); + TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); + TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); } + IS=QIcon(pix) ; + RBPipe->setIcon(IS) ; + + if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ) ; + IS=QIcon(pix) ; + RBSphere->setIcon(IS) ; } + else { RBSphere->setVisible(0) ; } } // ------------------------------------------------------------------------ @@ -196,53 +227,99 @@ void MonCreateZone::InitMinMax() { // en X if ( _Xincr > 0) { - SpinBox_Xmini->setRange(_ZoneXmin,_ZoneXmax); - SpinBox_Xmaxi->setRange(_ZoneXmin,_ZoneXmax); - SpinBox_Xmini->setSingleStep(_Xincr); - SpinBox_Xmaxi->setSingleStep(_Xincr); - SpinBox_Xcentre->setSingleStep(_Xincr); + SpinBox_Xmini->setRange(_ZoneXmin,_ZoneXmax) ; + SpinBox_Xmaxi->setRange(_ZoneXmin,_ZoneXmax) ; + SpinBox_Xmini->setSingleStep(_Xincr) ; + SpinBox_Xmaxi->setSingleStep(_Xincr) ; + SpinBox_Xcentre->setSingleStep(_Xincr) ; } else { SpinBox_Xmini->setValue(_ZoneXmin) ; SpinBox_Xmaxi->setValue(_ZoneXmax) ; + SpinBox_Xcentre->setValue(_Xcentre) ; + SpinBox_Xbase->setValue(_Xcentre) ; + SpinBox_Xbase_p->setValue(_Xcentre) ; SpinBox_Xmini->setEnabled(false) ; SpinBox_Xmaxi->setEnabled(false) ; SpinBox_Xcentre->setEnabled(false) ; + SpinBox_Xbase->setEnabled(false) ; + SpinBox_Xbase_p->setEnabled(false) ; } // en Y if ( _Yincr > 0) { - SpinBox_Ymini->setRange(_ZoneYmin,_ZoneYmax); - SpinBox_Ymaxi->setRange(_ZoneYmin,_ZoneYmax); - SpinBox_Ymini->setSingleStep(_Yincr); - SpinBox_Ymaxi->setSingleStep(_Yincr); - SpinBox_Ycentre->setSingleStep(_Yincr); + SpinBox_Ymini->setRange(_ZoneYmin,_ZoneYmax) ; + SpinBox_Ymaxi->setRange(_ZoneYmin,_ZoneYmax) ; + SpinBox_Ymini->setSingleStep(_Yincr) ; + SpinBox_Ymaxi->setSingleStep(_Yincr) ; + SpinBox_Ycentre->setSingleStep(_Yincr) ; } else { SpinBox_Ymini->setValue(_ZoneYmin) ; SpinBox_Ymaxi->setValue(_ZoneYmax) ; - SpinBox_Ycentre->setValue(_Ycentre); + SpinBox_Ycentre->setValue(_Ycentre) ; + SpinBox_Ybase->setValue(_Ycentre) ; + SpinBox_Ybase_p->setValue(_Ycentre) ; SpinBox_Ymini->setEnabled(false) ; SpinBox_Ymaxi->setEnabled(false) ; SpinBox_Ycentre->setEnabled(false) ; + SpinBox_Ybase->setEnabled(false) ; + SpinBox_Ybase_p->setEnabled(false) ; } // en Z if ( _Zincr > 0) { - SpinBox_Zmini->setRange(_ZoneZmin,_ZoneZmax); - SpinBox_Zmaxi->setRange(_ZoneZmin,_ZoneZmax); - SpinBox_Zmini->setSingleStep(_Zincr); - SpinBox_Zmaxi->setSingleStep(_Zincr); - SpinBox_Zcentre->setSingleStep(_Zincr); + SpinBox_Zmini->setRange(_ZoneZmin,_ZoneZmax) ; + SpinBox_Zmaxi->setRange(_ZoneZmin,_ZoneZmax) ; + SpinBox_Zmini->setSingleStep(_Zincr) ; + SpinBox_Zmaxi->setSingleStep(_Zincr) ; + SpinBox_Zcentre->setSingleStep(_Zincr) ; } else { SpinBox_Zmini->setValue(_ZoneZmin) ; SpinBox_Zmaxi->setValue(_ZoneZmax) ; + SpinBox_Zcentre->setValue(_Zcentre) ; + SpinBox_Zbase->setValue(_Zcentre) ; + SpinBox_Zbase_p->setValue(_Zcentre) ; SpinBox_Zmini->setEnabled(false) ; SpinBox_Zmaxi->setEnabled(false) ; SpinBox_Zcentre->setEnabled(false) ; + SpinBox_Zbase->setEnabled(false) ; + SpinBox_Zbase_p->setEnabled(false) ; + } +// Rayons + SpinBox_Rayon->setSingleStep(_Rayon/10.) ; + SpinBox_Rayon->setMinimum(0.) ; + SpinBox_Radius->setSingleStep(_Rayon/10.) ; + SpinBox_Radius->setMinimum(0.) ; + SpinBox_Radius_int->setSingleStep(_Rayon/20.) ; + SpinBox_Radius_int->setMinimum(0.) ; + SpinBox_Radius_ext->setSingleStep(_Rayon/10.) ; + SpinBox_Radius_ext->setMinimum(0.) ; +// Axe et hauteur +// Si une coordonnee est constante, inutile de demander l'axe et la hauteur + if ( _Orient > 0) { + SpinBox_Xaxis->setVisible(0) ; + SpinBox_Yaxis->setVisible(0) ; + SpinBox_Zaxis->setVisible(0) ; + SpinBox_Haut->setVisible(0) ; + TLXaxis->setVisible(0) ; + TLYaxis->setVisible(0) ; + TLZaxis->setVisible(0) ; + TLHaut->setVisible(0) ; + SpinBox_Xaxis_p->setVisible(0) ; + SpinBox_Yaxis_p->setVisible(0) ; + SpinBox_Zaxis_p->setVisible(0) ; + SpinBox_Haut_p->setVisible(0) ; + TLXaxis_p->setVisible(0) ; + TLYaxis_p->setVisible(0) ; + TLZaxis_p->setVisible(0) ; + TLHaut_p->setVisible(0) ; + } + else { + SpinBox_Haut->setMinimum(0.) ; + SpinBox_Haut->setSingleStep(_Rayon/10.) ; + SpinBox_Haut_p->setMinimum(0.) ; + SpinBox_Haut_p->setSingleStep(_Rayon/10.) ; } -// Rayon - SpinBox_Rayon->setSingleStep(_Rayon/10.); - SpinBox_Rayon->setMinimum(0.); } // ------------------------------------------------------------------------ bool MonCreateZone::PushOnApply() @@ -254,56 +331,152 @@ bool MonCreateZone::PushOnApply() if (LEZoneName->text().trimmed()=="") { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QObject::tr("HOM_ZONE_NAME") ); + QObject::tr("HOM_ZONE_NAME") ) ; return false; } switch (_ZoneType) { - case 2 : // il s agit d une boite + case 11 : // il s agit d un rectangle + { } + case 12 : // il s agit d un rectangle + { } + case 13 : // il s agit d un rectangle + { } + case 2 : // il s agit d un parallelipipede rectangle { - if ((_ZoneXmin != SpinBox_Xmini->value()) or (_ZoneXmax != SpinBox_Xmaxi->value()) or - (_ZoneYmin != SpinBox_Ymini->value()) or (_ZoneYmax != SpinBox_Ymaxi->value()) or - (_ZoneZmin != SpinBox_Zmini->value()) or (_ZoneZmax != SpinBox_Zmaxi->value()) ) - Chgt = true; - break; + if ( (_ZoneXmin != SpinBox_Xmini->value()) or + (_ZoneXmax != SpinBox_Xmaxi->value()) or + (_ZoneYmin != SpinBox_Ymini->value()) or + (_ZoneYmax != SpinBox_Ymaxi->value()) or + (_ZoneZmin != SpinBox_Zmini->value()) or + (_ZoneZmax != SpinBox_Zmaxi->value()) ) + { + Chgt = true; + _ZoneXmin= SpinBox_Xmini->value() ; _ZoneXmax= SpinBox_Xmaxi->value() ; + _ZoneYmin= SpinBox_Ymini->value() ; _ZoneYmax= SpinBox_Ymaxi->value() ; + _ZoneZmin= SpinBox_Zmini->value() ; _ZoneZmax= SpinBox_Zmaxi->value() ; + } + break ; } - case 4 : // il s agit d une sphere { - if ((_ZoneXcentre != SpinBox_Xcentre->value()) or (_ZoneYcentre != SpinBox_Ycentre->value()) - or (_ZoneZcentre != SpinBox_Zcentre->value()) or (_ZoneRayon != SpinBox_Rayon->value())) - Chgt = true; - break; + if ( (_ZoneXcentre != SpinBox_Xcentre->value()) or + (_ZoneYcentre != SpinBox_Ycentre->value()) or + (_ZoneZcentre != SpinBox_Zbase->value()) or + (_ZoneRayon != SpinBox_Rayon->value()) ) + { + Chgt = true; + _ZoneXcentre=SpinBox_Xcentre->value() ; + _ZoneYcentre=SpinBox_Ycentre->value() ; + _ZoneZcentre=SpinBox_Zcentre->value() ; + _ZoneRayon=SpinBox_Rayon->value() ; + } + break ; } + case 31 : // il s agit d un disque issu d'un cylindre + { } + case 32 : // il s agit d un disque issu d'un cylindre + { } + case 33 : // il s agit d un disque issu d'un cylindre + { } + case 5 : // il s agit d un cylindre + { + if ( (_ZoneXcentre != SpinBox_Xbase->value()) or + (_ZoneYcentre != SpinBox_Ybase->value()) or + (_ZoneZcentre != SpinBox_Zbase->value()) or + (_ZoneRayon != SpinBox_Radius->value()) or + (_ZoneHaut != SpinBox_Haut->value()) or + (_ZoneXaxis != SpinBox_Xaxis->value()) or + (_ZoneYaxis != SpinBox_Yaxis->value()) or + (_ZoneZaxis != SpinBox_Zaxis->value()) ) + { + Chgt = true; + _ZoneXcentre=SpinBox_Xbase->value() ; + _ZoneYcentre=SpinBox_Ybase->value() ; + _ZoneZcentre=SpinBox_Zbase->value() ; + _ZoneXaxis=SpinBox_Xaxis->value() ; + _ZoneYaxis=SpinBox_Yaxis->value() ; + _ZoneZaxis=SpinBox_Zaxis->value() ; + _ZoneRayon=SpinBox_Radius->value() ; + _ZoneHaut=SpinBox_Haut->value() ; + } + break ; + } + case 61 : // il s agit d un disque avec trou + { } + case 62 : // il s agit d un disque avec trou + { } + case 63 : // il s agit d un disque avec trou + { } + case 7 : // il s agit d un tuyau + { + if ( (_ZoneXcentre != SpinBox_Xbase_p->value()) or + (_ZoneYcentre != SpinBox_Ybase_p->value()) or + (_ZoneZcentre != SpinBox_Zbase_p->value()) or + (_ZoneRayonInt != SpinBox_Radius_int->value()) or + (_ZoneRayon != SpinBox_Radius_ext->value()) or + (_ZoneHaut != SpinBox_Haut_p->value()) or + (_ZoneXaxis != SpinBox_Xaxis_p->value()) or + (_ZoneYaxis != SpinBox_Yaxis_p->value()) or + (_ZoneZaxis != SpinBox_Zaxis_p->value()) ) + { + Chgt = true; + _ZoneXcentre=SpinBox_Xbase_p->value() ; + _ZoneYcentre=SpinBox_Ybase_p->value() ; + _ZoneZcentre=SpinBox_Zbase_p->value() ; + _ZoneXaxis=SpinBox_Xaxis_p->value() ; + _ZoneYaxis=SpinBox_Yaxis_p->value() ; + _ZoneZaxis=SpinBox_Zaxis_p->value() ; + _ZoneRayonInt=SpinBox_Radius_int->value() ; + _ZoneRayon=SpinBox_Radius_ext->value() ; + _ZoneHaut=SpinBox_Haut_p->value() ; + } + break ; + } } - _ZoneXmin= SpinBox_Xmini->value(); _ZoneXmax= SpinBox_Xmaxi->value(); - _ZoneYmin= SpinBox_Ymini->value(); _ZoneYmax= SpinBox_Ymaxi->value(); - _ZoneZmin= SpinBox_Zmini->value(); _ZoneZmax= SpinBox_Zmaxi->value(); - - _ZoneXcentre=SpinBox_Xcentre->value();_ZoneYcentre=SpinBox_Ycentre->value(); - _ZoneZcentre=SpinBox_Zcentre->value();_ZoneRayon=SpinBox_Rayon->value(); - - if( _ZoneType == 2 ) +// Controles +// Pour un rectangle ou un parallelepipede : + if ( ( _ZoneType >= 11 and _ZoneType <= 13 ) or _ZoneType == 2 ) { - if ((_ZoneXmin>= _ZoneXmax) and (_Xincr > 0)) { + if ((_ZoneXmin >= _ZoneXmax) and (_Xincr > 0)) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QObject::tr("HOM_ZONE_LIMIT").arg("X") ); + QObject::tr("HOM_ZONE_LIMIT").arg("X") ) ; return false; } - if ((_ZoneYmin>= _ZoneYmax) and (_Yincr > 0)) { + if ((_ZoneYmin >= _ZoneYmax) and (_Yincr > 0)) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QObject::tr("HOM_ZONE_LIMIT").arg("Y") ); + QObject::tr("HOM_ZONE_LIMIT").arg("Y") ) ; return false; } - if ((_ZoneZmin>= _ZoneZmax) and (_Zincr > 0)) { + if ((_ZoneZmin >= _ZoneZmax) and (_Zincr > 0)) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QObject::tr("HOM_ZONE_LIMIT").arg("Z") ); + QObject::tr("HOM_ZONE_LIMIT").arg("Z") ) ; return false; } } - - bool bOK = CreateOrUpdateZone(); +// L'axe pour un cylindre ou un tuyau : + if ( _ZoneType == 5 or _ZoneType == 7 ) + { + double daux = _ZoneXaxis*_ZoneXaxis + _ZoneYaxis*_ZoneYaxis + _ZoneZaxis*_ZoneZaxis ; + if ( daux < 0.0000001 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_AXE") ); + return false; + } + } +// Rayons pour disque avec trou ou un tuyau : + if ( ( _ZoneType >= 61 and _ZoneType <= 63 ) or _ZoneType == 7 ) + { + if ( _ZoneRayonInt >= _ZoneRayon ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_ZONE_RAYON") ); + return false; + } + } + bool bOK = CreateOrUpdateZone() ; return bOK; } @@ -311,40 +484,92 @@ bool MonCreateZone::PushOnApply() bool MonCreateZone:: CreateOrUpdateZone() //---------------------------------------------------- // Creation de la zone -// Mise a jour des attributs de la Zone - { + MESSAGE("CreateOrUpdateZone _ZoneType ="<<_ZoneType); if (_aZoneName != LEZoneName->text().trimmed()) { - try - { - _aZoneName = LEZoneName->text().trimmed(); - aZone = _myHomardGen->CreateZone( \ - CORBA::string_dup(_aZoneName.toStdString().c_str()), \ - CORBA::Long(_ZoneType) ); - _parent->addZone(_aZoneName); - } - catch( SALOME::SALOME_Exception& S_ex ) + _aZoneName = LEZoneName->text().trimmed() ; + switch (_ZoneType) { - QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), - QString(CORBA::string_dup(S_ex.details.text)) ); - return false; + case 11 : // il s agit d un rectangle + { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _Orient ); + break; + } + case 12 : // il s agit d un rectangle + { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax, _Orient ); + break; + } + case 13 : // il s agit d un rectangle + { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneZmin, _ZoneZmax, _ZoneXmin, _ZoneXmax, _Orient ); + break; + } + case 2 : // il s agit d un parallelepipede + { aZone = _myHomardGen->CreateZoneBox(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax ); + break; + } + case 4 : // il s agit d une sphere + { aZone = _myHomardGen->CreateZoneSphere(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon ); + break; + } + case 31 : // il s agit d un disque issu d'un cylindre + { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _Orient ); + break; + } + case 32 : // il s agit d un disque issu d'un cylindre + { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _Orient ); + break; + } + case 33 : // il s agit d un disque issu d'un cylindre + { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _Orient ); + break; + } + case 5 : // il s agit d un cylindre + { aZone = _myHomardGen->CreateZoneCylinder(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut ); + break; + } + case 61 : // il s agit d un disque avec trou + { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _ZoneRayonInt, _Orient ); + break; + } + case 62 : // il s agit d un disque avec trou + { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _ZoneRayonInt, _Orient ); + break; + } + case 63 : // il s agit d un disque avec trou + { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _ZoneRayonInt, _Orient ); + break; + } + case 7 : // il s agit d un tuyau + { aZone = _myHomardGen->CreateZonePipe(CORBA::string_dup(_aZoneName.toStdString().c_str()), \ + _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt ); + break; + } } + _parent->addZone(_aZoneName) ; } // Mise en place des attributs - aZone->SetZoneType(_ZoneType); - aZone->SetBox(_ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax); - aZone->SetSphere(_ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon); - aZone->SetLimit(_Xincr, _Yincr, _Zincr); + aZone->SetLimit(_Xincr, _Yincr, _Zincr) ; - HOMARD_UTILS::updateObjBrowser(); + HOMARD_UTILS::updateObjBrowser() ; return true; } // ------------------------------------------------------------------------ void MonCreateZone::PushOnOK() // ------------------------------------------------------------------------ { - if (PushOnApply()) this->close(); + if (PushOnApply()) this->close() ; } // ------------------------------------------------------------------------ void MonCreateZone::PushOnHelp() @@ -359,13 +584,13 @@ void MonCreateZone::SetNewZoneName() { // Recherche d'un nom par defaut qui n'existe pas encore - HOMARD::listeZones_var MyZones = _myHomardGen->GetAllZones(); + HOMARD::listeZones_var MyZones = _myHomardGen->GetAllZones() ; int num = 0; QString aZoneName=""; while (aZoneName=="" ) { aZoneName.setNum(num+1) ; aZoneName.insert(0, QString("Zone_")) ; - for ( int i=0; ilength(); i++) + for ( int i=0; ilength() ; i++) { if ( aZoneName == QString(MyZones[i])) { @@ -376,50 +601,95 @@ void MonCreateZone::SetNewZoneName() } } LEZoneName->clear() ; - LEZoneName->insert(aZoneName); + LEZoneName->insert(aZoneName) ; } // ------------------------------------------------------------------------ void MonCreateZone::SetBox() // ------------------------------------------------------------------------ { - gBBox->setVisible(1); - gBSphere->setVisible(0); - adjustSize(); + gBBox->setVisible(1) ; + gBSphere->setVisible(0) ; + gBCylindre->setVisible(0) ; + gBPipe->setVisible(0) ; + adjustSize() ; _ZoneType=2; // Sachant que l'increment est le 1/100eme de l'ecart (min/max), cela revient // a initialiser la boite sur une boite 'centrale' comprise entre 2/5 et 3/5 - if ( _Xincr > 0 ) { - SpinBox_Xmini->setValue(_Xcentre-10*_Xincr); - SpinBox_Xmaxi->setValue(_Xcentre+10*_Xincr); - } - if ( _Yincr > 0 ) { - SpinBox_Ymini->setValue(_Ycentre-10*_Yincr); - SpinBox_Ymaxi->setValue(_Ycentre+10*_Yincr); - } - if ( _Zincr > 0 ) { - SpinBox_Zmini->setValue(_Zcentre-10*_Zincr); - SpinBox_Zmaxi->setValue(_Zcentre+10*_Zincr); - } + if ( _Xincr > 0 ) { SpinBox_Xmini->setValue(_Xcentre-10*_Xincr) ; + SpinBox_Xmaxi->setValue(_Xcentre+10*_Xincr) ; } + else { _ZoneType=12 ; } + if ( _Yincr > 0 ) { SpinBox_Ymini->setValue(_Ycentre-10*_Yincr) ; + SpinBox_Ymaxi->setValue(_Ycentre+10*_Yincr) ; } + else { _ZoneType=13 ; } + if ( _Zincr > 0 ) { SpinBox_Zmini->setValue(_Zcentre-10*_Zincr) ; + SpinBox_Zmaxi->setValue(_Zcentre+10*_Zincr) ; } + else { _ZoneType=11 ; } } // ------------------------------------------------------------------------ void MonCreateZone::SetSphere() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetSphere") - gBBox->setVisible(0); - gBSphere->setVisible(1); - adjustSize(); + gBBox->setVisible(0) ; + gBSphere->setVisible(1) ; + gBCylindre->setVisible(0) ; + gBPipe->setVisible(0) ; + adjustSize() ; _ZoneType=4; - if ( _Xincr > 0 ) { - SpinBox_Xcentre->setValue(_Xcentre); - } - if ( _Yincr > 0 ) { - SpinBox_Ycentre->setValue(_Ycentre); - } - if ( _Zincr > 0 ) { - SpinBox_Zcentre->setValue(_Zcentre); - } - SpinBox_Rayon->setValue(_Rayon); + SpinBox_Xcentre->setValue(_Xcentre) ; + SpinBox_Ycentre->setValue(_Ycentre) ; + SpinBox_Zcentre->setValue(_Zcentre) ; + SpinBox_Rayon->setValue(_Rayon) ; + MESSAGE("Fin de SetSphere") +} +// ------------------------------------------------------------------------ +void MonCreateZone::SetCylinder() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetCylinder") + gBBox->setVisible(0) ; + gBSphere->setVisible(0) ; + gBCylindre->setVisible(1) ; + gBPipe->setVisible(0) ; + adjustSize() ; + _ZoneType=5; + if ( _Xincr > 0 ) { SpinBox_Xbase->setValue(_Xcentre) ; + SpinBox_Xaxis->setValue(0.) ; } + else { _ZoneType=32 ; } + if ( _Yincr > 0 ) { SpinBox_Ybase->setValue(_Ycentre) ; + SpinBox_Yaxis->setValue(0.) ; } + else { _ZoneType=33 ; } + if ( _Zincr > 0 ) { SpinBox_Zbase->setValue(_Zcentre) ; + SpinBox_Zaxis->setValue(1.) ; } + else { _ZoneType=31 ; } + SpinBox_Radius->setValue(_Rayon) ; + SpinBox_Haut->setValue(_Haut) ; + MESSAGE("Fin de SetCylinder") +} +// ------------------------------------------------------------------------ +void MonCreateZone::SetPipe() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetPipe") + gBBox->setVisible(0) ; + gBSphere->setVisible(0) ; + gBCylindre->setVisible(0) ; + gBPipe->setVisible(1) ; + adjustSize() ; + _ZoneType=7; + if ( _Xincr > 0 ) { SpinBox_Xbase_p->setValue(_Xcentre) ; + SpinBox_Xaxis_p->setValue(0.) ; } + else { _ZoneType=62 ; } + if ( _Yincr > 0 ) { SpinBox_Ybase_p->setValue(_Ycentre) ; + SpinBox_Yaxis_p->setValue(0.) ; } + else { _ZoneType=63 ; } + if ( _Zincr > 0 ) { SpinBox_Zbase_p->setValue(_Zcentre) ; + SpinBox_Zaxis_p->setValue(1.) ; } + else { _ZoneType=61 ; } + SpinBox_Radius_int->setValue(_RayonInt) ; + SpinBox_Radius_ext->setValue(_Rayon) ; + SpinBox_Haut_p->setValue(_Haut) ; + MESSAGE("Fin de SetPipe") } diff --git a/src/HOMARDGUI/MonCreateZone.h b/src/HOMARDGUI/MonCreateZone.h index 8576f599..825a6ae1 100644 --- a/src/HOMARDGUI/MonCreateZone.h +++ b/src/HOMARDGUI/MonCreateZone.h @@ -51,11 +51,15 @@ protected : QString _aZoneName; QString _aCaseName; + int _Orient; int _ZoneType; double _Xcentre, _Ycentre, _Zcentre, _Rayon ; - double _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon; - double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ; - double _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax; + double _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon ; + double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr ; + double _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax ; + double _Xaxis, _Yaxis, _Zaxis, _RayonInt, _Haut ; + double _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayonInt, _ZoneHaut ; + double _DMax ; bool Chgt; @@ -72,6 +76,8 @@ protected : public slots: virtual void SetBox(); virtual void SetSphere(); + virtual void SetCylinder(); + virtual void SetPipe(); virtual void PushOnOK(); virtual bool PushOnApply(); virtual void PushOnHelp(); diff --git a/src/HOMARDGUI/MonEditBoundaryAn.cxx b/src/HOMARDGUI/MonEditBoundaryAn.cxx index dc4a67ab..5526fde6 100644 --- a/src/HOMARDGUI/MonEditBoundaryAn.cxx +++ b/src/HOMARDGUI/MonEditBoundaryAn.cxx @@ -52,64 +52,62 @@ MonEditBoundaryAn::~MonEditBoundaryAn() void MonEditBoundaryAn::InitValEdit() // ------------------------------------------------------------------------ { - LEBoundaryName->setText(_aBoundaryAnName); - LEBoundaryName->setReadOnly(true); - _BoundaryType = aBoundaryAn->GetBoundaryType(); - InitValBoundaryAnLimit(); - if (_aCaseName != QString("")) InitValBoundaryAn(); - switch (_BoundaryType) + LEBoundaryName->setText(_aBoundaryAnName); + LEBoundaryName->setReadOnly(true); + _BoundaryType = aBoundaryAn->GetBoundaryType(); + MESSAGE("_BoundaryType : "<<_BoundaryType); + InitValBoundaryAnLimit(); + if (_aCaseName != QString("")) InitValBoundaryAn(); + switch (_BoundaryType) + { + case 1 : // il s agit d un cylindre + { + InitValBoundaryAnCylindre(); + SetCylinder(); + break; + } + case 2: // il s agit d une sphere { - case 1 : // il s agit d une boite - { - InitValBoundaryAnCylindre(); - SetCylinder(); - break; - } - case 2: // il s agit d une sphere - { - InitValBoundaryAnSphere(); - SetSphere(); - break; - } - }; + 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]; - + 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]; - + HOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + 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]; - + HOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 4 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnRayon=mesCoordBoundary[3]; } // ------------------------------------------------------------------------ void MonEditBoundaryAn::SetCylinder() @@ -169,39 +167,26 @@ void MonEditBoundaryAn::SetSphere() 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 + switch (_BoundaryType) { - aBoundaryAn->SetBoundaryType(_BoundaryType); - switch (_BoundaryType) + case 1 : // il s agit d un cylindre { - 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->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; } + if (Chgt) _myHomardGen->InvalideBoundary(_aBoundaryAnName.toStdString().c_str()); + HOMARD_UTILS::updateObjBrowser(); return true; } diff --git a/src/HOMARDGUI/MonEditCase.cxx b/src/HOMARDGUI/MonEditCase.cxx index 3d0672fc..1c2680fd 100644 --- a/src/HOMARDGUI/MonEditCase.cxx +++ b/src/HOMARDGUI/MonEditCase.cxx @@ -54,132 +54,146 @@ MonEditCase::~MonEditCase() void MonEditCase::InitValEdit() // ------------------------------ { - MESSAGE("Debut de MonEditCase::InitValEdit"); - LECaseName->setText(_aCaseName); - LECaseName->setReadOnly(true); - - QString aDirName = aCase->GetDirName(); - LEDirName->setText(aDirName); - LEDirName->setReadOnly(true); - PushDir->setVisible(0); - - QString _aitername=aCase->GetIter0Name(); - HOMARD::HOMARD_Iteration_var aIter = _myHomardGen->GetIteration(_aitername.toStdString().c_str()); - QString aFileName = aIter->GetMeshFile(); - LEFileName->setText(aFileName); - LEFileName->setReadOnly(true); - PushFichier->setVisible(0); - - int ConfType=aCase->GetConfType(); - if(ConfType==1) - { - GBTypeNoConf->setVisible(0); - RBConforme->setChecked(true); - } - else - { - RBNonConforme->setChecked(true); - GBTypeNoConf->setVisible(1); - RB1NpM->setEnabled(false); - RB1NpA->setEnabled(false); - RBQuelconque->setEnabled(false); - }; - - if (_ConfType==2) { RB1NpM->setChecked(true);}; - if (_ConfType==3) { RB1NpA->setChecked(true);}; - if (_ConfType==4) { RBQuelconque->setChecked(true);}; - - RBNonConforme->setEnabled(false); - RBConforme->setEnabled(false); + MESSAGE("Debut de MonEditCase::InitValEdit"); + LECaseName->setText(_aCaseName); + LECaseName->setReadOnly(true); + + QString aDirName = aCase->GetDirName(); + LEDirName->setText(aDirName); + LEDirName->setReadOnly(true); + PushDir->setVisible(0); + + QString _aitername=aCase->GetIter0Name(); + HOMARD::HOMARD_Iteration_var aIter = _myHomardGen->GetIteration(_aitername.toStdString().c_str()); + QString aFileName = aIter->GetMeshFile(); + LEFileName->setText(aFileName); + LEFileName->setReadOnly(true); + PushFichier->setVisible(0); + + int ConfType=aCase->GetConfType(); + if(ConfType==1) + { + GBTypeNoConf->setVisible(0); + RBConforme->setChecked(true); + } + else + { + RBNonConforme->setChecked(true); + GBTypeNoConf->setVisible(1); + RB1NpM->setEnabled(false); + RB1NpA->setEnabled(false); + RBQuelconque->setEnabled(false); + }; + + if (_ConfType==2) { RB1NpM->setChecked(true);}; + if (_ConfType==3) { RB1NpA->setChecked(true);}; + if (_ConfType==4) { RBQuelconque->setChecked(true);}; + + RBNonConforme->setEnabled(false); + RBConforme->setEnabled(false); // Non affichage du mode de suivi de frontiere - CBBoundaryA->setVisible(0); - GBBoundaryA->setVisible(0); - CBBoundaryD->setVisible(0); - GBBoundaryD->setVisible(0); + CBBoundaryA->setVisible(0); + GBBoundaryA->setVisible(0); + CBBoundaryD->setVisible(0); + GBBoundaryD->setVisible(0); // On passe en revue tous les couples (frontiere,groupe) du cas - HOMARD::ListBoundaryGroupType_var mesBoundarys = aCase->GetBoundaryGroup(); - if (mesBoundarys->length()>0) - { - QStringList ListeFron ; - QString NomFron ; - bool BounDi = false ; - bool BounAn = false ; - for (int i=0; ilength(); i++) - { + HOMARD::ListBoundaryGroupType_var mesBoundarys = aCase->GetBoundaryGroup(); + if (mesBoundarys->length()>0) + { + QStringList ListeFron ; + QString NomFron ; + bool BounDi = false ; + bool BounAn = false ; + for (int i=0; ilength(); i++) + { // Nom de la frontiere - NomFron = mesBoundarys[i++]; - MESSAGE("NomFron "<GetBoundary(NomFron.toStdString().c_str()); - int type_obj = myBoundary->GetBoundaryType() ; - + HOMARD::HOMARD_Boundary_var myBoundary = _myHomardGen->GetBoundary(NomFron.toStdString().c_str()); + int type_obj = myBoundary->GetBoundaryType() ; // C'est une frontiere discrete // Rermarque : on ne gere pas les groupes - if ( type_obj==0 ) - { - BounDi = true ; - CBBoundaryDi->addItem(NomFron); - } - + if ( type_obj==0 ) + { + BounDi = true ; + CBBoundaryDi->addItem(NomFron); + } // C'est une frontiere analytique - else - { - BounAn = true ; - int nbcol = TWBoundary->columnCount(); + else + { + BounAn = true ; + int nbcol = TWBoundary->columnCount(); // On ajoute une ligne pour le groupe - TWBoundary->insertRow(0); + TWBoundary->insertRow(0); // La colonne 0 comporte le nom du groupe - TWBoundary->setItem( 0, 0, new QTableWidgetItem(QString(mesBoundarys[i]).trimmed())); + 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 ); - } + for ( int j = 1; j < nbcol; j++ ) + { + TWBoundary->setItem( 0, j, new QTableWidgetItem( QString ("") ) ); + TWBoundary->item( 0, j )->setFlags( 0 ); + TWBoundary->item( 0, j )->setFlags( Qt::ItemIsUserCheckable ); + TWBoundary->item( 0, j )->setCheckState( Qt::Unchecked ); + } // On cherche si la frontiere en cours d'examen a deja ete rencontree : // si oui, on stocke son numero de colonne - int ok = -1 ; - for ( int nufr = 0 ; nufritem( 0, ok )->setCheckState( Qt::Checked ); - } - } - MESSAGE("BounDi "<setVisible(1); -// 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 ( ok < 0 ) + { + ListeFron.append(NomFron); + ok = ListeFron.size() ; + addBoundaryAn(NomFron); } - if ( BounDi ) - { GBBoundaryD->setVisible(1); - CBBoundaryDi->setDisabled(true); - PBBoundaryDiNew->setVisible(0);} +// on coche la case correspondant au couple (frontiere,groupe) en cours d'examen + TWBoundary->item( 0, ok )->setCheckState( Qt::Checked ); } + } + MESSAGE("BounDi "<setVisible(1); +// On rend les cases non modifiables. +// On ne peut pas le faire pour tout 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 les boutons inutiles + PBBoundaryAnNew->setVisible(0); + PBBoundaryAnHelp->setVisible(0); + } + if ( BounDi ) + { GBBoundaryD->setVisible(1); + CBBoundaryDi->setDisabled(true); + PBBoundaryDiNew->setVisible(0); + PBBoundaryDiHelp->setVisible(0); } + } +// Les options avancees (non modifiables) + CBAdvanced->setVisible(0) ; + int NivMax = aCase->GetNivMax(); + double DiamMin = aCase->GetDiamMin(); + if ( NivMax > 0 ) + { GBAdvancedOptions->setVisible(1); + spinBoxNivMax->setValue(NivMax); + spinBoxNivMax->setDisabled(true); + doubleSpinBoxDiamMin->setValue(DiamMin); + doubleSpinBoxDiamMin->setDisabled(true); + } + else + { GBAdvancedOptions->setVisible(0); } +// + adjustSize(); } // ------------------------------------- diff --git a/src/HOMARDGUI/MonEditHypothesis.cxx b/src/HOMARDGUI/MonEditHypothesis.cxx index e9521e97..bc2f9651 100644 --- a/src/HOMARDGUI/MonEditHypothesis.cxx +++ b/src/HOMARDGUI/MonEditHypothesis.cxx @@ -22,8 +22,6 @@ using namespace std; #include "MonEditHypothesis.h" #include "MonEditListGroup.h" -#include - #include "SalomeApp_Tools.h" #include "HOMARDGUI_Utils.h" #include "HomardQtCommun.h" @@ -201,6 +199,7 @@ void MonEditHypothesis::InitAdaptChamps() _ThreshR = aInfosHypo->ThreshR; _TypeThC = aInfosHypo->TypeThC; _ThreshC = aInfosHypo->ThreshC; + _UsField = aInfosHypo->UsField; _UsCmpI = aInfosHypo->UsCmpI; @@ -269,6 +268,12 @@ void MonEditHypothesis::InitAdaptChamps() { RBL2->setText(QObject::tr("HOM_HYPO_NORM_L2")); RBInf->setText(QObject::tr("HOM_HYPO_NORM_INF")); } + if ( _UsField == 0 ) { CBJump->hide(); } + else + { + CBJump->setChecked(true); + CBJump->setEnabled(false); + } if ( _UsCmpI == 0 ) { RBL2->setChecked(true); diff --git a/src/HOMARDGUI/MonEditIteration.cxx b/src/HOMARDGUI/MonEditIteration.cxx index 84786da9..bfa5e034 100644 --- a/src/HOMARDGUI/MonEditIteration.cxx +++ b/src/HOMARDGUI/MonEditIteration.cxx @@ -21,8 +21,6 @@ using namespace std; #include "MonEditIteration.h" -#include - #include "SalomeApp_Tools.h" #include "HOMARDGUI_Utils.h" #include "HomardQtCommun.h" diff --git a/src/HOMARDGUI/MonEditZone.cxx b/src/HOMARDGUI/MonEditZone.cxx index 01d3e98d..85b3b3ed 100644 --- a/src/HOMARDGUI/MonEditZone.cxx +++ b/src/HOMARDGUI/MonEditZone.cxx @@ -24,6 +24,11 @@ using namespace std; #include "SalomeApp_Tools.h" #include "HOMARDGUI_Utils.h" #include +#include +#include +#include +#include +#include // ------------------------------------------------------------------------ @@ -52,71 +57,146 @@ MonEditZone::~MonEditZone() void MonEditZone::InitValEdit() // ------------------------------------------------------------------------ { - LEZoneName->setText(_aZoneName); - LEZoneName->setReadOnly(true); - _ZoneType = aZone->GetZoneType(); - InitValZoneLimit(); - if (_aCaseName != QString("")) InitValZone(); - switch (_ZoneType) + MESSAGE("InitValEdit "); + LEZoneName->setText(_aZoneName); + LEZoneName->setReadOnly(true); + _ZoneType = aZone->GetZoneType(); + MESSAGE("InitValEdit _ZoneType ="<<_ZoneType); + InitValZoneLimit(); + if (_aCaseName != QString("")) InitValZone(); + switch (_ZoneType) + { + case 11 : // il s agit d un rectangle + { } + case 12 : // il s agit d un rectangle + { } + case 13 : // il s agit d un rectangle + { } + case 2 : // il s agit d une boite { - case 2 : // il s agit d une boite - { - InitValZoneBox(); - SetBox(); - break; - } - case 4 : // il s agit d une sphere - { - InitValZoneSphere(); - SetSphere(); - break; - } - }; + InitValZoneBox(); + SetBox(); + break; + } + case 4 : // il s agit d une sphere + { + InitValZoneSphere(); + SetSphere(); + break; + } + case 31 : // il s agit d un cercle issu d'un cylindre + { } + case 32 : // il s agit d un cercle issu d'un cylindre + { } + case 33 : // il s agit d un cercle issu d'un cylindre + { } + case 5 : // il s agit d un cylindre + { + InitValZoneCylinder(); + SetCylinder(); + break; + } + case 61 : // il s agit d un disque avec trou issu d'un tuyau + { } + case 62 : // il s agit d un disque avec trou issu d'un tuyau + { } + case 63 : // il s agit d un disque avec trou issu d'un tuyau + { } + case 7 : // il s agit d un tuyau + { + InitValZonePipe(); + SetPipe(); + break; + } + }; } // ------------------------------------------------------------------------ void MonEditZone::InitValZoneLimit() // ------------------------------------------------------------------------ { - HOMARD::double_array_var mesCoordLimits = aZone->GetLimit(); - ASSERT(mesCoordLimits->length() == 3 ); - _Xincr=mesCoordLimits[0]; - _Yincr=mesCoordLimits[1]; - _Zincr=mesCoordLimits[2]; - + HOMARD::double_array_var mesCoordLimits = aZone->GetLimit(); + ASSERT(mesCoordLimits->length() == 3 ); + _Xincr=mesCoordLimits[0]; + _Yincr=mesCoordLimits[1]; + _Zincr=mesCoordLimits[2]; } // ------------------------------------------------------------------------ void MonEditZone::InitValZoneBox() // ------------------------------------------------------------------------ { - HOMARD::double_array_var mesCoordZones = aZone->GetBox(); - ASSERT(mesCoordZones->length() == 6 ); - _ZoneXmin=mesCoordZones[0]; _ZoneXmax=mesCoordZones[1]; - _ZoneYmin=mesCoordZones[2]; _ZoneYmax=mesCoordZones[3]; - _ZoneZmin=mesCoordZones[4]; _ZoneZmax=mesCoordZones[5]; - + HOMARD::double_array_var mesCoordZones = aZone->GetCoords(); + ASSERT(mesCoordZones->length() == 6 ); + _ZoneXmin=mesCoordZones[0]; + _ZoneXmax=mesCoordZones[1]; + _ZoneYmin=mesCoordZones[2]; + _ZoneYmax=mesCoordZones[3]; + _ZoneZmin=mesCoordZones[4]; + _ZoneZmax=mesCoordZones[5]; } // ------------------------------------------------------------------------ void MonEditZone::InitValZoneSphere() // ------------------------------------------------------------------------ { - HOMARD::double_array_var mesCoordZones = aZone->GetSphere(); - ASSERT(mesCoordZones->length() == 4 ); - _ZoneXcentre=mesCoordZones[0]; - _ZoneYcentre=mesCoordZones[1]; - _ZoneZcentre=mesCoordZones[2]; - _ZoneRayon=mesCoordZones[3]; + HOMARD::double_array_var mesCoordZones = aZone->GetCoords(); + ASSERT(mesCoordZones->length() == 4 ); + _ZoneXcentre=mesCoordZones[0]; + _ZoneYcentre=mesCoordZones[1]; + _ZoneZcentre=mesCoordZones[2]; + _ZoneRayon=mesCoordZones[3]; } // ------------------------------------------------------------------------ +void MonEditZone::InitValZoneCylinder() +// ------------------------------------------------------------------------ +{ + HOMARD::double_array_var mesCoordZones = aZone->GetCoords(); + ASSERT(mesCoordZones->length() == 8 ); + _ZoneXcentre=mesCoordZones[0]; + _ZoneYcentre=mesCoordZones[1]; + _ZoneZcentre=mesCoordZones[2]; + _ZoneXaxis=mesCoordZones[3]; + _ZoneYaxis=mesCoordZones[4]; + _ZoneZaxis=mesCoordZones[5]; + _ZoneRayon=mesCoordZones[6]; + _ZoneHaut=mesCoordZones[7]; +} +// ------------------------------------------------------------------------ +void MonEditZone::InitValZonePipe() +// ------------------------------------------------------------------------ +{ + HOMARD::double_array_var mesCoordZones = aZone->GetCoords(); + ASSERT(mesCoordZones->length() == 9 ); + _ZoneXcentre=mesCoordZones[0]; + _ZoneYcentre=mesCoordZones[1]; + _ZoneZcentre=mesCoordZones[2]; + _ZoneXaxis=mesCoordZones[3]; + _ZoneYaxis=mesCoordZones[4]; + _ZoneZaxis=mesCoordZones[5]; + _ZoneRayon=mesCoordZones[6]; + _ZoneHaut=mesCoordZones[7]; + _ZoneRayonInt=mesCoordZones[8]; +} +// ------------------------------------------------------------------------ void MonEditZone::SetBox() // ------------------------------------------------------------------------ { + MESSAGE("SetBox "); gBBox->setVisible(1); gBSphere->setVisible(0); + gBCylindre->setVisible(0) ; + gBPipe->setVisible(0) ; RBBox->setChecked(1); adjustSize(); - _ZoneType=2; - RBSphere->setDisabled(true); + RBCylinder->setDisabled(true); + RBPipe->setDisabled(true); + if ( _ZoneType == 2 ) { RBSphere->setDisabled(true); } + else { RBSphere->setVisible(0); + RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8)); + RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8)); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ; + QPixmap pix = resMgr->loadPixmap( "HOMARD", "boxdxy.png" ) ; + QIcon IS=QIcon(pix) ; + RBBox->setIcon(IS) ; } adjustSize(); SpinBox_Xmini->setValue(_ZoneXmin); @@ -139,6 +219,13 @@ void MonEditZone::SetBox() SpinBox_Zmini->setSingleStep(incr); SpinBox_Zmaxi->setSingleStep(incr); + if ( _ZoneType == 12 ) { SpinBox_Xmini->setDisabled(true) ; + SpinBox_Xmaxi->setDisabled(true) ; } + else if ( _ZoneType == 13 ) { SpinBox_Ymini->setDisabled(true) ; + SpinBox_Ymaxi->setDisabled(true) ; } + else if ( _ZoneType == 11 ) { SpinBox_Zmini->setDisabled(true) ; + SpinBox_Zmaxi->setDisabled(true) ; } + } // ------------------------------------------------------------------------ void MonEditZone::SetSphere() @@ -146,10 +233,13 @@ void MonEditZone::SetSphere() { gBBox->setVisible(0); gBSphere->setVisible(1); + gBCylindre->setVisible(0) ; + gBPipe->setVisible(0) ; RBSphere->setChecked(1); RBBox->setDisabled(true); + RBCylinder->setDisabled(true); + RBPipe->setDisabled(true); adjustSize(); - _ZoneType=4 ; SpinBox_Xcentre->setValue(_ZoneXcentre); if ( _Xincr > 0) { SpinBox_Xcentre->setSingleStep(_Xincr); } @@ -166,6 +256,128 @@ void MonEditZone::SetSphere() SpinBox_Rayon->setMinimum(0.); SpinBox_Rayon->setValue(_ZoneRayon); } +// ------------------------------------------------------------------------ +void MonEditZone::SetCylinder() +// ------------------------------------------------------------------------ +{ + MESSAGE("SetCylinder _Xincr ="<<_Xincr<< " _Yincr ="<<_Yincr<< " _Zincr ="<<_Zincr); + gBBox->setVisible(0); + gBSphere->setVisible(0); + gBCylindre->setVisible(1) ; + gBPipe->setVisible(0) ; + RBCylinder->setChecked(1); + RBBox->setDisabled(true); + RBPipe->setDisabled(true); + if ( _ZoneType == 5 ) { RBSphere->setDisabled(true); } + else { RBSphere->setVisible(0); + RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8)); + RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8)); + TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); + TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); + TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ; + QPixmap pix = resMgr->loadPixmap( "HOMARD", "disk.png" ) ; + QIcon IS=QIcon(pix) ; + RBCylinder->setIcon(IS) ; } + adjustSize(); + + SpinBox_Xbase->setValue(_ZoneXcentre); + if ( _Xincr > 0) { SpinBox_Xbase->setSingleStep(_Xincr); } + else { SpinBox_Xbase->setSingleStep(1) ; } + + SpinBox_Ybase->setValue(_ZoneYcentre); + if ( _Yincr > 0) { SpinBox_Ybase->setSingleStep(_Yincr); } + else { SpinBox_Ybase->setSingleStep(1) ; } + + SpinBox_Zbase->setValue(_ZoneZcentre); + if ( _Zincr > 0) { SpinBox_Zbase->setSingleStep(_Zincr); } + else { SpinBox_Zbase->setSingleStep(1) ;} + + SpinBox_Radius->setMinimum(0.); + SpinBox_Radius->setValue(_ZoneRayon); + + if ( _ZoneType == 5 ) + { SpinBox_Xaxis->setValue(_ZoneXaxis) ; + SpinBox_Yaxis->setValue(_ZoneYaxis) ; + SpinBox_Zaxis->setValue(_ZoneZaxis) ; + SpinBox_Haut->setValue(_ZoneHaut) ; + } + else + { SpinBox_Xaxis->setVisible(0) ; + SpinBox_Yaxis->setVisible(0) ; + SpinBox_Zaxis->setVisible(0) ; + SpinBox_Haut->setVisible(0) ; + TLXaxis->setVisible(0) ; + TLYaxis->setVisible(0) ; + TLZaxis->setVisible(0) ; + TLHaut->setVisible(0) ; + if ( _ZoneType == 32 ) { SpinBox_Xbase->setDisabled(true) ; } + else if ( _ZoneType == 33 ) { SpinBox_Ybase->setDisabled(true) ; } + else if ( _ZoneType == 31 ) { SpinBox_Zbase->setDisabled(true) ; } + } +} +// ------------------------------------------------------------------------ +void MonEditZone::SetPipe() +// ------------------------------------------------------------------------ +{ + MESSAGE("SetPipe _Xincr ="<<_Xincr<< " _Yincr ="<<_Yincr<< " _Zincr ="<<_Zincr); + gBBox->setVisible(0); + gBSphere->setVisible(0); + gBCylindre->setVisible(0) ; + gBPipe->setVisible(1) ; + RBPipe->setChecked(1); + RBBox->setDisabled(true); + RBCylinder->setDisabled(true); + if ( _ZoneType == 7 ) { RBSphere->setDisabled(true); } + else { RBSphere->setVisible(0); + RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8)); + RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8)); + TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8)); + TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8)); + TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ; + QPixmap pix = resMgr->loadPixmap( "HOMARD", "diskwithhole.png" ) ; + QIcon IS=QIcon(pix) ; + RBPipe->setIcon(IS) ; } + adjustSize(); + + SpinBox_Xbase_p->setValue(_ZoneXcentre); + if ( _Xincr > 0) { SpinBox_Xbase_p->setSingleStep(_Xincr); } + else { SpinBox_Xbase_p->setSingleStep(1) ; } + + SpinBox_Ybase_p->setValue(_ZoneYcentre); + if ( _Yincr > 0) { SpinBox_Ybase_p->setSingleStep(_Yincr); } + else { SpinBox_Ybase_p->setSingleStep(1) ; } + + SpinBox_Zbase_p->setValue(_ZoneZcentre); + if ( _Zincr > 0) { SpinBox_Zbase_p->setSingleStep(_Zincr); } + else { SpinBox_Zbase_p->setSingleStep(1) ;} + + SpinBox_Radius_int->setMinimum(0.); + SpinBox_Radius_int->setValue(_ZoneRayonInt); + SpinBox_Radius_ext->setMinimum(0.); + SpinBox_Radius_ext->setValue(_ZoneRayon); + + if ( _ZoneType == 7 ) + { SpinBox_Xaxis_p->setValue(_ZoneXaxis) ; + SpinBox_Yaxis_p->setValue(_ZoneYaxis) ; + SpinBox_Zaxis_p->setValue(_ZoneZaxis) ; + SpinBox_Haut_p->setValue(_ZoneHaut) ; + } + else + { SpinBox_Xaxis_p->setVisible(0) ; + SpinBox_Yaxis_p->setVisible(0) ; + SpinBox_Zaxis_p->setVisible(0) ; + SpinBox_Haut_p->setVisible(0) ; + TLXaxis_p->setVisible(0) ; + TLYaxis_p->setVisible(0) ; + TLZaxis_p->setVisible(0) ; + TLHaut_p->setVisible(0) ; + if ( _ZoneType == 62 ) { SpinBox_Xbase_p->setDisabled(true) ; } + else if ( _ZoneType == 63 ) { SpinBox_Ybase_p->setDisabled(true) ; } + else if ( _ZoneType == 61 ) { SpinBox_Zbase_p->setDisabled(true) ; } + } +} // --------------------------------------------------- @@ -173,13 +385,46 @@ bool MonEditZone::CreateOrUpdateZone() //---------------------------------------------------- // Pas de Creation de la zone // Mise a jour des attributs de la Zone - { try { - aZone->SetZoneType(_ZoneType); - aZone->SetBox(_ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax); - aZone->SetSphere(_ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon); + switch (_ZoneType) + { + case 11 : // il s agit d un rectangle + { } + case 12 : // il s agit d un rectangle + { } + case 13 : // il s agit d un rectangle + { } + case 2 : // il s agit d un parallelepipede + { aZone->SetBox( _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax ); + break; + } + case 4 : // il s agit d une sphere + { aZone->SetSphere( _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon ); + break; + } + case 31 : // il s agit d un disque issu d'un cylindre + { } + case 32 : // il s agit d un disque issu d'un cylindre + { } + case 33 : // il s agit d un disque issu d'un cylindre + { } + case 5 : // il s agit d un cylindre + { aZone->SetCylinder( _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut ); + break; + } + case 61 : // il s agit d un disque issu d'un cylindre + { } + case 62 : // il s agit d un disque issu d'un cylindre + { } + case 63 : // il s agit d un disque issu d'un cylindre + { } + case 7 : // il s agit d un tuyau + { aZone->SetPipe( _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt ); + break; + } + } if (Chgt) _myHomardGen->InvalideZone(_aZoneName.toStdString().c_str()); HOMARD_UTILS::updateObjBrowser(); } diff --git a/src/HOMARDGUI/MonEditZone.h b/src/HOMARDGUI/MonEditZone.h index 9c0d138c..85be8106 100644 --- a/src/HOMARDGUI/MonEditZone.h +++ b/src/HOMARDGUI/MonEditZone.h @@ -40,11 +40,15 @@ public: protected : void SetBox(); void SetSphere(); + void SetCylinder(); + void SetPipe(); bool CreateOrUpdateZone(); void InitValEdit(); void InitValZoneLimit(); void InitValZoneBox(); void InitValZoneSphere(); + void InitValZoneCylinder(); + void InitValZonePipe(); public slots: diff --git a/src/HOMARD_I/HOMARD_Boundary_i.cxx b/src/HOMARD_I/HOMARD_Boundary_i.cxx index 764e3fba..6cb55875 100644 --- a/src/HOMARD_I/HOMARD_Boundary_i.cxx +++ b/src/HOMARD_I/HOMARD_Boundary_i.cxx @@ -133,21 +133,6 @@ void HOMARD_Boundary_i::SetCylinder( double X0, double X1, double X2, double X3, ASSERT( myHomardBoundary ); myHomardBoundary->SetCylinder( X0, X1, X2, X3, X4, X5, X6 ); } - -//============================================================================= -HOMARD::double_array* HOMARD_Boundary_i::GetCylinder() -{ - ASSERT( myHomardBoundary ); - HOMARD::double_array_var aResult = new HOMARD::double_array(); - std::vector mesCoor = myHomardBoundary->GetCylinder(); - aResult->length( mesCoor .size() ); - std::vector::const_iterator it; - int i = 0; - for ( it = mesCoor.begin(); it != mesCoor.end(); it++ ) - aResult[i++] = (*it); - return aResult._retn(); -} - //============================================================================= void HOMARD_Boundary_i::SetSphere( double Xcentre, double Ycentre, double ZCentre, double rayon ) { @@ -156,11 +141,11 @@ void HOMARD_Boundary_i::SetSphere( double Xcentre, double Ycentre, double ZCentr } //============================================================================= -HOMARD::double_array* HOMARD_Boundary_i::GetSphere() +HOMARD::double_array* HOMARD_Boundary_i::GetCoords() { ASSERT( myHomardBoundary ); HOMARD::double_array_var aResult = new HOMARD::double_array(); - std::vector mesCoor = myHomardBoundary->GetSphere(); + std::vector mesCoor = myHomardBoundary->GetCoords(); aResult->length( mesCoor .size() ); std::vector::const_iterator it; int i = 0; diff --git a/src/HOMARD_I/HOMARD_Boundary_i.hxx b/src/HOMARD_I/HOMARD_Boundary_i.hxx index 322c7c50..ac436486 100644 --- a/src/HOMARD_I/HOMARD_Boundary_i.hxx +++ b/src/HOMARD_I/HOMARD_Boundary_i.hxx @@ -30,19 +30,19 @@ class HOMARD_Boundary; class HOMARD_Boundary_i: public virtual POA_HOMARD::HOMARD_Boundary, public virtual PortableServer::ServantBase -{ +{ public: HOMARD_Boundary_i( CORBA::ORB_ptr orb, HOMARD::HOMARD_Gen_var gen_i ); HOMARD_Boundary_i(); - + virtual ~HOMARD_Boundary_i(); void SetName( const char* NomBoundary ); char* GetName(); char* GetDumpPython(); - + void SetBoundaryType( CORBA::Long BoundaryType ); - + CORBA::Long GetBoundaryType(); void SetMeshFile( const char* MeshFile ); @@ -50,20 +50,18 @@ public: void SetMeshName( const char* MeshName ); char* GetMeshName(); - - HOMARD::double_array* GetCylinder(); + void SetCylinder( double Xcentre, double Ycentre, double ZCentre, double Xaxe, double Yaxe, double Zaxe, double rayon ); - - HOMARD::double_array* GetSphere(); void SetSphere( double Xcentre, double Ycentre, double ZCentre, double rayon ); - + HOMARD::double_array* GetCoords(); + HOMARD::double_array* GetLimit(); void SetLimit( double Xincr, double Yincr, double Zincr); - - + + std::string Dump() const; bool Restore( const std::string& stream ); @@ -77,7 +75,7 @@ public: private: ::HOMARD_Boundary* myHomardBoundary; - + CORBA::ORB_ptr _orb; HOMARD::HOMARD_Gen_var _gen_i; }; diff --git a/src/HOMARD_I/HOMARD_Cas_i.cxx b/src/HOMARD_I/HOMARD_Cas_i.cxx index a2805240..281318e9 100755 --- a/src/HOMARD_I/HOMARD_Cas_i.cxx +++ b/src/HOMARD_I/HOMARD_Cas_i.cxx @@ -225,6 +225,30 @@ HOMARD::ListBoundaryGroupType* HOMARD_Cas_i::GetBoundaryGroup() } return aResult._retn(); } +//============================================================================= +void HOMARD_Cas_i::SetNivMax( CORBA::Long NivMax ) +{ + ASSERT( myHomardCas ); + myHomardCas->SetNivMax( NivMax ); +} +//============================================================================= +CORBA::Long HOMARD_Cas_i::GetNivMax() +{ + ASSERT( myHomardCas ); + return myHomardCas->GetNivMax(); +} +//============================================================================= +void HOMARD_Cas_i::SetDiamMin( CORBA::Double DiamMin ) +{ + ASSERT( myHomardCas ); + myHomardCas->SetDiamMin( DiamMin ); +} +//============================================================================= +CORBA::Double HOMARD_Cas_i::GetDiamMin() +{ + ASSERT( myHomardCas ); + return myHomardCas->GetDiamMin(); +} //============================================================================= std::string HOMARD_Cas_i::Dump() const diff --git a/src/HOMARD_I/HOMARD_Cas_i.hxx b/src/HOMARD_I/HOMARD_Cas_i.hxx index 2830ca1f..110690ef 100644 --- a/src/HOMARD_I/HOMARD_Cas_i.hxx +++ b/src/HOMARD_I/HOMARD_Cas_i.hxx @@ -46,6 +46,12 @@ public: void SetConfType( CORBA::Long ConfType ); CORBA::Long GetConfType(); + void SetNivMax( CORBA::Long NivMax ); + CORBA::Long GetNivMax(); + + void SetDiamMin( CORBA::Double DiamMin ); + CORBA::Double GetDiamMin(); + void AddIteration( const char* NomIteration ); char* GetIter0Name(); diff --git a/src/HOMARD_I/HOMARD_Gen_i.cxx b/src/HOMARD_I/HOMARD_Gen_i.cxx index a149d958..a5f00f7e 100755 --- a/src/HOMARD_I/HOMARD_Gen_i.cxx +++ b/src/HOMARD_I/HOMARD_Gen_i.cxx @@ -52,7 +52,7 @@ using namespace std; //======================================================================= //function : RemoveTabulation -//purpose : +//purpose : //======================================================================= std::string RemoveTabulation( std::string theScript ) { @@ -67,7 +67,7 @@ std::string RemoveTabulation( std::string theScript ) } return theScript; } - + //============================================================================= /*! * standard constructor @@ -106,7 +106,7 @@ HOMARD_Gen_i::~HOMARD_Gen_i() void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy) { ASSERT(!CORBA::is_nil(theStudy)); - MESSAGE("addInStudy: current study ID = " << GetCurrentStudyID()); + MESSAGE("addInStudy: ajout eventuel du composant HOMARD dans current study ID = " << GetCurrentStudyID()) ; SALOMEDS::StudyBuilder_var myBuilder = theStudy->NewBuilder(); // Create SComponent labelled 'homard' if it doesn't already exit @@ -173,14 +173,7 @@ int HOMARD_Gen_i::GetCurrentStudyID() void HOMARD_Gen_i::AssociateCaseIter(const char* nomCas, const char* nomIter, const char* labelIter) { MESSAGE( "AssociateCaseIter " << nomCas << " ," << nomIter << "," << labelIter ); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return ; - }; + IsValidStudy () ; HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas]; if (CORBA::is_nil(myCase)) @@ -252,12 +245,14 @@ void HOMARD_Gen_i::SetEtatIter(const char* nomIter, const bool EtatCalcul) }; int number = myIteration->GetNumber() ; + const char* icone ; if ( number == 0 ) - PublishInStudyAttr(aStudyBuilder, aIterSO, NULL , NULL, "iter0.png", NULL) ; + icone = "iter0.png" ; else if (EtatCalcul) - PublishInStudyAttr(aStudyBuilder, aIterSO, NULL, NULL, "iter_calculee.png", NULL) ; + icone = "iter_calculee.png" ; else - PublishInStudyAttr(aStudyBuilder, aIterSO, NULL, NULL, "iter_non_calculee.png", NULL) ; + icone = "iter_non_calculee.png" ; + PublishInStudyAttr(aStudyBuilder, aIterSO, NULL , NULL, icone, NULL) ; aStudyBuilder->CommitCommand(); @@ -404,15 +399,7 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter) void HOMARD_Gen_i::AssociateHypoZone(const char* ZoneName, const char* nomHypothesis) { MESSAGE ( " AssociateHypoZone, ZoneName= " << ZoneName << ", nomHypo = " << nomHypothesis); - - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return ; - }; + IsValidStudy () ; HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis]; ASSERT(!CORBA::is_nil(myHypo)); @@ -432,21 +419,14 @@ void HOMARD_Gen_i::AssociateHypoZone(const char* ZoneName, const char* nomHypoth myZone->AddHypo(nomHypothesis); myHypo->AddZone(ZoneName); + MESSAGE ( "Fin de AssociateHypoZone"); }; //===================================================================================== void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypothesis) { MESSAGE ( " DissociateHypoZone, ZoneName= " << ZoneName << ", nomHypo = " << nomHypothesis); - - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return ; - }; + IsValidStudy () ; HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis]; ASSERT(!CORBA::is_nil(myHypo)); @@ -486,14 +466,7 @@ void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypot void HOMARD_Gen_i::AssociateIterIter(const char* nomIterParent, const char* nomIter) { MESSAGE ( "AssociateIterIter, nomIter = " << nomIter << " nomIterParent = " << nomIterParent); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return ; - }; + IsValidStudy () ; HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterParent]; ASSERT(!CORBA::is_nil(myIterationParent)); @@ -508,15 +481,7 @@ void HOMARD_Gen_i::AssociateIterIter(const char* nomIterParent, const char* nomI void HOMARD_Gen_i::AssociateIterHypo(const char* nomIter, const char* nomHypo) { MESSAGE("AssociateIterHypo, nomHypo = " << nomHypo << " nomIter = " << nomIter); - - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return ; - }; + IsValidStudy () ; HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo]; ASSERT(!CORBA::is_nil(myHypo)); @@ -554,17 +519,10 @@ CORBA::Boolean HOMARD_Gen_i::VerifieDir(const char* nomDir) } //============================================================================= -HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* MeshName, const char* FileName) +HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* MeshName, const char* MeshFile) { MESSAGE ( "CreateCase, nomCas = " << nomCas << "MeshName = " << MeshName ); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; if ((myContextMap[GetCurrentStudyID()]._mesCas).find(nomCas)!=(myContextMap[GetCurrentStudyID()]._mesCas).end()) { @@ -582,7 +540,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* myContextMap[GetCurrentStudyID()]._mesCas[nomCas] = myCase; - std::vector LesExtremes =GetBoundingBoxInMedFile(FileName); + std::vector LesExtremes =GetBoundingBoxInMedFile(MeshFile); HOMARD::extrema_var aSeq = new HOMARD::extrema(); if (LesExtremes.size()!=10) { return false; } aSeq->length(10); @@ -590,7 +548,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* aSeq[i]=LesExtremes[i]; myCase->SetBoundingBox(aSeq); - std::set LesGroupes =GetListeGroupesInMedFile(FileName); + std::set LesGroupes =GetListeGroupesInMedFile(MeshFile); HOMARD::ListGroupType_var aSeqGroupe = new HOMARD::ListGroupType; aSeqGroupe->length(LesGroupes.size()); std::set::const_iterator it; @@ -618,14 +576,14 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* anIter->SetDirName(DirName.str().c_str()); anIter->SetName(nomIter.c_str()); - anIter->SetMeshFile(FileName); + anIter->SetMeshFile(MeshFile); anIter->SetMeshName(MeshName); anIter->SetNumber(0); AssociateCaseIter (nomCas,nomIter.c_str(),"IterationHomard"); SetEtatIter(nomIter.c_str(),true); // - PublishResultInSmesh(FileName, 0); + PublishResultInSmesh(MeshFile, 0); return HOMARD::HOMARD_Cas::_duplicate(myCase); } @@ -633,14 +591,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* //============================================================================= HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCas(const char* nomCas) { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas]; if (CORBA::is_nil(myCase)) { @@ -656,14 +607,7 @@ HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCas(const char* nomCas) //============================================================================= HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::GetZone(const char* ZoneName) { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName]; ASSERT(!CORBA::is_nil(myZone)); return HOMARD::HOMARD_Zone::_duplicate(myZone); @@ -672,15 +616,7 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::GetZone(const char* ZoneName) //============================================================================= HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::GetHypothesis(const char* nomHypothesis) { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; - + IsValidStudy () ; HOMARD::HOMARD_Hypothesis_var myHypothesis = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis]; ASSERT(!CORBA::is_nil(myHypothesis)); return HOMARD::HOMARD_Hypothesis::_duplicate(myHypothesis); @@ -689,14 +625,7 @@ HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::GetHypothesis(const char* nomHypothe //============================================================================= HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::GetIteration(const char* nomIteration) { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration]; ASSERT(!CORBA::is_nil(myIteration)); return HOMARD::HOMARD_Iteration::_duplicate(myIteration); @@ -704,14 +633,7 @@ HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::GetIteration(const char* nomIteratio //============================================================================= HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary) { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[nomBoundary]; ASSERT(!CORBA::is_nil(myBoundary)); @@ -722,14 +644,7 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary) HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::CreateHypothesis(const char* nomHypothesis) { MESSAGE ( "CreateHypothesis, nomHypothesis = " << nomHypothesis ); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; if ((myContextMap[GetCurrentStudyID()]._mesHypotheses).find(nomHypothesis) != (myContextMap[GetCurrentStudyID()]._mesHypotheses).end()) { @@ -754,14 +669,7 @@ HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::CreateIteration(const char* nomIterat //============================================================================================================ { MESSAGE ("CreateIteration, nomIteration = " << nomIteration << "nomIterParent = " << nomIterParent); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterParent]; if (CORBA::is_nil(myIterationParent)) @@ -825,10 +733,10 @@ HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::CreateIteration(const char* nomIterat // cas le plus frequent. // Si on a plusieurs branches, donc des iterations a meme niveau d'adaptation, utiliser // le nombre d'iterations du cas permet d'eviter les collisions. - std::stringstream FileName; + std::stringstream MeshFile; const char* nomDir = myCase->GetDirName(); - FileName << nomDir << "/maill." << iaux.str() << ".med"; - myIteration->SetMeshFile(FileName.str().c_str()); + MeshFile << nomDir << "/maill." << iaux.str() << ".med"; + myIteration->SetMeshFile(MeshFile.str().c_str()); // Association avec le cas et l'iteration precedente std::string label = "IterationHomard_" + std::string(nomIterParent); @@ -842,15 +750,8 @@ HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::CreateIteration(const char* nomIterat //============================================================================= HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryName, CORBA::Long BoundaryType) { - MESSAGE ("BoundaryName = " << BoundaryName << ", BoundaryType = " << BoundaryType); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE ("CreateBoundary, BoundaryName = " << BoundaryName << ", BoundaryType = " << BoundaryType); + IsValidStudy () ; if ((myContextMap[GetCurrentStudyID()]._mesBoundarys).find(BoundaryName)!=(myContextMap[GetCurrentStudyID()]._mesBoundarys).end()) { @@ -870,24 +771,48 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryNam SALOMEDS::SObject_var aSO; SALOMEDS::SObject_var aResultSO=PublishInStudy(myCurrentStudy, aSO, myBoundary, BoundaryName); -// Limites par defaut pour initialiser en cas de lancement par python + return HOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryDi(const char* BoundaryName, const char* MeshName, const char* MeshFile) +{ + MESSAGE ("CreateBoundaryDi, BoundaryName = " << BoundaryName << "MeshName = " << MeshName ); + HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 0); + myBoundary->SetMeshFile( MeshFile ) ; + myBoundary->SetMeshName( MeshName ) ; return HOMARD::HOMARD_Boundary::_duplicate(myBoundary); } +//============================================================================= +HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCylinder(const char* BoundaryName, + double Xcentre, double Ycentre, double Zcentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon) +{ + MESSAGE ("CreateBoundaryCylinder, BoundaryName = " << BoundaryName ) ; + HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 1) ; + myBoundary->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxis, Yaxis, Zaxis, Rayon ) ; + + return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ; +} +//============================================================================= +HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundarySphere(const char* BoundaryName, + double Xcentre, double Ycentre, double Zcentre, + double Rayon) +{ + MESSAGE ("CreateBoundarySphere, BoundaryName = " << BoundaryName ) ; + HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 2) ; + myBoundary->SetSphere( Xcentre, Ycentre, Zcentre, Rayon ) ; + + return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ; +} //============================================================================= HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZone(const char* ZoneName, CORBA::Long ZoneType) { - MESSAGE ("ZoneName = " << ZoneName << ", ZoneType = " << ZoneType); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE ("CreateZone, ZoneName = " << ZoneName << ", ZoneType = " << ZoneType); + IsValidStudy () ; if ((myContextMap[GetCurrentStudyID()]._mesZones).find(ZoneName)!=(myContextMap[GetCurrentStudyID()]._mesZones).end()) { @@ -909,19 +834,161 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZone(const char* ZoneName, CORBA::Lo return HOMARD::HOMARD_Zone::_duplicate(myZone); } +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox(const char* ZoneName, + double Xmini, double Xmaxi, + double Ymini, double Ymaxi, + double Zmini, double Zmaxi) +{ + MESSAGE ("CreateZoneBox, ZoneName = " << ZoneName ) ; + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 2) ; + myZone->SetBox ( Xmini, Xmaxi, Ymini, Ymaxi, Zmini, Zmaxi) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneSphere(const char* ZoneName, + double Xcentre, double Ycentre, double Zcentre, double Rayon) +{ + MESSAGE ("CreateZoneSphere, ZoneName = " << ZoneName ) ; + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 4) ; + myZone->SetSphere( Xcentre, Ycentre, Zcentre, Rayon ) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneCylinder(const char* ZoneName, + double Xcentre, double Ycentre, double Zcentre, + double Xaxe, double Yaxe, double Zaxe, + double Rayon, double Haut) +{ + MESSAGE ("CreateZoneCylinder, ZoneName = " << ZoneName ) ; + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 5) ; + myZone->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon, Haut ) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZonePipe(const char* ZoneName, + double Xcentre, double Ycentre, double Zcentre, + double Xaxe, double Yaxe, double Zaxe, + double Rayon, double Haut, double Rayonint) +{ + MESSAGE ("CreateZonePipe, ZoneName = " << ZoneName ) ; + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 7) ; + myZone->SetPipe( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon, Haut, Rayonint ) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox2D(const char* ZoneName, + double Umini, double Umaxi, + double Vmini, double Vmaxi, + CORBA::Long Orient) +{ + MESSAGE ("CreateZoneBox2D, ZoneName = " << ZoneName ) ; +// MESSAGE ("Umini = " << Umini << ", Umaxi =" << Umaxi ) ; +// MESSAGE ("Vmini = " << Vmini << ", Vmaxi =" << Vmaxi ) ; +// MESSAGE ("Orient = " << Orient ) ; + + double Xmini, Xmaxi ; + double Ymini, Ymaxi ; + double Zmini, Zmaxi ; + if ( Orient == 1 ) + { Xmini = Umini ; + Xmaxi = Umaxi ; + Ymini = Vmini ; + Ymaxi = Vmaxi ; + Zmini = 0. ; + Zmaxi = 0. ; } + else if ( Orient == 2 ) + { Xmini = 0. ; + Xmaxi = 0. ; + Ymini = Umini ; + Ymaxi = Umaxi ; + Zmini = Vmini ; + Zmaxi = Vmaxi ; } + else if ( Orient == 3 ) + { Xmini = Vmini ; + Xmaxi = Vmaxi ; + Ymini = 0. ; + Ymaxi = 0. ; + Zmini = Umini ; + Zmaxi = Umaxi ; } + else { ASSERT( Orient >= 1 and Orient <= 3 ) ; } + + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 10+Orient) ; + myZone->SetBox ( Xmini, Xmaxi, Ymini, Ymaxi, Zmini, Zmaxi) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDisk(const char* ZoneName, + double Ucentre, double Vcentre, + double Rayon, + CORBA::Long Orient) +{ + MESSAGE ("CreateZoneDisk, ZoneName = " << ZoneName ) ; + double Xcentre ; + double Ycentre ; + double Zcentre ; + if ( Orient == 1 ) + { Xcentre = Ucentre ; + Ycentre = Vcentre ; + Zcentre = 0. ; } + else if ( Orient == 2 ) + { Xcentre = 0. ; + Ycentre = Ucentre ; + Zcentre = Vcentre ; } + else if ( Orient == 3 ) + { Xcentre = Vcentre ; + Ycentre = 0. ; + Zcentre = Ucentre ; } + else { ASSERT( Orient >= 1 and Orient <= 3 ) ; } + + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 30+Orient) ; + myZone->SetCylinder( Xcentre, Ycentre, Zcentre, 0., 0., 1., Rayon, 1. ) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} +//============================================================================= +HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDiskWithHole(const char* ZoneName, + double Ucentre, double Vcentre, + double Rayon, double Rayonint, + CORBA::Long Orient) +{ + MESSAGE ("CreateZoneDiskWithHole, ZoneName = " << ZoneName ) ; + double Xcentre ; + double Ycentre ; + double Zcentre ; + if ( Orient == 1 ) + { Xcentre = Ucentre ; + Ycentre = Vcentre ; + Zcentre = 0. ; } + else if ( Orient == 2 ) + { Xcentre = 0. ; + Ycentre = Ucentre ; + Zcentre = Vcentre ; } + else if ( Orient == 3 ) + { Xcentre = Vcentre ; + Ycentre = 0. ; + Zcentre = Ucentre ; } + else { ASSERT( Orient >= 1 and Orient <= 3 ) ; } + + HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 60+Orient) ; + myZone->SetPipe( Xcentre, Ycentre, Zcentre, 0., 0., 1., Rayon, 1., Rayonint ) ; + + return HOMARD::HOMARD_Zone::_duplicate(myZone) ; +} + + + //============================================================================= CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatMenage) { MESSAGE ( "Compute, calcul de " << nomIteration ); - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + IsValidStudy () ; HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration]; ASSERT(!CORBA::is_nil(myIteration)); @@ -943,7 +1010,6 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM { SALOME::ExceptionStruct es; es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; es.text= "This iteration has no associated hypothese"; throw SALOME::SALOME_Exception(es); return 0; @@ -1163,16 +1229,24 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM int ZoneType = myZone->GetZoneType(); MESSAGE ( "... ZoneType = " << ZoneType); - if (ZoneType == 2) // Cas d un parallelepipede + HOMARD::double_array* zone = myZone->GetCoords(); + if ( ZoneType == 2 or ( ZoneType>=11 and ZoneType <=13 ) ) // Cas d un parallelepipede ou d'un rectangle { - HOMARD::double_array* zone = myZone->GetBox(); - myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5]); + myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], 0., 0., 0.); } - else if (ZoneType == 4) // Cas d une sphere + else if ( ZoneType == 4 ) // Cas d une sphere { - HOMARD::double_array* zone = myZone->GetSphere(); - myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0.); + myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0., 0., 0., 0.); } + else if ( ZoneType == 5 or ( ZoneType>=31 and ZoneType <=33 ) ) // Cas d un cylindre ou d'un disque + { + myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], 0.); + } + else if ( ZoneType == 7 or ( ZoneType>=61 and ZoneType <=63 ) ) // Cas d un tuyau ou disque perce + { + myDriver->TexteZone(NumZone+1, ZoneType, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], (*zone)[8]); + } + else { ASSERT("ZoneType est incorrect." == 0) ; } } } // E.3. Ajout des informations liees aux champs eventuels @@ -1201,11 +1275,14 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM double ThreshR = aInfosHypo->ThreshR; int TypeThC = aInfosHypo->TypeThC; double ThreshC = aInfosHypo->ThreshC; +// Saut entre mailles ou non ? + int UsField = aInfosHypo->UsField; + MESSAGE( ". UsField = " << UsField ); // L'usage des composantes int UsCmpI = aInfosHypo->UsCmpI; MESSAGE( ". UsCmpI = " << UsCmpI ); // - myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsCmpI); + myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsField, UsCmpI); // // Les composantes HOMARD::listeComposantsHypo* mescompo = myHypo->GetListComp(); @@ -1268,19 +1345,20 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM myDriver->TexteBoundaryDi( MeshName, MeshFile); BoundaryOption = BoundaryOption*2 ; } - else if (BoundaryType == 1) // Cas d un cylindre - { - NumBoundaryAnalytical++ ; - HOMARD::double_array* coor = myBoundary->GetCylinder(); - myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6]); - BoundaryOption = BoundaryOption*3 ; - } - else if (BoundaryType == 2) // Cas d une sphere + else // Cas d une frontiere analytique { NumBoundaryAnalytical++ ; - HOMARD::double_array* coor = myBoundary->GetSphere(); - myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0.); - BoundaryOption = BoundaryOption*3 ; + HOMARD::double_array* coor = myBoundary->GetCoords(); + if (BoundaryType == 1) // Cas d un cylindre + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6]); + BoundaryOption = BoundaryOption*3 ; + } + else if (BoundaryType == 2) // Cas d une sphere + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0.); + BoundaryOption = BoundaryOption*3 ; + } } // Memorisation du traitement ListeBoundaryTraitees.push_back( BoundaryName ); @@ -1308,39 +1386,6 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM myDriver->TexteBoundaryAnGr ( BoundaryName, NumBoundaryAnalytical, GroupName ) ; } } -/* for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2) - { - std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]); - MESSAGE ( "... BoundaryName = " << BoundaryName); - HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName]; - ASSERT(!CORBA::is_nil(myBoundary)); - std::string GroupName = std::string((*ListBoundaryGroupType)[NumBoundary+1]); - MESSAGE ( "... GroupName = " << GroupName); - - int BoundaryType = myBoundary->GetBoundaryType(); - MESSAGE ( "... BoundaryType = " << BoundaryType ); - if (BoundaryType == 0) // Cas d une frontiere discrete - { - const char* MeshName = myBoundary->GetMeshName() ; - const char* MeshFile = myBoundary->GetMeshFile() ; - myDriver->TexteBoundaryDi( MeshName, MeshFile, GroupName); - BoundaryOption = BoundaryOption*2 ; - } - else if (BoundaryType == 1) // Cas d un cylindre - { - NumBoundaryAnalytical++ ; - HOMARD::double_array* coor = myBoundary->GetCylinder(); - myDriver->TexteBoundaryAn(NumBoundaryAnalytical, BoundaryType, GroupName, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6]); - BoundaryOption = BoundaryOption*3 ; - } - else if (BoundaryType == 2) // Cas d une sphere - { - NumBoundaryAnalytical++ ; - HOMARD::double_array* coor = myBoundary->GetSphere(); - myDriver->TexteBoundaryAn(NumBoundaryAnalytical, BoundaryType, GroupName, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0.); - BoundaryOption = BoundaryOption*3 ; - } - }*/ myDriver->TexteBoundaryOption(BoundaryOption); // E.6. Ajout des informations liees a l'eventuelle interpolation des champs @@ -1377,6 +1422,15 @@ CORBA::Boolean HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatM } } } + // E.7. Ajout des options avancees + int NivMax = myCase->GetNivMax(); + MESSAGE ( ". NivMax = " << NivMax ); + if ( NivMax > 0 ) + { + double DiamMin = myCase->GetDiamMin(); + MESSAGE ( ". DiamMin = " << DiamMin ); + myDriver->TexteAdvanced(NivMax, DiamMin); + } // F. Ecriture du texte dans le fichier if (codret == 0) @@ -1484,27 +1538,27 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, // Controle de la non publication d'un objet de meme nom if ((!aHypo->_is_nil()) or (!aZone->_is_nil()) or (!aBoundary->_is_nil())) { - SALOMEDS::Study::ListOfSObject_var listSO = theStudy->FindObjectByName(theName, ComponentDataType()); - if (listSO->length() >= 1) - { - MESSAGE("This name "<length()<<" time(s)"); - std::cerr <<"This name "<length()<<" time(s)" << std::endl; - aResultSO = listSO[0]; - return aResultSO._retn(); - } + SALOMEDS::Study::ListOfSObject_var listSO = theStudy->FindObjectByName(theName, ComponentDataType()); + if (listSO->length() >= 1) + { + MESSAGE("This name "<length()<<" time(s)"); + std::cerr <<"This name "<length()<<" time(s)" << std::endl; + aResultSO = listSO[0]; + return aResultSO._retn(); + } } // Caracteristiques de l'etude - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - aStudyBuilder->NewCommand(); - if(!aCase->_is_nil()) - aResultSO = PublishCaseInStudy(theStudy, aStudyBuilder, aCase, theName); - else if(!aHypo->_is_nil()) - aResultSO = PublishHypotheseInStudy(theStudy, aStudyBuilder, aHypo, theName); - else if(!aZone->_is_nil()) - aResultSO = PublishZoneInStudy(theStudy, aStudyBuilder, aZone, theName); - else if(!aBoundary->_is_nil()) - aResultSO = PublishBoundaryInStudy(theStudy, aStudyBuilder, aBoundary, theName); + SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + aStudyBuilder->NewCommand(); + if(!aCase->_is_nil()) + aResultSO = PublishCaseInStudy(theStudy, aStudyBuilder, aCase, theName); + else if(!aHypo->_is_nil()) + aResultSO = PublishHypotheseInStudy(theStudy, aStudyBuilder, aHypo, theName); + else if(!aZone->_is_nil()) + aResultSO = PublishZoneInStudy(theStudy, aStudyBuilder, aZone, theName); + else if(!aBoundary->_is_nil()) + aResultSO = PublishBoundaryInStudy(theStudy, aStudyBuilder, aBoundary, theName); aStudyBuilder->CommitCommand(); return aResultSO._retn(); @@ -1574,24 +1628,59 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theSt SALOMEDS::SObject_var aSOZone; if (!theFatherHomard->FindSubObject(100, aSOZone)) { + MESSAGE("Ajout de la categorie des zones"); aSOZone = aStudyBuilder->NewObjectToTag(theFatherHomard, 100); PublishInStudyAttr(aStudyBuilder, aSOZone, "Zones", "ZoneList", "zone_icone_2.png", NULL ) ; } + else { MESSAGE("La categorie des zones existe deja."); } aResultSO = aStudyBuilder->NewObject(aSOZone); + const char* icone ; switch (ZoneType) { + case 11 : + { } + case 12 : + { } + case 13 : + { icone = "boxdxy_2.png" ; + break ; + } case 2 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", - "boxdxyz_2.png", _orb->object_to_string(theObject) ) ; - break; + { icone = "boxdxyz_2.png" ; + break ; } + case 31 : + { } + case 32 : + { } + case 33 : + { icone = "disk_2.png" ; + break ; + } case 4 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", - "spherepoint_2.png", _orb->object_to_string(theObject) ) ; - break; + { icone = "spherepoint_2.png" ; + break ; + } + case 5 : + { icone = "cylinderpointvector_2.png" ; + break ; + } + case 61 : + { } + case 62 : + { } + case 63 : + { icone = "diskwithhole_2.png" ; + break ; + } + case 7 : + { icone = "pipe_2.png" ; + break ; } } + PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", icone, _orb->object_to_string(theObject) ) ; + return aResultSO._retn(); } //============================================================================= @@ -1618,30 +1707,36 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr t SALOMEDS::SObject_var aSOBoundary; if (!theFatherHomard->FindSubObject(101, aSOBoundary)) { + MESSAGE("Ajout de la categorie des boundarys"); aSOBoundary = aStudyBuilder->NewObjectToTag(theFatherHomard, 101); PublishInStudyAttr(aStudyBuilder, aSOBoundary, "Boundaries", "BoundList", "zone_icone_2.png", NULL ) ; } + else { MESSAGE("La categorie des boundarys existe deja."); } aResultSO = aStudyBuilder->NewObject(aSOBoundary); CORBA::Long BoundaryType = myBoundary->GetBoundaryType(); +// MESSAGE("BoundaryType : "<object_to_string(theObject)); + { value = "BoundaryDiHomard" ; + icone = "mesh_tree_mesh.png" ; break; } case 1 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "cylinderpointvector_2.png", - _orb->object_to_string(theObject)); + { value = "BoundaryAnHomard" ; + icone = "cylinderpointvector_2.png" ; break; } case 2 : - { PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "BoundaryAnHomard", "spherepoint_2.png", - _orb->object_to_string(theObject)); + { value = "BoundaryAnHomard" ; + icone = "spherepoint_2.png" ; break; } } + PublishInStudyAttr(aStudyBuilder, aResultSO, theName, value, icone, _orb->object_to_string(theObject)); return aResultSO._retn(); } @@ -1665,9 +1760,11 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr SALOMEDS::SObject_var aSOHypothese; if (!theFatherHomard->FindSubObject(0, aSOHypothese)) { + MESSAGE("Ajout de la categorie des hypotheses"); aSOHypothese = aStudyBuilder->NewObjectToTag(theFatherHomard, 0); PublishInStudyAttr(aStudyBuilder, aSOHypothese, "Hypothesis", "HypoList","hypotheses.png", NULL); } + else { MESSAGE("La categorie des hypotheses existe deja."); } // Creation du resultat dans l'etude aResultSO = aStudyBuilder->NewObject(aSOHypothese); @@ -1717,14 +1814,8 @@ void HOMARD_Gen_i::PublishInStudyAttr(SALOMEDS::StudyBuilder_var aStudyBuilder, //============================================================================= HOMARD::listeCases* HOMARD_Gen_i::GetAllCases() { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE("GetAllCases"); + IsValidStudy () ; HOMARD::listeCases_var ret = new HOMARD::listeCases; ret->length(myContextMap[GetCurrentStudyID()]._mesCas.size()); @@ -1742,14 +1833,8 @@ HOMARD::listeCases* HOMARD_Gen_i::GetAllCases() //============================================================================= HOMARD::listeHypotheses* HOMARD_Gen_i::GetAllHypotheses() { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE("GetAllHypotheses"); + IsValidStudy () ; HOMARD::listeHypotheses_var ret = new HOMARD::listeHypotheses; ret->length(myContextMap[GetCurrentStudyID()]._mesHypotheses.size()); @@ -1767,14 +1852,8 @@ HOMARD::listeHypotheses* HOMARD_Gen_i::GetAllHypotheses() //============================================================================= HOMARD::listeZones* HOMARD_Gen_i::GetAllZones() { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE("GetAllZones"); + IsValidStudy () ; HOMARD::listeZones_var ret = new HOMARD::listeZones; ret->length(myContextMap[GetCurrentStudyID()]._mesZones.size()); @@ -1792,14 +1871,8 @@ HOMARD::listeZones* HOMARD_Gen_i::GetAllZones() //============================================================================= HOMARD::listeIterations* HOMARD_Gen_i::GetAllIterations() { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE("GetAllIterations"); + IsValidStudy () ; HOMARD::listeIterations_var ret = new HOMARD::listeIterations; ret->length(myContextMap[GetCurrentStudyID()]._mesIterations.size()); @@ -1816,14 +1889,8 @@ HOMARD::listeIterations* HOMARD_Gen_i::GetAllIterations() //============================================================================= HOMARD::listeBoundarys* HOMARD_Gen_i::GetAllBoundarys() { - if (CORBA::is_nil(myCurrentStudy)) - { - SALOME::ExceptionStruct es; - es.type = SALOME::BAD_PARAM; - es.text = "Invalid Study Context "; - throw SALOME::SALOME_Exception(es); - return 0; - }; + MESSAGE("GetAllBoundarys"); + IsValidStudy () ; HOMARD::listeBoundarys_var ret = new HOMARD::listeBoundarys; ret->length(myContextMap[GetCurrentStudyID()]._mesBoundarys.size()); @@ -1906,7 +1973,7 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy SMESH::mesh_array* mesMaillages=aSmeshEngine->CreateMeshesFromMED(NomFich, theStatus); for (int i = 0; i < mesMaillages->length(); i++) { - MESSAGE( ". Mise a jour des attributs"); + MESSAGE( ". Mise a jour des attributs du maillage"); SMESH::SMESH_Mesh_var monMaillage= (*mesMaillages)[i]; SALOMEDS::SObject_var aSO=SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(monMaillage))); SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); @@ -1917,10 +1984,10 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy SALOMEDS::AttributePixMap_var anAttr2 = SALOMEDS::AttributePixMap::_narrow(aPixMap); // IconeType = 0 : fichier issu d'une importation // IconeType = 1 : fichier issu d'une execution HOMARD - if ( IconeType == 0 ) - { anAttr2->SetPixMap( "mesh_tree_importedmesh.png" ); } - else - { anAttr2->SetPixMap( "mesh_tree_mesh.png" ); } + const char* icone ; + if ( IconeType == 0 ) { icone = "mesh_tree_importedmesh.png" ; } + else { icone = "mesh_tree_mesh.png" ; } + anAttr2->SetPixMap( icone ); } } @@ -2021,6 +2088,20 @@ void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* No aStudyBuilder->CommitCommand(); } +//===================================================================================== +void HOMARD_Gen_i::IsValidStudy( ) +//===================================================================================== +{ + MESSAGE( "IsValidStudy" ); + if (CORBA::is_nil(myCurrentStudy)) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid Study Context"; + throw SALOME::SALOME_Exception(es); + }; + return ; +} //=========================================================================== // @@ -2030,8 +2111,8 @@ void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* No //=========================================================================== SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile) + const char* theURL, + bool isMultiFile) { MESSAGE (" Save pour theURL = "<< theURL); SALOMEDS::TMPFile_var aStreamFile; @@ -2121,22 +2202,26 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent, } } // -> close file + MESSAGE ("close file"); f.close(); - // put temporary files to the stream + // put temporary files to the stream + MESSAGE ("put temporary files to the stream"); aStreamFile = SALOMEDS_Tool::PutFilesToStream(tmpDir.c_str(), aFileSeq.in(), isMultiFile); // remove temporary files + MESSAGE ("remove temporary files"); if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(tmpDir.c_str(), aFileSeq.in(), true); // return data stream + MESSAGE ("return data stream"); return aStreamFile._retn(); }; //=========================================================================== SALOMEDS::TMPFile* HOMARD_Gen_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile) + const char* theURL, + bool isMultiFile) { // No specific ASCII persistence SALOMEDS::TMPFile_var aStreamFile = Save(theComponent, theURL, isMultiFile); @@ -2195,6 +2280,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, std::string bounSignature = HOMARD::GetSignature(HOMARD::Boundary); if (line.substr(0, caseSignature.size()) == caseSignature) { // re-create case + MESSAGE (" Recreation du cas" ); HOMARD::HOMARD_Cas_var aCase = newCase(); PortableServer::ServantBase_var aServant = GetServant(aCase); HOMARD_Cas_i* aCaseServant = dynamic_cast(aServant.in()); @@ -2204,6 +2290,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, } } else if (line.substr(0, zoneSignature.size()) == zoneSignature) { + MESSAGE (" Recreation de la zone" ); // re-create zone HOMARD::HOMARD_Zone_var aZone = newZone(); PortableServer::ServantBase_var aServant = GetServant(aZone); @@ -2215,6 +2302,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, } else if (line.substr(0, iterSignature.size()) == iterSignature) { // re-create iteration + MESSAGE (" Recreation de l iteration" ); HOMARD::HOMARD_Iteration_var aIter = newIteration(); PortableServer::ServantBase_var aServant = GetServant(aIter); HOMARD_Iteration_i* aIterServant = dynamic_cast(aServant.in()); @@ -2225,6 +2313,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, } else if (line.substr(0, hypoSignature.size()) == hypoSignature) { // re-create hypothesis + MESSAGE (" Recreation de l hypothese" ); HOMARD::HOMARD_Hypothesis_var aHypo = newHypothesis(); PortableServer::ServantBase_var aServant = GetServant(aHypo); HOMARD_Hypothesis_i* aHypoServant = dynamic_cast(aServant.in()); @@ -2235,6 +2324,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent, } else if (line.substr(0, bounSignature.size()) == bounSignature) { // re-create boundary + MESSAGE (" Recreation de la frontiere" ); HOMARD::HOMARD_Boundary_var aBoundary = newBoundary(); PortableServer::ServantBase_var aServant = GetServant(aBoundary); HOMARD_Boundary_i* aBoundaryServant = dynamic_cast(aServant.in()); @@ -2573,14 +2663,14 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy, std::string dumpIter = dumpCorbaIter.in(); aScript+=dumpIter; } - + if( isMultiFile ) aScript += "\n\tpass"; aScript += "\n"; if( !isMultiFile ) // remove unnecessary tabulation aScript = RemoveTabulation( aScript ); - + const size_t aLen = strlen(aScript.c_str()); char* aBuffer = new char[aLen+1]; strcpy(aBuffer, aScript.c_str()); diff --git a/src/HOMARD_I/HOMARD_Gen_i.hxx b/src/HOMARD_I/HOMARD_Gen_i.hxx index 8aafa88c..84647cdc 100644 --- a/src/HOMARD_I/HOMARD_Gen_i.hxx +++ b/src/HOMARD_I/HOMARD_Gen_i.hxx @@ -60,8 +60,45 @@ public: const char* MeshName, const char* FileName); HOMARD::HOMARD_Hypothesis_ptr CreateHypothesis(const char* nomHypothesis); HOMARD::HOMARD_Iteration_ptr CreateIteration (const char* nomIter, const char* nomIterParent); - HOMARD::HOMARD_Zone_ptr CreateZone (const char* nomZone, CORBA::Long typeZone); - HOMARD::HOMARD_Boundary_ptr CreateBoundary (const char* nomBoundary, CORBA::Long typeBoundary); + + HOMARD::HOMARD_Zone_ptr CreateZone (const char* nomZone, CORBA::Long typeZone); + HOMARD::HOMARD_Zone_ptr CreateZoneBox (const char* nomZone, + double Xmini, double Xmaxi, + double Ymini, double Ymaxi, + double Zmini, double Zmaxi); + HOMARD::HOMARD_Zone_ptr CreateZoneSphere (const char* nomZone, + double Xcentre, double Ycentre, double Zcentre, double Rayon); + HOMARD::HOMARD_Zone_ptr CreateZoneCylinder (const char* nomZone, + double Xcentre, double Ycentre, double Zcentre, + double Xaxe, double Yaxe, double Zaxe, + double Rayon, double Haut); + HOMARD::HOMARD_Zone_ptr CreateZonePipe (const char* nomZone, + double Xcentre, double Ycentre, double Zcentre, + double Xaxe, double Yaxe, double Zaxe, + double Rayon, double Haut, double Rayonint); + HOMARD::HOMARD_Zone_ptr CreateZoneBox2D (const char* nomZone, + double Umini, double Umaxi, + double Vmini, double Vmaxi, + CORBA::Long Orient); + HOMARD::HOMARD_Zone_ptr CreateZoneDisk (const char* nomZone, + double Ucentre, double Vcentre, + double Rayon, + CORBA::Long Orient); + HOMARD::HOMARD_Zone_ptr CreateZoneDiskWithHole (const char* nomZone, + double Ucentre, double Vcentre, + double Rayon, double Rayonint, + CORBA::Long Orient); + + HOMARD::HOMARD_Boundary_ptr CreateBoundary (const char* nomBoundary, CORBA::Long typeBoundary); + HOMARD::HOMARD_Boundary_ptr CreateBoundaryDi (const char* nomBoundary, + const char* MeshName, const char* FileName); + HOMARD::HOMARD_Boundary_ptr CreateBoundaryCylinder (const char* nomBoundary, + double Xcentre, double Ycentre, double Zcentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon); + HOMARD::HOMARD_Boundary_ptr CreateBoundarySphere (const char* nomBoundary, + double Xcentre, double Ycentre, double Zcentre, + double Rayon); HOMARD::HOMARD_Cas_ptr GetCas (const char* nomCas); HOMARD::HOMARD_Zone_ptr GetZone (const char* nomZone); @@ -99,6 +136,8 @@ public: void PublishFileUnderIteration(const char* NomIter, const char* NomFich, const char* Commentaire); + void IsValidStudy(); + // --------------------------------------------------------------- // next functions are inherited from SALOMEDS::Driver interface // --------------------------------------------------------------- diff --git a/src/HOMARD_I/HOMARD_Hypothesis_i.cxx b/src/HOMARD_I/HOMARD_Hypothesis_i.cxx index dd4bcfc9..0b743de6 100644 --- a/src/HOMARD_I/HOMARD_Hypothesis_i.cxx +++ b/src/HOMARD_I/HOMARD_Hypothesis_i.cxx @@ -178,6 +178,7 @@ HOMARD::InfosHypo* HOMARD_Hypothesis_i::GetField() aInfosHypo->ThreshR = CORBA::Double( myHomardHypothesis->GetThreshR() ); aInfosHypo->TypeThC = CORBA::Long( myHomardHypothesis->GetUnRefThrType() ); aInfosHypo->ThreshC = CORBA::Double( myHomardHypothesis->GetThreshC() ); + aInfosHypo->UsField = CORBA::Long( myHomardHypothesis->GetUseField() ); aInfosHypo->UsCmpI = CORBA::Long( myHomardHypothesis->GetUseCompI() ); return aInfosHypo; } @@ -263,7 +264,7 @@ void HOMARD_Hypothesis_i::AddComp( const char* NomComposant ) //============================================================================= void HOMARD_Hypothesis_i::SupprComp() { - ASSERT( myHomardHypothesis ); + ASSERT( myHomardHypothesis ); myHomardHypothesis->SupprComp(); } diff --git a/src/HOMARD_I/HOMARD_Hypothesis_i.hxx b/src/HOMARD_I/HOMARD_Hypothesis_i.hxx index 412b2d85..91795574 100644 --- a/src/HOMARD_I/HOMARD_Hypothesis_i.hxx +++ b/src/HOMARD_I/HOMARD_Hypothesis_i.hxx @@ -30,7 +30,7 @@ class HOMARD_Hypothesis; class HOMARD_Hypothesis_i: public virtual POA_HOMARD::HOMARD_Hypothesis, public virtual PortableServer::ServantBase -{ +{ public: HOMARD_Hypothesis_i( CORBA::ORB_ptr orb, HOMARD::HOMARD_Gen_var gen_i ); HOMARD_Hypothesis_i(); diff --git a/src/HOMARD_I/HOMARD_Zone_i.cxx b/src/HOMARD_I/HOMARD_Zone_i.cxx index bca9ccad..0181a65a 100644 --- a/src/HOMARD_I/HOMARD_Zone_i.cxx +++ b/src/HOMARD_I/HOMARD_Zone_i.cxx @@ -106,11 +106,11 @@ void HOMARD_Zone_i::SetBox( double X0, double X1, double X2, double X3, double X } //============================================================================= -HOMARD::double_array* HOMARD_Zone_i::GetBox() +HOMARD::double_array* HOMARD_Zone_i::GetCoords() { ASSERT( myHomardZone ); HOMARD::double_array_var aResult = new HOMARD::double_array(); - std::vector mesCoor = myHomardZone->GetBox(); + std::vector mesCoor = myHomardZone->GetCoords(); aResult->length( mesCoor .size() ); std::vector::const_iterator it; int i = 0; @@ -120,24 +120,27 @@ HOMARD::double_array* HOMARD_Zone_i::GetBox() } //============================================================================= -void HOMARD_Zone_i::SetSphere( double Xcentre, double Ycentre, double ZCentre, double rayon ) +void HOMARD_Zone_i::SetSphere( double Xcentre, double Ycentre, double Zcentre, double Rayon ) { ASSERT( myHomardZone ); - myHomardZone->SetSphere( Xcentre, Ycentre, ZCentre, rayon ); + myHomardZone->SetSphere( Xcentre, Ycentre, Zcentre, Rayon ); } //============================================================================= -HOMARD::double_array* HOMARD_Zone_i::GetSphere() +void HOMARD_Zone_i::SetCylinder( double Xcentre, double Ycentre, double Zcentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon, double Haut ) { ASSERT( myHomardZone ); - HOMARD::double_array_var aResult = new HOMARD::double_array(); - std::vector mesCoor = myHomardZone->GetSphere(); - aResult->length( mesCoor .size() ); - std::vector::const_iterator it; - int i = 0; - for ( it = mesCoor.begin(); it != mesCoor.end(); it++ ) - aResult[i++] = (*it); - return aResult._retn(); + myHomardZone->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxis, Yaxis, Zaxis, Rayon, Haut ); +} +//============================================================================= +void HOMARD_Zone_i::SetPipe( double Xcentre, double Ycentre, double Zcentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon, double Haut, double Rayonint ) +{ + ASSERT( myHomardZone ); + myHomardZone->SetPipe( Xcentre, Ycentre, Zcentre, Xaxis, Yaxis, Zaxis, Rayon, Haut, Rayonint ); } //============================================================================= @@ -165,8 +168,10 @@ HOMARD::double_array* HOMARD_Zone_i::GetLimit() //============================================================================= void HOMARD_Zone_i::AddHypo( const char* NomHypo ) { + MESSAGE ( " AddHypo, NomHypo= " << NomHypo); ASSERT( myHomardZone ); myHomardZone->AddHypo( NomHypo ); + MESSAGE ( " FIn de AddHypo"); } //============================================================================= diff --git a/src/HOMARD_I/HOMARD_Zone_i.hxx b/src/HOMARD_I/HOMARD_Zone_i.hxx index 5175c8b9..2434c633 100644 --- a/src/HOMARD_I/HOMARD_Zone_i.hxx +++ b/src/HOMARD_I/HOMARD_Zone_i.hxx @@ -30,43 +30,49 @@ class HOMARD_Zone; class HOMARD_Zone_i: public virtual POA_HOMARD::HOMARD_Zone, public virtual PortableServer::ServantBase -{ +{ public: HOMARD_Zone_i( CORBA::ORB_ptr orb, HOMARD::HOMARD_Gen_var gen_i ); HOMARD_Zone_i(); - + virtual ~HOMARD_Zone_i(); void SetName( const char* NomZone ); char* GetName(); char* GetDumpPython(); - + void SetZoneType( CORBA::Long ZoneType ); - + CORBA::Long GetZoneType(); - - HOMARD::double_array* GetBox(); - void SetBox( double Xmini, double Xmaxi, - double Ymini, double Ymaxi, - double Zmini, double Zmaxi ); - - HOMARD::double_array* GetSphere(); + + HOMARD::double_array* GetCoords(); + void SetBox( double Xmini, double Xmaxi, + double Ymini, double Ymaxi, + double Zmini, double Zmaxi ); + void SetSphere( double Xcentre, double Ycentre, double ZCentre, - double rayon ); - + double Rayon ); + + void SetCylinder( double Xcentre, double Ycentre, double ZCentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon, double Haut ); + void SetPipe( double Xcentre, double Ycentre, double ZCentre, + double Xaxis, double Yaxis, double Zaxis, + double Rayon, double Haut, double Rayonint ); + HOMARD::double_array* GetLimit(); void SetLimit( double Xincr, double Yincr, double Zincr); - + void AddHypo( const char *NomHypo ); void SupprHypo( const char *NomHypo ); HOMARD::listeHypo* GetHypo(); - + std::string Dump() const; bool Restore( const std::string& stream ); private: ::HOMARD_Zone* myHomardZone; - + CORBA::ORB_ptr _orb; HOMARD::HOMARD_Gen_var _gen_i; }; -- 2.39.2