2 # -*- coding: latin-1 -*-
3 # Hexa : Creation d'hexaedres
8 #---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
10 doc = hexablock.addDocument ("default")
11 vx = doc.addVector (1,0,0)
12 vy = doc.addVector (0,1,0)
13 vz = doc.addVector (0,0,1)
15 vxy = doc.addVector (1,1,0)
20 # ======================================================= save_vtk
24 nom = "lecas%d.vtk" % nbr_files
28 # ======================================================= carre
32 # ======================================================= get_center
33 def get_center (quad) :
38 vertex = quad.getVertex (nv)
39 px += vertex.getX() / 4
40 py += vertex.getY() / 4
41 pz += vertex.getZ() / 4
43 # ======================================================= nearest
44 def nearest (grid, vertex) :
45 nbre = grid.countVertex()
51 for nro in range (nbre) :
52 v1 = grid.getVertex (nro)
53 d2 = carre(px-v1.getX()) + carre(py-v1.getY()) + carre(pz-v1.getZ())
58 print vertex.getName () , px, py, pz, " -> ", result.getName()
61 # ======================================================= nearest_quad
62 def nearest_quad (grid, quad) :
65 [ox, oy, oz] = get_center (quad)
66 nbre = grid.countQuad ()
67 for nro in range (nbre) :
68 q1 = grid.getQuad (nro)
70 [px, py, pz] = get_center (q1)
71 d2 = carre(px-ox) + carre(py-oy) + carre(pz-oz)
76 print quad.getName () , px, py, pz, " -> ", result.getName()
79 # ======================================================= insert_cylinder
80 def insert_cylinder (plaque, nx, ny) :
82 hexa = plaque.getHexaIJK (nx, ny, 0)
83 xmin = 666 ; ymin = xmin ; zmin = xmin
84 xmax = -666 ; ymax = xmax ; zmax = xmax
88 node = hexa.getVertex (nv)
89 xmin = min (xmin, node.getX()) ; xmax = max (xmax, node.getX())
90 ymin = min (ymin, node.getY()) ; ymax = max (ymax, node.getY())
91 zmin = min (zmin, node.getZ()) ; zmax = max (zmax, node.getZ())
99 xorig = (xmin + xmax)/2
100 yorig = (ymin + ymax)/2
101 zorig = (zmin + zmax)/2 - dz
103 orig = doc.addVertex (xorig, yorig, zorig)
111 pipe = doc.makePipeUni (orig, vxy,vz, rint,rext,angle,haut, nr,na,nh)
117 for nq in range (4) :
118 quad = pipe.getQuadJK (1, nq, 0)
119 tabquad.append (quad)
121 print " .. tabquad[0] = ", tabquad[0].getName ()
122 cible = nearest_quad (plaque, tabquad[0])
123 tabquad[0]. setColor (5)
127 va1 = tabquad[0].getVertex (0)
128 va2 = tabquad[0].getVertex (1)
129 vb1 = cible.nearestVertex (va1)
130 vb2 = cible.nearestVertex (va2)
132 doc.joinQuadsUni (tabquad, cible, va1, vb1, va2, vb2, 1)
138 for nv in range (8) :
139 ier = doc.mergeVertices (tabv0[nv], tabv1[nv])
144 # ======================================================= test_2013
147 orig = doc.addVertex (0,0,0)
156 plaque = doc.makeCartesianUni (orig, vx,vy,vz, lx, ly, lz, nx,ny,nz)
159 insert_cylinder (plaque, 1, 1)
162 # ================================================================= Begin
165 doc.addLaws (0.1, True)
167 mesh_hexas = hexablock.mesh (doc)