Salome HOME
Updated copyright comment
[modules/hexablock.git] / src / TEST_PY / recettes / bielle.py
index 86eca7c73e16c3f700943dfc2796e0092e15e871..852da3ea56c5b72761ac75bae5d3ffd4e0e1d190 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: latin-1 -*-
-# Copyright (C) 2009-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2009-2024  CEA, EDF
 #
 # 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.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-# Francis KLOSS : 2011-2012 : CEA-Saclay, DEN, DM2S, SFME, LGLS, F-91191 Gif-sur-Yvette, France
+# Francis KLOSS : 2011-2013 : CEA-Saclay, DEN, DM2S, SFME, LGLS, F-91191 Gif-sur-Yvette, France
 # =============================================================================================
 
 import math
-
-import geompy
 import hexablock
 
-# Construire le modèle de bloc
+### import geompy
+geompy = hexablock.geompy
+
+
+# Construire le modele de bloc
 # ============================
 
 doc = hexablock.addDocument("bielle")
 
-# Construire les 2 grilles cylindriques
-# -------------------------------------
+# Construire les 2 grilles cylindriques : petite = 1, grande = 2
 
-centre_pb = doc.addVertex(0, 0, 0)
-centre_gb = doc.addVertex(7, 0, 0)
+letour  = 360
+hauteur = 0.04
+angle1  = math.pi / 3
 
-angle_px   = math.pi / 3
-vecteur_px = doc.addVector(math.cos(angle_px), math.sin(angle_px), 0)
-vecteur_gx = doc.addVector(1, 0, 0)
+center1 = doc.addVertex(-0.107, 0, -hauteur/2)
+center2 = doc.addVertex( 0.119, 0, -hauteur/2)
+rint1   = 0.012
+rint2   = 0.025
+rext1   = 2*rint1
+rext2   = 2*rint2
 
-vecteur_z = doc.addVector(0, 0, 1)
+vx1 = doc.addVector(math.cos(angle1), math.sin(angle1), 0)
+vx2 = doc.addVector(1, 0, 0)
+vz  = doc.addVector(0, 0, 1)
 
-grille_p = doc.makeCylindrical(centre_pb, vecteur_px, vecteur_z,  1, 360, 1,  1, 3, 1,  False)
-grille_g = doc.makeCylindrical(centre_gb, vecteur_gx, vecteur_z,  1, 360, 1,  1, 3, 1,  False)
+grille_p = doc.makeCylinderUni (center1, vx1, vz,  rint1, rext1, letour, hauteur, 1, 3, 1)
+hexablock.what ()
+grille_g = doc.makeCylinderUni (center2, vx2, vz,  rint2, rext2, letour, hauteur, 1, 3, 1)
+hexablock.what ()
 
 # Relier les 2 grilles
 # --------------------
@@ -58,25 +67,51 @@ point_p2 = grille_p.getVertexIJK(1, 2, 0)
 point_g1 = grille_g.getVertexIJK(1, 1, 0)
 point_g2 = grille_g.getVertexIJK(1, 2, 0)
 
-prisme = doc.joinQuad(quad_p, quad_g,  point_p1, point_g1,  point_p2, point_g2,  3)
+prisme = doc.joinQuadUni (quad_p, quad_g,  point_p1, point_g1,  point_p2, point_g2,  3)
 
-# Charger la géométrie
+# Charger la geometrie
 # ====================
 
 bielle = geompy.ImportSTEP("bielle.stp")
 
-# Sélectionner des sous-parties de la géométrie
+# Selectionner des sous-parties de la geometrie
 # ---------------------------------------------
 
