Salome HOME
Artifact 8676 : suppress the ver_class.py script from sat cos it's not useful anymore
authoropailles <opailles@astek.fr>
Wed, 24 May 2017 07:46:05 +0000 (09:46 +0200)
committeropailles <opailles@astek.fr>
Wed, 24 May 2017 07:46:05 +0000 (09:46 +0200)
src/test/ver_class.py [deleted file]

diff --git a/src/test/ver_class.py b/src/test/ver_class.py
deleted file mode 100644 (file)
index b3cdbfd..0000000
+++ /dev/null
@@ -1,1553 +0,0 @@
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-
-# CEA/LGLS 2007-2008, Francis KLOSS (OCC)
-# =======================================
-
-# Caractériser le cas VER pour Pléïades
-# -------------------------------------
-
-# La géométrie d'un combustible à particules est définie par:
-#   - un cube représentant une partie du combustible,
-#   - ce cube contenant des éléments, ces éléments représentent les particules.
-# Chaque élément est constitué d'une écorce sphérique contenant un noyau sphérique et concentrique.
-# La matrice est le cube d'ou sont exclus tous les éléments.
-
-# Les relations entre le cube et les éléments sont:
-#   - pas d'intersection entre les éléments entre-eux (tolérance),
-#   - un élément peut ne pas intersecter le cube (tolérance),
-#   - un élément peut intersecter un sommet unique du cube et avec uniquement les 3 arêtes et les 3 faces reliés à ce sommet,
-#   - un élément peut intersecter une arête unique du cube et avec uniquement les 2 faces reliées à cette arête (et sans sommet),
-#   - un élément peut intersecter une face  unique du cube (et sans sommet, ni arête).
-
-# De plus, toutes les intersections sont:
-#   - sans aucun cas de tangence (tolérance),
-#   - si un élément est coupé par une face, alors son noyau est aussi coupé par cette même face.
-
-# Si un élément touche le cube, alors les éléments symétriques sont créés automatiquement.
-
-# Les faces en vis à vis du cube sont maillées de manière identique afin d'assurer la périodicité.
-# La matrice et les noyaux sont maillés avec des tétraèdres, et les écorces sont maillées avec des prismes.
-
-# Les groupes 2D à constituer sont:
-#   - les 6 groupes correspondant aux 6 faces du cube (triangles et quadrangles),
-#   - pour chaque noyau , avoir un groupe de son enveloppe (triangles),
-#   - pour chaque écorce, avoir un groupe de son enveloppe (triangles),
-#   - le groupe de l'ensemble des enveloppes de tous les noyaux,
-#   - le groupe de l'ensemble des enveloppes de toutes les écorces.
-
-# Les groupes 3D à constituer sont:
-#   - un groupe pour la matrice (tétraèdres),
-#   - pour chaque noyau , avoir un groupe (tétraèdres),
-#   - pour chaque écorce, avoir un groupe (couches de prismes),
-#   - le groupe de l'ensemble des noyaux,
-#   - le groupe de l'ensemble des écorces.
-
-# Mode d'emploi
-# -------------
-
-# Pour créer une étude avec ce fichier python,
-# il faut créer un fichier contenant la ligne "import ver", puis:
-#   - construire une géométrie,
-#   - mailler cette géométrie.
-
-# Pour construire une géométrie, il y a 2 étapes:
-#   - construire le cube,
-#   - construire les éléments.
-
-# Pour construire le cube, il y a 4 manières différentes:
-#   - cas_1 = ver.geometrie()
-#   - cas_2 = ver.geometrie("cas")
-#   - cas_3 = ver.geometrie("kas", 200)
-#   - cas_4 = ver.geometrie("qua", 400, 1)
-
-# La description des 3 paramètres est dans l'ordre:
-#   - le nom de la géométrie (par défaut: "VER"),
-#   - le coté du cube        (par défaut: 100),
-#   - la tolérance           (par défaut: 1).
-
-# Pour construire les éléments, il existe 2 fonctions de base:
-#   - element,
-#   - elements.
-
-# Pour construire un élement précis, la fonction "element" a pour syntaxe:
-#   status = cas_2.element(x, y, z,  nr, er)
-#   - x, y, z : les coordonnées du centre de l'élément,
-#   - nr      : rayon du noyau,
-#   - er      : rayon de l'élément,
-#   - status  : vaut True  quand l'élément est correct (respect de la tolérance, pas de collision et coupe du noyau si nécessaire),
-#               vaut False quand l'élément n'est pas correct et dans ce cas, il n'est pas construit dans le géométrie.
-
-# Pour effectuer un tirage aléatoire d'éléments, la fonction "elements" a 2 syntaxes:
-#   cas_4.elements(sommet, arete, face, solide,  rmin, rmax)
-#   cas_4.elements(sommet, arete, face, solide,  rmin, rmax, ratio)
-#   - sommet : booléen pour indiquer si l'on veut couper le sommet du cube,
-#   - arete  : nombre d'éléments à générer coupant une arête,
-#   - face   : nombre d'éléments à générer coupant une face,
-#   - solide : nombre d'éléments à générer ne coupant pas le cube,
-#   - rmin   : rayon minimum pour le noyau,
-#   - rmax   : rayon minimum pour l'élément,
-#   - ratio  : a pour valeur par défaut 0.5 et permet de borner le rayon maximun du noyau selon la formule: rmin + (rmax-rmin)*ratio.
-# Nota: dans le cas des paramètres "arete" et "face", les éléments symétriques générés automatiquement ne compte pas.
-
-# Il existe quelques méthodes complémentaires sur la géométrie:
-#   - n = cas_1.nom()       donne le nom de la géométrie,
-#   - c = cas_2.cote()      donne le coté du cube,
-#   - t = cas_3.tolerance() donne la tolérance,
-#   - b = cas_0.infos()     dit si des traces sont affichées ou pas,
-#   - cas_0.infos(bool)     affiche ou pas des traces lors du traitement (par défaut: pas de traces),
-#   - s = cas_4.obtenir()   donne la shape correspondant à la géométrie,
-#   - cas_1.valeurs()       donne les caractéristiques de tous les éléments ou:
-#                           le résultat est de la forme: [ [<solide>, ...], [<face>, ...], [<arête>, ...], [<sommmet>, ...] ],
-#                           avec <solide> pour un élément inclus dans le cube,
-#                           avec <face>   pour un élément qui coupe une face  du cube,
-#                           avec <arête>  pour un élément qui coupe une arête du cube,
-#                           avec <sommet> pour un élément qui coupe un sommet du cube,
-#                           et chaque élément est une liste de la forme [ x-centre, y-centre, z-centre,  rayon-noyau, rayon-ecorce ],
-#   - cas_2.sauver()        sauve la géométrie au format BREP dans le répertoire courant,
-#   - cas_3.sauver(rep)     sauve la géométrie au format BREP dans le répertoire passé en argument,
-#   - cas_6.tous()          donne tous les éléments englobants sans tenir compte des éventuelles intersections.
-
-# Pour mailler une géométrie, il faut utiliser la fonction "maillage":
-#   mesh = ver.maillage(cas_3)
-#   - cas_3 est une géométrie définie comme ci-avant,
-#   - mesh est la définition du maillage de cette géometrie.
-
-# Avant de générer le maillage, il est possible de donner les différentes options suivantes:
-#   - mesh.longueur(4)     permet de donner la longueur moyenne des cotés des triangles            (défaut: 20),
-#   - mesh.couches(5)      permet de donner le nombre de couche de prismes pour toutes les écorces (défaut:  2),
-#   - mesh.fichier("file") permet de sauver automatiquement le maillage dans ce fichier            (défaut: "" (soit pas de fichier)).
-
-# Pour connaitre les valeurs des options, il suffit de réaliser les appels suivants:
-#   - mesh.longueur() permet d'obtenir la longueur moyenne des cotés des triangles,
-#   - mesh.couches()  permet d'obtenir le nombre de couche de prismes pour toutes les écorces,
-#   - mesh.fichier()  permet d'obtenir le fichier correspondant au maillage (si "" alors soit pas de fichier).
-
-# Pour générer le maillage et ses groupes paramétré par ses éventuelles options, il suffit de faire:
-#   - mesh.generer()
-
-# Il est possible de sauver le maillage après génération:
-#   - mesh.sauver(fichier)
-
-# Voir aussi des exemples programmés dans le fichier ver_exemples.py
-
-# Importer
-# --------
-
-import math
-import random
-import string
-
-import geompy
-import smesh
-
-geo = geompy
-
-# Définir des constantes
-# ----------------------
-
-random.seed(0)
-
-
-#######################
-angle_e   = math.pi/90
-angle_ee   = math.pi/180
-
-
-angle_30  = math.pi/6
-angle_45  = math.pi/4
-angle_60  = math.pi/3
-angle_90  = math.pi/2
-angle_120 = angle_60*2
-angle_135 = angle_45*3
-angle_180 = math.pi
-angle_360 = math.pi*2
-
-geo_origine = geo.MakeVertex(0, 0, 0)
-
-geo_vertex = geo.ShapeType["VERTEX"]
-geo_edge   = geo.ShapeType["EDGE"]
-geo_wire   = geo.ShapeType["WIRE"]
-geo_face   = geo.ShapeType["FACE"]
-geo_shell  = geo.ShapeType["SHELL"]
-geo_solid  = geo.ShapeType["SOLID"]
-
-# Définir la géométrie
-# ====================
-
-class geometrie:
-
-    # Initialiser
-    # -----------
-
-    def __init__(self, nom="VER", cote=100, tolerance=1, mox="mox"):
-        self.nom(nom)
-        self.tolerance(tolerance)
-        self.cote(cote)
-        self.infos(False)
-
-        self.element_solides([])
-        self.element_faces([])
-        self.element_aretes([])
-        self.element_sommets([])
-
-        self._shape = None
-        self._tous  = []
-
-        self.nom_noyau   = "noy"
-        self.nom_ecorce  = "eco"
-        self.nom_matrice = "mat"
-        self.nom_xy      = "xy"
-        self.nom_xz      = "xz"
-        self.nom_yz      = "yz"
-        self.nom_coupees = "coupe"
-        self._type = mox
-
-
-    # Donner le nom du combustible
-    # ---------------------
-
-    def type_comb(self, type=None):
-        if type!=None:
-            self._type = type
-
-        return self._type
-
-
-
-    # Donner le nom du cube
-    # ---------------------
-
-    def nom(self, nom=None):
-        if nom!=None:
-            self._nom = nom
-
-        return self._nom
-
-    # Donner la tolérance
-    # -------------------
-
-    def tolerance(self, t=None):
-        if t!=None:
-            self._tolerance = t
-
-        return self._tolerance
-
-    # Donner le coté du cube
-    # ----------------------
-
-    def cote(self, c=None):
-        if c!=None:
-            self._cote = c
-
-            self._boite_e = geo.MakeBox(0, 0, 0,  c, c, c)
-            mi = -c/1000.
-            ma = c-mi
-            self._boite_t = geo.MakeBox(mi, mi, mi,  ma, ma, ma)
-
-            self.axe_x = geo.MakeVectorDXDYDZ(c, 0, 0)
-            self.axe_y = geo.MakeVectorDXDYDZ(0, c, 0)
-            self.axe_z = geo.MakeVectorDXDYDZ(0, 0, c)
-
-        return self._cote
-
-    # Donner tous les éléments englobants sans tenir compte des intersections
-    # -----------------------------------------------------------------------
-
-    def tous(self, x=None, y=None, z=None, r=None):
-        if x==None:
-            t = geo.MakeCompound(self._tous)
-            geo.addToStudy(t, self.nom() + ":tous")
-            return t
-        else:
-            s = geo.MakeSphere(x, y, z, r)
-            self._tous.append(s)
-
-    # Tracer ou pas des messages
-    # --------------------------
-
-    def infos(self, b=None):
-        if b!=None:
-            self._infos = b
-
-        return self._infos
-
-    # Donner la boite
-    # ---------------
-
-    def boite(self, b=True):
-        if b:
-            return self._boite_e
-        else:
-            return self._boite_t
-
-    # Donner les valeurs caractérisant tous les éléments
-    # --------------------------------------------------
-
-    def valeurs(self):
-        sol = []
-        fac = []
-        are = []
-        som = []
-
-        for c, nr, er,  ax, an in self.element_solides():
-            x, y, z = geo.PointCoordinates(c)
-            sol.append( [x, y, z,  nr, er] )
-
-        for c, nr, er,  ax, an in self.element_faces():
-            x, y, z = geo.PointCoordinates(c)
-            fac.append( [x, y, z,  nr, er] )
-
-        for c, nr, er,  ax, an in self.element_aretes():
-            x, y, z = geo.PointCoordinates(c)
-            are.append( [x, y, z,  nr, er] )
-
-        for c, nr, er,  ax, an in self.element_sommets():
-            x, y, z = geo.PointCoordinates(c)
-            som.append( [x, y, z,  nr, er] )
-
-        return [ sol, fac, are, som ]
-
-    # Calculer l'union de 2 listes
-    # ----------------------------
-
-    def union(self, a, b):
-        r = b
-        for e in a:
-            if not (e in r):
-                r.append(e)
-
-        return r
-
-    # Calculer l'intersection de 2 listes
-    # -----------------------------------
-
-    def intersection(self, a, b):
-        r = []
-        for e in a:
-            if e in b:
-                r.append(e)
-
-        return r
-
-    # Calculer la différence de 2 listes
-    # ----------------------------------
-
-    def difference(self, a, b):
-        r = []
-        for e in a:
-            if not (e in b):
-                r.append(e)
-
-        return r
-
-    # Calculer la distance entre 2 points
-    # -----------------------------------
-
-    def distance(self, x1, y1, z1,  p):
-        x2, y2, z2 = geo.PointCoordinates(p)
-
-        dx = x2 - x1
-        dy = y2 - y1
-        dz = z2 - z1
-
-        return math.sqrt(dx*dx + dy*dy + dz*dz)
-
-    # Dire si un edge est dégénéré
-    # ----------------------------
-
-    def edge_degenere(self, e):
-        return geo.KindOfShape(e) == [geo.kind.EDGE, 1]
-
-    # Récupérer une shape ou une liste de shape à partir d'un ID ou d'une liste d'IDs
-    # -------------------------------------------------------------------------------
-
-    def donner_shapes(self, l):
-        if type(l)==type(0):
-            return geo.GetSubShape(self._shape, [l])
-
-        r = []
-        for i in l:
-            s = geo.GetSubShape(self._shape, [i])
-            r.append(s)
-
-        return r
-
-    # Dire si 2 points sont identiques
-    # --------------------------------
-
-    def point_egal(self, v1, v2):
-        t = self.tolerance()*0.01
-
-        if ( type(v1)==type([]) ) or ( type(v1)==type(()) ):
-            x1, y1, z1 = v1
-        else:
-            x1, y1, z1 = geo.PointCoordinates(v1)
-
-        if ( type(v2)==type([]) ) or ( type(v2)==type(()) ):
-            x2, y2, z2 = v2
-        else:
-            x2, y2, z2 = geo.PointCoordinates(v2)
-
-        return ( abs(x1-x2)<t ) and ( abs(y1-y2)<t ) and ( abs(z1-z2)<t )
-
-    # Définir les éléments géométriques de la shape
-    # =============================================
-
-    # Déterminer l'élément symétrique
-    # -------------------------------
-
-    def element_symetrique(self, ix, iy, iz,  x1, y1, z1):
-        if ix==1:
-            x2 = x1 + self.cote()
-        else:
-            x2 = x1 - self.cote()
-
-        if iy==1:
-            y2 = y1 + self.cote()
-        else:
-            y2 = y1 - self.cote()
-
-        if iz==1:
-            z2 = z1 + self.cote()
-        else:
-            z2 = z1 - self.cote()
-
-        return x2, y2, z2
-
-    # Dire si le nouvel élément intersecte les autres éléments déjà choisis
-    # ---------------------------------------------------------------------
-
-    def element_intersecter(self, x, y, z, r):
-        rt = r + self.tolerance()
-
-        for c, nr, er,  ax, an in self.element_solides():
-            if self.distance(x, y, z,  c) < (rt + er):
-                return True
-
-        for c, nr, er,  ax, an in self.element_faces():
-            if self.distance(x, y, z,  c) < (rt + er):
-                return True
-
-        for c, nr, er,  ax, an in self.element_aretes():
-            if self.distance(x, y, z,  c) < (rt + er):
-                return True
-
-        for c, nr, er,  ax, an in self.element_sommets():
-            if self.distance(x, y, z,  c) < (rt + er):
-                return True
-
-        return False
-
-    # Ajouter un élément, s'il n'en intersecte aucun autre
-    # ----------------------------------------------------
-
-    def ajouter(self, r, l,  x, y, z,  nr, er,  ax=None, an=None):
-        self.tous(x, y, z, er)
-        if self.infos():
-            print "VER: x = ", x, ", y = ", y, " , z = ", z, " , nr = ", nr, " , er = ", er
-
-        b, n = r
-        if b:
-            if self.element_intersecter(x, y, z, er):
-                if n!=0:
-                    del l[-n:]
-                return [False, 0]
-            else:
-                c = geo.MakeVertex(x, y, z)
-                l.append( [c, nr, er, ax, an] )
-                return [True, n+1]
-        else:
-            return r
-
-    # Donner les sphères entières
-    # ---------------------------
-
-    def element_solides(self, l=None):
-        if l!=None:
-            self._solides = l
-
-        return self._solides
-
-    # Ajouter une sphère entière
-    # --------------------------
-
-    def element_solide(self, x, y, z,  nr, er):
-        r = [True, 0]
-        r = self.ajouter(r, self._solides,  x, y, z,  nr, er)
-
-        return r[0]
-
-    # Donner les sphères coupées par une face
-    # ---------------------------------------
-
-    def element_faces(self, l=None):
-        if l!=None:
-            self._faces = l
-
-        return self._faces
-
-    # Ajouter une sphère coupée par une face avec sa symétrique
-    # ---------------------------------------------------------
-
-    def element_face(self, ix, iy, iz,  x1, y1, z1,  nr, er):
-        r = [True, 0]
-        x2, y2, z2 = self.element_symetrique(ix, iy, iz,  x1, y1, z1)
-
-        if ix!=0:
-            r = self.ajouter(r, self._faces,  x1, y1, z1,  nr, er,  self.axe_x, -angle_45)
-            r = self.ajouter(r, self._faces,  x2, y1, z1,  nr, er,  self.axe_x, -angle_45)
-
-        elif iy!=0:
-            if iy==1:
-                a = -angle_90
-            else:
-                a = +angle_90
-
-            r = self.ajouter(r, self._faces,  x1, y1, z1,  nr, er, [self.axe_z, self.axe_y], [a, -angle_45])
-            r = self.ajouter(r, self._faces,  x1, y2, z1,  nr, er, [self.axe_z, self.axe_y], [a, -angle_45])
-
-        else:
-            r = self.ajouter(r, self._faces,  x1, y1, z1,  nr, er, [self.axe_y, self.axe_z], [-angle_90, -angle_45])
-            r = self.ajouter(r, self._faces,  x1, y1, z2,  nr, er, [self.axe_y, self.axe_z], [-angle_90, -angle_45])
-
-        return r[0]
-
-    # Calculer l'angle de rotation
-    # ----------------------------
-
-    def element_angle(self, x, y, z, v, nr, er):
-        b = self.boite(False)
-
-        if v==self.axe_z:
-            s = geo.MakeVertex(x   , y-er, z)
-            m = geo.MakeVertex(x+er, y   , z)
-            e = geo.MakeVertex(x   , y+er, z)
-        elif v==self.axe_y:
-            s = geo.MakeVertex(x, y, z+er)
-            m = geo.MakeVertex(x+er, y, z)
-            e = geo.MakeVertex(x, y, z-er)
-        else:
-            s = geo.MakeVertex(x, y   , z+er)
-            m = geo.MakeVertex(x, y+er, z   )
-            e = geo.MakeVertex(x, y   , z-er)
-
-        c  = geo.MakeVertex(x, y, z)
-        a1 = geo.MakeArc(s, m, e)
-        a2 = geo.MakeScaleTransform(a1, c, nr/er)
-        as_compound = geo.MakeCompound([a1, a2])
-
-        an = angle_ee
-        print " an1 : ", an
-        ax = geo.MakeLine(c, v)
-        ro = geo.MakeRotation(as_compound, ax, an)
-        pa = geo.MakePartition([b], [ro], [], [], geo_vertex)
-
-        i = 1
-        n = 1800
-        while (( len(geo.SubShapeAll(pa, geo_vertex))!=8 ) and ( i<=n )):
-            if self.infos() and ( (i%int(n/10)) == 0 ):
-                print " (i%int(n/10)", (i%int(n/10))
-                print "VER: echantillon: nombre de vertex = ", len(geo.SubShapeAll(pa, geo_vertex))
-            an = an + angle_ee
-            #an = random.uniform(0, angle_360)
-            ro = geo.MakeRotation(as_compound, ax, an)
-            pa = geo.MakePartition([b], [ro], [], [], geo_vertex)
-            i = i + 1
-        print "VER: echantillon: nombre de vertex = ", len(geo.SubShapeAll(pa, geo_vertex))
-        if i==n+1 :
-            print "WARNING: element_angle: nombre d'essai: ", n            
-        print " an2 : ", an
-        geo.addToStudy(pa, " pa" )
-        geo.addToStudy(as_compound, " as" )
-        geo.addToStudy(ro, " ro" )
-
-        return an
-
-    # Donner les sphères coupées par une arête
-    # ----------------------------------------
-
-    def element_aretes(self, l=None):
-        if l!=None:
-            self._aretes = l
-
-        return self._aretes
-
-    # Ajouter une sphère coupée par une arête et ses 3 autres symétriques
-    # -------------------------------------------------------------------
-
-    def element_arete(self, ix, iy, iz,  x1, y1, z1,  nr, er):
-        r = [True, 0]
-        x2, y2, z2 = self.element_symetrique(ix, iy, iz,  x1, y1, z1)
-
-        if iz==0:
-            a1 = self.element_angle(x1, y1, z1, self.axe_z, nr, er)
-            a2 = self.element_angle(x1, y2, z1, self.axe_z, nr, er)
-            a3 = self.element_angle(x2, y1, z1, self.axe_z, nr, er)
-            a4 = self.element_angle(x2, y2, z1, self.axe_z, nr, er)
-
-            r = self.ajouter(r, self._aretes,  x1, y1, z1,  nr, er,  [self.axe_x, self.axe_z], [angle_90, a1])
-            r = self.ajouter(r, self._aretes,  x1, y2, z1,  nr, er,  [self.axe_x, self.axe_z], [angle_90, a2])
-            r = self.ajouter(r, self._aretes,  x2, y1, z1,  nr, er,  [self.axe_x, self.axe_z], [angle_90, a3])
-            r = self.ajouter(r, self._aretes,  x2, y2, z1,  nr, er,  [self.axe_x, self.axe_z], [angle_90, a4])
-
-        elif iy==0:
-            a1 = self.element_angle(x1, y1, z1, self.axe_y, nr, er)
-            a2 = self.element_angle(x1, y1, z2, self.axe_y, nr, er)
-            a3 = self.element_angle(x2, y1, z1, self.axe_y, nr, er)
-            a4 = self.element_angle(x2, y1, z2, self.axe_y, nr, er)
-
-            r = self.ajouter(r, self._aretes,  x1, y1, z1,  nr, er,  self.axe_y, a1)
-            r = self.ajouter(r, self._aretes,  x1, y1, z2,  nr, er,  self.axe_y, a2)
-            r = self.ajouter(r, self._aretes,  x2, y1, z1,  nr, er,  self.axe_y, a3)
-            r = self.ajouter(r, self._aretes,  x2, y1, z2,  nr, er,  self.axe_y, a4)
-
-        else:
-            a1 = self.element_angle(x1, y1, z1, self.axe_x, nr, er)
-            a2 = self.element_angle(x1, y1, z2, self.axe_x, nr, er)
-            a3 = self.element_angle(x1, y2, z1, self.axe_x, nr, er)
-            a4 = self.element_angle(x1, y2, z2, self.axe_x, nr, er)
-
-            r = self.ajouter(r, self._aretes,  x1, y1, z1,  nr, er,  [self.axe_z, self.axe_x], [angle_90, a1])
-            r = self.ajouter(r, self._aretes,  x1, y1, z2,  nr, er,  [self.axe_z, self.axe_x], [angle_90, a2])
-            r = self.ajouter(r, self._aretes,  x1, y2, z1,  nr, er,  [self.axe_z, self.axe_x], [angle_90, a3])
-            r = self.ajouter(r, self._aretes,  x1, y2, z2,  nr, er,  [self.axe_z, self.axe_x], [angle_90, a4])
-
-        return r[0]
-
-    # Donner les sphères coupées par un sommet
-    # ----------------------------------------
-
-    def element_sommets(self, l=None):
-        if l!=None:
-            self._sommets = l
-
-        return self._sommets
-
-    # Ajouter une sphère coupée par un sommet et ses 7 autres symétriques
-    # -------------------------------------------------------------------
-
-    def element_sommet(self, ix, iy, iz,  x1, y1, z1,  nr, er):
-        r = [True, 0]
-        x2, y2, z2 = self.element_symetrique(ix, iy, iz,  x1, y1, z1)
-
-        if ( ix==1 and iz==1 ) or ( ix==2 and iz==2 ):
-            a = angle_135
-            b = angle_45
-        else:
-            a = angle_45
-            b = angle_135
-
-        r = self.ajouter(r, self._sommets,  x1, y1, z1,  nr, er,  self.axe_y, +a)
-        r = self.ajouter(r, self._sommets,  x1, y1, z2,  nr, er,  self.axe_y, -a)
-        r = self.ajouter(r, self._sommets,  x1, y2, z1,  nr, er,  self.axe_y, +a)
-        r = self.ajouter(r, self._sommets,  x1, y2, z2,  nr, er,  self.axe_y, -a)
-
-        r = self.ajouter(r, self._sommets,  x2, y1, z1,  nr, er,  self.axe_y, +b)
-        r = self.ajouter(r, self._sommets,  x2, y1, z2,  nr, er,  self.axe_y, -b)
-        r = self.ajouter(r, self._sommets,  x2, y2, z1,  nr, er,  self.axe_y, +b)
-        r = self.ajouter(r, self._sommets,  x2, y2, z2,  nr, er,  self.axe_y, -b)
-
-        return r[0]
-
-    # Dire si l'élément touche le cube
-    # --------------------------------
-
-    def element_toucher(self, x, r):
-        if x < r:
-            return 1
-        elif x > (self.cote()-r):
-            return 2
-        else:
-            return 0
-
-    # Définir un élément dans un cube qui ne touchent les éléments déjà définis, retourne True si l'élément a été créé
-    # ----------------------------------------------------------------------------------------------------------------
-
-    def element(self, x, y, z,  nr, er):
-        x  = float(x)
-        y  = float(y)
-        z  = float(z)
-        nr = float(nr)
-        er = float(er)
-
-        ix = self.element_toucher(x, er)
-        iy = self.element_toucher(y, er)
-        iz = self.element_toucher(z, er)
-
-        if (ix==0) and (iy==0) and (iz==0):
-            return self.element_solide(x, y, z,  nr, er)
-
-        if (ix!=0) and (iy!=0) and (iz!=0):
-            return self.element_sommet(ix, iy, iz,  x, y, z,  nr, er)
-
-        if ( (ix==0) and (iy==0) ) or ( (ix==0) and (iz==0) ) or ( (iy==0) and (iz==0) ):
-            return self.element_face(ix, iy, iz,  x, y, z,  nr, er)
-
-        return self.element_arete(ix, iy, iz,  x, y, z,  nr, er)
-
-    # Choisir les rayons de l'élément
-    # -------------------------------
-
-    def element_choisir_rayons(self, rmin, rmax, ratio):
-        t = self.tolerance()
-
-        nr = random.uniform(rmin, rmin+ratio*(rmax-rmin)-t)
-        er = random.uniform(nr+t, rmax)
-
-        mi = er + t
-        ma = self.cote() - mi
-
-        r = random.uniform(0, nr-t*2)
-        a = random.uniform(0, angle_360)
-
-        return nr, er,  mi, ma,  r, a
-
-    # Choisir un nouvel élément qui coupe un sommet
-    # ---------------------------------------------
-
-    def element_choisir_sommet(self, rmin, rmax, ratio):
-        nr, er,  mi, ma,  r, a = self.element_choisir_rayons(rmin, rmax, ratio)
-
-        x = random.uniform(-r, +r)
-        s = math.sqrt(r*r - x*x)
-        y = s * math.cos(a)
-        z = s * math.sin(a)
-
-        return x, y, z,  nr, er
-
-    # Choisir un nouvel élément qui coupe une arête
-    # ---------------------------------------------
-
-    def element_choisir_arete(self, rmin, rmax, ratio):
-        nr, er,  mi, ma,  r, a = self.element_choisir_rayons(rmin, rmax, ratio)
-
-        d = random.randint(1, 3)
-
-        if d==1:
-            x = random.uniform(mi, ma)
-            y = r * math.cos(a)
-            z = r * math.sin(a)
-        elif d==2:
-            y = random.uniform(mi, ma)
-            x = r * math.cos(a)
-            z = r * math.sin(a)
-        else:
-            z = random.uniform(mi, ma)
-            x = r * math.cos(a)
-            y = r * math.sin(a)
-
-        return x, y, z,  nr, er
-
-    # Choisir un nouvel élément qui coupe une face
-    # --------------------------------------------
-
-    def element_choisir_face(self, rmin, rmax, ratio):
-        nr, er,  mi, ma,  r, a = self.element_choisir_rayons(rmin, rmax, ratio)
-
-        d = random.randint(1, 3)
-
-        if d==1:
-            x = random.uniform(mi, ma)
-            y = random.uniform(mi, ma)
-            z = random.uniform(-r, +r)
-        elif d==2:
-            x = random.uniform(mi, ma)
-            y = random.uniform(-r, +r)
-            z = random.uniform(mi, ma)
-        else:
-            x = random.uniform(-r, +r)
-            y = random.uniform(mi, ma)
-            z = random.uniform(mi, ma)
-
-        return x, y, z,  nr, er
-
-    # Choisir un nouvel élément qui ne coupe pas le cube
-    # --------------------------------------------------
-
-    def element_choisir_solide(self, rmin, rmax, ratio):
-        nr, er,  mi, ma,  r, a = self.element_choisir_rayons(rmin, rmax, ratio)
-
-        x = random.uniform(mi, ma)
-        y = random.uniform(mi, ma)
-        z = random.uniform(mi, ma)
-
-        return x, y, z,  nr, er
-
-    # Choisir de nouveaux éléments
-    # ----------------------------
-
-    def elements_choisir(self, choisir, n,  rmin, rmax, ratio):
-        i = 0
-        while i<n:
-            x, y, z,  nr, er = choisir(rmin, rmax, ratio)
-            if self.element(x, y, z,  nr, er):
-                i = i + 1
-
-    # Construire automatiquement des éléments
-    # ---------------------------------------
-
-    def elements(self, s, na, nf, ns,  rmin, rmax, ratio=0.5):
-        self.elements_choisir(self.element_choisir_sommet, int(s), rmin, rmax, ratio)
-        self.elements_choisir(self.element_choisir_arete , na    , rmin, rmax, ratio)
-        self.elements_choisir(self.element_choisir_face  , nf    , rmin, rmax, ratio)
-        self.elements_choisir(self.element_choisir_solide, ns    , rmin, rmax, ratio)
-
-    # Définir la shape
-    # ================
-
-    # Construire un élément qui coupe une face
-    # ----------------------------------------
-
-    def construire_element_face(self, c, nr, er,  ax, an,  n, e):
-        if ax==self.axe_x:
-            a = self.axe_y
-            b = self.axe_z
-        elif ax==self.axe_y:
-            a = self.axe_x
-            b = self.axe_z
-        else:
-            a = self.axe_x
-            b = self.axe_y
-
-        l = 4*self.cote()
-        p = geo.MakePlane(c, a, l)
-        q = geo.MakePlane(c, b, l)
-        s = geo.MakePartition([e, n], [p, q], [], [], geo_solid)
-
-        o = False
-        for e in geo.SubShapeAll(s, geo_solid):
-            k = string.split(geo.WhatIs(e))
-            print "k cas HTR", k
-            if (int(k[6])==6) and (int(k[9])==9) and (int(k[15])==5):
-                o = True
-                break
-
-        if not o:
-            raise "construire_element_face"
-
-        a = geo.MakeLine(c, ax)
-        f = geo.MakeRotation(e, a, +angle_90)
-        g = geo.MakeRotation(e, a, -angle_90)
-        h = geo.MakeMirrorByAxis(e, a)
-
-        return [e, f, g, h]
-
-
-    # Construire un élément qui coupe une face sans couches(mox)
-    # ---------------------------------------------------------
-
-    def construire_element_face_mox(self, c, nr, er,  ax, an, e):
-        if ax==self.axe_x:
-            a = self.axe_y
-            b = self.axe_z
-        elif ax==self.axe_y:
-            a = self.axe_z
-            b = self.axe_x
-        else:
-            a = self.axe_x
-            b = self.axe_y
-
-        l = 4*self.cote()
-        p = geo.MakePlane(c, a, l)
-        q = geo.MakePlane(c, b, l)
-        s = geo.MakePartition([e], [p, q], [], [], geo_solid)
-        
-        o = False
-        for e in geo.SubShapeAll(s, geo_solid):
-            k = string.split(geo.WhatIs(e))
-            print k
-            if (int(k[6])==4) and (int(k[9])==6) and (int(k[15])==4):
-                o = True
-                break
-        if not o:
-             raise "construire_element_face_mox"
-        
-        a = geo.MakeLine(c, ax)
-        f = geo.MakeRotation(e, a, +angle_90)
-        g = geo.MakeRotation(e, a, -angle_90)
-        h = geo.MakeMirrorByAxis(e, a)
-
-        return [e, f, g, h]
-
-    # Construire un élément
-    # ---------------------
-
-    def construire_element(self, s, b, g=False):
-        c, nr, er,  ax, an = s
-
-        n = geo.MakeSpherePntR(c, nr)
-        e = geo.MakeSpherePntR(c, er)
-
-        if ax!=None:
-            if type(ax)==type([]):
-                ax1, ax = ax
-                an1, an = an
-
-                l = geo.MakeLine(c, ax1)
-
-                n = geo.MakeRotation(n, l, an1)
-                e = geo.MakeRotation(e, l, an1)
-
-            l = geo.MakeLine(c, ax)
-
-            n = geo.MakeRotation(n, l, an)
-            e = geo.MakeRotation(e, l, an)
-
-        n = geo.MakeCommon(n, b)
-        e = geo.MakeCommon(e, b)
-
-        if self._type!="mox":
-            if g:
-                return self.construire_element_face(c, nr, er,  ax, an,  n, e)
-            else:
-                return [e, n]
-        else:
-            if g:
-                return self.construire_element_face_mox(c, nr, er,  ax, an, e)
-            else:
-                return [e]
-        
-    # Construire un élément sphérique
-    # -------------------------------
-
-    def construire_element_sphere(self, s):
-        c, nr, er,  ax, an = s
-        
-        t = 4*self.cote()
-
-        x = math.cos(angle_30)
-        z = math.sin(angle_30)
-
-        u = geo.MakeVectorDXDYDZ(-x, 0, +z)
-        v = geo.MakeVectorDXDYDZ(-x, 0, -z)
-
-        p = geo.MakePlane(c, u, t)
-        q = geo.MakePlane(c, v, t)
-
-        s = geo.MakeSpherePntR(c, er)
-
-        d = geo.MakePartition([s], [p, q], [], [], geo_solid)
-
-        p1 = geo.MakeTranslation(c, -er, 0, 0)
-        f1 = geo.GetFaceNearPoint(d, p1)
-
-        a  = geo.MakeLine(c, self.axe_y)
-        f2 = geo.MakeRotation(f1, a, +angle_120)
-        f3 = geo.MakeRotation(f1, a, -angle_120)
-
-        e = geo.MakeShell([f1, f2, f3])
-        
-        #add VB test cas sans ecorces:
-        if er==nr :
-            n = geo.MakeSolid([e])
-            return [n]
-        else :
-            e = geo.MakeSolid([e])
-            n = geo.MakeScaleTransform(e, c, nr/er)
-            return [e,n]
-        #endadd
-
-    # Construire la shape
-    # -------------------
-
-    def construire(self):
-        b = self.boite()
-        l = [b]
-
-        for s in self.element_solides():
-            l = l + self.construire_element_sphere(s)
-
-        for s in self.element_faces():
-            l = l + self.construire_element(s, b, True)
-
-        for s in self.element_aretes():
-            l = l + self.construire_element(s, b)
-
-        for s in self.element_sommets():
-            l = l + self.construire_element(s, b)
-
-        r = geo.MakePartition(l, [], [], [], geo_solid)
-        geo.addToStudy(r, self.nom())
-
-        return r
-
-    # Obtenir la shape
-    # ----------------
-
-    def obtenir(self):
-        if self._shape==None:
-            self._shape = self.construire()
-            self.groupes()
-
-        return self._shape
-
-    # Sauver la shape
-    # ---------------
-
-    def sauver(self, rep="./"):
-        s = self.obtenir()
-        f = rep + self.nom() + ".brep"
-        geo.ExportBREP(s, f)
-
-        return f
-
-    # Définir les groupes
-    # ===================
-
-    # Définir un groupe géométrique
-    # -----------------------------
-
-    def groupe(self, t, nom, l=[]):
-        g = geo.CreateGroup(self._shape, t)
-        geo.addToStudyInFather(self._shape, g, nom)
-        g.SetName(nom)
-
-        if l!=[]:
-            if type(l[0])==type(0):
-                geo.UnionIDs(g, l)
-            else:
-                geo.UnionList(g, l)
-
-        return g
-
-    # Construire la liste translatée d'une liste de shape
-    # ---------------------------------------------------
-
-    def groupe__trans(self, l,  dx, dy=None, dz=None):
-        if dy==None:
-            v = dx
-        else:
-            v = geo.MakeVectorDXDYDZ(dx, dy, dz)
-
-        r = []
-        for s in l:
-            t = geo.MakeTranslationVector(s, v)
-            o = geo.GetInPlace(self._shape, t)
-            if o==None:
-                geo.addToStudy(t, "Error:GetInPlace")
-            r.append(o)
-
-        return r
-
-    # Construire la liste des edges passant par les axes et les plans des axes
-    # ------------------------------------------------------------------------
-
-    def groupe1_faces_aretes(self):
-        xy0 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_z, geo_origine, geo.GEOM.ST_ON)
-        xz0 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_y, geo_origine, geo.GEOM.ST_ON)
-        yz0 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_x, geo_origine, geo.GEOM.ST_ON)
-
-        x0 = self.intersection(xy0, xz0)
-        y0 = self.intersection(xy0, yz0)
-        z0 = self.intersection(xz0, yz0)
-
-        p = geo.MakeVertex(self.cote(), self.cote(), self.cote())
-
-        xy1 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_z, p, geo.GEOM.ST_ON)
-        xz1 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_y, p, geo.GEOM.ST_ON)
-        yz1 = geo.GetShapesOnPlaneWithLocationIDs(self._shape, geo_edge, self.axe_x, p, geo.GEOM.ST_ON)
-
-        a = xy1 + xz1 + yz1
-
-        xy = self.difference(xy0, xz0)
-        xy = self.difference(xy , xz1)
-        xy = self.difference(xy , yz0)
-        xy = self.difference(xy , yz1)
-
-        xz = self.difference(xz0, xy0)
-        xz = self.difference(xz , xy1)
-        xz = self.difference(xz , yz0)
-        xz = self.difference(xz , yz1)
-
-        yz = self.difference(yz0, xy0)
-        yz = self.difference(yz , xy1)
-        yz = self.difference(yz , xz0)
-        yz = self.difference(yz , xz1)
-
-        x0 = self.donner_shapes(x0)
-        y0 = self.donner_shapes(y0)
-        z0 = self.donner_shapes(z0)
-
-        xy = self.donner_shapes(xy)
-        xz = self.donner_shapes(xz)
-        yz = self.donner_shapes(yz)
-
-        return a,  x0, y0, z0,  xy, xz, yz
-
-    # Construire la liste des edges sur les plans des axes entre les écorces et les noyaux coupés
-    # -------------------------------------------------------------------------------------------
-
-    def groupe1_coupees(self, a):
-        l = self.element_faces() + self.element_aretes() + self.element_sommets()
-        r = []
-        for c, nr, er,  ax, an in l:
-            e = geo.GetShapesOnSphereIDs(self._shape, geo_edge, c, er, geo.GEOM.ST_IN)
-            n = geo.GetShapesOnSphereIDs(self._shape, geo_edge, c, nr, geo.GEOM.ST_ONIN)
-            if (er!=nr) and (self._type!="mox"):
-                d = self.difference(e, n)
-                r = r + self.difference(d, a)
-            else :
-                d = e
-                r = r + self.difference(d,a)
-                      
-        return self.groupe(geo_edge, self.nom_coupees+"1", r)
-
-    # Récupérer les génératrices
-    # --------------------------
-
-    def groupe1_filter(self, c, r, a):
-        l = geo.GetShapesOnSphereIDs(self._shape, geo_edge, c, r, geo.GEOM.ST_ON)
-        l = self.difference(l, a)
-
-        r = []
-        for i in l:
-            e = self.donner_shapes(i)
-            if not self.edge_degenere(e):
-                r.append(e)
-
-        return r
-
-    # Construire les listes des génératrices des écorces et des noyaux
-    # ----------------------------------------------------------------
-
-    def groupe1_ecorces_noyaux(self, a):
-        l = self.element_solides() + self.element_faces() + self.element_aretes() + self.element_sommets()
-        e = []
-        n = []
-        for c, nr, er,  ax, an in l:
-            el = self.groupe1_filter(c, er, a)
-            nl = self.groupe1_filter(c, nr, a)
-
-            for ee in el:
-                ev = geo.MakeVertexOnCurve(ee, 0.5)
-                mi = self.cote()
-                for ed in nl:
-                    nv = geo.MakeVertexOnCurve(ed, 0.5)
-                    di = geo.MinDistance(ev, nv)
-                    if mi>di:
-                        mi = di
-                        ne = ed
-                e.append(ee)
-                n.append(ne)
-# adds RL-VB
-        if (er!=nr) and (self._type!="mox"):
-            
-            return e,n
-        else:
-            print " groupe 1 mox"
-            return e
-
-    # Construire la liste des faces passant par un plan
-    # -------------------------------------------------
-
-    def groupe2_faces(self, normale):
-        return geo.GetShapesOnPlaneWithLocation(self._shape, geo_face, normale, geo_origine, geo.GEOM.ST_ON)
-
-    # Construire la liste des faces des plans axiaux entre les écorces et les noyaux coupés
-    # -------------------------------------------------------------------------------------
-
-    def groupe2_coupees(self, p):
-        a = []
-        for s in p:
-            i = geo.GetSubShapeID(self._shape, s)
-            a.append(i)
-
-        l = self.element_faces() + self.element_aretes() + self.element_sommets()
-        r = []
-        if self._type!="mox":
-            for c, nr, er,  ax, an in l:
-                e = geo.GetShapesOnSphereIDs(self._shape, geo_face, c, er, geo.GEOM.ST_IN)
-                n = geo.GetShapesOnSphereIDs(self._shape, geo_face, c, nr, geo.GEOM.ST_ONIN)
-                d = self.difference(e, n)
-                r = r + self.difference(d, a)
-        else:
-            for c, nr, er,  ax, an in l:
-                e = geo.GetShapesOnSphereIDs(self._shape, geo_face, c, er, geo.GEOM.ST_ONIN)
-                r = r + self.difference(e, a)
-                
-        return self.groupe(geo_face, self.nom_coupees+"2", r)
-
-    # Construire les listes des groupes des enveloppes des écorces entières et coupées et de même pour les noyaux
-    # -----------------------------------------------------------------------------------------------------------
-
-    def groupe2_ecorces_noyaux(self):
-        l = self.element_solides() + self.element_faces() + self.element_aretes() + self.element_sommets()
-        i = 0
-        e = []
-        n = []
-
-        for c, nr, er,  ax, an in l:
-            i = i + 1
-
-            el = geo.GetShapesOnSphere(self._shape, geo_face, c, er, geo.GEOM.ST_ON)
-
-            e.append(self.groupe(geo_face, self.nom_ecorce+"2"+str(i), el))
-           
-            # adds RL-VB
-            if (er!=nr) and (self._type!="mox"):
-                nl = geo.GetShapesOnSphere(self._shape, geo_face, c, nr, geo.GEOM.ST_ON)
-                n.append(self.groupe(geo_face, self.nom_noyau +"2"+str(i), nl))
-                
-        
-        if (er!=nr) and (self._type!="mox"):
-            return e, n
-        else:
-            print "groupe 2 mox"
-            return e
-
-    # Construire les listes des groupes des écorces coupées, des groupes des écorces entières et des groupes des noyaux entiers et coupés
-    # -----------------------------------------------------------------------------------------------------------------------------------
-
-    def groupe3_ecorces_noyaux(self):
-        i = 0
-        c = []
-        e = []
-        n = []
-        e1 = []
-        c1=[]
-        
-        for ce, nr, er,  ax, an in self.element_solides():
-            i = i + 1
-            
-            pl = geo.GetShapesOnSphereIDs(self._shape, geo_solid, ce, er, geo.GEOM.ST_ONIN)
-            e1.append(self.groupe(geo_solid, self.nom_ecorce+"3"+str(i), pl))
-
-            if er<>nr:
-                
-                nl = geo.GetShapesOnSphereIDs(self._shape, geo_solid, ce, nr, geo.GEOM.ST_ONIN)
-                el = self.difference(pl, nl)
-                e.append(self.groupe(geo_solid, self.nom_ecorce+"3"+str(i), el))
-                n.append(self.groupe(geo_solid, self.nom_noyau +"3"+str(i), nl))
-                
-        l = self.element_faces() + self.element_aretes() + self.element_sommets()
-        
-        for ce, nr, er,  ax, an in l:
-            i = i + 1
-            pl = geo.GetShapesOnSphereIDs(self._shape, geo_solid, ce, er, geo.GEOM.ST_ONIN)
-            c1.append(self.groupe(geo_solid, self.nom_ecorce+"3"+str(i), pl))
-            
-                        
-            if (er!=nr) and (self._type!="mox") :
-                nl = geo.GetShapesOnSphereIDs(self._shape, geo_solid, ce, nr, geo.GEOM.ST_ONIN)
-                el = self.difference(pl, nl)
-                c.append(self.groupe(geo_solid, self.nom_ecorce+"3"+str(i), el))
-                n.append(self.groupe(geo_solid, self.nom_noyau +"3"+str(i), nl))
-                
-# adds RL-VB
-        if (er!=nr) and (self._type!="mox"):
-            return c,e,n
-        else:
-            return c1, e1
-
-    # Construire le groupe de la matrice
-    # ----------------------------------
-
-    def groupe3_matrice(self):
-        l = geo.SubShapeAll(self._shape, geo_solid)
-        for s in l:
-            f = geo.SubShapeAllIDs(s, geo_face)
-            if len(f) > 6:
-                return self.groupe(geo_solid, self.nom_matrice, [s])
-
-        raise "groupe3_matrice"
-
-    # Construire les groupes
-    # ----------------------
-
-    def groupes(self):
-        a,  self.g1_x0, self.g1_y0, self.g1_z0,  self.g1_xy0, self.g1_xz0, self.g1_yz0 = self.groupe1_faces_aretes()
-
-        self.g1_x1  = self.groupe__trans(self.g1_x0, self.axe_y)
-        self.g1_x2  = self.groupe__trans(self.g1_x0, self.axe_z)
-        self.g1_x3  = self.groupe__trans(self.g1_x0, 0, self.cote(), self.cote())
-
-        self.g1_y1  = self.groupe__trans(self.g1_y0, self.axe_x)
-        self.g1_y2  = self.groupe__trans(self.g1_y0, self.axe_z)
-        self.g1_y3  = self.groupe__trans(self.g1_y0, self.cote(), 0, self.cote())
-
-        self.g1_z1  = self.groupe__trans(self.g1_z0, self.axe_x)
-        self.g1_z2  = self.groupe__trans(self.g1_z0, self.axe_y)
-        self.g1_z3  = self.groupe__trans(self.g1_z0, self.cote(), self.cote(), 0)
-
-        self.g1_xy1 = self.groupe__trans(self.g1_xy0, self.axe_z)
-        self.g1_xz1 = self.groupe__trans(self.g1_xz0, self.axe_y)
-        self.g1_yz1 = self.groupe__trans(self.g1_yz0, self.axe_x)
-
-        
-        self.g2_xy0 = self.groupe2_faces(self.axe_z)
-        self.g2_xy1 = self.groupe__trans(self.g2_xy0, self.axe_z)
-        self.g2_xz0 = self.groupe2_faces(self.axe_y)
-        self.g2_xz1 = self.groupe__trans(self.g2_xz0, self.axe_y)
-        self.g2_yz0 = self.groupe2_faces(self.axe_x)
-        self.g2_yz1 = self.groupe__trans(self.g2_yz0, self.axe_x)
-
-       
-        if self._type!="mox":
-            self.g1_coupees = self.groupe1_coupees(a)
-            self.g1_ecorces, self.g1_noyaux = self.groupe1_ecorces_noyaux(a)
-            self.g2_coupees = self.groupe2_coupees(self.g2_xy1 + self.g2_xz1 + self.g2_yz1)
-            self.g2_ecorces, self.g2_noyaux = self.groupe2_ecorces_noyaux()
-            self.g3_coupees, self.g3_ecorces, self.g3_noyaux = self.groupe3_ecorces_noyaux()
-
-        else:
-            self.g1_coupees = self.groupe1_coupees(a)
-            self.g1_ecorces = self.groupe1_ecorces_noyaux(a)
-            self.g2_coupees = self.groupe2_coupees(self.g2_xy1 + self.g2_xz1 + self.g2_yz1)
-            self.g2_ecorces = self.groupe2_ecorces_noyaux()
-            self.g3_coupees, self.g3_ecorces = self.groupe3_ecorces_noyaux()
-            
-       
-        
-        
-        self.g3_matrice = self.groupe3_matrice()
-
-        
-
-        
-# Définir le maillage du VER
-# ==========================
-
-class maillage:
-
-    # Initialiser le maillage
-    # -----------------------
-
-    def __init__(self, shape,mox="mox"):
-        self.shape = shape
-        print " type de structure", mox
-        self._type = mox
-        self.mesh = smesh.Mesh(self.shape.obtenir(), self.shape.nom())
-
-        self.couches(2)
-        self.longueur(20)
-        self.triangle(smesh.NETGEN_2D)
-        self.tetra(smesh.NETGEN, 1000)
-        self.fichier("")
-
-    def type_comb(self, type=None):
-        if type!=None:
-            self._type = type
-            
-        return self._type
-
-    # Donner le nombre de couches de prismes
-    # --------------------------------------
-
-    def couches(self, c=None):
-        if c!=None:
-            self._couches = c
-
-        return self._couches
-
-    # Donner la longueur moyenne des cotés des triangles
-    # --------------------------------------------------
-
-    def longueur(self, l=None):
-        if l!=None:
-            self._longueur = l
-
-        return self._longueur
-
-    # Donner l'algorithme pour générer les triangles
-    # ----------------------------------------------
-
-    def triangle(self, a=None):
-        if a!=None:
-            self._triangle = a
-
-        return self._triangle
-
-    # Donner l'algorithme et ses éventuelles options pour générer les tétraèdres
-    # --------------------------------------------------------------------------
-
-    def tetra(self, a=None, o=None):
-        if a!=None:
-            self._tetra = [a, o]
-
-        return self._tetra
-
-    # Donner le fichier med pour sauver le maillage
-    # ---------------------------------------------
-
-    def fichier(self, f=None):
-        if f!=None:
-            self._fichier = f
-
-        return self._fichier
-
-    # Projeter le maillage d'une liste d'edges vers une autre liste d'edges
-    # ---------------------------------------------------------------------
-
-    def projeter_1d_liste(self, s, d):
-        i = 0
-        n = len(s)
-        while i<n:
-            a = self.mesh.Projection1D(d[i])
-            a.SourceEdge(s[i])
-            i = i + 1
-
-    # Mailler avec des segments
-    # -------------------------
-
-    def segments(self):
-        a = self.mesh.Segment()
-        a.LocalLength(self.longueur())
-
-        if self._type!="mox":
-            a = self.mesh.Segment(self.shape.g1_coupees)
-            a.NumberOfSegments(self.couches())
-            self.projeter_1d_liste(self.shape.g1_ecorces, self.shape.g1_noyaux)
-        else :
-            a = self.mesh.Segment(self.shape.g1_coupees)
-            a.NumberOfSegments(10)
-        self.projeter_1d_liste(self.shape.g1_x0, self.shape.g1_x1)
-        self.projeter_1d_liste(self.shape.g1_x0, self.shape.g1_x2)
-        self.projeter_1d_liste(self.shape.g1_x0, self.shape.g1_x3)
-
-        self.projeter_1d_liste(self.shape.g1_y0, self.shape.g1_y1)
-        self.projeter_1d_liste(self.shape.g1_y0, self.shape.g1_y2)
-        self.projeter_1d_liste(self.shape.g1_y0, self.shape.g1_y3)
-
-        self.projeter_1d_liste(self.shape.g1_z0, self.shape.g1_z1)
-        self.projeter_1d_liste(self.shape.g1_z0, self.shape.g1_z2)
-        self.projeter_1d_liste(self.shape.g1_z0, self.shape.g1_z3)
-
-        self.projeter_1d_liste(self.shape.g1_xy0, self.shape.g1_xy1)
-        self.projeter_1d_liste(self.shape.g1_xz0, self.shape.g1_xz1)
-        self.projeter_1d_liste(self.shape.g1_yz0, self.shape.g1_yz1)
-
-    # Projeter le maillage d'une liste de faces vers une autre liste de faces
-    # -----------------------------------------------------------------------
-
-    def projeter_2d_liste(self, s, d):
-        i = 0
-        n = len(s)
-        while i<n:
-            a = self.mesh.Projection2D(d[i])
-            a.SourceFace(s[i])
-            i = i + 1
-
-    # Mailler avec des triangles
-    # --------------------------
-
-    def triangles(self):
-        a = self.mesh.Triangle(self.triangle())
-        a.LengthFromEdges()
-
-        if self._type!="mox":
-            self.projeter_2d_liste(self.shape.g2_ecorces, self.shape.g2_noyaux)
-
-        self.projeter_2d_liste(self.shape.g2_xy0, self.shape.g2_xy1)
-        self.projeter_2d_liste(self.shape.g2_xz0, self.shape.g2_xz1)
-        self.projeter_2d_liste(self.shape.g2_yz0, self.shape.g2_yz1)
-
-    # Mailler avec des quadrangles
-    # ----------------------------
-
-    def quadrangles(self):
-        self.mesh.Quadrangle(self.shape.g2_coupees)
-
-    # Mailler avec des tétraèdres
-    # ---------------------------
-
-    def tetraedres(self):
-        a, o = self.tetra()
-        t = self.mesh.Tetrahedron(a)
-        if o!=None:
-            t.MaxElementVolume(o)
-
-    # Mailler avec des prismes
-    # ------------------------
-
-    def prismes(self):
-        for g in self.shape.g3_ecorces:
-            a = self.mesh.Prism(g)
-            a.NumberOfSegments(self.couches())
-
-        for g in self.shape.g3_coupees:
-            self.mesh.Prism(g)
-
-    # Construire les groupes de maille
-    # --------------------------------
-
-    def groupes(self):
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_xy+"0", self.shape.g2_xy0))
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_xy+"1", self.shape.g2_xy1))
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_xz+"0", self.shape.g2_xz0))
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_xz+"1", self.shape.g2_xz1))
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_yz+"0", self.shape.g2_yz0))
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_yz+"1", self.shape.g2_yz1))
-
-        el = []
-        for g in self.shape.g2_ecorces:
-            self.mesh.Group(g)
-            el = el + geo.GetObjectIDs(g)
-        self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_ecorce+"2", el))
-
-        if self._type!="mox":
-            nl = []
-            for g in self.shape.g2_noyaux:
-                self.mesh.Group(g)
-                nl = nl + geo.GetObjectIDs(g)
-            self.mesh.Group(self.shape.groupe(geo_face, self.shape.nom_noyau +"2", nl))
-
-        el = []
-        for g in self.shape.g3_ecorces:
-            self.mesh.Group(g)
-            el = el + geo.GetObjectIDs(g)
-
-        for g in self.shape.g3_coupees:
-            self.mesh.Group(g)
-            el = el + geo.GetObjectIDs(g)
-
-        self.mesh.Group(self.shape.groupe(geo_solid, self.shape.nom_ecorce+"3", el))
-        
-        if self._type!="mox":
-            nl = []
-            for g in self.shape.g3_noyaux:
-                self.mesh.Group(g)
-                nl = nl + geo.GetObjectIDs(g)
-            self.mesh.Group(self.shape.groupe(geo_solid, self.shape.nom_noyau +"3", nl))
-
-        self.mesh.Group(self.shape.g3_matrice)
-
-    # Sauver le maillage
-    # ------------------
-
-    def sauver(self, fic=None):
-        if fic==None:
-            f = self.fichier()
-        else:
-            f = fic
-
-        if f=="":
-            return False
-        else:
-            self.mesh.ExportToMED(f, smesh.SMESH.MED_V2_2)
-            return True
-
-    # Générer le maillage
-    # -------------------
-
-    def generer(self):
-        
-        self.segments()
-
-        self.triangles()
-        
-        if self._type!="mox":
-            print "maillage par des quadrangles"
-            self.quadrangles()
-
-        self.tetraedres()
-
-        if self._type!="mox":
-            print "maillage par des prismes"
-            self.prismes()
-
-        self.groupes()
-
-        self.mesh.Compute()
-
-        self.sauver()