X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_MCSIMP.py;h=438b8ee08c744c93df6e9b894b88432fb83f5692;hb=2c5a8689b9c6cc46804fd268d416d1de2777059e;hp=07cd783a5282c3fa8c932e0eca16afdb6302fe0f;hpb=dbe648488708009d86ca09a606bd60b274fdd6f6;p=tools%2Feficas.git diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index 07cd783a..438b8ee0 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -1,34 +1,37 @@ -#@ 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 -# 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. +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2013 EDF R&D # -# 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 library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# 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. -# -# -# ====================================================================== -""" +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + + +""" Ce module contient la classe MCSIMP qui sert à controler la valeur d'un mot-clé simple par rapport à sa définition portée par un objet de type ENTITE """ -import types from copy import copy -from Noyau.N_ASSD import ASSD,assd +from Noyau.N_ASSD import ASSD +from Noyau.N_CO import CO import N_OBJECT +from N_CONVERT import ConversionFactory +from N_types import force_list, is_sequence class MCSIMP(N_OBJECT.OBJECT): """ @@ -55,6 +58,7 @@ class MCSIMP(N_OBJECT.OBJECT): self.nom=nom self.val = val self.parent = parent + self.convProto = ConversionFactory('type', typ=self.definition.type) self.valeur = self.GETVAL(self.val) if parent : self.jdc = self.parent.jdc @@ -65,24 +69,41 @@ class MCSIMP(N_OBJECT.OBJECT): self.jdc = None self.niveau = None self.etape = None - + def GETVAL(self,val): - """ + """ Retourne la valeur effective du mot-clé en fonction de la valeur donnée. Defaut si val == None """ if (val is None and hasattr(self.definition,'defaut')) : - return self.definition.defaut - else: - return val + val = self.definition.defaut + if self.convProto: + val = self.convProto.convert(val) + return val def get_valeur(self): """ Retourne la "valeur" d'un mot-clé simple. - Cette valeur est utilisée lors de la création d'un contexte + Cette valeur est utilisée lors de la création d'un contexte d'évaluation d'expressions à l'aide d'un interpréteur Python """ - return self.valeur + v = self.valeur + # Si singleton et max=1, on retourne la valeur. + # Si une valeur simple et max='**', on retourne un singleton. + # (si liste de longueur > 1 et max=1, on sera arrêté plus tard) + # Pour accepter les numpy.array, on remplace : "type(v) not in (list, tuple)" + # par "not has_attr(v, '__iter__')". + if v is None: + pass + elif is_sequence(v) and len(v) == 1 and self.definition.max == 1: + v = v[0] + elif not is_sequence(v) and self.definition.max != 1: + v = (v, ) + # traitement particulier pour les complexes ('RI', r, i) + if 'C' in self.definition.type and self.definition.max != 1 \ + and v[0] in ('RI', 'MP'): + v = (v, ) + return v def get_val(self): """ @@ -103,7 +124,7 @@ class MCSIMP(N_OBJECT.OBJECT): objet = self.makeobjet() # il faut copier les listes et les tuples mais pas les autres valeurs # possibles (réel,SD,...) - if type(self.valeur) in (types.ListType,types.TupleType): + if type(self.valeur) in (list, tuple): objet.valeur = copy(self.valeur) else: objet.valeur = self.valeur @@ -122,16 +143,49 @@ class MCSIMP(N_OBJECT.OBJECT): self.etape=parent.etape def get_sd_utilisees(self): - """ - Retourne une liste qui contient la SD utilisée par self si c'est le cas + """ + Retourne une liste qui contient la ou les SD utilisée par self si c'est le cas ou alors une liste vide """ l=[] - if type(self.valeur) == types.InstanceType: - #XXX Est ce différent de isinstance(self.valeur,ASSD) ?? - if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur) - elif type(self.valeur) in (types.TupleType,types.ListType): + if isinstance(self.valeur, ASSD): + l.append(self.valeur) + elif type(self.valeur) in (list, tuple): for val in self.valeur : - if type(val) == types.InstanceType: - if issubclass(val.__class__,ASSD) : l.append(val) + if isinstance(val, ASSD): + l.append(val) return l + + def get_sd_mcs_utilisees(self): + """ + Retourne la ou les SD utilisée par self sous forme d'un dictionnaire : + - Si aucune sd n'est utilisée, le dictionnaire est vide. + - Sinon, la clé du dictionnaire est le mot-clé simple ; la valeur est + la liste des sd attenante. + + Exemple :: + { 'VALE_F': [ , + ] } + """ + l=self.get_sd_utilisees() + dico = {} + if len(l) > 0 : + dico[self.nom] = l + return dico + + def get_mcs_with_co(self,co): + """ + Cette methode retourne l'objet MCSIMP self s'il a le concept co + comme valeur. + """ + if co in force_list(self.valeur): + return [self,] + return [] + + def get_all_co(self): + """ + Cette methode retourne la liste de tous les concepts co + associés au mot cle simple + """ + return [co for co in force_list(self.valeur) \ + if isinstance(co, CO) and co.is_typco()]