2 # Copyright (C) 2007-2021 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 from __future__ import absolute_import
25 from __future__ import print_function
27 from builtins import object
32 from .N_ASSD import ASSD
33 from Ihm import CONNECTOR
37 Classe de base pour definir des types de structures de donnees definie par
39 equivalent d un concept ASSD pour un SIMP ou un FACT
40 Attention : le parent est a None au debut et non le MC createur que l on ne connait pas
41 Lorsqu on ecrit le jdc, n ecrit nom=UserASSD()
42 le parent est le SIMP qui cree l objet
43 a la lecture si la classe commence par un majuscule on fait le boulot dans MCSIMP, sinon dans
44 l init de parametre car le parsing considere qu on a un parametre
47 def __init__(self,nom='sansNom'):
48 #print ('dans init de UserASSD pour ', nom, type(nom))
50 self.jdc = CONTEXT.getCurrentJdC()
52 self.initialiseValeur()
53 self.utilisePar = set()
54 if self.nom != 'sansNom' : self.id = self.jdc.regSD(self)
55 if self.nom != 'sansNom' : self.initialiseNom(nom)
60 def initialiseParent(self, parent):
61 # attention parent.parent peut être un bloc
62 #print ('je passe initialiseParent pour : ', self, parent.nom)
64 self.etape = self.parent.getEtape()
65 self.etape.userASSDCrees.append(self)
66 if self.parent.parent != self.etape :
67 if self.parent.parent.estIdentifiePar != None :
68 print ('il y a un souci dans l initialisation de l identifiant pour', self.parent.parent.nom)
69 print (self.parent.nom)
71 self.parent.parent.estIdentifiePar = self
73 def initialiseNom(self,nom):
74 #print ('je passe initialiseNom pour : ', self, nom, type(nom))
75 for (i,j) in list(self.jdc.sdsDict.items()) :
77 del(self.jdc.sdsDict[i])
78 self.jdc.sdsDict[nom]=self
80 if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self)
82 def initialiseValeur(self,valeur=None):
85 def ajoutUtilisePar(self,mc):
86 #print ('je passe ajoutUtilisePar pour : ', self.nom)
87 self.utilisePar.add(mc)
89 def enleveUtilisePar(self,mc):
90 try : self.utilisePar.remove(mc)
93 def renomme(self,nouveauNom):
94 print ('je passe dans renomme')
95 self.jdc.delConcept(self.nom)
96 self.jdc.sdsDict[nouveauNom] = self
97 self.setName(nouveauNom)
98 #print ('je suis dans renomme',nouveauNom, self.nom)
99 #print (self.utilisePar)
100 for mc in (self.utilisePar):
101 mc.demandeRedessine()
103 def transfere (self,obj):
104 # uniquement utise pour les lectures XML
105 self.utilisePar=obj.utilisePar
107 for mc in self.utilisePar: mc.valeur=self
109 def deleteReference(self, mcCreateur=None):
110 print ('je passe dans supprime de N_UserASSDMultiple')
111 # meme signature que UserASSDMultiple
112 for MC in self.utilisePar :
113 # le delete est appele en cascade par toute la hierachie
114 # du mcsimp (au cas ou on detruise le fact ou le proc)
117 if type(MC.valeur) in (list,tuple):
118 MC.valeur=list(MC.valeur)
119 while self in MC.valeur: MC.valeur.remove(self)
120 if MC.valeur == [] : MC.Valeur = None
121 else : MC.valeur=None
124 CONNECTOR.Emit(MC,"valid")
126 # on peut avoir des listes qui contiennent plusieurs fois la meme valeur
127 self.jdc.delConcept(self.nom)
129 def executeExpression(self, condition, dico) :
130 #if self.nom == 'shape1' : print ('je suis dans executeExpression ', self.nom, ' ', condition)
133 #if self.nom == 'shape1' or self.nom == 'G1' : print (dict)
134 #if self.nom == 'shape1' :
135 # print (self.getParentsWithId().getListeUserASSD("systemGeometryId"))
136 # print (self.getParentsWithId().getListeUserASSD("SystemGeometryId"))
137 # test = eval(condition, globals(), dict)
138 # print ('-------------------------------------------------------------------------')
140 test = eval(condition, globals(), dict)
142 print ('executeExpression ', self.nom, ' ', condition , 'exception')
146 def getEficasAttribut(self, attribut):
147 #print ('je suis dans getEficasAttr', attribut)
148 if self.parent == None : return None
150 # parent est le SIMP donc c est bien parent.parent
152 valeur = self.parent.parent.getMocle(attribut)
159 def supprime(self, mcCreateur=None):
160 # mcCreateur utile pour N_UserASSDMultiple
161 print ('je passe dans supprime de N_UserASSDMultiple')
162 self.deleteReference(mcCreateur)
165 return "concept " + self.getName() + " type " + self.__class__.__name__
168 return self.getName() or "<None>"