--- /dev/null
+#@ MODIF macr_aspic_calc_ops Macro DATE 03/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
+ FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,AFFE_MATERIAU,EQUILIBRE,
+ PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS,
+ THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
+ INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE ,**args):
+ """
+ Ecriture de la macro MACR_ASPIC_CALC
+ """
+ from Accas import _F
+ import types
+ ier=0
+#------------------------------------------------------------------
+ # On recopie le mot cle affe_materiau pour le proteger
+ mc_AFFE_MATERIAU=AFFE_MATERIAU
+#------------------------------------------------------------------
+ # On importe les definitions des commandes a utiliser dans la macro
+ AFFE_MODELE =self.get_cmd('AFFE_MODELE' )
+ AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU' )
+ AFFE_CARA_ELEM =self.get_cmd('AFFE_CARA_ELEM' )
+ AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
+ THER_LINEAIRE =self.get_cmd('THER_LINEAIRE' )
+ AFFE_CHAR_MECA =self.get_cmd('AFFE_CHAR_MECA' )
+ STAT_NON_LINE =self.get_cmd('STAT_NON_LINE' )
+ CALC_ELEM =self.get_cmd('CALC_ELEM' )
+ POST_RELEVE_T =self.get_cmd('POST_RELEVE_T' )
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
+ POST_RCCM =self.get_cmd('POST_RCCM' )
+ DEFI_FOND_FISS =self.get_cmd('DEFI_FOND_FISS' )
+ CALC_THETA =self.get_cmd('CALC_THETA' )
+ CALC_G_THETA_T =self.get_cmd('CALC_G_THETA_T' )
+ CALC_G_LOCAL_T =self.get_cmd('CALC_G_LOCAL_T' )
+ IMPR_RESU =self.get_cmd('IMPR_RESU' )
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+#------------------------------------------------------------------
+# data
+ GRMAIL= ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP')
+ NOMNOE= ('P1_CORP','P2_CORP','P_TUBU ')
+ IMPRT1= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
+ 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
+ 'SIXX' ,'SIXY' ,'SIXZ' )
+ IMPRT2= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
+ 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
+ 'SIYY' ,'SIXY' ,'SIYZ' )
+ IMPRT3= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
+ 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
+ 'TEMP' )
+ APPRES= ('PEAUINT ','LEVRTUBU','LEVRCORP')
+#------------------------------------------------------------------
+#
+ if mc_AFFE_MATERIAU.__class__.__name__!='MCList' : mc_AFFE_MATERIAU=[mc_AFFE_MATERIAU,]
+ i=0
+ for mate in mc_AFFE_MATERIAU:
+ if mate['RCCM']=='OUI' :
+ i=i+1
+ MRCCM=mate['MATER']
+ if i>1 :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> vous affectez plus d un materiau contenant l option rccm""")
+ return ier
+#
+ if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> pour les piquages sains, TUBULURE doit etre renseigne""")
+ return ier
+#
+ if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> EQUILIBRE[NOEUD] : on attend 'P1_CORP ' ou 'P2_CORP'""")
+ return ier
+#
+ if PRES_REP['EFFE_FOND']=='OUI' :
+ if PRES_REP['NOEUD']==None :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> il faut preciser un noeud pour EFFE_FOND""")
+ return ier
+ if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> PRES_REP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""")
+ return ier
+ if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> on ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloque""")
+ return ier
+#
+ if TORS_CORP!=None :
+ if TORS_CORP['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> TORS_CORP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""")
+ return ier
+ if TORS_CORP['NOEUD']==EQUILIBRE['NOEUD'] :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> on ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloque""")
+ return ier
+#
+ if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> si TYPE_MAILLAGE SAIN : mecanique de la rupture impossible""")
+ return ier
+#
+ if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') :
+ if BORNES==None :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> mot-clef <BORNES> obligatoire avec cette option""")
+ return ier
+#
+ if IMPRESSION!=None :
+ if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+ if IMPRESSION['NOM_CHAM']==None :
+ ier=ier+1
+ self.cr.fatal("""<E> <MACR_ASPIC_CALC> impression de resultats demandée sans preciser le nom des champs
+ cf. la documentation utilisateur : U4.PC.20.""")
+ return ier
+#
+#------------------------------------------------------------------
+#
+# --- commande AFFE_MODELE ---
+#
+ if MODELE!=None : self.DeclareOut('modele',MODELE)
+ mcfact=[]
+ if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
+ mcfact.append(_F(GROUP_MA=GRMAIL, PHENOMENE='MECANIQUE',MODELISATION='3D' ))
+ else:
+ mcfact.append(_F(GROUP_MA=GRMAIL[:-2],PHENOMENE='MECANIQUE',MODELISATION='3D' ))
+ mcfact.append( _F(GROUP_MA='P1_CORP' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+ mcfact.append( _F(GROUP_MA='P2_CORP' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+ mcfact.append( _F(GROUP_MA='P_TUBU' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+ modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+ AFFE = mcfact )
+ if ECHANGE!=None : # modele thermique
+ __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+ AFFE = _F(GROUP_MA =GRMAIL[:-2],
+ PHENOMENE ='THERMIQUE',
+ MODELISATION='3D' ) )
+#
+# --- commande AFFE_MATERIAU ---
+#
+ if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER)
+ mcfact=[]
+ for mater in mc_AFFE_MATERIAU :
+ if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
+ else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
+ affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+ MODELE = modele ,
+ AFFE = mcfact )
+#
+# --- commande AFFE_CARA_ELEM ---
+#
+ if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
+ carael = AFFE_CARA_ELEM( MODELE = modele ,
+ DISCRET = ( _F( GROUP_MA='P1_CORP' ,
+ CARA ='K_TR_D_N',
+ VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
+ _F( GROUP_MA='P2_CORP' ,
+ CARA ='K_TR_D_N',
+ VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
+ _F( GROUP_MA='P_TUBU' ,
+ CARA ='K_TR_D_N',
+ VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ), ) )
+#
+# --- commande AFFE_CHAR_THER_F ---
+# condition aux limites
+#
+ if ECHANGE!=None :
+ __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
+ ECHANGE=( _F(GROUP_MA='PEAUTUBU',
+ COEF_H =ECHANGE['COEF_H_TUBU'],
+ TEMP_EXT=ECHANGE['TEMP_EXT'],),
+ _F(GROUP_MA='PEAUCORP',
+ COEF_H =ECHANGE['COEF_H_CORP'],
+ TEMP_EXT=ECHANGE['TEMP_EXT'],),))
+#
+# --- calcul thermique ---
+#
+ if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
+ mcsimp={}
+ if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
+ if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+ mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
+ resuth = THER_LINEAIRE( MODELE = __modthe ,
+ CHAM_MATER = affmat ,
+ TEMP_INIT = _F(STATIONNAIRE='OUI',),
+ EXCIT = _F(CHARGE=__chther,),
+ INCREMENT = mcfact, )
+#
+ if CHARGE!=None : self.DeclareOut('chmeth',CHARGE)
+ chmeth = AFFE_CHAR_MECA( MODELE = modele ,
+ TEMP_CALCULEE = resuth )
+#
+# --- commande AFFE_CHAR_MECA ---
+# condition aux limites
+#
+ if EQUILIBRE['NOEUD']=='P1_CORP' :
+ NENCAS = EQUILIBRE['NOEUD']
+ AEFOCO = 'EXCORP2'
+ ATORCO = 'P2_CORP'
+ LINTC = 'L_INT_C2'
+ elif EQUILIBRE['NOEUD']=='P2_CORP' :
+ NENCAS = EQUILIBRE['NOEUD']
+ AEFOCO = 'EXCORP1'
+ ATORCO = 'P1_CORP'
+ LINTC = 'L_INT_C1'
+ __conlim = AFFE_CHAR_MECA( MODELE = modele ,
+ LIAISON_ELEM = ( _F( OPTION ='3D_POU' ,
+ GROUP_MA_1='EXCORP1',
+ GROUP_NO_2='P1_CORP'),
+ _F( OPTION ='3D_POU' ,
+ GROUP_MA_1='EXCORP2' ,
+ GROUP_NO_2='P2_CORP'),
+ _F( OPTION ='3D_POU' ,
+ GROUP_MA_1='EXTUBU',
+ GROUP_NO_2='P_TUBU'), ),
+ DDL_IMPO = _F( GROUP_NO = NENCAS ,
+ DX = 0.0 ,
+ DY = 0.0 ,
+ DZ = 0.0 ,
+ DRX = 0.0 ,
+ DRY = 0.0 ,
+ DRZ = 0.0 , ) )
+#
+# --- commande AFFE_CHAR_MECA ---
+# chargement mecanique : pres_rep, effet de fond
+#
+ motscles={}
+ if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
+ motscles['PRES_REP' ]= _F(GROUP_MA=APPRES, PRES=PRES_REP['PRES'])
+ else :
+ motscles['PRES_REP' ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES'])
+ if PRES_REP['EFFE_FOND' ]!=None :
+ motscles['EFFE_FOND' ]=(_F(GROUP_MA ='EXTUBU ',
+ GROUP_MA_INT='L_INT_TU',
+ PRES =PRES_REP['PRES']),
+ _F(GROUP_MA =AEFOCO,
+ GROUP_MA_INT=LINTC,
+ PRES =PRES_REP['PRES']))
+ __chpres = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
+#
+# --- commande AFFE_CHAR_MECA ---
+# chargement mecanique : torseur sur le corps
+#
+ if TORS_CORP!=None:
+ if TORS_CORP.__class__.__name__!='MCList' : TORS_CORP=[TORS_CORP,]
+ __chtrc = [None]*6
+ i=0
+ for tors in TORS_CORP :
+ mcsimp={}
+ if tors['FX']!=None : mcsimp['FX']=tors['FX']
+ if tors['FY']!=None : mcsimp['FY']=tors['FY']
+ if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
+ if tors['MX']!=None : mcsimp['MX']=tors['MX']
+ if tors['MY']!=None : mcsimp['MY']=tors['MY']
+ if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
+ mcfact=_F(GROUP_NO=ATORCO,**mcsimp)
+ __chtrc[i] = AFFE_CHAR_MECA( MODELE = modele ,
+ FORCE_NODALE = mcfact , )
+ i=i+1
+#
+# --- commande AFFE_CHAR_MECA ---
+# chargement mecanique : torseur sur la tubulure
+#
+ if TORS_TUBU!=None:
+ if TORS_TUBU.__class__.__name__!='MCList' : TORS_TUBU=[TORS_TUBU,]
+ __chtrt = [None]*6
+ i=0
+ for tors in TORS_TUBU :
+ mcsimp={}
+ if tors['FX']!=None : mcsimp['FX']=tors['FX']
+ if tors['FY']!=None : mcsimp['FY']=tors['FY']
+ if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
+ if tors['MX']!=None : mcsimp['MX']=tors['MX']
+ if tors['MY']!=None : mcsimp['MY']=tors['MY']
+ if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
+ mcfact=_F(GROUP_NO='P_TUBU ',**mcsimp)
+ __chtrt[i] = AFFE_CHAR_MECA( MODELE = modele ,
+ FORCE_NODALE = mcfact , )
+ i=i+1
+#
+# --- commande STAT_NON_LINE ---
+#
+ motscles={}
+#
+ mcfex=[] # mot clé facteur EXCIT
+ mcfex.append(_F(CHARGE=__conlim,))
+ if ECHANGE!=None :
+ mcfex.append(_F(CHARGE=chmeth,))
+ if PRES_REP['FONC_MULT']!=None :
+ mcfex.append(_F(CHARGE=__chpres,FONC_MULT=PRES_REP['FONC_MULT']))
+ else :
+ mcfex.append(_F(CHARGE=__chpres,))
+ if TORS_CORP!=None:
+ i=0
+ for tors in TORS_CORP :
+ if tors['FONC_MULT']!=None :
+ mcfex.append(_F(CHARGE=__chtrc[i],FONC_MULT=tors['FONC_MULT']))
+ else :
+ mcfex.append(_F(CHARGE=__chtrc[i],))
+ i=i+1
+ if TORS_TUBU!=None:
+ i=0
+ for tors in TORS_TUBU :
+ if tors['FONC_MULT']!=None :
+ mcfex.append(_F(CHARGE=__chtrt[i],FONC_MULT=tors['FONC_MULT']))
+ else :
+ mcfex.append(_F(CHARGE=__chtrt[i],))
+ i=i+1
+ motscles['EXCIT'] =mcfex
+#
+ mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
+ if COMP_INCR!=None :
+ mcfci.append(_F(TOUT ='OUI' ,RELATION=COMP_INCR['RELATION']))
+ mcfci.append( _F(GROUP_MA=NOMNOE,RELATION='ELAS'))
+ motscles['COMP_INCR'] =mcfci
+#
+ if COMP_ELAS!=None :
+ motscles['COMP_ELAS'] =_F(GROUP_MA=GRMAIL[:-2] ,RELATION=COMP_ELAS['RELATION'])
+#
+ dSolveur=SOLVEUR.cree_dict_valeurs(SOLVEUR.mc_liste)
+ for i in dSolveur.keys():
+ if dSolveur[i]==None : del dSolveur[i]
+#
+ dConverg=CONVERGENCE.cree_dict_valeurs(CONVERGENCE.mc_liste)
+ for i in dConverg.keys():
+ if dConverg[i]==None : del dConverg[i]
+#
+ dNewton=NEWTON.cree_dict_valeurs(NEWTON.mc_liste)
+ for i in dNewton.keys():
+ if dNewton[i]==None : del dNewton[i]
+#
+ dRechlin=RECH_LINEAIRE.cree_dict_valeurs(RECH_LINEAIRE.mc_liste)
+ for i in dRechlin.keys():
+ if dRechlin[i]==None : del dRechlin[i]
+#
+ dIncrem=INCREMENT.cree_dict_valeurs(INCREMENT.mc_liste)
+ for i in dIncrem.keys():
+ if dIncrem[i]==None : del dIncrem[i]
+#
+ if TITRE!=None :
+ motscles['TITRE' ] =TITRE
+ motscles ['SOLVEUR' ] =dSolveur
+ motscles ['CONVERGENCE' ] =dConverg
+ motscles ['NEWTON' ] =dNewton
+ motscles ['RECH_LINEAIRE'] =dRechlin
+ motscles ['INCREMENT' ] =dIncrem
+ self.DeclareOut('nomres',self.sd)
+ nomres = STAT_NON_LINE( MODELE = modele ,
+ CHAM_MATER = affmat ,
+ CARA_ELEM = carael ,
+ INFO = INFO , **motscles)
+#
+ motscles = {}
+ if ECHANGE!=None :
+ motscles['EXCIT']=_F(CHARGE = chmeth)
+ nomres = CALC_ELEM( reuse = nomres,
+ RESULTAT = nomres ,
+ MODELE = modele ,
+ CHAM_MATER = affmat ,
+ CARA_ELEM = carael ,
+ TOUT_ORDRE = 'OUI' ,
+ OPTION = ('SIEF_ELNO_ELGA','VARI_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+ INFO = INFO , **motscles)
+#
+#-----------------------------------------------------------------------
+ if TYPE_MAILLAGE[:4]=='SAIN' :
+#-----------------------------------------------------------------------
+#
+# --- post traitement : POST_RELEVE_T --- azimuts droits
+#
+# ---- champs de contrainte SI, SII ET SIII ----
+#
+ if TYPE_MAILLAGE=='SAIN_GROS' : NBAZIM = 40
+ else : NBAZIM = 48
+ mcfact=[]
+ TYPSOU=None
+ if TUBULURE!=None : TYPSOU = TUBULURE['TYPE']
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ if TYPSOU=='TYPE_1':
+ mcsimp['REPERE' ]='CYLINDRIQUE',
+ mcsimp['ORIGINE']=( 0.0 , 0.0 , 0.0 )
+ mcsimp['AXE_Z' ]=( 0.0 , 0.0 , 1.0 )
+ INTITD = 'AZI_'+NUME+'_D-REP_CYL'
+ else:
+ mcsimp['REPERE' ]='LOCAL'
+ mcsimp['VECT_Y' ]=( 0.0 , 0.0 , 1.0 )
+ INTITD = 'AZI_'+NUME+'_D-REP_LOC'
+ mcsimp['INTITULE' ]=INTITD
+ mcsimp['GROUP_NO' ]='LD'+str(i)
+ mcfact.append( _F( RESULTAT = nomres,
+ TOUT_ORDRE ='OUI',
+ NOM_CHAM ='SIEF_ELNO_ELGA',
+ PRECISION =55.E-1,
+ TOUT_CMP ='OUI',
+ OPERATION ='EXTRACTION',**mcsimp))
+ __noposd=POST_RELEVE_T(ACTION = mcfact,
+ TITRE = '-- TRAITEMENT DES AZIMUTS DROITS --')
+#
+# --- IMPR_TABLE dans un repere cylindrique ou local
+# des champs de contrainte SI, SII ET SIII
+#
+ if TYPSOU=='TYPE_1' : nompara=IMPRT1
+ else : nompara=IMPRT2
+ IMPR_TABLE(TABLE = __noposd,
+ NOM_PARA = nompara )
+#
+# ---- Pm, Pm+Pb sur les lignes de depouillement ----
+#
+ if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['PRECISION']=55.E-1
+ mcsimp['GROUP_NO' ]='LD'+str(i)
+ mcfact.append( _F(**mcsimp) )
+ __pmpbsd=POST_RCCM(MATER = MRCCM,
+ MAILLAGE = MAILLAGE,
+ TYPE_RESU = 'VALE_MAX',
+ OPTION = 'PM_PB',
+ SEGMENT = mcfact,
+ TRANSITOIRE = _F(RESULTAT =nomres,
+ NOM_CHAM ='SIEF_ELNO_ELGA',
+ TOUT_ORDRE='OUI',),
+ TITRE = '-- TRAITEMENT DES AZIMUTS DROITS --',)
+ IMPR_TABLE(TABLE = __pmpbsd, )
+#
+# ---- champ de temperature, si il a ete calcule, sur les lignes de depouillement ----
+#
+ if ECHANGE!=None :
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['GROUP_NO' ]='LD'+str(i)
+ mcsimp['RESULTAT' ]=resuth
+ mcsimp['TOUT_ORDRE' ]='OUI'
+ mcsimp['NOM_CHAM' ]='TEMP'
+ mcsimp['PRECISION' ]=55.E-1
+ mcsimp['TOUT_CMP' ]='OUI'
+ mcsimp['INTITULE' ]='AZI_'+NUME+'_D'
+ mcsimp['OPERATION' ]='EXTRACTION'
+ mcfact.append( _F(**mcsimp) )
+ __rthazd=POST_RELEVE_T(ACTION=mcfact)
+ IMPR_TABLE(TABLE = __rthazd, )
+#
+# ---- parametres caracterisant la distribution de temperature,
+# si elle a ete calculee, dans l epaisseur du ligament ----
+#
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['GROUP_NO' ]='LD'+str(i)
+ mcsimp['RESULTAT' ]=resuth
+ mcsimp['TOUT_ORDRE' ]='OUI'
+ mcsimp['NOM_CHAM' ]='TEMP'
+ mcsimp['PRECISION' ]=55.E-1
+ mcsimp['TOUT_CMP' ]='OUI'
+ mcsimp['INTITULE' ]='AZI_'+NUME+'_D'
+ mcsimp['OPERATION' ]='MOYENNE'
+ mcfact.append( _F(**mcsimp) )
+ __rmothd=POST_RELEVE_T(ACTION=mcfact)
+ IMPR_TABLE(TABLE = __rmothd, )
+#
+#-----------------------------------------------------------------------
+#
+# --- post traitement : POST_RELEVE_T --- azimuts inclines
+# --- champs de contrainte SI, SII ET SIII ----
+#
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['GROUP_NO' ]='LI'+str(i)
+ mcsimp['RESULTAT' ]=nomres
+ mcsimp['TOUT_ORDRE' ]='OUI'
+ mcsimp['NOM_CHAM' ]='SIEF_ELNO_ELGA'
+ mcsimp['PRECISION' ]=55.E-1
+ mcsimp['TOUT_CMP' ]='OUI'
+ mcsimp['REPERE' ]='LOCAL'
+ mcsimp['VECT_Y' ]=( 0.0 , 0.0 , 1.0 )
+ mcsimp['INTITULE' ]='AZI_'+NUME+'_I-REP_LOC'
+ mcsimp['OPERATION' ]='EXTRACTION'
+ mcfact.append( _F(**mcsimp) )
+ __noposi=POST_RELEVE_T(ACTION=mcfact)
+ IMPR_TABLE(TABLE = __noposi, )
+#
+# ---- Pm, Pm+Pb sur les lignes de depouillement ----
+#
+ if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['PRECISION']=55.E-1
+ mcsimp['GROUP_NO' ]='LI'+str(i)
+ mcfact.append( _F(**mcsimp) )
+ __pmpbsi=POST_RCCM(MATER = MRCCM,
+ MAILLAGE = MAILLAGE,
+ TYPE_RESU = 'VALE_MAX',
+ OPTION = 'PM_PB',
+ SEGMENT = mcfact,
+ TRANSITOIRE = _F(RESULTAT =nomres,
+ NOM_CHAM ='SIEF_ELNO_ELGA',
+ TOUT_ORDRE='OUI',),
+ TITRE = '-- TRAITEMENT DES AZIMUTS INCLINES --',)
+ IMPR_TABLE(TABLE = __pmpbsi, )
+#
+# ---- champs de temperature,si il a ete calcule, sur les lignes de depouillement ----
+#
+ if ECHANGE!=None :
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['GROUP_NO' ]='LI'+str(i)
+ mcsimp['RESULTAT' ]=resuth
+ mcsimp['TOUT_ORDRE' ]='OUI'
+ mcsimp['NOM_CHAM' ]='TEMP'
+ mcsimp['PRECISION' ]=55.E-1
+ mcsimp['TOUT_CMP' ]='OUI'
+ mcsimp['INTITULE' ]='AZI_'+NUME+'_I'
+ mcsimp['OPERATION' ]='EXTRACTION'
+ mcfact.append( _F(**mcsimp) )
+ __rthazi=POST_RELEVE_T(ACTION=mcfact)
+ IMPR_TABLE(TABLE = __rthazi,
+ NOM_PARA = IMPRT3 )
+#
+# ---- parametres caracterisant la distribution de temperature,
+# si elle a ete calculee, dans l epaisseur du ligament ----
+#
+ mcfact=[]
+ for i in range(1,NBAZIM+1,PAS_AZIMUT):
+ if i<10 : NUME = '0'+str(i)
+ else : NUME = str(i)
+ mcsimp={}
+ mcsimp['GROUP_NO' ]='LI'+str(i)
+ mcsimp['RESULTAT' ]=resuth
+ mcsimp['TOUT_ORDRE' ]='OUI'
+ mcsimp['NOM_CHAM' ]='TEMP'
+ mcsimp['PRECISION' ]=55.E-1
+ mcsimp['TOUT_CMP' ]='OUI'
+ mcsimp['INTITULE' ]='AZI_'+NUME+'_I'
+ mcsimp['OPERATION' ]='MOYENNE'
+ mcfact.append( _F(**mcsimp) )
+ __rmothi=POST_RELEVE_T(ACTION=mcfact)
+ IMPR_TABLE(TABLE = __rmothi, )
+#
+#-----------------------------------------------------------------------
+ elif TYPE_MAILLAGE[:4]=='FISS' :
+#-----------------------------------------------------------------------
+#
+ NOMGRO=[]
+ NOMGRE=[]
+ TABMA8=[]
+ NOMMA =[]
+ if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB','FISS_AXIS_DEB','FISS_COUR_NONDEB') :
+ NBFIS = 1
+ NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
+ NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+ TABMA8.append('FONDFISS')
+ if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB') : FERME=0
+ else :
+ FERME=1
+ NOMMA.append('MAIL_ORI')
+ elif TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
+ NBFIS = 2
+ NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
+ NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+ NOMGRO.append(('PI_FON1','PI_FIS1'),)
+ NOMGRE.append(('PI_FON2','PI_FIS2'),)
+ TABMA8.append('FOND_SUP')
+ TABMA8.append('FOND_INF')
+ if TYPE_MAILLAGE=='FISS_LONG_NONDEB' : FERME=0
+ else :
+ FERME=1
+ NOMMA.append('MA_ORI_S')
+ NOMMA.append('MA_ORI_I')
+#
+ if ECHANGE!=None:
+#
+# ---- champs de temperature en fond de fissure
+# si il a ete calcule, cas 1 fond de fissure ----
+#
+ if NBFIS==1:
+ __rthfis=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FONDFISS',
+ RESULTAT =resuth,
+ TOUT_ORDRE ='OUI',
+ NOM_CHAM ='TEMP',
+ PRECISION =55.E-1,
+ TOUT_CMP ='OUI',
+ INTITULE ='FONDFISS',
+ OPERATION ='EXTRACTION',))
+ IMPR_TABLE(TABLE = __rthfis, )
+#
+# ---- champs de temperature en fond de fissure
+# si il a ete calcule, cas 2 fonds de fissure ----
+#
+ elif NBFIS==2:
+#
+ __rthfis1=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FOND_SUP',
+ RESULTAT =resuth,
+ TOUT_ORDRE ='OUI',
+ NOM_CHAM ='TEMP',
+ PRECISION =55.E-1,
+ TOUT_CMP ='OUI',
+ INTITULE ='FOND_SUP',
+ OPERATION ='EXTRACTION',))
+ IMPR_TABLE(TABLE = __rthfis1, )
+ __rthfis2=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FOND_INF',
+ RESULTAT =resuth,
+ TOUT_ORDRE ='OUI',
+ NOM_CHAM ='TEMP',
+ PRECISION =55.E-1,
+ TOUT_CMP ='OUI',
+ INTITULE ='FOND_INF',
+ OPERATION ='EXTRACTION',))
+ IMPR_TABLE(TABLE = __rthfis2, )
+#
+# boucle sur le nombre de fond de fissure
+#
+ fond3d = [None]*2
+ for j in range(NBFIS):
+ if FOND_FISS_1!=None : self.DeclareOut('fond3d_0',FOND_FISS_1)
+ if FOND_FISS_2!=None : self.DeclareOut('fond3d_1',FOND_FISS_2)
+#
+# --- commande DEFI_FOND_FISS ---
+#
+ motscles={}
+ if not FERME:
+ motscles['FOND_FISS']=_F(GROUP_MA =TABMA8[j],
+ GROUP_NO_ORIG=NOMGRO[j][0],
+ GROUP_NO_EXTR=NOMGRE[j][0],)
+ motscles['VECT_GRNO_ORIG']=NOMGRO[j]
+ motscles['VECT_GRNO_EXTR']=NOMGRE[j]
+ else:
+ if TYPE_MAILLAGE.find('AXIS')!=-1 : grnoorig=NOMGRE[j][0]
+# si AXIS, P_FON1 est remplace par P_FON2 pour
+# fermer le fond de fissure
+ else : grnoorig=NOMGRO[j][0]
+ motscles['FOND_FERME']=_F(GROUP_MA =TABMA8[j],
+ GROUP_NO_ORIG=grnoorig,
+ GROUP_MA_ORIG=NOMMA[j],)
+ fond3d[j]=DEFI_FOND_FISS( MAILLAGE = MAILLAGE,
+ LEVRE_SUP = _F(GROUP_MA='LEVRCORP',),
+ LEVRE_INF = _F(GROUP_MA='LEVRTUBU',),**motscles)
+ if THETA_3D!=None:
+ if THETA_3D.__class__.__name__!='MCList' : THETA_3D=[THETA_3D,]
+ for tht3d in THETA_3D :
+#
+# --- commande CALC_THETA ---
+#
+ __theta = CALC_THETA( MODELE = modele,
+ FOND_FISS = fond3d[j],
+ THETA_3D = _F( TOUT = 'OUI',
+ MODULE = 1.0 ,
+ R_INF = tht3d['R_INF'],
+ R_SUP = tht3d['R_SUP'], ) )
+#
+# --- commande CALC_G_THETA_T ---
+#
+ montit = 'G_THETA AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
+ motscles={}
+ charge =[]
+ if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') : charge.append(__chpres)
+ if ECHANGE !=None : charge.append(chmeth )
+ if COMP_ELAS!=None: motscles['COMP_ELAS']= _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],)
+ if COMP_INCR!=None: motscles['COMP_INCR']= _F(RELATION = COMP_INCR['RELATION'],)
+ if charge!=[]: motscles['CHARGE' ]= charge
+ __gtheta = CALC_G_THETA_T( MODELE = modele,
+ CHAM_MATER = affmat,
+ THETA = __theta,
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ TITRE = montit,**motscles)
+ IMPR_TABLE(TABLE = __gtheta, )
+#
+# recherche du g max
+#
+ if OPTION=='CALC_G_MAX' :
+ if BORNES!=None:
+ if BORNES.__class__.__name__!='MCList' : BORNES=[BORNES,]
+ mcfact=[]
+ for born in BORNES :
+ mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
+ VALE_MIN = born['VALE_MIN' ] ,
+ VALE_MAX = born['VALE_MAX' ] ) )
+ __gbil = CALC_G_THETA_T( MODELE = modele,
+ CHAM_MATER = affmat,
+ THETA = __theta,
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ COMP_ELAS = _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],),
+ TITRE = montit,
+ OPTION = OPTION,
+ BORNES = mcfact,)
+ IMPR_TABLE(TABLE = __gbil, )
+#
+# --- commande CALC_G_LOCAL_T ---
+#
+ montit = 'G_LOCAL AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
+ motscles={}
+ charge =[]
+ if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') : charge.append(__chpres)
+ if ECHANGE !=None : charge.append(chmeth )
+ if COMP_ELAS!=None: motscles['COMP_ELAS' ]= _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],)
+ if charge!=[]: motscles['CHARGE' ]= charge
+ if FERME:
+ motscles['LISSAGE_THETA']= 'LAGRANGE'
+ motscles['LISSAGE_G' ]= 'LAGRANGE'
+ __glocal = CALC_G_LOCAL_T( MODELE = modele,
+ CHAM_MATER = affmat,
+ FOND_FISS = fond3d[j],
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ R_INF = tht3d['R_INF'],
+ R_SUP = tht3d['R_SUP'],
+ TITRE = montit,**motscles)
+#
+# recherche du g max local
+#
+ if OPTION=='CALC_G_MAX_LOCAL' :
+ if BORNES!=None:
+ if BORNES.__class__.__name__!='MCList' : BORNES=[BORNES,]
+ motscles={}
+ mcfact=[]
+ if FERME:
+ motscles['LISSAGE_THETA']= 'LAGRANGE'
+ motscles['LISSAGE_G' ]= 'LAGRANGE'
+ for born in BORNES :
+ mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
+ VALE_MIN = born['VALE_MIN' ] ,
+ VALE_MAX = born['VALE_MAX' ] ) )
+ motscles['BORNES']=mcfact
+ __glbil = CALC_G_LOCAL_T( MODELE = modele,
+ CHAM_MATER = affmat,
+ FOND_FISS = fond3d[j],
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ COMP_ELAS = _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],),
+ TITRE = montit,
+ OPTION = 'CALC_G_MAX',
+ R_INF = tht3d['R_INF'],
+ R_SUP = tht3d['R_SUP'],**motscles)
+ IMPR_TABLE(TABLE = __glbil, )
+#
+# --- commande IMPR_RESU ---
+#
+ if IMPRESSION!=None:
+ mcfresu =[]
+ motscles={}
+ if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+ ncham =[]
+ if IMPRESSION['NOM_CHAM']!=None :
+ if type(IMPRESSION['NOM_CHAM']) in (types.TupleType,types.ListType) : ncham= IMPRESSION['NOM_CHAM']
+ else : ncham=[IMPRESSION['NOM_CHAM'],]
+ if len(ncham)==3 : motscles['NOM_CHAM' ]=('DEPL','EQUI_ELNO_SIGM')
+ elif (len(ncham)==1) and (ncham[0][:4]!='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
+ elif (len(ncham)==2) and (ncham[0][:4]!='TEMP') and (ncham[1][:4]!='TEMP') :
+ motscles['NOM_CHAM' ]=(ncham[0]['NOM_CHAM'],ncham[1]['NOM_CHAM'])
+ elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[1]['NOM_CHAM']
+ elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
+ if IMPRESSION['TOUT_ORDRE']!=None :
+ motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
+ elif IMPRESSION['NUME_ORDRE']!=None :
+ motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
+ elif IMPRESSION['INST']!=None :
+ motscles['INST' ]= IMPRESSION['INST']
+ if IMPRESSION['FORMAT']=='IDEAS' :
+ motscles['VERSION' ]= IMPRESSION['VERSION']
+ if IMPRESSION['FORMAT']=='CASTEM' :
+ motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+ mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,FORMAT=IMPRESSION['FORMAT'],**motscles))
+ if ECHANGE!=None:
+ motscles={}
+ if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+ if len(ncham)==3 : motscles['NOM_CHAM' ]=('TEMP',)
+ elif (len(ncham)==1) and (ncham[0][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
+ elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
+ elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[1]['NOM_CHAM']
+ if IMPRESSION['TOUT_ORDRE']!=None :
+ motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
+ elif IMPRESSION['NUME_ORDRE']!=None :
+ motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
+ elif IMPRESSION['INST']!=None :
+ motscles['INST' ]= IMPRESSION['INST']
+ if IMPRESSION['FORMAT']=='IDEAS' :
+ motscles['VERSION' ]= IMPRESSION['VERSION']
+ if IMPRESSION['FORMAT']=='CASTEM' :
+ motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+ mcfresu.append(_F(RESULTAT=nomres,FORMAT=IMPRESSION['FORMAT'],**motscles))
+ IMPR_RESU( MODELE = modele,
+ RESU = mcfresu )
+#
+ return ier
-#@ MODIF macr_aspic_mail_ops Macro DATE 19/01/2004 AUTEUR DURAND C.DURAND
+#@ MODIF macr_aspic_mail_ops Macro DATE 30/01/2004 AUTEUR CIBHHLV L.VIVAN
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
__MAPROV=DEFI_GROUP(reuse =__MAPROV,
MAILLAGE=__MAPROV,
**motscles )
+#
+ if not SAIN :
+ motscles={}
+ motscles['CREA_GROUP_NO']=[]
+ if not (TFISS=='NON_DEB') :
+ motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
+ if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
+ motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
+ __MAPROV=DEFI_GROUP(reuse =__MAPROV,
+ MAILLAGE=__MAPROV,
+ **motscles )
#
__MAPROV=MODI_MAILLAGE(reuse =__MAPROV,
MAILLAGE=__MAPROV,
from Accas import *
from Accas import _F
import string
-import Numeric
+#import Numeric
import ops
#
__version__="$Name: $"
-__Id__="$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $"
+__Id__="$Id: cata_STA7.py,v 1.5.2.1 2004/03/01 11:00:25 eficas Exp $"
#
JdC = JDC_CATA(code='ASTER',
execmodul=None,
INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
) ;
-#& MODIF COMMANDE DATE 18/11/2003 AUTEUR CIBHHLV L.VIVAN
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR VABHHTS J.PELLET
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
#
-# THIS PROGRAM 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
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
# ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE G8BHHXD X.DESROCHES
AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca
,fr="Affectation de charges et conditions aux limites mécaniques constantes",
docu="U4.44.01-g",reentrant='n',
UIinfo={"groupes":("Modélisation",)},
- regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
- 'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
- 'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
- 'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
- 'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT',
- 'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',
- 'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',
- 'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
- 'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',
+ regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+ 'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+ 'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
+ 'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
+ 'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT',
+ 'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',
+ 'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',
+ 'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
+ 'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',
'EFFE_FOND','EVOL_CHAR','ARLEQUIN','DDL_POUTRE','GRAPPE_FLUIDE'),
- EXCLUS('PRES_CALCULEE','EVOL_CHAR'),),
+ EXCLUS('PRES_CALCULEE','EVOL_CHAR'),),
VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
VERI_NORM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
MODELE =SIMP(statut='o',typ=(modele) ),
typ=evol_char ),
PRES_CALCULEE =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
typ=evol_char ),
-
+
PESANTEUR =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
ROTATION =SIMP(statut='f',typ='R',fr="Champ de rotation", min=4,max=4),
b_rotation =BLOC ( condition = "ROTATION != None",
- CENTRE =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
+ CENTRE =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
DDL_IMPO =FACT(statut='f',max='**',
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
),
-
+
FACE_IMPO =FACT(statut='f',max='**',
regles=(UN_PARMI('GROUP_MA','MAILLE',),
AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
EXCLUS('DTAN','DRX'),
EXCLUS('DTAN','DRY'),
EXCLUS('DTAN','DRZ'),),
-# rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
+# rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
DX =SIMP(statut='f',typ='R' ),
DRX =SIMP(statut='f',typ='R' ),
DRY =SIMP(statut='f',typ='R' ),
DRZ =SIMP(statut='f',typ='R' ),
- ),
-
+ ),
+
LIAISON_GROUP =FACT(statut='f',max='**',
fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
- regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
EXCLUS('GROUP_MA_1','GROUP_NO_2'),
- EXCLUS('GROUP_MA_1','NOEUD_2'),
+ EXCLUS('GROUP_MA_1','NOEUD_2'),
EXCLUS('GROUP_NO_1','GROUP_MA_2'),
EXCLUS('GROUP_NO_1','MAILLE_2'),
EXCLUS('MAILLE_1','GROUP_NO_2'),
EXCLUS('NOEUD_1','GROUP_MA_2'),
EXCLUS('NOEUD_1','MAILLE_2'),
EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-
+
GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
GROUP_NO_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
-
+
SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
SANS_GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
DDL_1 =SIMP(statut='o',typ='TXM',max='**'),
AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
GROUP_MA_MAIT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
- MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
- MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
GROUP_NO_ESCL =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
- NOEUD_ESCL =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NOEUD_ESCL =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
TRAN =SIMP(statut='f',typ='R',max=3 ),
ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ),
CENTRE =SIMP(statut='f',typ='R',max=3 ),
DDL_ESCL =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
),
-
+
LIAISON_SOLIDE =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",max='**',
regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
- ),
+ ),
LIAISON_ELEM =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque",max='**',
regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
DDL =SIMP(statut='o',typ='TXM',max='**'),
- ),
+ ),
LIAISON_CHAMNO =FACT(statut='f',max='**',
fr="définir une relation linéaire entre tous les ddls d'un concept cham_no",
CHAM_NO =SIMP(statut='o',typ=cham_no), #CO()
COEF_IMPO =SIMP(statut='o',typ='R' ),
NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
- ),
+ ),
VECT_ASSE =SIMP(statut='f',typ=cham_no_depl_r ),
APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
RECHERCHE =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
- LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
- METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
- into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+ into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),
PROJECTION =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ),
GROUP_MA_MAIT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
- TOLE_PROJ =SIMP(statut='f',typ='R',defaut=0.25),
+ TOLE_PROJ =SIMP(statut='f',typ='R',defaut=0.25),
b_active =BLOC(condition = "METHODE == 'CONTRAINTE' ",
fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
regles=(EXCLUS('DIST_2','COEF_IMPO'),
EXCLUS('DIST_1','COEF_IMPO'),),
NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
- FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ),
+ FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ),
NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ),
REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
- NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ),
+ NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ),
REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
fr="Paramètre de la réactualisation géométrique",
STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
COULOMB =SIMP(statut='o',typ='R',),
- COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
),),
b_penalisation =BLOC(condition = "METHODE == 'PENALISATION' ",
fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
- E_N =SIMP(statut='f',typ='R'),
- FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+ E_N =SIMP(statut='f',typ='R'),
+ FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ),
REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
COULOMB =SIMP(statut='o',typ='R',),
E_T =SIMP(statut='f',typ='R',
fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
- COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
),),
b_continue =BLOC(condition = "METHODE == 'CONTINUE' ",
fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
- FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+ FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2")),
COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
MODL_AXIS =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2),
COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
SEUIL_INIT =SIMP(statut='f',typ='I',defaut=0),),),
- ),
-
+ ),
+
FORCE_NODALE =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",max='**',
regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
FX =SIMP(statut='f',typ='R' ),
FY =SIMP(statut='f',typ='R' ),
FZ =SIMP(statut='f',typ='R' ),
- ),
+ ),
FORCE_ARETE =FACT(statut='f',max='**',
fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
MX =SIMP(statut='f',typ='R' ),
MY =SIMP(statut='f',typ='R' ),
MZ =SIMP(statut='f',typ='R' ),
- ),
-
+ ),
+
FORCE_CONTOUR =FACT(statut='f',max='**',
fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
MX =SIMP(statut='f',typ='R' ),
MY =SIMP(statut='f',typ='R' ),
MZ =SIMP(statut='f',typ='R' ),
- ),
+ ),
FORCE_INTERNE =FACT(statut='f',max='**',
fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
FX =SIMP(statut='f',typ='R' ),
FY =SIMP(statut='f',typ='R' ),
FZ =SIMP(statut='f',typ='R' ),
- ),
+ ),
PRES_REP =FACT(statut='f',max='**',
fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
PRES =SIMP(statut='f',typ='R' ),
CISA_2D =SIMP(statut='f',typ='R' ),
),
-
+
EFFE_FOND =FACT(statut='f',fr="Imposer un effet de fond",max='**',
regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
GROUP_MA_INT =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
PRES =SIMP(statut='o',typ='R' ),
),
-
+
EPSI_INIT =FACT(statut='f',max='**',
fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
KYY =SIMP(statut='f',typ='R' ),
KXY =SIMP(statut='f',typ='R' ),
),
-
+
ARLEQUIN =FACT(statut='f',max='**',
GROUP_MA_1 =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
GROUP_MA_2 =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
POIDS_1 =SIMP(statut='f',typ='R'),
POIDS_2 =SIMP(statut='f',typ='R'),
),
-
+
FORCE_POUTRE =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",max='**',
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
- PRESENT_ABSENT('FX','N','VY','VZ'),
+ PRESENT_ABSENT('FX','N','VY','VZ'),
PRESENT_ABSENT('FY','N','VY','VZ'),
PRESENT_ABSENT('FZ','N','VY','VZ'),
PRESENT_ABSENT('N','FX','FY','FZ'),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
-# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
FX =SIMP(statut='f',typ='R' ),
FY =SIMP(statut='f',typ='R' ),
FZ =SIMP(statut='f',typ='R' ),
-
+
N =SIMP(statut='f',typ='R' ),
VY =SIMP(statut='f',typ='R' ),
VZ =SIMP(statut='f',typ='R' ),
-
+
),
-
+
FORCE_TUYAU =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",max='**',
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
PRES =SIMP(statut='f',typ='R' ),
),
-
+
FORCE_COQUE =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",max='**',
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
- AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
-# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
-
+
FX =SIMP(statut='f',typ='R' ),
FY =SIMP(statut='f',typ='R' ),
FZ =SIMP(statut='f',typ='R' ),
MX =SIMP(statut='f',typ='R' ),
MY =SIMP(statut='f',typ='R' ),
MZ =SIMP(statut='f',typ='R' ),
-
+
F1 =SIMP(statut='f',typ='R' ),
F2 =SIMP(statut='f',typ='R' ),
F3 =SIMP(statut='f',typ='R' ),
MF1 =SIMP(statut='f',typ='R' ),
MF2 =SIMP(statut='f',typ='R' ),
-
+
PRES =SIMP(statut='f',typ='R' ),
PLAN =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
),
SIGM_BPEL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
RELA_CINE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
),
-
+
FORCE_ELEC =FACT(statut='f',max='**',
fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
- PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
- AU_MOINS_UN('FX','FY','FZ','POSITION'),
- EXCLUS('FX','POSITION'),
- EXCLUS('FY','POSITION'),
- EXCLUS('FZ','POSITION'),),
-# trop de regles : les blocs conditionnels permettent d en suprimer
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+
TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
-
- FX =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
- FY =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
- FZ =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-
+
POSITION =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+ b_fxyz =BLOC ( condition = "POSITION == None",
+ FX =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FY =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FZ =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+
b_para =BLOC ( condition = "POSITION == 'PARA'",
regles=(UN_PARMI('TRANS','DIST'),),
TRANS =SIMP(statut='f',typ='R',max=3),
DIST =SIMP(statut='f',typ='R' ),
- b_point2 =BLOC ( condition = "DIST != None",
+ b_point2 =BLOC ( condition = "DIST != None",
POINT2 =SIMP(statut='o',typ='R',max=3),
),
),
b_fini_infi =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
POINT1 =SIMP(statut='o',typ='R',max=3),
POINT2 =SIMP(statut='o',typ='R',max=3),
- ),
+ ),
),
-
+
INTE_ELEC =FACT(statut='f',max='**',
fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
TRANS =SIMP(statut='f',typ='R' ,max='**'),
SYME =SIMP(statut='f',typ='R' ,max='**'),
),
-
+
IMPE_FACE =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",max='**',
regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
IMPE =SIMP(statut='o',typ='R' ),
),
-
+
VITE_FACE =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",max='**',
regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
VNOR =SIMP(statut='o',typ='R' ),
),
-
+
ONDE_FLUI =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",max='**',
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
PRES =SIMP(statut='o',typ='R' ),
),
-
+
FLUX_THM_REP =FACT(statut='f',max='**',
regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 24/11/2003 AUTEUR F1BHHAJ J.ANGLES
+#& MODIF COMMANDE DATE 26/01/2004 AUTEUR F1BHHAJ J.ANGLES
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**' ),
b_period =BLOC(condition = "TYPE_CHARGE == 'PERIODIQUE'",
- CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN_MODI") ),
+ CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN_MODI_AC") ),
METHODE =SIMP(statut='o',typ='TXM',into=("CERCLE_EXACT",) ),
),
b_non_period =BLOC(condition = "TYPE_CHARGE == 'NON_PERIODIQUE'",
- CRITERE =SIMP(statut='o',typ='TXM',into=("DOMM_MAXI",) ),
+ CRITERE =SIMP(statut='o',typ='TXM',into=("DOMM_MAXI","DANG_VAN_MODI_AV") ),
PROJECTION =SIMP(statut='o',typ='TXM',into=("UN_AXE", "DEUX_AXES") ),
DELTA_OSCI = SIMP(statut='f',typ='R',defaut= 0.0E+0),
),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
if (COMPOSE != None): return fonction
if (ASSE != None): return fonction
if (FFT != None):
- vale=FFT.get_child('FONCTION').get_valeur()
+ vale=FFT['FONCTION']
if (AsType(vale) == fonction ) : return fonction_c
if (AsType(vale) == fonction_c) : return fonction
if (CORR_ACCE != None): return fonction
NOEUD_RESU =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
,defaut= 1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
def comb_cham_elem_prod(COMB_R=None,COMB_C=None,COMB_FOURIER=None,**args):
if COMB_R != None:
- vale=COMB_R.get_child('CHAM_ELEM').get_valeur()
+ vale=COMB_R[0]['CHAM_ELEM']
elif COMB_C != None:
- vale=COMB_C.get_child('CHAM_ELEM').get_valeur()
+ vale=COMB_C[0]['CHAM_ELEM']
elif COMB_FOURIER != None:
- vale=COMB_FOURIER.get_child('CHAM_ELEM').get_valeur()
+ vale=COMB_FOURIER[0]['CHAM_ELEM']
else :
raise AsException("type de concept resultat non prevu")
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# RESPONSABLE G8BHHXD X.DESROCHES
def comb_cham_no_prod(COMB_R,COMB_C,COMB_FOURIER,**args):
if COMB_C != None:
- type_mat = AsType(COMB_C.get_child('CHAM_NO').get_valeur())
+ type_mat = AsType(COMB_C[0]['CHAM_NO'])
if type_mat in (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_c
if type_mat in (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_c
if type_mat in (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_c
elif COMB_R != None:
- type_mat = AsType(COMB_R.get_child('CHAM_NO').get_valeur())
+ type_mat = AsType(COMB_R[0]['CHAM_NO'])
if type_mat in (cham_no_depl_c,cham_no_depl_r) : return cham_no_depl_r
if type_mat in (cham_no_temp_c,cham_no_temp_r) : return cham_no_temp_r
if type_mat in (cham_no_pres_c,cham_no_pres_r) : return cham_no_pres_r
if type_mat == matr_asse_gene_r : return matr_asse_gene_r
elif COMB_FOURIER != None:
- type_mat = AsType(COMB_FOURIER.get_child('CHAM_NO').get_valeur())
+ type_mat = AsType(COMB_FOURIER[0]['CHAM_NO'])
if type_mat == cham_no_temp_r : return cham_no_temp_r
if type_mat == cham_no_depl_r : return cham_no_depl_r
raise AsException("type de concept resultat non prevu")
into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL") ),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# RESPONSABLE VABHHTS J.PELLET
def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
if COMB_C != None:
- type_mat = AsType(COMB_C.get_child('MATR_ASSE').get_valeur())
+ type_mat = AsType(COMB_C[0]['MATR_ASSE'])
if type_mat in (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
if type_mat in (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c
if type_mat in (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
if type_mat in (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
elif COMB_R != None:
- type_mat = AsType(COMB_R.get_child('MATR_ASSE').get_valeur())
+ type_mat = AsType(COMB_R[0]['MATR_ASSE'])
if type_mat in (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
if type_mat in (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
if type_mat in (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
),
) ;
-#& MODIF COMMANDE DATE 10/10/2003 AUTEUR D6BHHJP J.P.LEFEBVRE
+#& MODIF COMMANDE DATE 29/01/2004 AUTEUR D6BHHJP J.P.LEFEBVRE
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
fr="Gestion d une unité logique : ajout, suppression",
ACTION =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER"),defaut="ASSOCIER"),
- UNITE =SIMP(statut='o',typ='I' ,val_min=1),
b_associer =BLOC(condition = "ACTION == 'ASSOCIER'",fr="Paramètres pour l ouverture du fichier",
TYPE =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
b_type_ascii =BLOC(condition = "TYPE == 'ASCII'",fr="Paramètres pour le type ASCII",
NOM_SYSTEME =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+ b_nom_systeme_present =BLOC(condition="NOM_SYSTEME == None",
+ fr="Sans nom de fichier,l unite logique est nécessaire",
+ UNITE =SIMP(statut='o',typ='I' ,val_min=1),
+ ),
+ b_nom_systeme_absent =BLOC(condition="NOM_SYSTEME != None",
+ fr="Avec un nom de fichier,l unite logique est facultative",
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
+ ),
FICHIER =SIMP(statut='o',typ='TXM'),
+ ACCES =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
),
b_type_autre =BLOC(condition = "TYPE != 'ASCII'",fr="Paramètres pour les types BINARY et LIBRE",
- regles=(AU_MOINS_UN('NOM_SYSTEME','FICHIER'),),
+ regles=(AU_MOINS_UN('NOM_SYSTEME','UNITE'),),
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
NOM_SYSTEME =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
FICHIER =SIMP(statut='f',typ='TXM'),
+ ACCES =SIMP(statut='f',typ='TXM',into=("NEW","OLD"),defaut="NEW"),
),
- ACCES =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
),
- INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ b_liberer =BLOC(condition = "ACTION == 'LIBERER'",fr="Paramètres pour la fermeture du fichier",
+ regles=(UN_PARMI('NOM_SYSTEME','UNITE'),),
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
+ NOM_SYSTEME =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+ ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
)
#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 03/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-f",reentrant='n',
UIinfo={"groupes":("Post traitements",)},
fr="Définition de lèvres et d un fond de fissure en 3D",
- regles=(UN_PARMI('FOND','FOND_FERME'),
+ regles=(UN_PARMI('FOND_FISS','FOND_FERME'),
EXCLUS('FOND_FERME','DTAN_ORIG'),
EXCLUS('FOND_FERME','DTAN_EXTR'),
EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
MAILLAGE =SIMP(statut='o',typ=maillage ),
- FOND =FACT(statut='f',
+ FOND_FISS =FACT(statut='f',
regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
),
) ;
-#& MODIF COMMANDE DATE 12/01/2004 AUTEUR GRANET S.GRANET
+#& MODIF COMMANDE DATE 02/02/2004 AUTEUR ROMEO R.FERNANDES
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
VERI_P = SIMP(statut='c',typ='TXM',defaut=("TEMP",)),
),
# =================================================================================
-# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# --- MOT-CLE INUTILE -------------------------------------------------------------
# =================================================================================
- THM_GAZ = FACT(statut='o',
-# ---------------------------------------------------------------------------------
-# ------------------- DONNEES OBLIGATOIRE -------------------------------------
-# ---------------------------------------------------------------------------------
- MASS_MOL = SIMP(statut='o',typ='R'),
- VISC = SIMP(statut='o',typ=(fonction,formule)),
- D_VISC_TEMP = SIMP(statut='o',typ=(fonction,formule)),
-# ---------------------------------------------------------------------------------
-# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
-# ---------------------------------------------------------------------------------
+ THM_GAZ = FACT(statut='f',
+ MASS_MOL = SIMP(statut='f',typ='R'),
+ VISC = SIMP(statut='f',typ=(fonction,formule)),
+ D_VISC_TEMP = SIMP(statut='f',typ=(fonction,formule)),
CP = SIMP(statut='f',typ='R'),
-# ---------------------------------------------------------------------------------
-# ------------------- DONNEES CACHEES ---------------------------------------------
-# ---------------------------------------------------------------------------------
- VERI_P = SIMP(statut='c',typ='TXM',defaut=("TEMP",)),
+ VERI_P = SIMP(statut='c',typ='TXM',defaut=("TEMP",)),
),
# =================================================================================
# --- MOT-CLE INUTILE -------------------------------------------------------------
VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ),
),
CISA_PLAN_CRIT =FACT(statut='f',
- CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN_MODI","DOMM_MAXI") ),
+ CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN_MODI_AC","DANG_VAN_MODI_AV","DOMM_MAXI") ),
b_critere_matake =BLOC(condition="CRITERE=='MATAKE'",
- fr="cisaillement plan critique critère de matake",
+ fr="Cisaillement plan critique critère de matake",
MATAKE_A =SIMP(statut='o',typ='R'),
MATAKE_B =SIMP(statut='o',typ='R'),
COEF_FLEX_TORS =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
),
- b_critere_dang_van =BLOC(condition="CRITERE=='DANG_VAN_MODI'",
- fr="cisaillement plan critique critère de Dang Van modifié",
+ b_critere_dang_van =BLOC(condition="(CRITERE=='DANG_VAN_MODI_AC' or CRITERE=='DANG_VAN_MODI_AV')",
+ fr="Critère de Dang Van modifié pour les cas amplitude constante et amplitude variable",
D_VAN_A =SIMP(statut='o',typ='R'),
D_VAN_B =SIMP(statut='o',typ='R'),
COEF_CISA_TRAC =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
),
b_crit_domm_maxi =BLOC(condition="CRITERE=='DOMM_MAXI'",
- fr="critère pour chargement non périodique : domm_maxi",
+ fr="Critère pour chargement non périodique : domm_maxi",
DOMM_A =SIMP(statut='o',typ='R'),
DOMM_B =SIMP(statut='o',typ='R'),
COEF_CISA_TRAC =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
INFO =SIMP(statut='f',typ='I',into=(1,2) ),
) ;
-#& MODIF COMMANDE DATE 21/01/2004 AUTEUR CIBHHLV L.VIVAN
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
,defaut= 1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 21/01/2004 AUTEUR CIBHHLV L.VIVAN
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
,defaut= 1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
COMMENTAIRE =SIMP(statut='f',typ='TXM' ),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 04/02/2004 AUTEUR ACBHHCD G.DEVESA
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
),
b_miss_3d =BLOC(condition = "FORMAT == 'MISS_3D'",
+ regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
UNITE =SIMP(statut='f',typ='I',defaut= 26 ),
SOUS_TITRE =SIMP(statut='f',typ='TXM',max='**'),
AMOR_REDUIT =SIMP(statut='f',typ='R' ,max='**'),
+ LIST_AMOR =SIMP(statut='f',typ=listr8 ),
GROUP_MA_INTERF =SIMP(statut='o',typ=grma ,max='**'),
-# Ces trois mots cles sont-ils dans le bon bloc et avec le bon statut
GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 03/02/2004 AUTEUR ASSIRE A.ASSIRE
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
UIinfo={"groupes":("Gestion du travail",)},
regles=(),
- LISTE_INFO =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("CPU_RESTANT","CPU",),),
+ LISTE_INFO =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("CPU_RESTANT","CPU","UNITE_LIBRE",),),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
) ;
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR NICOLAS O.NICOLAS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
if TYPE_RESU == "HARM_GENE" : return harm_gene
if TYPE_RESU == "MODE_MECA" : return mode_meca
+ if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c
raise AsException("type de concept resultat non prevu")
# pour éviter d'écrire 3 fois cette liste :
# 0) mots clés généraux :
#----------------------
TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
- "DYNA_TRANS","DYNA_HARMO","HARM_GENE","EVOL_CHAR") ),
+ "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE",
+ "EVOL_CHAR") ),
FORMAT =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ),
# ---------
b_ideas =BLOC(condition="FORMAT=='IDEAS'",
UNITE =SIMP(statut='f',typ='I',defaut= 19 ),
+# TEST =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
FORMAT_IDEAS =FACT(statut='f',max='**',
regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
# 2) blocs selon le type du résultat :
#---------------------------------
- b_mode_meca =BLOC(condition="TYPE_RESU=='MODE_MECA'",
+ b_mode_meca =BLOC(condition="(TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C')",
MATR_A =SIMP(statut='f',typ=matr_asse_depl_r,),
MATR_B =SIMP(statut='f',typ=matr_asse_depl_r,),
),
#
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
,defaut= 1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
# ======================================================================
# RESPONSABLE F1BHHAJ J.ANGLES
+from Macro.macr_aspic_calc_ops import macr_aspic_calc_ops
+
def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,**args):
if MODELE != None:self.type_sdprod(MODELE,modele)
if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
if RESU_THER != None:self.type_sdprod(RESU_THER,evol_ther)
return evol_noli
-MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_aspic_calc_prod,
fr=" ",docu="U4.pc.20-b",reentrant='n',
UIinfo={"groupes":("Outils métier",)},
regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut=10),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut=0),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
TITRE =SIMP(statut='f',typ='TXM'),
-) ;
-# debut entete
+)
#& MODIF COMMANDE DATE 19/01/2004 AUTEUR DURAND C.DURAND
# CONFIGURATION MANAGEMENT OF EDF VERSION
INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10),
ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
into=("IMPLICITE",)),
),
#
);
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM 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
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
- fr=" ",docu="U4.gj.20-b",reentrant='n',
- UIinfo={"groupes":("Outils métier",)},
- MAILLAGE =SIMP(statut='o',typ=maillage),
- DEFI_GOUJ =FACT(statut='o',
- TYPE =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
- VARIANTE =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",
- "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
- FILET_TRONQUE =SIMP(statut='f',typ='I',max='**'),
- FILET_TRONQA =SIMP(statut='f',typ='I',max='**'),
- FILET_TRONQB =SIMP(statut='f',typ='I',max='**'),
- FILET_JEU_HT =SIMP(statut='f',typ='I',max='**'),
- FILET_JEU_HTA =SIMP(statut='f',typ='I',max='**'),
- FILET_JEU_HTB =SIMP(statut='f',typ='I',max='**'),
- ),
- EXCIT =FACT(statut='o',
- TYPE_BLOCAGE =SIMP(statut='o',typ='I',defaut=2,into=(1,2,3)),
- FORCE_GOUJ =SIMP(statut='o',typ='R'),
- ),
- CALCUL =FACT(statut='o',
- TYPE_CALCUL =SIMP(statut='o',typ='TXM',into=("ELASTIQUE","ELASTOPLASTIQUE")),
- NB_INCR =SIMP(statut='o',typ='I'),
- ),
- IMPRESSION =FACT(statut='f',
- FORMAT =SIMP(statut='f',typ='TXM',defaut="TABLE",
- into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","TABLE")),
- VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
- ),
- TITRE =SIMP(statut='f',typ='TXM'),
- INFO =SIMP(statut='f',typ='I',defaut=1 ,into=(1,2)),
-) ;
-
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM 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
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
- fr=" ",docu="U4.gj.10-b",reentrant='n',
- UIinfo={"groupes":("Outils métier",)},
- EXEC_MAILLAGE =FACT(statut='o',
- LOGICIEL =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
- UNITE_DATG =SIMP(statut='f',typ='I',defaut=70),
- UNITE_MGIB =SIMP(statut='f',typ='I',defaut=19),
- NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10)),
- ),
- DEFI_GOUJ =FACT(statut='o',
- TYPE =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
- VARIANTE =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",
- "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
- ),
- GEOM_GOUJ_BRID =FACT(statut='o',
- NB_FILET =SIMP(statut='o',typ='I'),
- H_CORP_BRID =SIMP(statut='o',typ='R'),
- R_EXT_BRID =SIMP(statut='o',typ='R'),
- H_HAUT_BRID =SIMP(statut='f',typ='R',defaut=0.0E+0),
- H_BAS_BRID =SIMP(statut='f',typ='R',defaut= 0.0E+0),
- FILET_ABST =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
- ),
- IMPRESSION =FACT(statut='f',
- regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
- FORMAT =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
- into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED")),
- FICHIER =SIMP(statut='f',typ='TXM'),
- UNITE =SIMP(statut='f',typ='I'),
- VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
- NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
- ),
- INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-) ;
-
#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
),
) ;
-#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM 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
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
- fr="Conversion de conditions aux limites et chargements IDEAS en commandes Aster",
- UNITE_IDEAS =SIMP(statut='f',typ='I',defaut=19),
- UNITE_ASTER =SIMP(statut='f',typ='I',defaut=21),
- MODELE =SIMP(statut='o',typ=modele),
-) ;
-
#& MODIF COMMANDE DATE 09/09/2003 AUTEUR DURAND C.DURAND
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
TITRE =SIMP(statut='f',typ='TXM',max='**' ),
) ;
-#& MODIF COMMANDE DATE 28/10/2003 AUTEUR DURAND C.DURAND
+#& MODIF COMMANDE DATE 10/02/2004 AUTEUR LEBOUVIE F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
,defaut= 1.0E-6),
ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
- TYPE_MATR_COMP =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
),
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
# ======================================================================
"""
- Ce module sert à lancer EFICAS configuré pour Code_Aster
+ Ce module sert à lancer EFICAS configuré pour Code_Aster
"""
# Modules Python
import sys
# Modules Eficas
import prefs
+if hasattr(prefs,'encoding'):
+ # Hack pour changer le codage par defaut des strings
+ import sys
+ reload(sys)
+ sys.setdefaultencoding(prefs.encoding)
+ del sys.setdefaultencoding
+ # Fin hack
+
sys.path[:0]=[prefs.INSTALLDIR]
import Editeur
# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
lang='fr'
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
labels= ('Fichier','Edition','Jeu de commandes',
# 'Catalogue','Browsers',
'Options',
),
('Jeu de commandes',[
('Rapport de validation','visuCRJDC'),
- # ('Fichier à plat','visu_a_plat'),
+# ('Fichier à plat','visu_a_plat'),
('Fichier format v6','visuJDC_py'),
('Fichier source','visu_txt_brut_JDC'),
('Paramètres Eficas','affichage_fichier_ini'),
-tiny:
- env PYTHONPATH=`pwd`:`pwd`/..:`pwd`/../Aster epydoc -n EFICASV1.5 --show-imports -o tiny_api \
- ../Aster/prefs.py \
- ../Noyau/*.py \
- ../Validation/*.py \
- ../Ihm/*.py \
- ../Extensions/*.py \
- ../Accas/*.py \
- ../Editeur/*.py \
- ../generator/*.py \
- ../convert/*.py \
- ../convert/Parserv5/__init__.py \
- ../convert/Parserv5/conv.py \
- ../AIDE/__init__.py ../AIDE/aide_gui.py ../AIDE/aide_objets.py ../AIDE/viewer.py \
- ../Tools/*.py \
- ../Tools/*/*.py \
+EFICAS=..
+
+api:
+ (export PYTHONPATH=$(EFICAS)/Aster;\
+ epydoc -n EFICAS --show-imports -o api_eficas -u http://eficas.der.edf.fr \
+ $(EFICAS)/Noyau/ \
+ $(EFICAS)/Validation/ \
+ $(EFICAS)/Ihm/ \
+ $(EFICAS)/Extensions/ \
+ $(EFICAS)/Accas/ \
+ $(EFICAS)/Editeur/ \
+ $(EFICAS)/generator/ \
+ $(EFICAS)/convert/*.py $(EFICAS)/convert/Parserv5/__init__.py $(EFICAS)/convert/Parserv5/conv.py \
+ $(EFICAS)/AIDE/__init__.py $(EFICAS)/AIDE/aide_gui.py $(EFICAS)/AIDE/aide_objets.py $(EFICAS)/AIDE/viewer.py \
+ $(EFICAS)/Tools/ \
+ )
+
+debug: # options -v --debug pour debugger
+ (export PYTHONPATH=$(EFICAS)/Aster;\
+ epydoc -n EFICAS --show-imports -v --debug -o api_debug -u http://eficas.der.edf.fr \
+ $(EFICAS)/Editeur/ \
+ )
L'aspect applicatif doit etre pris en charge par la classe dérivée
"""
# Modules Python
+import os
import sys
import types
import Pmw
import Tkinter
-from tkMessageBox import showinfo,askyesno,showerror
+from widgets import showerror
# Modules Eficas
import splash
self.affiche_FAQ()
# AY : cas ou le nom du fichier a été passé en argument
if fichier :
- try :
- self.bureau.openJDC( str(MakeNomComplet.FILENAME(fichier)) )
- except Exception,e :
- showerror( "ARGUMENT INVALIDE", str(e) )
+ fich=str(MakeNomComplet.FILENAME(fichier))
+ if not os.path.isfile(fich):
+ showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
+ else:
+ self.bureau.openJDC( fich)
# AY : fin
+ # PN : ajout d un attribut pour indiquer si
+ # l appli a ete lance depuis Salome
+ self.salome=0
def send_message(self,message):
self.message=message
"""
# Modules Python
import os,string
-from tkFileDialog import *
# Modules Eficas
import Interp
import os,string
import traceback
import Pmw
-from tkFileDialog import askopenfilename,asksaveasfilename
-from tkMessageBox import showinfo,askyesno,showerror
+from widgets import askopenfilename,asksaveasfilename
+from widgets import showinfo,askyesno,showerror
# Modules Eficas
import splash
defaultextension=".comm",
filetypes = filetypes,
initialdir = self.initialdir)
- if file != '':
+ if file :
self.fileName = file
e=extension_fichier(file)
self.JDCName=stripPath(file)
"""
Sauvegarde le JDC courant.
Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
- - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il
+ Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il
veut sauver le JDC
- - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
+ Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
"""
if not hasattr(self,'JDC') : return 0
format=self.appli.format_fichier.get()
if echo =='oui' or self.JDCDisplay_courant.fichier == None:
return self.asknomsauvegardeJDC()
elif self.JDCDisplay_courant.fichier != None :
+ #PN Ajout --> Salome
+ # Pour sauvegarde dans l etude si lancement depuis salome
+ if self.appli.salome != 0:
+ import eficas_etude
+ self.appli.salome.rangeInStudy(self.JDCDisplay_courant.fichier)
+ from panelsSalome import SALOME_UNIQUE_BASE_Panel
+ if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
+ self.appli.salome.creeConfigTxt(self.appli.CONFIGURATION.initialdir,SALOME_UNIQUE_BASE_Panel.dict_fichier_unite)
+ #PN Fin Ajout --> Salome
# le JDC a déjà un nom : on sauvegarde directement sans demander
# un autre nom au développeur
if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini) :
filetypes = filtyp,
initialdir = self.appli.CONFIGURATION.initialdir)
#initialdir = self.appli.CONFIGURATION.rep_user)
- if sauvegarde != '':
+ if sauvegarde :
+ # PN ajout --> Salome
+ # Pour sauvegarde dans l etude si lancement depuis salome
+ if self.appli.salome != 0:
+ import eficas_etude
+ self.appli.salome.rangeInStudy(sauvegarde)
+ from panelsSalome import SALOME_UNIQUE_BASE_Panel
+ if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
+ self.appli.salome.creeConfigTxt(self.appli.CONFIGURATION.initialdir,SALOME_UNIQUE_BASE_Panel.dict_fichier_unite)
+ # PN fin ajout --> Salome
if not save_in_file(sauvegarde,self.jdc_fini) :
showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`)
return 0
def visuJDC_py(self):
"""
Méthode permettant d'afficher dans une fenêtre à part l'écho au
- format python du jdc courant
+ format python du jdc courant
"""
if not hasattr(self,'JDC') : return
jdc_fini = self.get_text_JDC('python')
def visuJDC(self):
"""
Méthode permettant d'afficher dans une fenêtre à part l'écho au
- format .comm ou .py du jdc courant
+ format .comm ou .py du jdc courant
"""
if not hasattr(self,'JDC') : return
titre = 'fichier '+ self.JDCName + ' à la syntaxe '+ self.code
import types
import string
import Pmw
-from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
+from widgets import showinfo
from Tkinter import *
# Modules Eficas
#
__version__="$Name: $"
-__Id__="$Id: cataediteur.py,v 1.2 2002/05/15 15:31:58 eficas Exp $"
+__Id__="$Id: cataediteur.py,v 1.3.6.1 2004/03/01 11:14:09 eficas Exp $"
#
Fonte_Niveau = fontes.canvas_gras_italique
Affiche dans self.widget_text la valeur de l'objet commentaire
(annule d'éventuelles modifications faite par l'utilisateur)
"""
- self.widget_text.settext(self.node.item.get_valeur())
+ t=self.node.item.get_valeur()
+ try:
+ self.widget_text.settext(unicode(t))
+ except:
+ # Si probleme avec unicode
+ self.widget_text.settext(t)
class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
panel = COMMPanel
from Tkinter import *
import Pmw
import string
-from tkMessageBox import showerror
+from widgets import showerror
import Objecttreeitem
import panels
from Tkinter import *
import Pmw
import string
-import tkMessageBox
# import modules EFICAS
+import widgets
import panels
import fontes
import compooper
self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
else:
# la formule est incorrecte : on affiche les erreurs
- tkMessageBox.showerror("Formule incorrecte",erreur)
+ widgets.showerror("Formule incorrecte",erreur)
self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
def display_valeur(self):
else:
test,erreur = self.node.item.verif_nom(nom)
if not test:
- tkMessageBox.showerror("Nom invalide",erreur)
+ widgets.showerror("Nom invalide",erreur)
self.entry_nom.focus()
self.entry_nom.selection_range(0,END)
self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
else:
test,erreur = self.node.item.verif_arguments(arguments)
if not test:
- tkMessageBox.showerror("Argument(s) invalide(s)",erreur)
+ widgets.showerror("Argument(s) invalide(s)",erreur)
self.entry_arg.focus()
self.entry_arg.selection_range(0,END)
self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
test,erreur = self.node.item.verif_formule((new_nom,new_typ,new_arg,new_exp))
if not test:
- tkMessageBox.showerror("Corps de FORMULE invalide",erreur)
+ widgets.showerror("Corps de FORMULE invalide",erreur)
self.entry_exp.focus()
self.entry_exp.selection_range(0,END)
self.parent.appli.affiche_infos("Corps de FORMULE invalide")
import types
import Tkinter
import Pmw
-from tkFileDialog import *
-from tkMessageBox import showinfo,showerror,askyesno
import traceback
# Modules Eficas
import fontes
import compooper
import convert
+from widgets import askopenfilename
from widgets import Fenetre,FenetreYesNo
+from widgets import showinfo,showerror
#
__version__="$Name: $"
-__Id__="$Id: compomacro.py,v 1.10 2002/11/14 12:14:20 eficas Exp $"
+__Id__="$Id: compomacro.py,v 1.11.2.1 2004/03/01 11:14:09 eficas Exp $"
#
class MACROPanel(panels.OngletPanel):
sélectionné dans self.entry
"""
file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom())
- if file != '' :
+ if file :
self.entry.delete(0,Tkinter.END)
self.entry.insert(0,file)
from Tkinter import *
import Pmw
import string
-import tkMessageBox
# import modules EFICAS
+import widgets
import Objecttreeitem
import panels
import fontes
self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
else:
# la formule est incorrecte : on affiche les erreurs
- tkMessageBox.showerror("Expression EVAL incorrecte",erreur)
+ widgets.showerror("Expression EVAL incorrecte",erreur)
self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
def display_valeur(self):
nom = self.entry_nom.get()
test,erreur = self.node.item.verif_nom(nom)
if not test :
- tkMessageBox.showerror("Nom invalide",erreur)
+ widgets.showerror("Nom invalide",erreur)
self.entry_nom.focus()
self.entry_nom.selection_range(0,END)
self.parent.appli.affiche_infos("Nom du paramètre refusé")
exp_eval = self.entry_val.get()
test,erreur = self.node.item.verif_eval(exp_eval)
if not test:
- tkMessageBox.showerror("Expression EVAL invalide",erreur)
+ widgets.showerror("Expression EVAL invalide",erreur)
self.entry_val.focus()
self.entry_val.selection_range(0,END)
self.parent.appli.affiche_infos("Expression EVAL refusée")
import string,types,os
from Tkinter import *
import Pmw
-from tkFileDialog import *
-from tkMessageBox import showinfo
from copy import copy,deepcopy
import traceback
from Noyau.N_CR import justify_text
from utils import substract_list
-
-class newSIMPPanel(panels.OngletPanel):
- """
- Classe virtuelle servant de classe mère à toutes les classes Panel
- servant à afficher et récupérer la valeur d'un mot-clé simple.
- Le panel est différent suivant le type de la valeur attendu
- """
- def init(self):
- """
- Méthode appelée par le constructeur de OngletPanel :
- construit le notebook à 2 onglets utilisé par tous les panels de
- tous les mots-clés simples
- """
- nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
- nb.pack(fill = 'both', expand = 1)
- self.nb=nb
- nb.add('Valeur', tab_text='Saisir valeur')
- #nb.add('Commentaire',tab_text='Insérer commentaire')
- self.makeValeurPage(nb.page('Valeur'))
- #self.makeCommentairePage(nb.page("Commentaire"))
- nb.setnaturalsize()
-
-# ----------------------------------------------------------------------------------------
-# Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
-# au mot-clé courant
-# ----------------------------------------------------------------------------------------
-
- def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
- """
- Enregistre val comme valeur de self.node.item.object SANS
- faire de test de validité ni ré-évaluer l'ancienne valeur
- permet de rester avec des valeurs non entrees et de ne pas
- ré-évaluer des entiers par exemple
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- self.node.item.set_valeur(name)
- self.parent.appli.affiche_infos(mess)
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- self.node.update()
-
- def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
- """
- Enregistre val comme valeur de self.node.item.object
- en evaluant l item et en le validant
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- if name != None:
- valeur = name
- validite = 1
- else :
- valeurentree= self.entry.get()
- self.entry.delete(0,END)
- if valeurentree == '': valeurentree=None
- valeur,validite=self.node.item.eval_valeur(valeurentree)
- if not validite :
- valeur= self.entry.get()
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
- self.parent.appli.affiche_infos(commentaire)
-
- if validite :
- if self.node.item.is_list() :
- validite=self.node.item.valide_liste_complete(valeur)
- commentaire=self.node.item.info_erreur_liste()
- else :
- validite=self.node.item.valide_item(valeur)
- commentaire=self.node.item.info_erreur_item()
-
- if validite :
- self.node.item.set_valeur(valeur)
- self.parent.appli.affiche_infos(mess)
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- self.node.update()
- if self.node.item.isvalid():
- self.node.parent.select()
- else :
- self.parent.appli.affiche_infos(commentaire)
-
-# ----------------------------------------------------------------------------------------
-# Méthodes utilisées pour la manipulation des items dans les listes de choix
-# ----------------------------------------------------------------------------------------
- def selectValeur(self,name):
- self.selected_valeur = name
-
- def deselectValeur(self,name):
- self.selectValeur = None
-
- def sup_valeur(self,name=None):
- """
- Supprime la valeur selectionnée de la liste des valeurs et la rajoute
- à la liste des choix possibles
- """
- if hasattr(self,'selected_valeur') :
- if ( self.selected_valeur != None and self.selected_valeur != ''):
- liste_valeurs = self.Liste_valeurs.get_liste()
- liste_valeurs.remove(self.selected_valeur)
- self.Liste_valeurs.put_liste(liste_valeurs)
- listeActuelle=self.Liste_valeurs.get_liste()
- liste_choix=self.node.item.get_liste_possible(listeActuelle)
- self.Liste_choix.put_liste(liste_choix)
- self.selected_valeur = None
-
- def add_choix(self,name=None):
- """
- Ajoute le choix selectionné à la liste des valeurs et le retire
- de la liste des choix possibles
- """
-
- if hasattr(self,'selected_choix') :
- if (self.selected_choix != None and self.selected_choix != ''):
- min,max = self.node.item.GetMinMax()
- liste_valeurs = self.Liste_valeurs.get_liste()
- if len(liste_valeurs) >= max :
- self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
- return
- liste_valeurs.append(self.selected_choix)
- self.Liste_valeurs.put_liste(liste_valeurs)
- listeActuelle=self.Liste_valeurs.get_liste()
- liste_choix=self.node.item.get_liste_possible(listeActuelle)
- self.Liste_choix.put_liste(liste_choix)
- self.selected_choix = None
-
- def selectChoix(self,name):
- self.selected_choix = name
-
- def deselectChoix(self,name):
- self.selectChoix = None
-
- def raisecmd(self,page):
- try:
- self.entry.focus()
- except:
- pass
-
-class SHELLPanel(newSIMPPanel):
- """
- Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
- """
-
- def makeValeurPage(self,page):
- """
- Affiche la page concernant l'objet pointé par self qui attend un shell
- """
- objet_mc = self.node.item.get_definition()
- aide = self.gen_aide()
- aide = justify_text(texte=aide)
- self.frame = Frame(page)
- self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
- label_aide = Label(self.frame,text = aide)
- label_aide.place(relx=0.5,rely=0.1,anchor='center')
- self.text = Text(self.frame,bg='gray95')
- self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
- but_val = Button(self.frame,text='Valider',command = self.valide_shell)
- but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
- but_val.place(relx=0.35,rely=0.9,anchor='center')
- but_ann.place(relx=0.65,rely=0.9,anchor='center')
- self.display_valeur()
-
- def gen_aide(self):
- """
- Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
- pointé par self
- """
- return "Un shell est attendu"
-
- def valide_shell(self,event=None):
- """
- Récupère la valeur saisie par l'utilisateur dans self.text
- et la stocke dans l'objet MCSIMP courant
- """
- texte = self.text.get(1.0,END)
- self.record_valeur(texte)
-
- def annule_shell(self,event=None):
- """
- Annule toute saisie dans self.text
- """
- self.text.delete(0,END)
-
- def display_valeur(self,val=None):
- """
- Affiche la valeur de l'objet pointé par self
- """
- if val != None :
- valeur = val
- else:
- valeur = self.node.item.get_valeur()
- if valeur == None or valeur == '': return
- self.text.insert(END,valeur)
-
-class PLUSIEURS_Panel(newSIMPPanel):
- """
- Classe virtuelle servant de classe mère à toutes celles définissant
- un panneau pour un mot-clé simple qui attend une liste de valeurs
- """
- def accepte_modifs_valeur(self,min,max):
- """
- Méthode qui récupère la liste des valeurs donnée par l'utilisateur
- et l'affecte au mot-clé courant.
- """
- l1_valeurs = self.Liste_valeurs.get_liste()
- l_valeurs=[]
- for val in l1_valeurs :
- if val != '' and val != None :
- l_valeurs.append(val)
-
- longueur = len(l_valeurs)
- if longueur < min or longueur > max :
- self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
- return
- if longueur > 1:
- valeur = tuple(l_valeurs)
- elif longueur == 1:
- valeur = l_valeurs[0]
- else:
- valeur = None
-
- self.parent.appli.affiche_infos("Valeur acceptée")
- self.record_valeur(valeur)
- #if self.node.item.isvalid():
- # self.node.parent.select()
- # fermeture de la fenêtre de sélection
- if self.ajout_valeurs:
- self.ajout_valeurs.quit()
-
- def annule_modifs_valeur(self):
- """
- RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
- """
- self.node.select()
- # fermeture de la fenêtre de sélection
- if self.ajout_valeurs:
- self.ajout_valeurs.quit()
-
- def add_valeur_sans_into(self,name=None,encorevalide=1):
- """
- Lit ce que l'utilisateur a saisi dans self.entry et cherche à
- l'évaluer :
- - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
- - sinon elle est refusée
- encorevalide vaut 1 si le validateur trouve l item et la liste correctes
- 0 si le validateur trouve la valeur de l item incorrecte
- -1 si le validateur trouve la liste incorrecte
- """
-
- commentaire="Valeur incorrecte : ajout à la liste refusé"
- testvalide=1
-
- # Lecture de la zone de saisie et evaluation si nécessaire
- if name != None :
- valeur = name
- else:
- valeurentree = self.get_valeur()
- if valeurentree == '': valeur=None
- valeurentree,testvalide=self.node.item.eval_valeur(valeur)
- if (not testvalide) :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
-
- # Pas de traitement des valeurs nulles ( a priori clic involontaire
- if (valeur == None or valeur =="") :
- commentaire = "Pas de saisie des valeurs nulles"
- encorevalide = -2
- testtype=0
- else :
- testtype = self.node.item.object.verif_type(valeur)
- if not testtype :
- commentaire ="Type de la valeur incorrecte"
- encorevalide=-2
-
- if (encorevalide ==0) :
- commentaire=self.node.item.info_erreur_item()
- if (encorevalide == -1) :
- commentaire=self.node.item.info_erreur_liste()
- # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
- min,max = self.node.item.GetMinMax()
- if len(self.Liste_valeurs.get_liste()) >= max :
- commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
-
- if testvalide and (encorevalide == 1):
- min,max = self.node.item.GetMinMax()
-
- if testtype :
- liste_valeurs = self.Liste_valeurs.get_liste()
- if len(liste_valeurs) >= max :
- commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
- else :
- liste_valeurs.append(valeur)
- self.Liste_valeurs.put_liste(liste_valeurs)
- self.erase_valeur()
- commentaire="Nouvelle valeur acceptée"
- else :
- commentaire ="Type de la valeur incorrecte"
-
- #self.erase_valeur()
- self.parent.appli.affiche_infos(commentaire)
-
- def sup_valeur_sans_into(self,name=None):
- """
- Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
- """
- liste_valeurs = self.Liste_valeurs.get_liste()
- try:
- liste_valeurs.remove(self.selected_valeur)
- except:
- # la valeur sélectionnée n'est pas dans la liste
- return
- self.Liste_valeurs.put_liste(liste_valeurs)
- self.display_valeur(self.selected_valeur)
- self.selected_valeur = None
-
- def display_valeur(self,val=None):
- """
- Affiche la valeur passée en argument dans l'entry de saisie.
- Par défaut affiche la valeur du mot-clé simple
- """
- if not val :
- valeur = self.node.item.getval()
- else:
- valeur = val
- self.entry.delete(0,END)
- if not valeur : return
- self.entry.insert(0,str(valeur))
-
-
-class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
- """
- Classe servant à définir le panneau permettant d'afficher et de saisir une
- liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
- de possibles
- """
- self.ajout_valeurs = None
- # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
- # la liste des choix et la liste des valeurs
- aide = self.get_aide()
- aide = justify_text(texte=aide)
- bulle_aide=self.get_bulle_aide()
- objet_mc = self.node.item.get_definition()
- min,max = self.node.item.GetMinMax()
- #l_choix=list(objet_mc.into)
- l_valeurs = self.node.item.GetListeValeurs()
- l_choix= self.node.item.get_liste_possible(l_valeurs)
- # reinitialisation de l_valeurs
- l_valeurs = self.node.item.GetListeValeurs()
-
- # remplissage du panneau
- self.frame_valeurs = Frame(page)
- self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
- self.frame_boutons_fleches = Frame(page)
- self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
- self.frame_choix = Frame(page)
- self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
- self.frame_boutons = Frame(page)
- self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
- self.frame_aide = Frame(page)
- self.frame_aide.place(relx=0.1,rely=0.75,relwidth=0.9,relheight=0.1)
- liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
- ("<Button-3>",self.deselectValeur),
- ("<Double-Button-1>",self.sup_valeur))
- liste_commandes_choix = (("<Button-1>",self.selectChoix),
- ("<Button-3>",self.deselectChoix),
- ("<Double-Button-1>",self.add_choix))
- self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
- l_valeurs,liste_commandes = liste_commandes_valeurs,
- titre="Valeur(s) actuelle(s)")
- self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
- liste_commandes = liste_commandes_choix,
- titre= "Valeurs possibles")
- bouton_add = Button(self.frame_boutons_fleches,
- #text="<--",
- image = images.get_image('arrow_left'),
- command = self.add_choix)
- bouton_sup = Button(self.frame_boutons_fleches,
- #text="-->",
- image = images.get_image('arrow_right'),
- command = self.sup_valeur)
- bouton_accepter = Button(self.frame_boutons,
- text='Valider',
- command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
- bouton_annuler = Button(self.frame_boutons,
- text = 'Annuler',
- command = self.annule_modifs_valeur)
- bouton_add.place(relx=0.3,rely=0.35)
- bouton_sup.place(relx=0.3,rely=0.65)
- for but in (bouton_accepter,bouton_annuler):
- but.pack(side='left',padx=5)
- self.Liste_valeurs.affiche_liste()
- self.Liste_choix.affiche_liste()
- for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
- fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- self.frame_aide.update()
- self.aide = Label(self.frame_aide,
- text = aide,
- justify='center',
- anchor='center',
- wraplength=int(self.frame_aide.winfo_width()*0.8))
- self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
-
- def get_aide(self):
- """
- Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
- que saisit l'utilisateur
- """
- commentaire=""
- mc = self.node.item.get_definition()
- d_aides = { 'TXM' : 'chaînes de caractères',
- 'R' : 'réels',
- 'I' : 'entiers',
- 'C' : 'complexes'}
- type = mc.type[0]
- if not d_aides.has_key(type) :
- if mc.min == mc.max:
- return str(mc.min)+" valeur(s) est(sont) attendue(s)"
- else :
- return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
- if mc.min == mc.max:
- commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
- else :
- commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type "+d_aides[type]+" sont attendues"
- aideval=self.node.item.aide()
- commentaire=commentaire + "\n" + aideval
- return commentaire
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide du panneau (affichée par clic droit)
- """
- return """Un clic sur une valeur des deux listes la sélectionne.
- - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
- dans la liste des valeurs que vous voulez affecter au mot-clé simple
- - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
- sélectionnée (elle apparaît alors à nouveau comme choix possible
- dans la liste des choix à droite)
- - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
- au mot-clé simple courant
- - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
- avant toute modification depuis le dernier 'Valider'"""
-
-class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
- """
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de donner une liste de valeurs qui ne sont pas
- à choisir dans une liste discrètes et qui sont de type de base :
- entier, réel, string,...
- """
- def makeValeurPage(self,page):
- """
- Crée la page de saisie d'une liste de valeurs à priori quelconques,
- cad qui ne sont pas à choisir dans une liste prédéfinie
- """
- # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
- # et la liste des valeurs déjà affectées à l'objet courant
- bulle_aide=self.get_bulle_aide()
- objet_mc = self.node.item.get_definition()
- aide = self.get_aide()
- aide = justify_text(texte=aide)
- min,max = self.node.item.GetMinMax()
- l_valeurs = self.node.item.GetListeValeurs()
-
- # création des frames globales
- self.frame1 = Frame(page,relief='groove',bd=2)
- self.frame2 = Frame(page)
- self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
- self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
- self.frame_right = Frame(self.frame1)
- self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
-
- # création des frames internes
- self.frame_valeurs = Frame(self.frame1)
- self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
- self.frame_boutons_fleches = Frame(self.frame_right)
- self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
- self.frame_choix = Frame(self.frame_right)
- self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
- self.frame_aide = Frame(self.frame_right)
- self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
- self.frame_boutons = Frame(self.frame2)
- self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
- for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
- self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
- fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
- # création des objets dans les frames
- liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
- ("<Button-3>",self.deselectValeur),
- ("<Double-Button-1>",self.sup_valeur_sans_into))
- self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
- titre="Valeur(s) actuelle(s)")
-
- # Création de l'entry ou de la liste des SD
- self.label = Label(self.frame_choix,text="Valeur :")
- # PN : pour ajouter les validators
- self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
- self.label.place(relx=0.05,rely=0.5)
-
- # Création d'un bouton "Importer ..." sur le panel.
- bouton_valeurs_fichier = Button(self.frame_choix,
- text="Importer ...",
- command=self.select_in_file)
- bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
- self.ajout_valeurs = None
-
- # boutons Ajouter et Supprimer
- bouton_add = Button(self.frame_boutons_fleches,
- image = images.get_image('arrow_left'),
- command = self.add_valeur_plusieurs_base)
- bouton_sup = Button(self.frame_boutons_fleches,
- image = images.get_image('arrow_right'),
- command = self.sup_valeur_sans_into)
- bouton_add.place(relx=0.3,rely=0.35)
- bouton_sup.place(relx=0.3,rely=0.65)
- # affichage de l'aide
- self.frame_aide.update()
- self.aide = Label(self.frame_aide,
- text = aide,
- justify='center',
- anchor='center',
- wraplength=int(self.frame_aide.winfo_width()*0.8))
- self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
- self.Liste_valeurs.affiche_liste()
- # boutons Accepter et Annuler
- bouton_accepter = Button(self.frame_boutons,
- text='Valider',
- command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
- bouton_annuler = Button(self.frame_boutons,
- text = 'Annuler',
- command = self.annule_modifs_valeur)
- for but in (bouton_accepter,bouton_annuler):
- but.pack(side='left',padx=5)
-
- def add_valeur_plusieurs_base(self,name=None):
- if name != None :
- valeur = name
- else:
- valeurentree = self.get_valeur()
- if valeurentree == '': valeur=None
- valeur,validite=self.node.item.eval_valeur(valeurentree)
- if not validite :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
- self.parent.appli.affiche_infos(commentaire)
- return
-
- encorevalide=self.node.item.valide_item(valeur)
- if encorevalide :
- listecourante=self.Liste_valeurs.get_liste()
- encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
- if not encorevalide : encorevalide = -1
- self.add_valeur_sans_into(valeur,encorevalide)
-
- def select_in_file(self):
- """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
- nom_fichier = askopenfilename(title="Choix fichier :")
- if nom_fichier == "":
- return
- try:
- f = open(nom_fichier, "rb")
- selection_texte = f.read()
- f.close()
- self.ajout_valeurs = FenetreDeSelection(self,
- self.node.item,
- self.parent.appli,
- titre="Sélection de valeurs",
- texte=selection_texte)
- except:
- traceback.print_exc()
- showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
-
- def get_bulle_aide(self):
- """
- Retourne l'aide associée au panneau courant
- """
- return """Taper dans la boîte de saisie de droite la valeur que
- vous voulez affecter au mot-clé simple.
- - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
- dans la liste des valeurs que vous voulez affecter au mot-clé simple
- - Un clic sur une valeur de la liste la sélectionne
- - Un clic sur la flèche droite ou un double-clic retire la valeur
- sélectionnée de la liste
- - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
- au mot-clé simple
- - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
- depuis le dernier clic sur 'Valider'"""
-
- def get_aide(self):
- """
- Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
- que saisit l'utilisateur
- """
- commentaire=""
- mc = self.node.item.get_definition()
- d_aides = { 'TXM' : 'chaînes de caractères',
- 'R' : 'réels',
- 'I' : 'entiers',
- 'C' : 'complexes'}
- type = mc.type[0]
- if not d_aides.has_key(type) : return 'Type de base inconnu'
- if mc.min == mc.max:
- commentaire="Une liste de "+d_aides[type]+" chaînes de caractères est attendue"
- else :
- commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
- aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+aideval
- return commentaire
-
- def make_entry(self,frame,command):
- """
- Crée l'entry de saisie de la valeur souhaitée : distingue le
- cas d'un complexe attendu, d'une autre valeur quelconque
- """
- if self.node.item.wait_complex():
- self.typ_cplx=StringVar()
- self.typ_cplx.set('RI')
- rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI')
- rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP')
- self.entry1 = Pmw.EntryField(frame,validate='real')
- self.entry2 = Pmw.EntryField(frame,validate='real')
- rb1.place(relx=0.05,rely = 0.4)
- rb2.place(relx=0.05,rely = 0.6)
- self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
- self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
- self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
- self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
- self.entry1.focus()
- else:
- self.entry = Entry(frame,relief='sunken')
- self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
- self.entry.bind("<Return>",lambda e,c=command:c())
- self.entry.focus()
-
- def get_valeur(self):
- """
- Retourne la valeur saisie par l'utilisateur dans self.entry
- """
- return self.entry.get()
-
- def erase_valeur(self):
- """
- Efface la valeur donnée par l'utilisateur dans l'entry
- """
- self.entry.delete(0,END)
-
-class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
- """
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de donner une liste de valeurs qui ne sont pas
- à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
- de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
- """
- # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
- # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
- bulle_aide=self.get_bulle_aide()
- self.ajout_valeurs=None
- objet_mc = self.node.item.get_definition()
- aide = self.get_aide()
- aide = justify_text(texte=aide)
- min,max = self.node.item.GetMinMax()
- l_valeurs = self.node.item.GetListeValeurs()
- l_choix=self.node.item.get_sd_avant_du_bon_type()
- l_choix.sort()
- # remplissage du panneau
- self.frame_valeurs = Frame(page)
- self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
- self.frame_boutons_fleches = Frame(page)
- self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
- self.frame_choix = Frame(page)
- self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
- self.frame_boutons = Frame(page)
- self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
- liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
- ("<Button-3>",self.deselectValeur),
- ("<Double-Button-1>",self.sup_valeur_sans_into))
- liste_commandes_choix = (("<Button-1>",self.selectChoix),
- ("<Button-3>",self.deselectChoix),
- # ("<Double-Button-1>",self.add_valeur_sans_into))
- ("<Double-Button-1>",self.add_eval_valeur_sans_into))
- self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
- titre="Valeur(s) actuelle(s)")
- self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
- titre= "Valeurs possibles")
- bouton_add = Button(self.frame_boutons_fleches,
- #text="<--",
- image = images.get_image('arrow_left'),
- # command = self.add_valeur_sans_into)
- command = self.add_eval_valeur_sans_into)
- bouton_sup = Button(self.frame_boutons_fleches,
- #text="-->",
- image = images.get_image('arrow_right'),
- command = self.sup_valeur_sans_into)
- bouton_accepter = Button(self.frame_boutons,
- text='Valider',
- command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
- bouton_annuler = Button(self.frame_boutons,
- text = 'Annuler',
- command = self.annule_modifs_valeur)
- bouton_add.place(relx=0.3,rely=0.35)
- bouton_sup.place(relx=0.3,rely=0.65)
- for but in (bouton_accepter,bouton_annuler):
- but.pack(side='left',padx=5)
- self.Liste_valeurs.affiche_liste()
- self.Liste_choix.affiche_liste()
- for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
- fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
- def add_eval_valeur_sans_into(self,valeurentree=None):
- valeur,validite=self.node.item.eval_valeur(valeurentree)
- if not validite :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
- self.parent.appli.affiche_infos(commentaire)
- return
- self.add_valeur_sans_into(valeur)
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide associée au panneau
- """
- return """Un clic sur une valeur des deux listes la sélectionne.
- - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
- dans la liste des valeurs que vous voulez affecter au mot-clé simple
- - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
- sélectionnée (elle apparaît alors à nouveau comme choix possible
- dans la liste des choix à droite)
- - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
- au mot-clé simple courant
- - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
- avant toute modification depuis le dernier 'Valider'"""
-
- def get_aide(self):
- """
- Retourne la phrase d'aide indiquant de quel type doivent être les
- valeurs que doit entrer l'utilisateur
- """
- commentaire=""
- mc = self.node.item.get_definition()
- type = mc.type[0].__name__
- if len(mc.type)>1 :
- for typ in mc.type[1:] :
- type = type + ' ou '+typ.__name__
- if mc.min == mc.max:
- commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
- else :
- commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
- aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- return commentaire
-
-
- def sup_valeur(self,name=None):
- """
- Supprime la valeur selectionnée de la liste des valeurs et la rajoute
- à la liste des choix possibles
- """
- liste_valeurs = self.Liste_valeurs.get_liste()
- liste_valeurs.remove(self.selected_valeur)
- liste_choix = self.node.item.get_definition().into
- liste_choix = substract_list(liste_choix,liste_valeurs)
- self.Liste_valeurs.put_liste(liste_valeurs)
- self.Liste_choix.put_liste(liste_choix)
- self.selected_valeur = None
-
- def erase_valeur(self):
- pass
-
- def get_valeur(self):
- """
- Retourne la valeur sélectionnée dans la liste des choix
- """
- return self.selected_choix
-
- def display_valeur(self,val=None):
- """
- Affiche la valeur passée en argument dans l'entry de saisie.
- Par défaut affiche la valeur du mot-clé simple
- """
- # Il n'y a pas d'entry pour ce type de panneau
- return
-
-
-class UNIQUE_Panel(newSIMPPanel):
- """
- Classe virtuelle servant de classe mère à toutes celles définissant un panneau
- permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
- """
-
- def erase_valeur(self):
- """
- Efface l'entry de saisie
- """
- self.entry.delete(0,END)
-
- def get_valeur(self):
- """
- Retourne la valeur donnée par l'utilisateur
- """
- return self.entry.get()
-
- def valid_valeur(self):
- """
- Teste si la valeur fournie par l'utilisateur est une valeur permise :
- - si oui, l'enregistre
- - si non, restaure l'ancienne valeur
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- anc_val = self.node.item.get_valeur()
- valeurentree = self.get_valeur()
- self.erase_valeur()
- valeur,validite=self.node.item.eval_valeur(valeurentree)
- if not validite :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
- self.parent.appli.affiche_infos(commentaire)
- return
-
- test = self.node.item.set_valeur(valeur)
-
- if not test :
- mess = "impossible d'évaluer : %s " %`valeur`
- self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess)
- elif self.node.item.isvalid() :
- self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- self.node.update()
- self.node.parent.select()
- else :
- cr = self.node.item.get_cr()
- mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
- self.reset_old_valeur(anc_val,mess=mess)
-
-class UNIQUE_INTO_Panel(UNIQUE_Panel):
- """
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie d'une seule valeur parmi un ensemble
- discret de possibles
- """
- # récupération de la bulle d'aide et de l'objet mc
- bulle_aide=self.get_bulle_aide()
- objet_mc = self.node.item.get_definition()
- # remplissage du panel
- self.frame_valeur = Frame(page)
- self.frame_valeur.pack(fill='both',expand=1)
- self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide :
- s.parent.appli.affiche_aide(e,a))
- self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- #l_choix=list(objet_mc.into)
- #l_choix.sort()
- l_choix=self.node.item.get_liste_possible([])
- self.label = Label(self.frame_valeur,text='Choisir une valeur :')
- self.label.pack(side='top')
- self.frame = Frame(page)
- self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
- liste_commandes = (("<Button-1>",self.selectChoix),
- ("<Button-3>",self.deselectChoix),
- ("<Double-Button-1>",self.record_valeur))
- self.Liste_choix = ListeChoix(self,self.frame,l_choix,
- liste_commandes = liste_commandes,
- titre="Valeurs possibles")
- self.Liste_choix.affiche_liste()
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
- """
- return """Double-cliquez sur la valeur désirée
- pour valoriser le mot-clé simple courant"""
-
-class UNIQUE_ASSD_Panel(UNIQUE_Panel):
- """
- Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
- d'un type dérivé d'ASSD
- """
- def valid_valeur_automatique(self):
- """
- Réalise la validation d'un concept sans remonter dans le
- node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
- Identique à valid_valeur moins appel de self.node.parent.select()
- On pourrait supposer que le seul concept présent est valide et donc ne pas
- réaliser tous les tests de vérification.
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- valeur = self.get_valeur()
- self.erase_valeur()
- anc_val = self.node.item.get_valeur()
- valeur,validite=self.node.item.eval_valeur_item(valeur)
- test = self.node.item.set_valeur(valeur)
- if not test :
- mess = "impossible d'évaluer : %s " %`valeur`
- self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
- elif self.node.item.isvalid() :
- self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- self.node.update()
- else :
- cr = self.node.item.get_cr()
- mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
- self.reset_old_valeur(anc_val,mess=mess)
-
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une
- SD de type dérivé d'ASSD
- """
- # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
- # et de la liste des SD du bon type (constituant la liste des choix)
- bulle_aide=self.get_bulle_aide()
- aide=self.get_aide()
- aide= justify_text(texte=aide)
- liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
- # Remplissage du panneau
- self.valeur_choisie = StringVar()
- self.valeur_choisie.set('')
- min,max = self.node.item.GetMinMax()
- if (min == 1 and min == max and len(liste_noms_sd)==1):
- if self.valeur_choisie.get() != liste_noms_sd[0]:
- self.valeur_choisie.set(liste_noms_sd[0])
- self.valid_valeur_automatique()
-
- self.frame_valeur = Frame(page)
- self.frame_valeur.pack(fill='both',expand=1)
- self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
- items=liste_noms_sd,
- labelpos='n',
- label_text="Structures de données du type\n requis par l'objet courant :",
- listbox_height = 6,
- selectioncommand=self.select_valeur_from_list,
- dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
- self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
- Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
- #self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
- Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
- # affichage de la valeur courante
- self.display_valeur()
-
- def get_bulle_aide(self):
- """
- Retourne l'aide associée au panneau
- """
- return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
-
- def get_aide(self):
- """
- Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
- """
- mc = self.node.item.get_definition()
- type = mc.type[0].__name__
- if len(mc.type)>1 :
- for typ in mc.type[1:] :
- type = type + ' ou '+typ.__name__
- commentaire="Un objet de type "+type+" est attendu"
- aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- return commentaire
-
-
- def select_valeur_from_list(self):
- """
- Affecte à valeur choisie la sélection courante dans la liste des choix proposée
- """
- if len(self.listbox.get()) == 0 : return
- choix = self.listbox.getcurselection()[0]
- self.valeur_choisie.set(choix)
-
- def choose_valeur_from_list(self,command):
- """
- Affecte à valeur choisie la sélection courante dans la liste des choix proposée
- Exécute command
- """
- if len(self.listbox.get()) == 0 : return
- choix = self.listbox.getcurselection()[0]
- self.valeur_choisie.set(choix)
- apply(command,(),{})
-
- def get_valeur(self):
- """
- Retourne la valeur donnée par l'utilisateur au MCS
- """
- return self.valeur_choisie.get()
-
- def display_valeur(self):
- """
- Affiche la valeur de l'objet pointé par self
- """
- valeur = self.node.item.get_valeur()
- if valeur == None or valeur == '' : return # pas de valeur à afficher ...
- self.valeur_choisie.set(valeur.nom)
-
- def erase_valeur(self):
- pass
-
-class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
- """
- Classe servant à définir le panneau correspondant à un mot-clé simple
- qui attend une valeur unique de type dérivé d'ASSD ou non encore
- existante (type CO(...) utilisé dans les macros uniquement)
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
- d'ASSD
- """
- # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
- # et de la liste des SD du bon type (constituant la liste des choix)
- bulle_aide=self.get_bulle_aide()
- aide=self.get_aide()
- aide= justify_text(texte=aide)
- liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
- # Remplissage du panneau
- self.frame_valeur = Frame(page)
- self.frame_valeur.pack(fill='both',expand=1)
- self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- # affichage de la liste des SD existantes et du bon type
- self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
- items=liste_noms_sd,
- labelpos='n',
- label_text="Structures de données du type\n requis par l'objet courant :",
- listbox_height = 6,
- selectioncommand=self.select_valeur_from_list,
- dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
- self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
- # affichage du bouton 'Nouveau concept'
- self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ",
- items = ('NON','OUI'),menubutton_width=10)
- self.b_co.configure(command = lambda e,s=self : s.ask_new_concept())
- self.b_co.place(relx=0.05,rely=0.6,anchor='w')
- self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
- self.entry_co = Entry(self.frame_valeur)
- self.entry_co.bind('<Return>',self.valid_nom_concept_co)
- # affichage du label de la structure de donnée choisie
- self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
- self.valeur_choisie = StringVar()
- self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
- self.frame_valeur.update()
- self.aide = Label(self.frame_valeur,
- text = aide,
- wraplength=int(self.frame_valeur.winfo_width()*0.8),
- justify='center')
- self.aide.place(relx=0.5,rely=0.85,anchor='n')
- # affichage de la valeur courante
- self.display_valeur()
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide du panneau
- """
- return """Double-cliquez sur la structure de donnée désirée
- pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
- entrer le nom d'un concept non encore existant"""
-
- def valid_valeur(self):
- """
- Teste si la valeur fournie par l'utilisateur est une valeur permise :
- - si oui, l'enregistre
- - si non, restaure l'ancienne valeur
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- valeur = self.get_valeur()
- self.erase_valeur()
- anc_val = self.node.item.get_valeur()
- test_CO=self.node.item.is_CO(anc_val)
- test = self.node.item.set_valeur(valeur)
- if not test :
- mess = "impossible d'évaluer : %s " %`valeur`
- self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
- return
- elif self.node.item.isvalid() :
- self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
- if test_CO:
- # il faut egalement propager la destruction de l'ancien concept
- self.node.item.delete_valeur_co(valeur=anc_val)
- # et on force le recalcul des concepts de sortie de l'etape
- self.node.item.object.etape.get_type_produit(force=1)
- # et le recalcul du contexte
- self.node.item.object.etape.parent.reset_context()
- self.node.parent.select()
- else :
- cr = self.node.item.get_cr()
- mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
- self.reset_old_valeur(anc_val,mess=mess)
- return
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- self.node.update()
-
- def valid_nom_concept_co(self,event=None):
- """
- Lit le nom donné par l'utilisateur au concept de type CO qui doit être
- la valeur du MCS courant et stocke cette valeur
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- anc_val = self.node.item.get_valeur()
- nom_concept = self.entry_co.get()
- test,mess=self.node.item.set_valeur_co(nom_concept)
- if not test:
- # On n'a pas pu créer le concept
- self.parent.appli.affiche_infos(mess)
- return
- elif self.node.item.isvalid() :
- self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
- self.node.parent.select()
- else :
- cr = self.node.item.get_cr()
- mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
- self.reset_old_valeur(anc_val,mess=mess)
- return
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- if self.node.item.isvalid():
- self.node.parent.select()
- self.node.update()
-
- def ask_new_concept(self):
- """
- Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
- permettre à l'utilisateur de donner le nom du nouveau concept
- """
- new_concept = self.b_co.getcurselection()
- if new_concept == 'OUI':
- self.label_co.place(relx=0.05,rely=0.7)
- self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
- self.l_resu.place_forget()
- self.label_valeur.place_forget()
- self.entry_co.focus()
- elif new_concept == 'NON':
- # On est passe de OUI à NON, on supprime la valeur
-# PN correction de bug (on passe de non a non et cela supprime la valeur)
-# ajout du if de le ligne suivane
- if self.node.item.is_CO():
- self.node.item.delete_valeur_co()
- self.record_valeur(name=None,mess="Suppression CO enregistrée")
- self.label_co.place_forget()
- self.entry_co.place_forget()
- self.l_resu.place(relx=0.05,rely=0.7)
- self.label_valeur.place(relx=0.45,rely=0.7)
-
- def display_valeur(self):
- """
- Affiche la valeur de l'objet pointé par self
- """
- valeur = self.node.item.get_valeur()
- if valeur == None or valeur == '':
- self.valeur_choisie.set('')
- return # pas de valeur à afficher ...
- # il faut configurer le bouton si la valeur est un objet CO
- # sinon afficher le nom du concept dans self.valeur_choisie
- if self.node.item.is_CO():
- self.b_co.invoke('OUI')
- self.entry_co.insert(0,valeur.nom)
- else:
- self.valeur_choisie.set(valeur.nom)
-
- def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
- """
- Enregistre val comme valeur de self.node.item.object SANS faire de test de validité
- """
- if self.parent.modified == 'n' : self.parent.init_modif()
- if name != None:
- valeur =name
- else :
- self.entry_co.delete(0,END)
- valeur= self.entry_co.get()
- self.node.item.set_valeur_co(valeur)
- self.parent.appli.affiche_infos(mess)
- # On met a jour le display dans le panneau
- self.display_valeur()
- if self.node.item.get_position()=='global':
- self.node.etape.verif_all()
- elif self.node.item.get_position()=='global_jdc':
- self.node.racine.verif_all()
- else :
- self.node.parent.verif()
- if self.node.item.isvalid():
- self.node.parent.select()
- self.node.update()
-
-
-class UNIQUE_BASE_Panel(UNIQUE_Panel):
- """
- Classe servant à définir le panneau associé aux mots-clés simples qui attendent
- une valeur d'un type de base (entier, réel ou string).
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
- de base cad entier, réel, string ou complexe
- """
- # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
- # et de la liste des SD du bon type (constituant la liste des choix)
- bulle_aide=self.get_bulle_aide()
- aide=self.get_aide()
- aide= justify_text(texte=aide)
- liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
- # Remplissage du panneau
- self.frame_valeur = Frame(page)
- self.frame_valeur.pack(fill='both',expand=1)
- self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- self.label = Label(self.frame_valeur,text='Valeur :')
- self.label.place(relx=0.1,rely=0.5)
- self.entry = Entry(self.frame_valeur,relief='sunken')
- self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
- self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
- self.entry.focus()
- # aide associée au panneau
- self.frame_valeur.update()
- self.aide = Label(self.frame_valeur,
- text = aide,
- wraplength=int(self.frame_valeur.winfo_width()*0.8),
- justify='center')
- self.aide.place(relx=0.5,rely=0.7,anchor='n')
- # affichage de la valeur du MCS
- self.display_valeur()
-
- def get_aide(self):
- """
- Retourne la phrase d'aide indiquant de quel type doit être la valeur
- du mot-clé simple fournie par l'utilisateur
- """
- mc = self.node.item.get_definition()
- d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
- 'R' : "Un réel est attendu",
- 'I' : "Un entier est attendu"}
- type = mc.type[0]
- commentaire=d_aides.get(type,"Type de base inconnu")
- aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- return commentaire
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide associée au panneau et affichée par clic droit
- """
- return """Saisissez la valeur que vous voulez affecter au mot-clé simple
- dans la zone de saisie et pressez <Return>"""
-
- def display_valeur(self):
- """
- Affiche la valeur de l'objet pointé par self
- """
- valeur = self.node.item.get_valeur()
- if valeur == None or valeur == '' : return # pas de valeur à afficher ...
- self.entry.delete(0,END)
- self.entry.insert(0,valeur)
- self.entry.focus()
-
-class UNIQUE_COMP_Panel(UNIQUE_Panel):
- """
- Classe servant à définir le panneau associé aux mots-clés simples
- qui attendent une valeur de type complexe
- """
- def makeValeurPage(self,page):
- """
- Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
- de base cad entier, réel, string ou complexe
- """
- # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
- bulle_aide=self.get_bulle_aide()
- aide=self.get_aide()
- aide= justify_text(texte=aide)
- # Remplissage du panneau
- self.frame_valeur = Frame(page)
- self.frame_valeur.pack(fill='both',expand=1)
- self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
- self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
- self.label = Label(self.frame_valeur,text='Valeur :')
- self.label.place(relx=0.1,rely=0.5)
- self.typ_cplx=StringVar()
- self.typ_cplx.set('RI')
- rb1 = Radiobutton(self.frame_valeur, text='RI',variable=self.typ_cplx,value='RI')
- rb2 = Radiobutton(self.frame_valeur, text='MP',variable=self.typ_cplx,value='MP')
- self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
- self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
- rb1.place(relx=0.05,rely = 0.4)
- rb2.place(relx=0.05,rely = 0.6)
- self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
- self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
- self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
- self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
- self.entry1.focus()
- self.frame_valeur.update()
- self.aide = Label(self.frame_valeur,
- text = aide,
- wraplength=int(self.frame_valeur.winfo_width()*0.8),
- justify='center')
- self.aide.place(relx=0.5,rely=0.7,anchor='n')
- # affichage de la valeur du MCS
- self.display_valeur()
-
- def display_valeur(self):
- """
- Affiche la valeur de l'objet pointé par self
- """
- valeur = self.node.item.get_valeur()
- if valeur == None or valeur == '' : return # pas de valeur à afficher ...
- typ_cplx,x1,x2=valeur
- self.entry1.delete(0,END)
- self.entry2.delete(0,END)
- self.typ_cplx.set(typ_cplx)
- self.entry1.setentry(x1)
- self.entry2.setentry(x2)
-
- def get_bulle_aide(self):
- """
- Retourne la bulle d'aide du panneau
- """
- return """-Choisissez votre format de saisie du complexe :
- \t 'RI' = parties réelle et imaginaire
- \t 'MP' = module/phase (en degrés)
- - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
-
- def get_aide(self):
- """
- Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
- le mot-clé simple courant
- """
- commentaire='Un complexe est attendu'
- aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- return commentaire
-
- def get_valeur(self):
- """
- Retourne le complexe saisi par l'utilisateur
- """
- l=[]
- l.append(self.typ_cplx.get())
- l.append(string.atof(self.entry1.get()))
- l.append(string.atof(self.entry2.get()))
- return `tuple(l)`
-
- def erase_valeur(self):
- """
- Efface les entries de saisie
- """
- self.typ_cplx = 'RI'
- self.entry1.delete(0,END)
- self.entry2.delete(0,END)
class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+ from newsimppanel import newSIMPPanel
panel = newSIMPPanel
def init(self) :
self.expandable = 0
self.affect_panel()
+
def affect_panel(self):
"""
Cette méthode attribue le panel à l'objet pointé par self en fonction de la
nature de la valeur demandée pour cet objet
"""
+ from uniquepanel import UNIQUE_Panel
+ from plusieurspanel import PLUSIEURS_Panel
+
#print "affect_panel : ",self.nom,self.is_list(),self.has_into(), self.get_into(None)
+
if self.wait_shell():
# l'objet attend un shell
+ from shellpanel import SHELLPanel
self.panel = SHELLPanel
elif self.has_into():
# l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
if self.is_list() :
+ from plusieursintopanel import PLUSIEURS_INTO_Panel
self.panel = PLUSIEURS_INTO_Panel
else:
+ from uniqueintopanel import UNIQUE_INTO_Panel
self.panel = UNIQUE_INTO_Panel
else:
# l'objet prend une ou des valeurs à priori quelconques
# on attend une liste de valeurs mais de quel type ?
if self.wait_assd():
# on attend une liste de SD
+ from plusieursassdpanel import PLUSIEURS_ASSD_Panel
self.panel = PLUSIEURS_ASSD_Panel
else:
# on attend une liste de valeurs de types debase (entiers, réels,...)
+ from plusieursbasepanel import PLUSIEURS_BASE_Panel
self.panel = PLUSIEURS_BASE_Panel
else:
# on n'attend qu'une seule valeur mais de quel type ?
if self.wait_co():
# on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
+ from uniquesdcopanel import UNIQUE_SDCO_Panel
self.panel = UNIQUE_SDCO_Panel
elif self.wait_assd():
# on attend une SD
+ from uniqueassdpanel import UNIQUE_ASSD_Panel
self.panel = UNIQUE_ASSD_Panel
else:
# on attend une valeur d'un type de base (entier,réel,...)
if self.wait_complex():
# on attend un complexe
+ from uniquecomppanel import UNIQUE_COMP_Panel
self.panel = UNIQUE_COMP_Panel
else:
# on attend un entier, un réel ou une string
+ from uniquebasepanel import UNIQUE_BASE_Panel
self.panel = UNIQUE_BASE_Panel
- #print "affect_panel : ",self.panel
+ # cas particulier des fonctions
+ genea = self.get_genealogie()
+ if "DEFI_FONCTION" in genea :
+ if "VALE" in genea :
+ from fonctionpanel import FONCTION_Panel
+ self.panel=FONCTION_Panel
+ #---------------------------------------------------------
+ # PN ajout pour lancement de Salome
+ #---------------------------------------------------------
+ if self.appli.salome != 0 :
+ import panelsSalome
+
+ self.clef_fonction="SALOME"
+ for i in range(0,len( genea )) :
+ self.clef_fonction=self.clef_fonction+"_"+ genea[i]
+
+ self.select_noeud_maille=0
+ if (self.clef_fonction.find("GROUP_NO") != -1) :
+ self.select_noeud_maille=1
+ if (self.clef_fonction.find("GROUP_MA") != -1) :
+ self.select_noeud_maille=1
+
+ recherche=panelsSalome.dict_classes_salome[self.panel]
+ if hasattr(recherche,self.clef_fonction):
+ self.panel=recherche
+ if self.select_noeud_maille==1 :
+ self.panel=recherche
+
+
+ #-----------------------------------------------
+ #
+ # Methodes liees aux informations sur le Panel
+ # ou au mot-clef simple
+ #
+ #-----------------------------------------------
+ # is_list
+ # get_into a priori inutile --> commentee
+ # has_into
+ # wait_into a priori inutile --> commentee
+ # GetMinMax
+ # GetMultiplicite
+ # GetIntervalle
+ # GetListeValeurs
+ # get_liste_possible
def is_list(self):
"""
is_a_list= self.definition.validators.is_list() * is_a_list
return is_a_list
- def get_into(self,liste_courante=None):
- """
- Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
- pas de liste de choix, la méthode retourne None.
- L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
- effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
- en en tenant compte.
- Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
- une relation de type ET (AndVal).
- """
- if not self.object.definition.validators :
- return self.object.definition.into
- else:
- return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+ #def get_into(self,liste_courante=None):
+ # """
+ # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+ # pas de liste de choix, la méthode retourne None.
+ # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
+ # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+ # en en tenant compte.
+ # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+ # une relation de type ET (AndVal).
+ # """
+ # if not self.object.definition.validators :
+ # return self.object.definition.into
+ # else:
+ # return self.object.definition.validators.get_into(liste_courante,self.definition.into)
def has_into(self):
"""
has_an_into= self.definition.validators.has_into()
return has_an_into
+# def wait_into(self):
+# """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+# prend ses valeurs dans un ensemble discret (into), 0 sinon """
+# if self.object.definition.into != None :
+# return 1
+# else:
+# return 0
+
+ def GetMinMax(self):
+ """ Retourne les valeurs min et max de la définition de object """
+ return self.object.get_min_max()
+
+ def GetMultiplicite(self):
+ """ A préciser.
+ Retourne la multiplicité des valeurs affectées à l'objet
+ représenté par l'item. Pour le moment retourne invariablement 1.
+ """
+ return 1
+
+ def GetIntervalle(self):
+ """
+ Retourne le domaine de valeur attendu par l'objet représenté
+ par l'item.
+ """
+ return self.object.getintervalle()
+
+ def GetListeValeurs(self) :
+ """ Retourne la liste des valeurs de object """
+ return self.object.get_liste_valeurs()
+
+ def get_liste_possible(self,listeActuelle=[]):
+ if hasattr(self.definition.validators,'into'):
+ self.get_definition().into=self.definition.validators.into
+ valeurspossibles = self.get_definition().into
+ # CCAR : Ne serait-il pas preferable d'appeler get_into ?
+ #valeurspossibles=self.get_into(listeActuelle)
+
+ listevalideitem=[]
+ for item in valeurspossibles:
+ encorevalide=self.valide_item(item)
+ if encorevalide :
+ listevalideitem.append(item)
+ # on ne verifie pas la liste des choix si max = 1
+ # (sinon cela enleve tous les choix possibles)
+ min,max=self.GetMinMax()
+ if max != 1 :
+ listevalideliste=[]
+ for item in listevalideitem:
+ listetravail=[]
+ for item2 in listeActuelle : listetravail.append(item2)
+ encorevalide=self.valide_liste_partielle(item,listetravail)
+ if encorevalide :
+ listevalideliste.append(item)
+ else :
+ listevalideliste=listevalideitem
+ return listevalideliste
+
+
+ #--------------------------------------------------
+ #
+ # Methodes liees a la validite des valeurs saisies
+ #
+ #---------------------------------------------------
+ # valide_item
+ # valide_liste_partielle
+ # valide_liste_complete
+ # info_erreur_item
+ # info_erreur_liste
+ # IsInIntervalle
+ # isvalid
+
def valide_item(self,item):
"""
- On fait un try except pour les erreurs de types (exple
+ On fait un try except pour les erreurs de type (exple
on rentre 1 pour une chaine de caracteres
"""
valide=1
commentaire=self.definition.validators.info_erreur_liste()
return commentaire
- def SetText(self, text):
- try:
- value = eval(text)
- self.object.setval(value)
- except:
- pass
+ def IsInIntervalle(self,valeur):
+ """
+ Retourne 1 si la valeur est dans l'intervalle permis par
+ l'objet représenté par l'item.
+ """
+ return self.object.isinintervalle(valeur)
+
+ def isvalid(self):
+ valide=self.object.isvalid()
+ return self.object.isvalid()
+
+ #--------------------------------------------------
+ #
+ # Autres ...
+ #
+ #---------------------------------------------------
+ # SetText a priori inutilisee --> commentee
+ # GetIconName
+ # GetText
+ # getval a priori inutilisee --> commentee
+ # set_valeur_co
+ # get_sd_avant_du_bon_type
+ # verif a priori inutilisee --> commentee
+ # delete_valeur_co
+
+ #def SetText(self, text):
+ # try:
+ # value = eval(text)
+ # self.object.setval(value)
+ # except:
+ # pass
def GetIconName(self):
if self.isvalid():
"""
text= self.object.GetText()
return text
+
+ #def getval(self):
+ # return self.object.getval()
+
+ def set_valeur_co(self,nom_co):
+ """
+ Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+ """
+ return self.object.set_valeur_co(nom_co)
+
+ def get_sd_avant_du_bon_type(self):
+ """
+ Retourne la liste des noms des SD présentes avant l'étape qui contient
+ le MCS pointé par self et du type requis par ce MCS
+ """
+ a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+ return self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,
+ self.object.definition.type)
+
+ #def verif(self):
+ # pass
+
+ def delete_valeur_co(self,valeur=None):
+ """
+ Supprime la valeur du mot cle (de type CO)
+ il faut propager la destruction aux autres etapes
+ """
+ if not valeur : valeur=self.object.valeur
+ # XXX faut il vraiment appeler del_sdprod ???
+ #self.object.etape.parent.del_sdprod(valeur)
+ self.object.etape.parent.delete_concept(valeur)
+
+ #-----------------------------------------------
+ #
+ # Methodes liees au type de l objet attendu
+ #
+ #-----------------------------------------------
+ # wait_co
+ # wait_geom
+ # wait_complex
+ # wait_reel
+ # wait_shell
+ # wait_assd
+ # GetType
def wait_co(self):
"""
else:
return 0
- def wait_into(self):
- """ Méthode booléenne qui retourne 1 si l'objet pointé par self
- prend ses valeurs dans un ensemble discret (into), 0 sinon """
- if self.object.definition.into != None :
- return 1
- else:
- return 0
-
def wait_assd(self):
"""Méthode booléenne qui retourne 1 si l'objet pointé par self
attend un objet de type ASSD ou dérivé, 0 sinon """
return self.object.wait_assd()
- def getval(self):
- return self.object.getval()
-
- def GetMinMax(self):
- """ Retourne les valeurs min et max de la définition de object """
- return self.object.get_min_max()
-
- def GetMultiplicite(self):
- """ A préciser.
- Retourne la multiplicité des valeurs affectées à l'objet
- représenté par l'item. Pour le moment retourne invariablement 1.
- """
- return 1
-
def GetType(self):
"""
Retourne le type de valeur attendu par l'objet représenté par l'item.
"""
return self.object.get_type()
- def GetIntervalle(self):
- """
- Retourne le domaine de valeur attendu par l'objet représenté
- par l'item.
- """
- return self.object.getintervalle()
-
- def IsInIntervalle(self,valeur):
- """
- Retourne 1 si la valeur est dans l'intervalle permis par
- l'objet représenté par l'item.
- """
- return self.object.isinintervalle(valeur)
-
- def set_valeur_co(self,nom_co):
- """
- Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
- """
- return self.object.set_valeur_co(nom_co)
-
- def get_sd_avant_du_bon_type(self):
- """
- Retourne la liste des noms des SD présentes avant l'étape qui contient
- le MCS pointé par self et du type requis par ce MCS
- """
- a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
- return self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,
- self.object.definition.type)
-
- def GetListeValeurs(self) :
- """ Retourne la liste des valeurs de object """
- return self.object.get_liste_valeurs()
-
- def verif(self):
- pass
-
- def isvalid(self):
- valide=self.object.isvalid()
- return self.object.isvalid()
+ #-----------------------------------------------------
+ #
+ # Methodes liees a l evaluation de la valeur saisie
+ #
+ #-----------------------------------------------------
+ # eval_valeur
+ # eval_valeur_item
+ # is_CO
+ # traite_reel
def eval_valeur(self,valeur):
""" Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
return valeurretour,validite
def eval_valeur_item(self,valeur):
+ """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple
+ - va retourner la valeur de retour et la validite
+ selon le type de l objet attendu
+ - traite les reels et les parametres
+ """
if valeur==None or valeur == "" :
return None,0
validite=1
except:
valeurretour=None
validite=0
-
# on est dans le cas où on a évalué et où on n'aurait pas du
if self.object.wait_TXM() :
if type(valeurretour) != types.StringType:
valeurretour=str(valeur)
validite=1
-
return valeurretour,validite
-
def is_CO(self,valeur=None):
"""
Indique si valeur est un concept produit de la macro
if valeur.__class__.__name__ == 'CO':return 1
return 0
- def delete_valeur_co(self,valeur=None):
- """
- Supprime la valeur du mot cle (de type CO)
- il faut propager la destruction aux autres etapes
- """
- if not valeur : valeur=self.object.valeur
- # XXX faut il vraiment appeler del_sdprod ???
- #self.object.etape.parent.del_sdprod(valeur)
- self.object.etape.parent.delete_concept(valeur)
-
- def get_liste_possible(self,listeActuelle=[]):
- if hasattr(self.definition.validators,'into'):
- self.get_definition().into=self.definition.validators.into
- valeurspossibles = self.get_definition().into
- # CCAR : Ne serait-il pas preferable d'appeler get_into ?
- #valeurspossibles=self.get_into(listeActuelle)
-
- listevalideitem=[]
- for item in valeurspossibles:
- encorevalide=self.valide_item(item)
- if encorevalide :
- listevalideitem.append(item)
- # on ne verifie pas la liste des choix si max = 1
- # (sinon cela enleve tous les choix possibles)
- min,max=self.GetMinMax()
- if max != 1 :
- listevalideliste=[]
- for item in listevalideitem:
- listetravail=[]
- for item2 in listeActuelle : listetravail.append(item2)
- encorevalide=self.valide_liste_partielle(item,listetravail)
- if encorevalide :
- listevalideliste.append(item)
- else :
- listevalideliste=listevalideitem
- return listevalideliste
-
def traite_reel(self,valeur):
"""
Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
# Modules Python
import os,sys,string,types
import traceback
-try:
- from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
-except:
- pass
# Modules Eficas
+from widgets import showinfo,showerror,askretrycancel
import utils
class CONFIG:
import string
from Tkinter import Label
import Pmw
-from tkCommonDialog import Dialog
-from tkFileDialog import *
-from tkMessageBox import askyesno,showerror
import traceback
# Modules Eficas
+from widgets import showerror
+from widgets import askopenfilename
import patches
import appli
from widgets import Fenetre
"""
Lance l'appli EFICAS
"""
+
root = Tkinter.Tk()
splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code)
splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...")
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+from plusieursbasepanel import PLUSIEURS_BASE_Panel
+
+
+class FONCTION_Panel(PLUSIEURS_BASE_Panel):
+ def makeValeurPage(self,page):
+ """
+ Crée la page de saisie d'une liste de valeurs à priori quelconques,
+ cad qui ne sont pas à choisir dans une liste prédéfinie
+ """
+ # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+ # et la liste des valeurs déjà affectées à l'objet courant
+ bulle_aide=self.get_bulle_aide()
+ objet_mc = self.node.item.get_definition()
+ aide = self.get_aide()
+ aide = justify_text(texte=aide)
+ min,max = self.node.item.GetMinMax()
+ l_valeurs = self.node.item.GetListeValeurs()
+ l2_valeurs=self.decoupeListeValeurs(l_valeurs)
+
+ # création des frames globales
+ self.frame1 = Frame(page,relief='groove',bd=2)
+ self.frame2 = Frame(page)
+ self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+ self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+ self.frame_right = Frame(self.frame1)
+ self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
+ # création des frames internes
+ self.frame_valeurs = Frame(self.frame1)
+ self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+ self.frame_boutons_fleches = Frame(self.frame_right)
+ self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
+ self.frame_choix = Frame(self.frame_right)
+ self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
+ self.frame_aide = Frame(self.frame_right)
+ self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
+ self.frame_boutons = Frame(self.frame2)
+ self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
+ for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+ self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+ fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+ # création des objets dans les frames
+ liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+ ("<Button-3>",self.deselectValeur),
+ ("<Double-Button-1>",self.sup_valeur_sans_into))
+ self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) actuelle(s)")
+
+ # Création de l'entry ou de la liste des SD
+ self.label = Label(self.frame_choix,text="Valeur :")
+ self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base)
+ self.label.place(relx=0.05,rely=0.5)
+
+ # Création d'un bouton "Importer ..." sur le panel.
+ bouton_valeurs_fichier = Button(self.frame_choix,
+ text="Importer ...",
+ command=self.select_in_file)
+ bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
+ self.ajout_valeurs = None
+
+ # boutons Ajouter et Supprimer
+ bouton_add = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_left'),
+ command = self.add_double_valeur_plusieurs_base)
+ bouton_sup = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_right'),
+ command = self.sup_valeur_sans_into)
+ bouton_add.place(relx=0.3,rely=0.35)
+ bouton_sup.place(relx=0.3,rely=0.65)
+ # affichage de l'aide
+ self.frame_aide.update()
+ self.aide = Label(self.frame_aide,
+ text = aide,
+ justify='center',
+ anchor='center',
+ wraplength=int(self.frame_aide.winfo_width()*0.8))
+ self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+ self.Liste_valeurs.affiche_liste()
+ # boutons Accepter et Annuler
+ bouton_accepter = Button(self.frame_boutons,
+ text='Valider',
+ command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
+ bouton_annuler = Button(self.frame_boutons,
+ text = 'Annuler',
+ command = self.annule_modifs_valeur)
+ for but in (bouton_accepter,bouton_annuler):
+ but.pack(side='left',padx=5)
+
+
+ def decoupeListeValeurs(self,liste):
+ #decoupe la liste des valeurs en 2 ( les x puis les y)
+ l_valeurs=[]
+ for i in range(len(liste)/2) :
+ t=(liste[i*2], liste[i*2+1])
+ l_valeurs.append(t)
+ return l_valeurs
+
+
+ def accepte_modifs_valeur_recolle(self,min,max):
+ l_valeurs=[]
+ l1_valeurs = self.Liste_valeurs.get_liste()
+ for val in l1_valeurs :
+ for item in val :
+ l_valeurs.append(item)
+ self.accepte_modifs_valeur(min,max,l_valeurs)
+
+
+ def add_double_valeur_plusieurs_base(self):
+ # on verifie qu'il s agit bien d un tuple
+ # on enleve les parentheses eventuelles
+ doublevaleur_entree=self.get_valeur()
+ try:
+ if doublevaleur_entree[0]=='(' :
+ doublevaleur_entree=doublevaleur_entree[1:-1]
+ if doublevaleur_entree[-1]==')' :
+ doublevaleur_entree=doublevaleur_entree[0:-2]
+ val1=doublevaleur_entree.split(',')[0]
+ val2=doublevaleur_entree.split(',')[1]
+ except :
+ commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+
+ # et seulement d un tuple
+ try:
+ val3=doublevaleur_entree.split(',')[2]
+ commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+ except :
+ # c est la le cas normal
+ pass
+
+ # on verifie la validite des valeurs sont correctes
+ valeur,validite=self.node.item.eval_valeur((val1,val2))
+ if not validite :
+ commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+
+ # on verifie la validite de la liste
+ liste=[]
+ l1_valeurs = self.Liste_valeurs.get_liste()
+ for val in l1_valeurs :
+ for item in val :
+ liste.append(item)
+ validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste)
+ if not validite_liste:
+ commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+ # liste a deja ete modifiee par l appel precedent a valide_liste_partielle
+ # et contient deja valeur[0]
+ validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste)
+ if not validite_liste:
+ commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+
+ # si une valeur est selectionnee on la remplace
+ # sinon on ajoute la valeur
+ if (self.Liste_valeurs.selection != None):
+ l1_valeurs=[]
+ trouve=0
+ for val in self.Liste_valeurs.get_liste():
+ if val == self.Liste_valeurs.selection[0] and trouve == 0:
+ l1_valeurs.append((valeur[0],valeur[1]))
+ trouve=1
+ else :
+ l1_valeurs.append(val)
+ else :
+ l1_valeurs.append((valeur[0],valeur[1]))
+ self.Liste_valeurs.put_liste(l1_valeurs)
# Modules Eficas
import panels
from treeitemincanvas import TREEITEMINCANVAS
-from tkMessageBox import showinfo,showerror
+from widgets import showinfo,showerror
class CONFIG:
isdeveloppeur='NON'
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+import composimp
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+
+class newSIMPPanel(panels.OngletPanel):
+ """
+ Classe virtuelle servant de classe mère à toutes les classes Panel
+ servant à afficher et récupérer la valeur d'un mot-clé simple.
+ Le panel est différent suivant le type de la valeur attendu
+ """
+ def init(self):
+ """
+ Méthode appelée par le constructeur de OngletPanel :
+ construit le notebook à 2 onglets utilisé par tous les panels de
+ tous les mots-clés simples
+ """
+ nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+ nb.pack(fill = 'both', expand = 1)
+ self.nb=nb
+ nb.add('Valeur', tab_text='Saisir valeur')
+ self.makeValeurPage(nb.page('Valeur'))
+ nb.setnaturalsize()
+
+# ----------------------------------------------------------------------------------------
+# Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
+# au mot-clé courant
+# ----------------------------------------------------------------------------------------
+
+ def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+ """
+ Enregistre val comme valeur de self.node.item.object SANS
+ faire de test de validité ni ré-évaluer l'ancienne valeur
+ permet de rester avec des valeurs non entrees et de ne pas
+ ré-évaluer des entiers par exemple
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ self.node.item.set_valeur(name)
+ self.parent.appli.affiche_infos(mess)
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ self.node.update()
+
+ def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+ """
+ Enregistre val comme valeur de self.node.item.object
+ en evaluant l item et en le validant
+ Si name n'est pas renseigné, la valeur
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ if name != None:
+ valeur = name
+ validite = 1
+ else :
+ valeurentree= self.entry.get()
+ self.entry.delete(0,END)
+ if valeurentree == '': valeurentree=None
+ valeur,validite=self.node.item.eval_valeur(valeurentree)
+ if not validite :
+ valeur= self.entry.get()
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ self.parent.appli.affiche_infos(commentaire)
+
+ if validite :
+ if self.node.item.is_list() :
+ validite=self.node.item.valide_liste_complete(valeur)
+ commentaire=self.node.item.info_erreur_liste()
+ else :
+ validite=self.node.item.valide_item(valeur)
+ commentaire=self.node.item.info_erreur_item()
+
+ if validite :
+ self.node.item.set_valeur(valeur)
+ self.parent.appli.affiche_infos(mess)
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ self.node.update()
+ if self.node.item.isvalid():
+ self.node.parent.select()
+ else :
+ self.parent.appli.affiche_infos(commentaire)
+
+# ----------------------------------------------------------------------------------------
+# Méthodes utilisées pour la manipulation des items dans les listes de choix
+# ----------------------------------------------------------------------------------------
+ def selectValeur(self,name):
+ self.selected_valeur = name
+
+ def deselectValeur(self,name):
+ self.selectValeur = None
+
+ def sup_valeur(self,name=None):
+ """
+ Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+ à la liste des choix possibles
+ """
+ if hasattr(self,'selected_valeur') :
+ if ( self.selected_valeur != None and self.selected_valeur != ''):
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ liste_valeurs.remove(self.selected_valeur)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ listeActuelle=self.Liste_valeurs.get_liste()
+ liste_choix=self.node.item.get_liste_possible(listeActuelle)
+ self.Liste_choix.put_liste(liste_choix)
+ self.selected_valeur = None
+
+ def add_choix(self,name=None):
+ """
+ Ajoute le choix selectionné à la liste des valeurs et le retire
+ de la liste des choix possibles
+ """
+
+ if hasattr(self,'selected_choix') :
+ if (self.selected_choix != None and self.selected_choix != ''):
+ min,max = self.node.item.GetMinMax()
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ if len(liste_valeurs) >= max :
+ self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
+ return
+ liste_valeurs.append(self.selected_choix)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ listeActuelle=self.Liste_valeurs.get_liste()
+ liste_choix=self.node.item.get_liste_possible(listeActuelle)
+ self.Liste_choix.put_liste(liste_choix)
+ self.selected_choix = None
+
+ def selectChoix(self,name):
+ self.selected_choix = name
+
+ def deselectChoix(self,name):
+ self.selectChoix = None
+
+ def raisecmd(self,page):
+ try:
+ self.entry.focus()
+ except:
+ pass
+
"""
# Modules Python
import os,string
-from tkFileDialog import *
# Modules Eficas
+from widgets import askopenfilename
# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic"
affichage_commandes="alphabetic"
file = askopenfilename(title="Choix d'un catalogue personnel",
defaultextension=".py",
filetypes = ( ("Catalogue", "cata*.py"),))
- if file != '':
+ if file :
self.parent.update_idletasks()
self.appli.reset_affichage_infos()
rep_fic = os.path.dirname(file)
import os
from Tkinter import *
import Pmw
-import tkMessageBox
import time
+import widgets
from widgets import ListeChoix
from widgets import ListeChoixParGroupes
import prefs
commande_comment = self.node.item.get_objet_commentarise()
self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
except Exception,e:
- tkMessageBox.showerror("TOO BAD",str(e))
+ widgets.showerror("TOO BAD",str(e))
return
class Panel_Inactif(Panel):
--- /dev/null
+print "Import de panelsSalome"
+
+from Tkinter import *
+from widgets import ListeChoix
+from widgets import showerror
+
+from fonctionpanel import FONCTION_Panel
+from shellpanel import SHELLPanel
+from plusieursintopanel import PLUSIEURS_INTO_Panel
+from plusieursassdpanel import PLUSIEURS_ASSD_Panel
+from plusieursbasepanel import PLUSIEURS_BASE_Panel
+from uniquesdcopanel import UNIQUE_SDCO_Panel
+from uniqueassdpanel import UNIQUE_ASSD_Panel
+from uniqueintopanel import UNIQUE_INTO_Panel
+from uniquecomppanel import UNIQUE_COMP_Panel
+from uniquebasepanel import UNIQUE_BASE_Panel
+
+from Noyau.N_CR import justify_text
+
+import traceback
+import SalomePyQt
+import salome
+import images
+import SMESH_utils
+sgQt=SalomePyQt.SalomePyQt()
+
+
+
+# 2 types de commandes vont etre particularisees dans Salome
+#
+# - un cas general :
+# Toutes les commandes possedant GROUP_NO ou GROUP_MA
+# seront surchargees d office
+# pour cela on va utiliser le dictionnaire dict_classes_salome
+# qui va permettre de changer la classe de la commande
+# ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
+# la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
+# (pour cela voir composimp)
+
+# des commandes "autres" ne pouvant pas etre identifiées par leur nom
+# il suffit de creer dans la classe SALOME de la commande
+# une fonction portant son nom
+# Exemple de particularisation d un panel :
+# Supposons que l on veuille particulariser la commande
+# - LIRE_MAILLAGE_UNITE
+# le panel initial a pour classe UNIQUE_BASE_Panel
+# il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
+# une fonction SALOME_LIRE_MAILLAGE_UNITE
+# la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
+# on peut surcharger les methodes nécessaires (affichage par exemple)
+
+
+class SALOME_SHELLPanel (SHELLPanel):
+ ""
+
+class SALOME_FONCTION_Panel (FONCTION_Panel):
+ ""
+
+class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
+ ""
+
+class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
+ ""
+
+class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
+ ""
+
+class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
+ ""
+
+class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
+ ""
+
+class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
+ ""
+
+# ------------------------------------------------------------------------------#
+# classe SALOME_PLUSIEURS_BASE_Panel
+#
+# Commandes modifiées :
+# - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
+# Methodes surchargées :
+# - makeValeurPage(self,page)
+#
+# ------------------------------------------------------------------------------#
+
+class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
+
+
+ def convertit_group_no_from_salome(self,liste_in):
+ newr=[]
+ try:
+ print liste_in
+ for entree in liste_in :
+ travail=[]
+ travail.append(entree)
+ entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
+ entreeName=entryname_list[0]
+ if dict_geom_numgroupe.has_key(entreeName):
+ r=dict_geom_numgroupe[entreeName]
+ else:
+ r=SMESH_utils.getAsterGroupNo(salome.myStudy,travail)
+ dict_geom_numgroupe[entreeName]=r
+ for i in r :
+ newr.append(i)
+ except:
+ print "pas de groupe de noeuds associé"
+ showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de noeuds")
+ return newr
+
+ def convertit_group_maille_from_salome(self,liste_in):
+ newr=[]
+ try:
+ print liste_in
+ for entree in liste_in :
+ travail=[]
+ travail.append(entree)
+ entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
+ entreeName=entryname_list[0]
+ if dict_geom_numgroupe.has_key(entreeName):
+ r=dict_geom_numgroupe[entreeName]
+ else:
+ r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
+ dict_geom_numgroupe[entreeName]=r
+ for i in r :
+ newr.append(i)
+ except:
+ print "pas de groupe de maille associé"
+ showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
+ return newr
+
+ def convertit_entrees_en_valeurs(self,entrychaine):
+ if SALOME_PLUSIEURS_BASE_Panel.__dict__.has_key(self.clef_fonction):
+ valeur=apply(SALOME_PLUSIEURS_BASE_Panel.__dict__[self.clef_fonction],(self,entrychaine))
+ else :
+ if self.clef_fonction.find("GROUP_NO") != -1 :
+ valeur=self.convertit_group_no_from_salome(entrychaine)
+ else :
+ if self.clef_fonction.find("GROUP_MA") != -1 :
+ valeur=self.convertit_group_maille_from_salome(entrychaine)
+ else :
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
+ print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ valeur=[]
+ print "VALEUR", valeur
+ return valeur
+
+ def sup_valeur_from_salome(self,name=None):
+ """
+ Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
+ """
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
+ entrychaine=salome.sg.getAllSelected()
+
+ try:
+ valeur = self.convertit_entrees_en_valeurs(entrychaine)
+ for i in valeur :
+ if i in liste_valeurs :
+ liste_valeurs.remove(i)
+ print "enleve" , i
+ except:
+ # la valeur sélectionnée n'est pas dans la liste
+ pass
+
+ entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
+ print entryname_list
+ self.entrygroupe.delete(0,END)
+ self.sortie.delete(0,END)
+ for entryname in entryname_list:
+ try:
+ liste_valeurs_salome.remove(entryname)
+ except:
+ print "la valeur ", entryname, "n est pas dans la liste"
+ entryname=entryname + " "
+ self.sortie.insert(0,entryname)
+ self.selected_valeur = None
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
+ self.recalcule()
+
+ def recalcule(self):
+ liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
+ groups={}
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ for valeur in liste_valeurs_salome:
+ r=dict_geom_numgroupe[valeur]
+ for i in r :
+ if i not in liste_valeurs :
+ liste_valeurs.append(i)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+
+ def add_valeur_from_salome(self,name=None):
+ entrychaine=salome.sg.getAllSelected()
+ self.sortie.delete(0,END)
+ self.entrygroupe.delete(0,END)
+ if entrychaine != '':
+ entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
+ touteslesvaleurs = self.convertit_entrees_en_valeurs(entrychaine)
+
+ valeur=[]
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ for i in touteslesvaleurs:
+ if i not in liste_valeurs:
+ valeur.append(i)
+
+ print valeur
+ if valeur==[]:
+ entryname_list=[]
+
+ liste_valeurs_salome = self.Liste_valeurs_salome.get_liste()
+ for entryname in entryname_list:
+ if entryname not in liste_valeurs_salome:
+ liste_valeurs_salome.append(entryname)
+ entryname=entryname + " "
+ self.entrygroupe.insert(0,entryname)
+ self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
+
+ if self.node.item.wait_reel():
+ print "wait_reel()"
+ valeur = self.traite_reel(valeur)
+ if self.node.item.wait_geom():
+ print "wait_geom()"
+ val,test1 = valeur,1
+ else:
+ print "else wait"
+ val,test1 = self.node.item.object.eval_valeur(valeur)
+
+ if test1 :
+ test2 = self.node.item.object.verif_type(val)
+ if test2 :
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ if len(liste_valeurs) >= max :
+ self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
+ self.erase_valeur()
+ return
+ if type(val) == type([]):
+ for groupe in val:
+ liste_valeurs.append(groupe)
+ else:
+ liste_valeurs.append(val)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
+ else:
+ self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
+ else:
+ print "impossible d'évaluer %s" %val
+ self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
+
+
+ def makeValeurPage(self,page):
+ """
+ Crée la page de saisie d'une liste de valeurs à priori quelconques,
+ cad qui ne sont pas à choisir dans une liste prédéfinie
+ """
+ # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+ # et la liste des valeurs déjà affectées à l'objet courant
+ bulle_aide=self.get_bulle_aide()
+ objet_mc = self.node.item.get_definition()
+ aide = self.get_aide()
+ aide = justify_text(texte=aide)
+ min,max = self.node.item.GetMinMax()
+ self.clef_fonction= self.node.item.clef_fonction
+ l_valeurs = self.node.item.GetListeValeurs()
+
+ self.frame1 = Frame(page,relief='groove',bd=2)
+ self.frame2 = Frame(page)
+ self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+ self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+ self.frame_right = Frame(self.frame1)
+ self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
+ # création des frames internes
+ self.frame_valeurs = Frame(self.frame1)
+ self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+
+ self.frame_boutons_fleches = Frame(self.frame_right)
+ self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.3)
+ self.frame_choix = Frame(self.frame_right)
+ self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.85,relheight=0.9)
+ self.frame_valeurs_salome = Frame(self.frame_right)
+ self.frame_valeurs_salome.place(relx=0.02,rely=0.7,relwidth=0.9,relheight=0.3)
+
+ self.frame_boutons = Frame(self.frame2)
+ self.frame_boutons.place(relx=0.1,rely=0.,relwidth=0.5,relheight=1.)
+ self.frame_aide = Frame(self.frame2)
+ self.frame_aide.place(relx=0.6,rely=0.,relwidth=0.5,relheight=1)
+
+ for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+ self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+ fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+ # création des objets dans les frames
+ liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+ ("<Button-3>",self.deselectValeur),
+ ("<Double-Button-1>",self.sup_valeur_sans_into))
+ self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
+ liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) actuelle(s)")
+
+ self.label = Label(self.frame_choix,text="Valeur :")
+ self.label.place(relx=0.05,rely=0.4)
+ # PN : pour ajouter les validators
+ self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
+
+ bouton_valeurs_fichier = Button(self.frame_choix,
+ text="Importer ...",
+ command=self.select_in_file)
+ bouton_valeurs_fichier.place(relx=0.28,rely=0.55,relwidth=0.6)
+
+ self.ajout_valeurs = None
+ self.b = Button(self.frame_choix,text='ajouter selection',command=self.add_valeur_from_salome)
+
+ self.b.place(relx=0.05,rely=0.05)
+ self.entrygroupe = Entry(self.frame_choix,relief='sunken')
+ self.entrygroupe.place(relx=0.50,rely=0.05)
+
+ self.a = Button(self.frame_choix,text='enlever selection',command=self.sup_valeur_from_salome)
+ self.a.place(relx=0.05,rely=0.2)
+ self.sortie = Entry(self.frame_choix,relief='sunken')
+ self.sortie.place(relx=0.50,rely=0.2)
+
+ l_salome_valeurs=self.node.item.get_salome_valeurs()
+ self.Liste_valeurs_salome=ListeChoix(self,self.frame_valeurs_salome,l_salome_valeurs,
+ liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) Salome actuelle(s) ")
+ self.Liste_valeurs_salome.affiche_liste()
+
+
+ # boutons Ajouter et Supprimer
+ bouton_add = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_left'),
+ command = self.add_valeur_plusieurs_base)
+ bouton_sup = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_right'),
+ command = self.sup_valeur_sans_into)
+ bouton_add.place(relx=0.3,rely=0.35)
+ bouton_sup.place(relx=0.3,rely=0.65)
+
+ # affichage de l'aide
+ self.frame_aide.update()
+ self.aide = Label(self.frame_aide, text = aide,
+ justify='center', anchor='center',
+ wraplength=int(self.frame_aide.winfo_width()*0.8))
+ self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+ self.Liste_valeurs.affiche_liste()
+
+ # boutons Accepter et Annuler
+ bouton_accepter = Button(self.frame_boutons,
+ text='Valider',
+ command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+ bouton_annuler = Button(self.frame_boutons,
+ text = 'Annuler',
+ command = self.annule_modifs_valeur)
+ for but in (bouton_accepter,bouton_annuler):
+ but.pack(side='left',padx=5)
+
+
+
+# ------------------------------------------------------------------------------#
+# classe SALOME_UNIQUE_BASE_Panel
+#
+# Commandes modifiées :
+# - LIRE_MAILLAGE_UNITE
+# Methodes surchargées :
+# - makeValeurPage(self,page)
+#
+# ------------------------------------------------------------------------------#
+
+class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
+
+# ce dictionnaire va servir lors de la sortie d efficas
+# a creer le fichier qui sera integre au config.txt
+# pour relier une unite logique et un nom de fichier
+
+ dict_fichier_unite={}
+
+ def SALOME_LIRE_MAILLAGE_UNITE(self):
+
+ unite=self.node.item.get_valeur()
+ entrychaine=salome.sg.getAllSelected()
+ if entrychaine != '':
+ self.entry2.delete(0,END)
+
+ try:
+ print salome.myStudy
+ SO = salome.myStudy.FindObjectID(entrychaine[0])
+ print SO
+ except:
+ boo = 0
+ SO = None
+
+ if SO != None:
+ myBuilder = salome.myStudy.NewBuilder()
+ boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeComment")
+
+ if boo == 0 :
+ FileName=''
+ print "a"
+ else :
+ Comment=FileAttr.Value()
+ print "ICI"
+ print Comment
+ if Comment.find("FICHIERMED")== -1 :
+ FileName=''
+ else :
+ FileName=Comment[10:]
+
+
+ print "FileName = " , FileName
+ if FileName != '' :
+ print FileName
+ self.entry2.insert(0,FileName)
+ typefic='D'
+ SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite]=typefic+FileName
+ else :
+ print "il faut afficher une Fenetre d impossibilité"
+ showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associé")
+
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+ de base cad entier, réel, string ou complexe
+ """
+ # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+ # et de la liste des SD du bon type (constituant la liste des choix)
+ bulle_aide=self.get_bulle_aide()
+ aide=self.get_aide()
+ aide= justify_text(texte=aide)
+ liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+ # Remplissage du panneau
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ self.label = Label(self.frame_valeur,text='Valeur :')
+ self.label.place(relx=0.1,rely=0.5)
+ self.entry = Entry(self.frame_valeur,relief='sunken')
+ self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
+ self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
+
+ # PN : Ajout d'un bouton pour selectionner à partir de Salome
+ self.b = Button(self.frame_valeur,text='Relier a selection',command=self.SALOME_LIRE_MAILLAGE_UNITE)
+ self.b.place(relx=0.1,rely=0.1)
+ unite=self.node.item.get_valeur()
+ self.entry2 = Entry(self.frame_valeur,relief='sunken')
+ self.entry2.place(relx=0.3,rely=0.1)
+ self.entry2.configure(width = 250)
+
+ if SALOME_UNIQUE_BASE_Panel.dict_fichier_unite.has_key(unite):
+ associe=SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite][1:]
+ self.entry2.delete(0,END)
+ if associe != "" :
+ self.entry2.insert(0,associe)
+ else:
+ self.entry2.delete(0,END)
+
+ # aide associée au panneau
+ self.frame_valeur.update()
+ self.aide = Label(self.frame_valeur,
+ text = aide,
+ wraplength=int(self.frame_valeur.winfo_width()*0.8),
+ justify='center')
+ self.aide.place(relx=0.5,rely=0.7,anchor='n')
+ # affichage de la valeur du MCS
+ self.display_valeur()
+
+#---------------------------------------------------------------------------------------
+# Correspondances entre les classes eficas et les classes salome_eficas
+#______________________________________________________________________________________
+dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel,
+ FONCTION_Panel : SALOME_FONCTION_Panel,
+ PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
+ PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
+ PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
+ UNIQUE_INTO_Panel : SALOME_UNIQUE_INTO_Panel,
+ UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
+ UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
+ UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
+ UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
+
+dict_geom_numgroupe = { }
+dict_geom_numface = { }
"""
import string
-if 1:
- # Modification de la fonction justify_text de Noyau.N_CR
- separateurs=(' ',',','/')
- def split(ligne,cesure):
- ligne= string.rstrip(ligne)
- if len(ligne) <= cesure :
- return ligne
- else:
- coupure=cesure
- while ligne[coupure] not in separateurs and coupure > 0:
- coupure = coupure - 1
- if coupure == 0:
- # Il faut augmenter la cesure
- coupure =cesure
- while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
- coupure = coupure + 1
- if coupure == len(ligne)-1:
- return ligne
- else:
- return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
-
- def justify_text(texte='',cesure=50):
- texte = string.strip(texte)
- liste_lignes = string.split(texte,'\n')
- l=[split(l,cesure) for l in liste_lignes]
- texte_justifie=string.join(l,'\n')
- return texte_justifie
- try:
- import Noyau.N_CR
- Noyau.N_CR.justify_text=justify_text
- except:
- pass
-
-def encadre_message(texte,motif):
- """
- Retourne la chaine de caractères texte entourée d'un cadre formés
- d'éléments 'motif'
- """
- texte = justify_text(texte,cesure=80)
- lignes = string.split(texte,'\n')
- longueur = 0
- for ligne in lignes :
- if len(ligne)> longueur : longueur = len(ligne)
- longueur = longueur + 4
- txt = motif*longueur+'\n'
- for ligne in lignes :
- txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
- txt = txt + motif*longueur+'\n'
- return txt
-
if __name__ == "__main__":
- print encadre_message(motif='!',
+ import Noyau.N_CR
+ print Noyau.N_CR.encadre_message(motif='!',
texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE')
- Il faut au moins un mot-clé parmi : ('FIN',)
- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',)
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from plusieurspanel import PLUSIEURS_Panel
+
+class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
+ """
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de donner une liste de valeurs qui ne sont pas
+ à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
+ de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
+ """
+ # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
+ # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
+ bulle_aide=self.get_bulle_aide()
+ self.ajout_valeurs=None
+ objet_mc = self.node.item.get_definition()
+ aide = self.get_aide()
+ aide = justify_text(texte=aide)
+ min,max = self.node.item.GetMinMax()
+ l_valeurs = self.node.item.GetListeValeurs()
+ l_choix=self.node.item.get_sd_avant_du_bon_type()
+ l_choix.sort()
+ # remplissage du panneau
+ self.frame_valeurs = Frame(page)
+ self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+ self.frame_boutons_fleches = Frame(page)
+ self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+ self.frame_choix = Frame(page)
+ self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+ self.frame_boutons = Frame(page)
+ self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
+ liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+ ("<Button-3>",self.deselectValeur),
+ ("<Double-Button-1>",self.sup_valeur_sans_into))
+ liste_commandes_choix = (("<Button-1>",self.selectChoix),
+ ("<Button-3>",self.deselectChoix),
+ # ("<Double-Button-1>",self.add_valeur_sans_into))
+ ("<Double-Button-1>",self.add_eval_valeur_sans_into))
+ self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) actuelle(s)")
+ self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
+ titre= "Valeurs possibles")
+ bouton_add = Button(self.frame_boutons_fleches,
+ #text="<--",
+ image = images.get_image('arrow_left'),
+ # command = self.add_valeur_sans_into)
+ command = self.add_eval_valeur_sans_into)
+ bouton_sup = Button(self.frame_boutons_fleches,
+ #text="-->",
+ image = images.get_image('arrow_right'),
+ command = self.sup_valeur_sans_into)
+ bouton_accepter = Button(self.frame_boutons,
+ text='Valider',
+ command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+ bouton_annuler = Button(self.frame_boutons,
+ text = 'Annuler',
+ command = self.annule_modifs_valeur)
+ bouton_add.place(relx=0.3,rely=0.35)
+ bouton_sup.place(relx=0.3,rely=0.65)
+ for but in (bouton_accepter,bouton_annuler):
+ but.pack(side='left',padx=5)
+ self.Liste_valeurs.affiche_liste()
+ self.Liste_choix.affiche_liste()
+ for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+ fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+ def add_eval_valeur_sans_into(self,valeurentree=None):
+ valeur,validite=self.node.item.eval_valeur(valeurentree)
+ if not validite :
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+ self.add_valeur_sans_into(valeur)
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide associée au panneau
+ """
+ return """Un clic sur une valeur des deux listes la sélectionne.
+ - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+ dans la liste des valeurs que vous voulez affecter au mot-clé simple
+ - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+ sélectionnée (elle apparaît alors à nouveau comme choix possible
+ dans la liste des choix à droite)
+ - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+ au mot-clé simple courant
+ - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+ avant toute modification depuis le dernier 'Valider'"""
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide indiquant de quel type doivent être les
+ valeurs que doit entrer l'utilisateur
+ """
+ commentaire=""
+ mc = self.node.item.get_definition()
+ type = mc.type[0].__name__
+ if len(mc.type)>1 :
+ for typ in mc.type[1:] :
+ type = type + ' ou '+typ.__name__
+ if mc.min == mc.max:
+ commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
+ else :
+ commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+ aideval=self.node.item.aide()
+ commentaire=commentaire +"\n"+ aideval
+ return commentaire
+
+
+ def sup_valeur(self,name=None):
+ """
+ Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+ à la liste des choix possibles
+ """
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ liste_valeurs.remove(self.selected_valeur)
+ liste_choix = self.node.item.get_definition().into
+ liste_choix = substract_list(liste_choix,liste_valeurs)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ self.Liste_choix.put_liste(liste_choix)
+ self.selected_valeur = None
+
+ def erase_valeur(self):
+ pass
+
+ def get_valeur(self):
+ """
+ Retourne la valeur sélectionnée dans la liste des choix
+ """
+ return self.selected_choix
+
+ def display_valeur(self,val=None):
+ """
+ Affiche la valeur passée en argument dans l'entry de saisie.
+ Par défaut affiche la valeur du mot-clé simple
+ """
+ # Il n'y a pas d'entry pour ce type de panneau
+ return
+
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import showinfo
+from widgets import askopenfilename
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+from plusieurspanel import PLUSIEURS_Panel
+
+
+
+class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
+ """
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de donner une liste de valeurs qui ne sont pas
+ à choisir dans une liste discrètes et qui sont de type de base :
+ entier, réel, string,...
+ """
+ def makeValeurPage(self,page):
+ """
+ Crée la page de saisie d'une liste de valeurs à priori quelconques,
+ cad qui ne sont pas à choisir dans une liste prédéfinie
+ """
+ # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+ # et la liste des valeurs déjà affectées à l'objet courant
+ bulle_aide=self.get_bulle_aide()
+ objet_mc = self.node.item.get_definition()
+ aide = self.get_aide()
+ aide = justify_text(texte=aide)
+ min,max = self.node.item.GetMinMax()
+ l_valeurs = self.node.item.GetListeValeurs()
+
+ # création des frames globales
+ self.frame1 = Frame(page,relief='groove',bd=2)
+ self.frame2 = Frame(page)
+ self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+ self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+ self.frame_right = Frame(self.frame1)
+ self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
+ # création des frames internes
+ self.frame_valeurs = Frame(self.frame1)
+ self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+ self.frame_boutons_fleches = Frame(self.frame_right)
+ self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
+ self.frame_choix = Frame(self.frame_right)
+ self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
+ self.frame_aide = Frame(self.frame_right)
+ self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
+ self.frame_boutons = Frame(self.frame2)
+ self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
+ for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+ self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+ fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+ # création des objets dans les frames
+ liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+ ("<Button-3>",self.deselectValeur),
+ ("<Double-Button-1>",self.sup_valeur_sans_into))
+ self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) actuelle(s)")
+
+ # Création de l'entry ou de la liste des SD
+ self.label = Label(self.frame_choix,text="Valeur :")
+ # PN : pour ajouter les validators
+ self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
+ self.label.place(relx=0.05,rely=0.5)
+
+ # Création d'un bouton "Importer ..." sur le panel.
+ bouton_valeurs_fichier = Button(self.frame_choix,
+ text="Importer ...",
+ command=self.select_in_file)
+ bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
+ self.ajout_valeurs = None
+
+ # boutons Ajouter et Supprimer
+ bouton_add = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_left'),
+ command = self.add_valeur_plusieurs_base)
+ bouton_sup = Button(self.frame_boutons_fleches,
+ image = images.get_image('arrow_right'),
+ command = self.sup_valeur_sans_into)
+ bouton_add.place(relx=0.3,rely=0.35)
+ bouton_sup.place(relx=0.3,rely=0.65)
+ # affichage de l'aide
+ self.frame_aide.update()
+ self.aide = Label(self.frame_aide,
+ text = aide,
+ justify='center',
+ anchor='center',
+ wraplength=int(self.frame_aide.winfo_width()*0.8))
+ self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+ self.Liste_valeurs.affiche_liste()
+ # boutons Accepter et Annuler
+ bouton_accepter = Button(self.frame_boutons,
+ text='Valider',
+ command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+ bouton_annuler = Button(self.frame_boutons,
+ text = 'Annuler',
+ command = self.annule_modifs_valeur)
+ for but in (bouton_accepter,bouton_annuler):
+ but.pack(side='left',padx=5)
+
+ def add_valeur_plusieurs_base(self,name=None):
+ if name != None :
+ valeur = name
+ else:
+ valeur,validite,commentaire=self.get_valeur()
+ if not validite :
+ self.parent.appli.affiche_infos(commentaire)
+ return
+
+ encorevalide=self.node.item.valide_item(valeur)
+ if encorevalide :
+ listecourante=self.Liste_valeurs.get_liste()
+ encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
+ if not encorevalide : encorevalide = -1
+ self.add_valeur_sans_into(valeur,encorevalide)
+
+ def select_in_file(self):
+ """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
+ nom_fichier = askopenfilename(title="Choix fichier :")
+
+ if not nom_fichier:
+ return
+
+ try:
+ f = open(nom_fichier, "rb")
+ selection_texte = f.read()
+ f.close()
+ self.ajout_valeurs = FenetreDeSelection(self,
+ self.node.item,
+ self.parent.appli,
+ titre="Sélection de valeurs",
+ texte=selection_texte)
+ except:
+ traceback.print_exc()
+ showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
+
+ def get_bulle_aide(self):
+ """
+ Retourne l'aide associée au panneau courant
+ """
+ return """Taper dans la boîte de saisie de droite la valeur que
+ vous voulez affecter au mot-clé simple.
+ - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
+ dans la liste des valeurs que vous voulez affecter au mot-clé simple
+ - Un clic sur une valeur de la liste la sélectionne
+ - Un clic sur la flèche droite ou un double-clic retire la valeur
+ sélectionnée de la liste
+ - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
+ au mot-clé simple
+ - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
+ depuis le dernier clic sur 'Valider'"""
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+ que saisit l'utilisateur
+ """
+ commentaire=""
+ mc = self.node.item.get_definition()
+ d_aides = { 'TXM' : 'chaînes de caractères',
+ 'R' : 'réels',
+ 'I' : 'entiers',
+ 'C' : 'complexes'}
+ type = mc.type[0]
+ if not d_aides.has_key(type) : return 'Type de base inconnu'
+ if mc.min == mc.max:
+ commentaire="Une liste de "+d_aides[type]+" de longueur " + `mc.min` + " est attendue"
+ else :
+ commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+
+ aideval=self.node.item.aide()
+ commentaire=commentaire +"\n"+aideval
+ return commentaire
+
+ def make_entry(self,frame,command):
+ """
+ Crée l'entry de saisie de la valeur souhaitée : distingue le
+ cas d'un complexe attendu, d'une autre valeur quelconque
+ """
+ if self.node.item.wait_complex():
+ self.typ_cplx=StringVar()
+ self.typ_cplx.set('RI')
+ rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI')
+ rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP')
+ self.entry1 = Pmw.EntryField(frame,validate='real')
+ self.entry2 = Pmw.EntryField(frame,validate='real')
+ rb1.place(relx=0.05,rely = 0.4)
+ rb2.place(relx=0.05,rely = 0.6)
+ self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
+ self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
+ self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
+ self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
+ self.entry1.focus()
+ else:
+ self.entry = Entry(frame,relief='sunken')
+ self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
+ self.entry.bind("<Return>",lambda e,c=command:c())
+ self.entry.focus()
+
+ def get_valeur(self):
+ """
+ Retourne la valeur saisie par l'utilisateur dans self.entry
+ """
+ if hasattr(self,'entry'):
+ # Traitement d'une entree unique
+ valeurentree = self.entry.get()
+ valeur,validite=self.node.item.eval_valeur(valeurentree)
+ if not validite :
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ else:
+ commentaire = ""
+ return valeur,validite,commentaire
+ else:
+ # Traitement d'une entree de type complexe
+ try:
+ valeur= (self.typ_cplx.get(),
+ string.atof(self.entry1.get()),
+ string.atof(self.entry2.get()))
+ return valeur,1,""
+ except:
+ #traceback.print_exc()
+ return None,0,"impossible d'évaluer la valeur d'entree"
+
+ def erase_valeur(self):
+ """
+ Efface la valeur donnée par l'utilisateur dans l'entry
+ """
+ if hasattr(self,'entry'):
+ self.entry.delete(0,END)
+ else:
+ self.typ_cplx.set('RI')
+ self.entry1.delete(0,END)
+ self.entry2.delete(0,END)
+
+
+ def display_valeur(self,val=None):
+ """
+ Affiche la valeur passée en argument dans l'entry de saisie.
+ Par défaut affiche la valeur du mot-clé simple
+ """
+ if not val :
+ #valeur = self.node.item.getval()
+ #valeur = self.node.item.get_valeur()
+ valeur = self.node.item.object.getval()
+ else:
+ valeur = val
+ if not valeur : return
+
+ if hasattr(self,'entry'):
+ # Traitement d'une entree unique
+ self.entry.delete(0,END)
+ self.entry.insert(0,str(valeur))
+ else:
+ # Traitement d'une entree de type complexe
+ typ_cplx,x1,x2=valeur
+ self.entry1.delete(0,END)
+ self.entry2.delete(0,END)
+ self.typ_cplx.set(typ_cplx)
+ self.entry1.setentry(x1)
+ self.entry2.setentry(x2)
+
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from plusieurspanel import PLUSIEURS_Panel
+
+class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
+ """
+ Classe servant à définir le panneau permettant d'afficher et de saisir une
+ liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
+ de possibles
+ """
+ self.ajout_valeurs = None
+ # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
+ # la liste des choix et la liste des valeurs
+ aide = self.get_aide()
+ aide = justify_text(texte=aide)
+ bulle_aide=self.get_bulle_aide()
+ objet_mc = self.node.item.get_definition()
+ min,max = self.node.item.GetMinMax()
+ #l_choix=list(objet_mc.into)
+ l_valeurs = self.node.item.GetListeValeurs()
+ l_choix= self.node.item.get_liste_possible(l_valeurs)
+ # reinitialisation de l_valeurs
+ l_valeurs = self.node.item.GetListeValeurs()
+
+ # remplissage du panneau
+ self.frame_valeurs = Frame(page)
+ self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+ self.frame_boutons_fleches = Frame(page)
+ self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+ self.frame_choix = Frame(page)
+ self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+ self.frame_boutons = Frame(page)
+ self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
+ self.frame_aide = Frame(page)
+ self.frame_aide.place(relx=0.1,rely=0.75,relwidth=0.9,relheight=0.1)
+ liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+ ("<Button-3>",self.deselectValeur),
+ ("<Double-Button-1>",self.sup_valeur))
+ liste_commandes_choix = (("<Button-1>",self.selectChoix),
+ ("<Button-3>",self.deselectChoix),
+ ("<Double-Button-1>",self.add_choix))
+ self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
+ l_valeurs,liste_commandes = liste_commandes_valeurs,
+ titre="Valeur(s) actuelle(s)")
+ self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
+ liste_commandes = liste_commandes_choix,
+ titre= "Valeurs possibles")
+ bouton_add = Button(self.frame_boutons_fleches,
+ #text="<--",
+ image = images.get_image('arrow_left'),
+ command = self.add_choix)
+ bouton_sup = Button(self.frame_boutons_fleches,
+ #text="-->",
+ image = images.get_image('arrow_right'),
+ command = self.sup_valeur)
+ bouton_accepter = Button(self.frame_boutons,
+ text='Valider',
+ command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+ bouton_annuler = Button(self.frame_boutons,
+ text = 'Annuler',
+ command = self.annule_modifs_valeur)
+ bouton_add.place(relx=0.3,rely=0.35)
+ bouton_sup.place(relx=0.3,rely=0.65)
+ for but in (bouton_accepter,bouton_annuler):
+ but.pack(side='left',padx=5)
+ self.Liste_valeurs.affiche_liste()
+ self.Liste_choix.affiche_liste()
+ for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+ fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ self.frame_aide.update()
+ self.aide = Label(self.frame_aide,
+ text = aide,
+ justify='center',
+ anchor='center',
+ wraplength=int(self.frame_aide.winfo_width()*0.8))
+ self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+ que saisit l'utilisateur
+ """
+ commentaire=""
+ mc = self.node.item.get_definition()
+ d_aides = { 'TXM' : 'chaînes de caractères',
+ 'R' : 'réels',
+ 'I' : 'entiers',
+ 'C' : 'complexes'}
+ type = mc.type[0]
+ if not d_aides.has_key(type) :
+ if mc.min == mc.max:
+ return str(mc.min)+" valeur(s) est(sont) attendue(s)"
+ else :
+ return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
+ if mc.min == mc.max:
+ commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
+ else :
+ commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type "+d_aides[type]+" sont attendues"
+ aideval=self.node.item.aide()
+ commentaire=commentaire + "\n" + aideval
+ return commentaire
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide du panneau (affichée par clic droit)
+ """
+ return """Un clic sur une valeur des deux listes la sélectionne.
+ - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+ dans la liste des valeurs que vous voulez affecter au mot-clé simple
+ - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+ sélectionnée (elle apparaît alors à nouveau comme choix possible
+ dans la liste des choix à droite)
+ - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+ au mot-clé simple courant
+ - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+ avant toute modification depuis le dernier 'Valider'"""
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from newsimppanel import newSIMPPanel
+
+
+class PLUSIEURS_Panel(newSIMPPanel):
+ """
+ Classe virtuelle servant de classe mère à toutes celles définissant
+ un panneau pour un mot-clé simple qui attend une liste de valeurs
+ """
+ def accepte_modifs_valeur(self,min,max,liste=None):
+ """
+ Méthode qui récupère la liste des valeurs donnée par l'utilisateur
+ et l'affecte au mot-clé courant.
+ le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel
+ """
+ if liste==None:
+ l1_valeurs = self.Liste_valeurs.get_liste()
+ else:
+ l1_valeurs = liste
+ l_valeurs=[]
+ for val in l1_valeurs :
+ if val != '' and val != None :
+ l_valeurs.append(val)
+
+ longueur = len(l_valeurs)
+ if longueur < min or longueur > max :
+ self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
+ return
+ if longueur > 1:
+ valeur = tuple(l_valeurs)
+ elif longueur == 1:
+ valeur = l_valeurs[0]
+ else:
+ valeur = None
+
+ self.parent.appli.affiche_infos("Valeur acceptée")
+ self.record_valeur(valeur)
+ # fermeture de la fenêtre de sélection
+ if self.ajout_valeurs:
+ self.ajout_valeurs.quit()
+
+ def annule_modifs_valeur(self):
+ """
+ RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
+ """
+ self.node.select()
+ # fermeture de la fenêtre de sélection
+ if self.ajout_valeurs:
+ self.ajout_valeurs.quit()
+
+ def add_valeur_sans_into(self,name=None,encorevalide=1):
+ """
+ Lit ce que l'utilisateur a saisi dans self.entry et cherche à
+ l'évaluer :
+ - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
+ - sinon elle est refusée
+ encorevalide vaut 1 si le validateur trouve l item et la liste correctes
+ 0 si le validateur trouve la valeur de l item incorrecte
+ -1 si le validateur trouve la liste incorrecte
+ """
+
+ commentaire="Valeur incorrecte : ajout à la liste refusé"
+ testvalide=1
+
+ # Lecture de la zone de saisie et evaluation si nécessaire
+ if name != None :
+ valeur = name
+ else:
+ valeurentree = self.get_valeur()
+ if valeurentree == '': valeur=None
+ valeurentree,testvalide=self.node.item.eval_valeur(valeur)
+ if (not testvalide) :
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
+
+ # Pas de traitement des valeurs nulles ( a priori clic involontaire
+ if (valeur == None or valeur =="") :
+ commentaire = "Pas de saisie des valeurs nulles"
+ encorevalide = -2
+ testtype=0
+ else :
+ testtype = self.node.item.object.verif_type(valeur)
+ if not testtype :
+ commentaire ="Type de la valeur incorrecte"
+ encorevalide=-2
+
+ if (encorevalide ==0) :
+ commentaire=self.node.item.info_erreur_item()
+ if (encorevalide == -1) :
+ commentaire=self.node.item.info_erreur_liste()
+ # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
+ min,max = self.node.item.GetMinMax()
+ if len(self.Liste_valeurs.get_liste()) >= max :
+ commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+
+ if testvalide and (encorevalide == 1):
+ min,max = self.node.item.GetMinMax()
+
+ if testtype :
+ liste_valeurs = self.Liste_valeurs.get_liste()
+ if len(liste_valeurs) >= max :
+ commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+ else :
+ liste_valeurs.append(valeur)
+ self.Liste_valeurs.put_liste(liste_valeurs)
+ self.erase_valeur()
+ commentaire="Nouvelle valeur acceptée"
+ else :
+ commentaire ="Type de la valeur incorrecte"
+
+ #self.erase_valeur()
+ self.parent.appli.affiche_infos(commentaire)
+
+ def sup_valeur_sans_into(self,name=None):
+ """
+ Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
+ """
+ try:
+ self.Liste_valeurs.remove_selected_item()
+ self.display_valeur(self.selected_valeur)
+ self.selected_valeur = None
+ except:
+ # la valeur sélectionnée n'est pas dans la liste
+ return
+
+ def display_valeur(self,val=None):
+ """
+ Affiche la valeur passée en argument dans l'entry de saisie.
+ Par défaut affiche la valeur du mot-clé simple
+ """
+ if not val :
+ #valeur = self.node.item.getval()
+ valeur = self.node.item.object.getval()
+ else:
+ valeur = val
+ self.entry.delete(0,END)
+ if not valeur : return
+ self.entry.insert(0,str(valeur))
+
import traceback
import cPickle
import Pmw
-from tkMessageBox import showinfo,showerror
# Modules Eficas
import prefs
import fontes
import analyse_catalogue
from Noyau.N_CR import CR
+from widgets import showinfo,showerror
from widgets import Fenetre
from utils import init_rep_cata_dev
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+#import prefs
+#import panels
+#import images
+#from widgets import ListeChoix
+#from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+from newsimppanel import newSIMPPanel
+
+
+class SHELLPanel(newSIMPPanel):
+ """
+ Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
+ """
+
+ def makeValeurPage(self,page):
+ """
+ Affiche la page concernant l'objet pointé par self qui attend un shell
+ """
+ objet_mc = self.node.item.get_definition()
+ aide = self.gen_aide()
+ aide = justify_text(texte=aide)
+ self.frame = Frame(page)
+ self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
+ label_aide = Label(self.frame,text = aide)
+ label_aide.place(relx=0.5,rely=0.1,anchor='center')
+ self.text = Text(self.frame,bg='gray95')
+ self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
+ but_val = Button(self.frame,text='Valider',command = self.valide_shell)
+ but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
+ but_val.place(relx=0.35,rely=0.9,anchor='center')
+ but_ann.place(relx=0.65,rely=0.9,anchor='center')
+ self.display_valeur()
+
+ def gen_aide(self):
+ """
+ Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
+ pointé par self
+ """
+ return "Un shell est attendu"
+
+ def valide_shell(self,event=None):
+ """
+ Récupère la valeur saisie par l'utilisateur dans self.text
+ et la stocke dans l'objet MCSIMP courant
+ """
+ texte = self.text.get(1.0,END)
+ self.record_valeur(texte)
+
+ def annule_shell(self,event=None):
+ """
+ Annule toute saisie dans self.text
+ """
+ self.text.delete(0,END)
+
+ def display_valeur(self,val=None):
+ """
+ Affiche la valeur de l'objet pointé par self
+ """
+ if val != None :
+ valeur = val
+ else:
+ valeur = self.node.item.get_valeur()
+ if valeur == None or valeur == '': return
+ self.text.insert(END,valeur)
+
self.label.pack(side='left',expand=1,fill='both')
def affiche_infos(self,texte):
- assert type(texte) is types.StringType
if len(texte)>150 :
texte_infos=texte[0:150]
else :
texte_infos=texte
self.label.configure(text=texte_infos)
-
def reset_affichage_infos(self):
""" Efface tout message présent dans le panneau en bas d'EFICAS """
self.affiche_infos('')
--- /dev/null
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+
+class UNIQUE_ASSD_Panel(UNIQUE_Panel):
+ """
+ Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
+ d'un type dérivé d'ASSD
+ """
+ def valid_valeur_automatique(self):
+ """
+ Réalise la validation d'un concept sans remonter dans le
+ node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
+ Identique à valid_valeur moins appel de self.node.parent.select()
+ On pourrait supposer que le seul concept présent est valide et donc ne pas
+ réaliser tous les tests de vérification.
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ valeur = self.get_valeur()
+ self.erase_valeur()
+ anc_val = self.node.item.get_valeur()
+ valeur,validite=self.node.item.eval_valeur_item(valeur)
+ test = self.node.item.set_valeur(valeur)
+ if not test :
+ mess = "impossible d'évaluer : %s " %`valeur`
+ self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+ elif self.node.item.isvalid() :
+ self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ self.node.update()
+ else :
+ cr = self.node.item.get_cr()
+ mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+ self.reset_old_valeur(anc_val,mess=mess)
+
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une
+ SD de type dérivé d'ASSD
+ """
+ # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+ # et de la liste des SD du bon type (constituant la liste des choix)
+ bulle_aide=self.get_bulle_aide()
+ aide=self.get_aide()
+ aide= justify_text(texte=aide)
+ liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+ # Remplissage du panneau
+ self.valeur_choisie = StringVar()
+ self.valeur_choisie.set('')
+ min,max = self.node.item.GetMinMax()
+ if (min == 1 and min == max and len(liste_noms_sd)==1):
+ if self.valeur_choisie.get() != liste_noms_sd[0]:
+ self.valeur_choisie.set(liste_noms_sd[0])
+ self.valid_valeur_automatique()
+
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+ items=liste_noms_sd,
+ labelpos='n',
+ label_text="Structures de données du type\n requis par l'objet courant :",
+ listbox_height = 6,
+ selectioncommand=self.select_valeur_from_list,
+ dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+ self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+ Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
+ #self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
+ Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
+ # affichage de la valeur courante
+ self.display_valeur()
+
+ def get_bulle_aide(self):
+ """
+ Retourne l'aide associée au panneau
+ """
+ return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
+ """
+ mc = self.node.item.get_definition()
+ type = mc.type[0].__name__
+ if len(mc.type)>1 :
+ for typ in mc.type[1:] :
+ type = type + ' ou '+typ.__name__
+ commentaire="Un objet de type "+type+" est attendu"
+ aideval=self.node.item.aide()
+ commentaire=commentaire +"\n"+ aideval
+ return commentaire
+
+
+ def select_valeur_from_list(self):
+ """
+ Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+ """
+ if len(self.listbox.get()) == 0 : return
+ choix = self.listbox.getcurselection()[0]
+ self.valeur_choisie.set(choix)
+
+ def choose_valeur_from_list(self,command):
+ """
+ Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+ Exécute command
+ """
+ if len(self.listbox.get()) == 0 : return
+ choix = self.listbox.getcurselection()[0]
+ self.valeur_choisie.set(choix)
+ apply(command,(),{})
+
+ def get_valeur(self):
+ """
+ Retourne la valeur donnée par l'utilisateur au MCS
+ """
+ return self.valeur_choisie.get()
+
+ def display_valeur(self):
+ """
+ Affiche la valeur de l'objet pointé par self
+ """
+ valeur = self.node.item.get_valeur()
+ if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+ self.valeur_choisie.set(valeur.nom)
+
+ def erase_valeur(self):
+ pass
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+
+class UNIQUE_BASE_Panel(UNIQUE_Panel):
+ """
+ Classe servant à définir le panneau associé aux mots-clés simples qui attendent
+ une valeur d'un type de base (entier, réel ou string).
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+ de base cad entier, réel, string ou complexe
+ """
+ # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+ # et de la liste des SD du bon type (constituant la liste des choix)
+ bulle_aide=self.get_bulle_aide()
+ aide=self.get_aide()
+ aide= justify_text(texte=aide)
+ liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+ # Remplissage du panneau
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ self.label = Label(self.frame_valeur,text='Valeur :')
+ self.label.place(relx=0.1,rely=0.5)
+ self.entry = Entry(self.frame_valeur,relief='sunken')
+ self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
+ self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
+ self.entry.focus()
+ # aide associée au panneau
+ self.frame_valeur.update()
+ self.aide = Label(self.frame_valeur,
+ text = aide,
+ wraplength=int(self.frame_valeur.winfo_width()*0.8),
+ justify='center')
+ self.aide.place(relx=0.5,rely=0.7,anchor='n')
+ # affichage de la valeur du MCS
+ self.display_valeur()
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide indiquant de quel type doit être la valeur
+ du mot-clé simple fournie par l'utilisateur
+ """
+ mc = self.node.item.get_definition()
+ d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+ 'R' : "Un réel est attendu",
+ 'I' : "Un entier est attendu"}
+ type = mc.type[0]
+ commentaire=d_aides.get(type,"Type de base inconnu")
+ aideval=self.node.item.aide()
+ commentaire=commentaire +"\n"+ aideval
+ return commentaire
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide associée au panneau et affichée par clic droit
+ """
+ return """Saisissez la valeur que vous voulez affecter au mot-clé simple
+ dans la zone de saisie et pressez <Return>"""
+
+ def display_valeur(self):
+ """
+ Affiche la valeur de l'objet pointé par self
+ """
+ valeur = self.node.item.get_valeur()
+ if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+ self.entry.delete(0,END)
+ self.entry.insert(0,valeur)
+ self.entry.focus()
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+
+class UNIQUE_COMP_Panel(UNIQUE_Panel):
+ """
+ Classe servant à définir le panneau associé aux mots-clés simples
+ qui attendent une valeur de type complexe
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+ de base cad entier, réel, string ou complexe
+ """
+ # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
+ bulle_aide=self.get_bulle_aide()
+ aide=self.get_aide()
+ aide= justify_text(texte=aide)
+ # Remplissage du panneau
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ self.label = Label(self.frame_valeur,text='Valeur :')
+ self.label.place(relx=0.1,rely=0.5)
+ self.typ_cplx=StringVar()
+ self.typ_cplx.set('RI')
+ rb1 = Radiobutton(self.frame_valeur, text='RI',variable=self.typ_cplx,value='RI')
+ rb2 = Radiobutton(self.frame_valeur, text='MP',variable=self.typ_cplx,value='MP')
+ self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
+ self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
+ rb1.place(relx=0.05,rely = 0.4)
+ rb2.place(relx=0.05,rely = 0.6)
+ self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
+ self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
+ self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
+ self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
+ self.entry1.focus()
+ self.frame_valeur.update()
+ self.aide = Label(self.frame_valeur,
+ text = aide,
+ wraplength=int(self.frame_valeur.winfo_width()*0.8),
+ justify='center')
+ self.aide.place(relx=0.5,rely=0.7,anchor='n')
+ # affichage de la valeur du MCS
+ self.display_valeur()
+
+ def display_valeur(self):
+ """
+ Affiche la valeur de l'objet pointé par self
+ """
+ valeur = self.node.item.get_valeur()
+ if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+ typ_cplx,x1,x2=valeur
+ self.entry1.delete(0,END)
+ self.entry2.delete(0,END)
+ self.typ_cplx.set(typ_cplx)
+ self.entry1.setentry(x1)
+ self.entry2.setentry(x2)
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide du panneau
+ """
+ return """-Choisissez votre format de saisie du complexe :
+ \t 'RI' = parties réelle et imaginaire
+ \t 'MP' = module/phase (en degrés)
+ - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
+
+ def get_aide(self):
+ """
+ Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
+ le mot-clé simple courant
+ """
+ commentaire='Un complexe est attendu'
+ aideval=self.node.item.aide()
+ commentaire=commentaire +"\n"+ aideval
+ return commentaire
+
+ def get_valeur(self):
+ """
+ Retourne le complexe saisi par l'utilisateur
+ """
+ l=[]
+ l.append(self.typ_cplx.get())
+ l.append(string.atof(self.entry1.get()))
+ l.append(string.atof(self.entry2.get()))
+ return `tuple(l)`
+
+ def erase_valeur(self):
+ """
+ Efface les entries de saisie
+ """
+ self.typ_cplx.set('RI')
+ self.entry1.delete(0,END)
+ self.entry2.delete(0,END)
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+class UNIQUE_INTO_Panel(UNIQUE_Panel):
+ """
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie d'une seule valeur parmi un ensemble
+ discret de possibles
+ """
+ # récupération de la bulle d'aide et de l'objet mc
+ bulle_aide=self.get_bulle_aide()
+ objet_mc = self.node.item.get_definition()
+ # remplissage du panel
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide :
+ s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ #l_choix=list(objet_mc.into)
+ #l_choix.sort()
+ l_choix=self.node.item.get_liste_possible([])
+ self.label = Label(self.frame_valeur,text='Choisir une valeur :')
+ self.label.pack(side='top')
+ self.frame = Frame(page)
+ self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
+ liste_commandes = (("<Button-1>",self.selectChoix),
+ ("<Button-3>",self.deselectChoix),
+ ("<Double-Button-1>",self.record_valeur))
+ self.Liste_choix = ListeChoix(self,self.frame,l_choix,
+ liste_commandes = liste_commandes,
+ titre="Valeurs possibles")
+ self.Liste_choix.affiche_liste()
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
+ """
+ return """Double-cliquez sur la valeur désirée
+ pour valoriser le mot-clé simple courant"""
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from newsimppanel import newSIMPPanel
+
+
+class UNIQUE_Panel(newSIMPPanel):
+ """
+ Classe virtuelle servant de classe mère à toutes celles définissant un panneau
+ permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
+ """
+
+ def erase_valeur(self):
+ """
+ Efface l'entry de saisie
+ """
+ self.entry.delete(0,END)
+
+ def get_valeur(self):
+ """
+ Retourne la valeur donnée par l'utilisateur
+ """
+ return self.entry.get()
+
+ def valid_valeur(self):
+ """
+ Teste si la valeur fournie par l'utilisateur est une valeur permise :
+ - si oui, l'enregistre
+ - si non, restaure l'ancienne valeur
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ anc_val = self.node.item.get_valeur()
+ valeurentree = self.get_valeur()
+ self.erase_valeur()
+ valeur,validite=self.node.item.eval_valeur(valeurentree)
+ if not validite :
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ self.parent.appli.affiche_infos(commentaire)
+ return
+
+ test = self.node.item.set_valeur(valeur)
+
+ if not test :
+ mess = "impossible d'évaluer : %s " %`valeur`
+ self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess)
+ elif self.node.item.isvalid() :
+ self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ self.node.update()
+ self.node.parent.select()
+ else :
+ cr = self.node.item.get_cr()
+ mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+ self.reset_old_valeur(anc_val,mess=mess)
+
--- /dev/null
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM 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
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from utils import substract_list
+
+# Import des panels
+from uniqueassdpanel import UNIQUE_ASSD_Panel
+
+
+class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
+ """
+ Classe servant à définir le panneau correspondant à un mot-clé simple
+ qui attend une valeur unique de type dérivé d'ASSD ou non encore
+ existante (type CO(...) utilisé dans les macros uniquement)
+ """
+ def makeValeurPage(self,page):
+ """
+ Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
+ d'ASSD
+ """
+ # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+ # et de la liste des SD du bon type (constituant la liste des choix)
+ bulle_aide=self.get_bulle_aide()
+ aide=self.get_aide()
+ aide= justify_text(texte=aide)
+ liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+ # Remplissage du panneau
+ self.frame_valeur = Frame(page)
+ self.frame_valeur.pack(fill='both',expand=1)
+ self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+ self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+ # affichage de la liste des SD existantes et du bon type
+ self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+ items=liste_noms_sd,
+ labelpos='n',
+ label_text="Structures de données du type\n requis par l'objet courant :",
+ listbox_height = 6,
+ selectioncommand=self.select_valeur_from_list,
+ dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+ self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+ # affichage du bouton 'Nouveau concept'
+ self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ",
+ items = ('NON','OUI'),menubutton_width=10)
+ self.b_co.configure(command = lambda e,s=self : s.ask_new_concept())
+ self.b_co.place(relx=0.05,rely=0.6,anchor='w')
+ self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
+ self.entry_co = Entry(self.frame_valeur)
+ self.entry_co.bind('<Return>',self.valid_nom_concept_co)
+ # affichage du label de la structure de donnée choisie
+ self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
+ self.valeur_choisie = StringVar()
+ self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
+ self.frame_valeur.update()
+ self.aide = Label(self.frame_valeur,
+ text = aide,
+ wraplength=int(self.frame_valeur.winfo_width()*0.8),
+ justify='center')
+ self.aide.place(relx=0.5,rely=0.85,anchor='n')
+ # affichage de la valeur courante
+ self.display_valeur()
+
+ def get_bulle_aide(self):
+ """
+ Retourne la bulle d'aide du panneau
+ """
+ return """Double-cliquez sur la structure de donnée désirée
+ pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
+ entrer le nom d'un concept non encore existant"""
+
+ def valid_valeur(self):
+ """
+ Teste si la valeur fournie par l'utilisateur est une valeur permise :
+ - si oui, l'enregistre
+ - si non, restaure l'ancienne valeur
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ valeur = self.get_valeur()
+ self.erase_valeur()
+ anc_val = self.node.item.get_valeur()
+ test_CO=self.node.item.is_CO(anc_val)
+ test = self.node.item.set_valeur(valeur)
+ if not test :
+ mess = "impossible d'évaluer : %s " %`valeur`
+ self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+ return
+ elif self.node.item.isvalid() :
+ self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+ if test_CO:
+ # il faut egalement propager la destruction de l'ancien concept
+ self.node.item.delete_valeur_co(valeur=anc_val)
+ # et on force le recalcul des concepts de sortie de l'etape
+ self.node.item.object.etape.get_type_produit(force=1)
+ # et le recalcul du contexte
+ self.node.item.object.etape.parent.reset_context()
+ self.node.parent.select()
+ else :
+ cr = self.node.item.get_cr()
+ mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+ self.reset_old_valeur(anc_val,mess=mess)
+ return
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ self.node.update()
+
+ def valid_nom_concept_co(self,event=None):
+ """
+ Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+ la valeur du MCS courant et stocke cette valeur
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ anc_val = self.node.item.get_valeur()
+ nom_concept = self.entry_co.get()
+ test,mess=self.node.item.set_valeur_co(nom_concept)
+ if not test:
+ # On n'a pas pu créer le concept
+ self.parent.appli.affiche_infos(mess)
+ return
+ elif self.node.item.isvalid() :
+ self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+ self.node.parent.select()
+ else :
+ cr = self.node.item.get_cr()
+ mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+ self.reset_old_valeur(anc_val,mess=mess)
+ return
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ if self.node.item.isvalid():
+ self.node.parent.select()
+ self.node.update()
+
+ def ask_new_concept(self):
+ """
+ Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
+ permettre à l'utilisateur de donner le nom du nouveau concept
+ """
+ new_concept = self.b_co.getcurselection()
+ if new_concept == 'OUI':
+ self.label_co.place(relx=0.05,rely=0.7)
+ self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
+ self.l_resu.place_forget()
+ self.label_valeur.place_forget()
+ self.entry_co.focus()
+ elif new_concept == 'NON':
+ # On est passe de OUI à NON, on supprime la valeur
+# PN correction de bug (on passe de non a non et cela supprime la valeur)
+# ajout du if de le ligne suivane
+ if self.node.item.is_CO():
+ self.node.item.delete_valeur_co()
+ self.record_valeur(name=None,mess="Suppression CO enregistrée")
+ self.label_co.place_forget()
+ self.entry_co.place_forget()
+ self.l_resu.place(relx=0.05,rely=0.7)
+ self.label_valeur.place(relx=0.45,rely=0.7)
+
+ def display_valeur(self):
+ """
+ Affiche la valeur de l'objet pointé par self
+ """
+ valeur = self.node.item.get_valeur()
+ if valeur == None or valeur == '':
+ self.valeur_choisie.set('')
+ return # pas de valeur à afficher ...
+ # il faut configurer le bouton si la valeur est un objet CO
+ # sinon afficher le nom du concept dans self.valeur_choisie
+ if self.node.item.is_CO():
+ self.b_co.invoke('OUI')
+ self.entry_co.insert(0,valeur.nom)
+ else:
+ self.valeur_choisie.set(valeur.nom)
+
+ def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+ """
+ Enregistre val comme valeur de self.node.item.object SANS faire de test de validité
+ """
+ if self.parent.modified == 'n' : self.parent.init_modif()
+ if name != None:
+ valeur =name
+ else :
+ self.entry_co.delete(0,END)
+ valeur= self.entry_co.get()
+ self.node.item.set_valeur_co(valeur)
+ self.parent.appli.affiche_infos(mess)
+ # On met a jour le display dans le panneau
+ self.display_valeur()
+ if self.node.item.get_position()=='global':
+ self.node.etape.verif_all()
+ elif self.node.item.get_position()=='global_jdc':
+ self.node.racine.verif_all()
+ else :
+ self.node.parent.verif()
+ if self.node.item.isvalid():
+ self.node.parent.select()
+ self.node.update()
+
+
retourne 1 si OK 0 sinon
"""
try :
- if type(text) == types.StringType:
- f=open(file,'w')
- else:
- # Probablement Unicode
- f=codecs.open(file,'w','iso-8859-1')
+ f=open(file,'w')
f.write(text)
f.close()
return 1
# EFICAS
# ----------------------------------------------------------
+import Tkinter
from Tkinter import *
import Pmw
import os,sys,re,string
from Noyau.N_utils import repr_float
from Accas import AsException
+
+# Surcharge de la fonction askyesno qui retourne un resultat errone en Python 2.3 avec Tk 8.4
+# et Tkinter.wantobject==1
+import tkMessageBox
+def askyesno(title=None, message=None, **options):
+ "Ask a question; return true if the answer is yes"
+ s = tkMessageBox._show(title, message, tkMessageBox.QUESTION, tkMessageBox.YESNO, **options)
+ if s == tkMessageBox.YES:return 1
+ if s == tkMessageBox.NO:return 0
+ if s:return 1
+ return 0
+
class Fenetre :
""" Cette classe permet de créer une fenêtre Toplevel dans laquelle
#initialdir = self.appli.CONFIGURATION.rep_user,
initialdir = self.appli.CONFIGURATION.initialdir,
title="Sauvegarde du "+self.titre)
- if file != '':
+ if file :
if not save_in_file(file,self.texte) :
showerror("Sauvegarde impossible",
"Impossible de sauvegarder le texte dans le fichier spécifié\n"+
self.arg_selected = ''
if commande != None : commande(mot)
+ def remove_selected_item(self):
+ index=self.MCbox.index(self.selection[1])
+ lign,col=map(int,string.split(index,'.'))
+ del self.liste[lign-1]
+ self.affiche_liste()
+
def entry_changed(self,event=None):
""" Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
de l'entry et frappe <Return>"""
"""
Donne un echo de self sous la forme nom = valeur
"""
- return self.nom+' = '+str(self.valeur)+'\n'
+ return self.nom+' = '+str(self.valeur)
def __str__(self):
"""
"""
Donne un echo de self sous la forme nom = valeur
"""
- return self.nom+' = '+ repr(self.valeur) + '\n'
+ return self.nom+' = '+ repr(self.valeur)
def __str__(self):
"""
# Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
# On peut donc créer le concept retourné.
# Il est créé sans nom mais enregistré dans la liste des concepts existants
- self.get_sd_prod()
- # Il suffit de changer son attribut nom pour le nommer
- self.sd.nom = nom
- self.sdnom=nom
- return 1,"Nommage du concept effectué"
+ try:
+ self.get_sd_prod()
+ # Il suffit de changer son attribut nom pour le nommer
+ self.sd.nom = nom
+ self.sdnom=nom
+ return 1,"Nommage du concept effectué"
+ except:
+ return 0,"Nommage impossible"+str(sys.exc_info()[1])
else :
old_nom=self.sd.nom
if string.find(old_nom,'sansnom') :
Retourne le type attendu par le mot-clé simple
"""
return self.definition.type
+
+#--------------------------------------------------------------------------------
+# PN : ajout pour Salome des methodes suivantes (jusqu aux méthodes surchargees)
+#--------------------------------------------------------------------------------
+ def get_salome_valeurs(self):
+ l=[]
+ if not hasattr(self,'list_salome_valeurs'):
+ self.list_salome_valeurs=[]
+ if self.list_salome_valeurs != [] :
+ for val in self.list_salome_valeurs:
+ l.append(val)
+ return l
+
+ def put_salome_valeurs(self,list):
+ self.list_salome_valeurs=[]
+ for val in list:
+ self.list_salome_valeurs.append(val)
+
+ def add_salome_valeurs(self,val):
+ if not hasattr(self,'list_salome_valeurs'):
+ self.list_salome_valeurs=[]
+ try:
+ self.list_salome_valeurs.append(val)
+ except :
+ try:
+ for uneval in val :
+ self.list_salome_valeurs.append(uneval)
+ except :
+ pass
+
+ def has_salome_valeurs(self):
+ if not hasattr(self,'list_salome_valeurs'):
+ self.list_salome_valeurs=[]
+ if self.list_salome_valeurs != []:
+ return true
+ else:
+ return false
+
+#--------------------------------------------------------------------------------
+# PN : fin ajout pour Salome
+#--------------------------------------------------------------------------------
#ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
# Elles doivent etre reintegrees des que possible
"""
import string
-import prefs
import Noyau
+try:
+ import prefs
+ lang=prefs.lang
+except:
+ lang='fr'
+
+
class OBJECT:
from Noyau.N_CO import CO
from Noyau.N_ASSD import assd
en tenant compte de la langue
"""
try :
- return getattr(self.definition,prefs.lang)
+ return getattr(self.definition,lang)
except:
return ''
-#@ MODIF N_ETAPE Noyau DATE 26/09/2003 AUTEUR DURAND C.DURAND
+#@ MODIF N_ETAPE Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_JDC Noyau DATE 05/11/2003 AUTEUR CAMBIER S.CAMBIER
+#@ MODIF N_JDC Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MACRO_ETAPE Noyau DATE 26/09/2003 AUTEUR DURAND C.DURAND
+#@ MODIF N_MACRO_ETAPE Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCBLOC Noyau DATE 03/09/2002 AUTEUR GNICOLAS G.NICOLAS
+#@ MODIF N_MCBLOC Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCCOMPO Noyau DATE 28/10/2003 AUTEUR DURAND C.DURAND
+#@ MODIF N_MCCOMPO Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCLIST Noyau DATE 03/09/2002 AUTEUR GNICOLAS G.NICOLAS
+#@ MODIF N_MCLIST Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCSIMP Noyau DATE 03/09/2002 AUTEUR GNICOLAS G.NICOLAS
+#@ MODIF N_MCSIMP Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_OBJECT Noyau DATE 27/03/2002 AUTEUR DURAND C.DURAND
+#@ MODIF N_OBJECT Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_VALIDATOR Noyau DATE 09/09/2003 AUTEUR DURAND C.DURAND
+#@ MODIF N_VALIDATOR Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
return valeur > self.low and valeur < self.high
def info_erreur_item(self) :
- return "La valeur doit être comprise entre %s et %s" % (self.low,
+ return "La valeur doit etre comprise entre %s et %s" % (self.low,
self.high)
def verif_cata(self):
return "longueur de liste comprise entre %s et %s" % (self.min,self.max)
def info_erreur_liste(self):
- return "La cardinalité de la liste doit être comprise entre %s et %s" % (self.min,self.max)
+ return "Le cardinal de la liste doit etre compris entre %s et %s" % (self.min,self.max)
def is_list(self):
return self.max == '**' or self.max > 1
return "valeur paire"
def info_erreur_item(self):
- return "La valeur saisie doit être paire"
+ return "La valeur saisie doit etre paire"
def verif_item(self,valeur):
if type(valeur) == types.InstanceType:
return "liste %s" % self.ord
def info_erreur_liste(self) :
- return "La liste doit être en ordre "+self.ord
+ return "La liste doit etre en ordre "+self.ord
def verif(self,valeur):
if type(valeur) in (types.ListType,types.TupleType):
-#@ MODIF V_MCSIMP Validation DATE 06/10/2003 AUTEUR DURAND C.DURAND
+#@ MODIF V_MCSIMP Validation DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
self.cr.fatal("None n'est pas une valeur autorisée")
else:
# type,into ...
- #valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
- valid = self.verif_type(val=v,cr=cr)
- valid=valid*self.verif_into(cr=cr)
- valid=valid*self.verif_card(cr=cr)
+ valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
#
# On verifie les validateurs s'il y en a et si necessaire (valid == 1)
#
syntaxe python
"""
if type(obj.valeur) in (types.TupleType,types.ListType) :
- s = ''
- for val in obj.valeur :
- if type(val) == types.InstanceType :
- if hasattr(obj.etape,'sdprods'):
- if val in obj.etape.sdprods :
+ s = ''
+ for val in obj.valeur :
+ if type(val) == types.InstanceType :
+ if hasattr(obj.etape,'sdprods') and val in obj.etape.sdprods :
s = s + "CO('"+ self.generator(val) +"')"
elif val.__class__.__name__ == 'CO':
s = s + "CO('"+ self.generator(val) +"')"
+ elif isinstance(val,PARAMETRE):
+ # il ne faut pas prendre la string que retourne gener
+ # mais seulement le nom dans le cas d'un paramètre
+ s = s + val.nom
else:
s = s + self.generator(val)
- elif isinstance(val,PARAMETRE):
- # il ne faut pas prendre la string que retourne gener
- # mais seulement le nom dans le cas d'un paramètre
- s = s + val.nom
- else:
- s = s + self.generator(val)
- elif type(val) == types.FloatType :
- # Pour un flottant on utilise str qui a une precision de
- # "seulement" 12 chiffres : evite les flottants du genre 0.599999999999998
- s = s + str(val)
- else :
- s = s + `val`
- s = s + ','
- if len(obj.valeur) > 1:
- s = '(' + s + '),'
+ elif type(val) == types.FloatType :
+ # Pour un flottant on utilise str qui a une precision de
+ # "seulement" 12 chiffres : evite les flottants du genre 0.599999999999998
+ s = s + str(val)
+ else :
+ # Pour les autres types on utilise repr
+ s = s + `val`
+ s = s + ','
+ if len(obj.valeur) > 1:
+ s = '(' + s + '),'
else :
- val=obj.valeur
- if type(val) == types.InstanceType :
- if hasattr(obj.etape,'sdprods'):
- if val in obj.etape.sdprods :
- s = "CO('"+ self.generator(val) +"')"
- elif val.__class__.__name__ == 'CO':
+ val=obj.valeur
+ if type(val) == types.InstanceType :
+ if hasattr(obj.etape,'sdprods') and val in obj.etape.sdprods :
+ s = "CO('"+ self.generator(val) +"')"
+ elif val.__class__.__name__ == 'CO':
s = "CO('"+ self.generator(val) +"')"
- else:
+ elif isinstance(val,PARAMETRE):
+ # il ne faut pas prendre la string que retourne gener
+ # mais seulement le nom dans le cas d'un paramètre
+ s = val.nom
+ else:
s = self.generator(val)
- elif isinstance(val,PARAMETRE):
- # il ne faut pas prendre la string que retourne gener
- # mais seulement le nom dans le cas d'un paramètre
- s = val.nom
- else:
- s = self.generator(val)
- elif type(val) == types.FloatType :
- #s = repr_float(val)
- s = str(val)
- else :
- s = `val`
- s= s + ','
+ elif type(val) == types.FloatType :
+ # Pour un flottant on utilise str
+ s = str(val)
+ else :
+ # Pour les autres types on utilise repr
+ s = `val`
+ s= s + ','
return s