-sommets = geompy.SubShapeAllSortedCentres(bielle, geompy.ShapeType["VERTEX"])
+sommets  = geompy.SubShapeAllSortedCentres    (bielle, geompy.ShapeType["VERTEX"])
+nodes_id = geompy.SubShapeAllSortedCentresIDs (bielle, geompy.ShapeType["VERTEX"])
+     ##   0   1   2   3   4   5   6   7   8   9
+     ##  23, 70, 15, 52, 17, 57, 13, 47, 19, 62,
+     ##  11, 42,  6, 30,  9, 37,  7, 32, 26, 75]
+
+sommets_petit     = [  6,  8,  7,  9 ]
+sommets_grand     = [ 10, 12, 11, 13 ]
+node_little_subid = [ 13, 19, 47, 62 ]
+node_big_subid    = [ 11,  6, 42, 30 ]
+
+aretes  = geompy.SubShapeAllSortedCentres    (bielle, geompy.ShapeType["EDGE"])
+edge_id = geompy.SubShapeAllSortedCentresIDs (bielle, geompy.ShapeType["EDGE"])
+     ##   0   1   2   3   4   5   6   7   8   9
+     ##  16, 56, 22, 71, 69, 53, 58, 14, 51, 18,
+     ##  61, 48, 63, 12, 46, 20, 66, 43, 29, 10,
+     ##  41,  5, 31, 38, 33, 25, 76,  8, 36, 74
 
-sommets_petit = [  6,  8,  7,  9 ]
-sommets_grand = [ 10, 12, 11, 13 ]
 
-aretes = geompy.SubShapeAllSortedCentres(bielle, geompy.ShapeType["EDGE"])
+aretes_petit     = [  7,  9,  8, 10 ]
+aretes_grand     = [ 19, 21, 20, 22 ]
+arc_little_subid = [ 14, 18, 51, 61 ]
+arc_big_subid    = [ 10,  5, 41, 31 ]
 
-aretes_petit = [  7,  9,  8, 10 ]
-aretes_grand = [ 19, 21, 20, 22 ]
+subid_pbcd = 16
+subid_pbe  = 22
+
+subid_phcd = 56
+subid_phe  = 71
+
+subid_gbcd = 8
+subid_gbe  = 25
+
+subid_ghcd = 36
+subid_ghe  = 76
 
 ga_pbcd = aretes[ 0]
 ga_pbe  = aretes[ 2]
@@ -90,104 +125,126 @@ ga_gbe  = aretes[25]
 ga_ghcd = aretes[28]
 ga_ghe  = aretes[26]
 
-# Associer le modèle de bloc avec la géométrie
+# Associer le modele de bloc avec la geometrie
 # ============================================
 
-doc.setShape(bielle)
+geometry = hexablock.addShape (doc, bielle, "bielle")
+doc.setLevel (748)
 
-# Netoyer les associations implicites du prisme
-# ---------------------------------------------
+# Nettoyer les associations implicites du document
+# ------------------------------------------------
 
-for i in xrange( prisme.countEdge() ):
-  em = prisme.getEdge(i)
-  if em != None:
-    em.clearAssociation()
+doc.clearAssociation()
 
-# Associer les cercles extérieurs
+# Associer les cercles exterieurs
 # -------------------------------
 
-def cercle(grille, k, ge, p):
+def cercle(grille, k, subid, p):
     ms  = grille.getVertexIJK(0, 0, k)
 
-    ma1 = grille.getEdgeJ(0, 2, k)
-    ma2 = grille.getEdgeJ(0, 1, k)
-    ma3 = grille.getEdgeJ(0, 0, k)
+    ma1 = grille.getEdgeJ (0, 2, k)
+    ma2 = grille.getEdgeJ (0, 1, k)
+    ma3 = grille.getEdgeJ (0, 0, k)
+    tedges = [ma1, ma2, ma3 ]
+    tgeom  = [geometry]
 
-    doc.associateClosedLine(ms, ma1, [ ma2, ma3 ], ge, p, False, [])
+    doc.associateClosedLine (ms, tedges, tgeom, [subid], p, False)
 
-cercle(grille_p, 0, ga_pbe, 5.0/6)
-cercle(grille_p, 1, ga_phe, 5.0/6)
+cercle (grille_p, 0, subid_pbe, 5.0/6)
+cercle (grille_p, 1, subid_phe, 5.0/6)
 
-cercle(grille_g, 0, ga_gbe, 0)
-cercle(grille_g, 1, ga_ghe, 0)
+cercle (grille_g, 0, subid_gbe, 0)
+cercle (grille_g, 1, subid_ghe, 0)
 
-# Associer les arcs extérieurs (excentrés)
+# Associer les arcs exterieurs (excentres)
 # ----------------------------------------
 
-def arc(grille, i1, i2, k, ge):
+def arc(grille, i1, i2, k, subid):
     ma1 = grille.getEdgeJ(1, i1, k)
     ma2 = grille.getEdgeJ(1, i2, k)
+    doc.associateOpenedLine ([ma1, ma2 ], [geometry], [subid], 0, 1)
 
-    doc.associateOpenedLine(ma1, [ ma2 ], ge, 0, [], 1)
-
-arc(grille_p, 1, 0, 0, ga_pbcd)
-arc(grille_p, 1, 0, 1, ga_phcd)
+arc(grille_p, 1, 0, 0, subid_pbcd)
+arc(grille_p, 1, 0, 1, subid_phcd)
 
-arc(grille_g, 0, 2, 0, ga_gbcd)
-arc(grille_g, 0, 2, 1, ga_ghcd)
+arc(grille_g, 0, 2, 0, subid_gbcd)
+arc(grille_g, 0, 2, 1, subid_ghcd)
 
 # Associer les sommets des arcs de cercle de raccord
 # --------------------------------------------------
 
 hm = prisme.getHexa(1)
-for i in xrange(0, 4):
+for i in range(0, 4):
   vm = hm.getVertex(i)
-  ga = sommets[ sommets_petit[i] ]
-  vm.setAssociation(ga)
+  subid = node_little_subid [i]
+  vm.setAssociation (geometry, subid)
 
 hm = prisme.getHexa(2)
-for i in xrange(0, 4):
+for i in range(0, 4):
   vm = hm.getVertex(i)
-  ga = sommets[ sommets_grand[i] ]
-  vm.setAssociation(ga)
+  subid = node_big_subid [i]
+  vm.setAssociation (geometry, subid)
 
 # Associer les arcs de cercle de raccord
 # --------------------------------------
 
 hm = prisme.getHexa(0)
-for i in xrange(0, 4):
+for i in range(0, 4):
   em = hm.getEdge(i+8)
-  ga = aretes[ aretes_petit[i] ]
-  em.addAssociation(ga, 0, 1)
+  subid = arc_little_subid [i]
+  em.addAssociation (geometry, subid, 0, 1)
 
 hm = prisme.getHexa(2)
-for i in xrange(0, 4):
+for i in range(0, 4):
   em = hm.getEdge(i+8)
-  ga = aretes[ aretes_grand[i] ]
-  em.addAssociation(ga, 0, 1)
+  subid = arc_big_subid [i]
+  em.addAssociation (geometry, subid, 0, 1)
 
 # Arrondir des associations implicites cylindriques
 # -------------------------------------------------
 
+larc = []
 for h, i, ech in [ [0, 0, 0.95], [0, 1, 0.95],  [2, 2, 0.85], [2, 3, 0.85] ]:
   hm = prisme.getHexa(h)
   em = hm.getEdge(i)
-  va = em.getVertex(0).getAssociation()
-  vb = em.getVertex(1).getAssociation()
-  vax, vay, vaz = geompy.PointCoordinates(va)
-  vbx, vby, vbz = geompy.PointCoordinates(vb)
+
+  v1 = em.getVertex(0)
+  v2 = em.getVertex(1)
+
+  vax = v1.getAssoX ();
+  vay = v1.getAssoY ();
+  vaz = v1.getAssoZ ();
+
+  vbx = v2.getAssoX ();
+  vby = v2.getAssoY ();
+  vbz = v2.getAssoZ ();
+
   vmx = ( vax + vbx ) / 2.0 * ech
   vmy = ( vay + vby ) / 2.0
   vmz = ( vaz + vbz ) / 2.0
+
+  va = geompy.MakeVertex(vax, vay, vaz)
+  vb = geompy.MakeVertex(vbx, vby, vbz)
   vm = geompy.MakeVertex(vmx, vmy, vmz)
   eg = geompy.MakeArc(va, vm, vb)
+  larc.append(eg)
+
+arc   = geompy.MakeCompound(larc)
+shape = hexablock.addShape (doc, arc, "arc")
+
+# Mailler le modele de bloc
+for h, i in [ [0, 0], [0, 1],  [2, 2], [2, 3] ]:
+  hm = prisme.getHexa(h)
+  em = hm.getEdge(i)
+
   em.clearAssociation()
-  em.addAssociation(eg, 0, 1)
+  shape_subid = 2+3*i
+  em.addAssociation (shape, shape_subid, 0.0, 1.0)
 
-# Mailler le modèle de bloc
+# Mailler le modele de bloc
 # =========================
 
-# Définir 5 groupes de faces
+# Definir 5 groupes de faces
 # --------------------------
 
 groupe_petit   = doc.addQuadGroup("Petit")
@@ -199,21 +256,21 @@ groupe_contour = doc.addQuadGroup("Contour")
 # Constituer les groupes petit et grand
 # -------------------------------------
 
-for i in xrange(3):
+for i in range(3):
   groupe_petit.addElement( grille_p.getQuadJK(0, i, 0) )
   groupe_grand.addElement( grille_g.getQuadJK(0, i, 0) )
 
 # Constituer les groupes bas et haut
 # ----------------------------------
 
-for i in xrange(3):
+for i in range(3):
   groupe_bas.addElement(  grille_p.getQuadIJ(0, i, 0) )
   groupe_bas.addElement(  grille_g.getQuadIJ(0, i, 0) )
 
   groupe_haut.addElement( grille_p.getQuadIJ(0, i, 1) )
   groupe_haut.addElement( grille_g.getQuadIJ(0, i, 1) )
 
-for i in xrange(3):
+for i in range(3):
   h = prisme.getHexa(i)
 
   groupe_bas.addElement(  h.getQuad(2) )
@@ -222,36 +279,46 @@ for i in xrange(3):
 # Constituer le groupe contour
 # ----------------------------
 
-for i in xrange(2):
+for i in range(2):
   groupe_contour.addElement( grille_p.getQuadJK(1, i, 0) )
 
 for i in [0, 2]:
   groupe_contour.addElement( grille_g.getQuadJK(1, i, 0) )
 
-for i in xrange(3):
+for i in range(3):
   h = prisme.getHexa(i)
 
   groupe_contour.addElement( h.getQuad(4) )
   groupe_contour.addElement( h.getQuad(5) )
 
-# Définir 3 groupes de volumes
+# Definir 3 groupes de volumes
 # ----------------------------
 
 groupe_petit  = doc.addHexaGroup("Petit")
 groupe_grand  = doc.addHexaGroup("Grand")
 groupe_prisme = doc.addHexaGroup("Prisme")
 
-for i in xrange(3):
+for i in range(3):
   groupe_petit.addElement( grille_p.getHexa(i) )
   groupe_grand.addElement( grille_g.getHexa(i) )
 
-for i in xrange(3):
+for i in range(3):
   groupe_prisme.addElement( prisme.getHexa(i) )
 
-# Mailler le modèle de bloc avec association
+# Mailler le modele de bloc avec association
 # ------------------------------------------
 
-hexablock.addLaws(doc, 0.003, True)
+doc.addLaws (0.003, True)
+
+law = doc.addLaw("Uniform", 4)
+
+for j in range(doc.countPropagation()):
+    propa = doc.getPropagation(j)
+    propa.setLaw(law)
+
+doc.save("bielle_v5")
+doc.setName("bielle_v5")
+hexablock.addToStudy(doc)
 
 blocs = hexablock.mesh(doc)