Salome HOME
022491: EDF 2249 SMESH: Integration of a small python library for quadrangle meshing
[modules/smesh.git] / src / Tools / MacMesh / MacMesh / Cylinder.py
1 # This is an automation of the cylinder-box object, defined with the coordinates of its center, its radius, and the box's 
2 # boundary size.
3 # The pitch ratio is calculated automatically from the minimum of the box dimensions on x and y.
4 # This functions can take a groups input containing the group names of 4 sides in addition to the internal circular boundary
5 # in the following order : [South,North,West,East,Internal].
6
7 import sys, salome, geompy, smesh, SMESH, math, commands
8 CWD = commands.getoutput('pwd')
9 sys.path.append(CWD)
10
11
12 from MacObject import *
13 import Config, GenFunctions
14
15 def Cylinder (X0 , Y0 , D , DX , DY , LocalMeshing , **args) : 
16         if args.__contains__('DLocal') : DLocal = float(args['DLocal']) 
17         else : DLocal = float(min(DX,DY))
18
19         # K is the pitch ratio
20         K = float(D)/(DLocal-D)
21         print "A local pitch ratio of K =", K ," will be used.  "
22         NumCuts =  2*GenFunctions.QuarCylParam(K)
23         InternalMeshing = int(math.ceil(math.pi*D/(4*NumCuts*LocalMeshing)))
24         if InternalMeshing == 0 : InternalMeshing = 1           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
25         print "Possible Local meshing is :", math.pi*D/(4*NumCuts*InternalMeshing), "\nThis value is returned by this function for your convenience.\n"
26         if args.__contains__('groups') :
27                 GroupNames = args['groups']
28         else : GroupNames = [None, None, None, None, None]
29         
30         if DY == DLocal :
31                 if DX == DLocal:
32                         GN1 = [None,GroupNames[1],None,GroupNames[3],GroupNames[4]]
33                         GN2 = [None,GroupNames[1],GroupNames[2],None,GroupNames[4]]
34                         GN3 = [GroupNames[0],None,GroupNames[2],None,GroupNames[4]]
35                         GN4 = [GroupNames[0],None,None,GroupNames[3],GroupNames[4]]
36                 else :
37                         GN1 = [None,GroupNames[1],None,None,GroupNames[4]]
38                         GN2 = [None,GroupNames[1],None,None,GroupNames[4]]
39                         GN3 = [GroupNames[0],None,None,None,GroupNames[4]]
40                         GN4 = [GroupNames[0],None,None,None,GroupNames[4]]
41                         
42                         GN5 = [GroupNames[0],GroupNames[1],None,GroupNames[3]]
43                         GN6 = [GroupNames[0],GroupNames[1],GroupNames[2],None]
44         else :
45                 if DX == DLocal:
46                         GN1 = [None,None,None,GroupNames[3],GroupNames[4]]
47                         GN2 = [None,None,GroupNames[2],None,GroupNames[4]]
48                         GN3 = [None,None,GroupNames[2],None,GroupNames[4]]
49                         GN4 = [None,None,None,GroupNames[3],GroupNames[4]]
50                         GN7 = [GroupNames[0],None,GroupNames[2],GroupNames[3]]
51                         GN8 = [None,GroupNames[1],GroupNames[2],GroupNames[3]]
52                 else :
53                         GN1 = [None,None,None,None,GroupNames[4]]
54                         GN2 = [None,None,None,None,GroupNames[4]]
55                         GN3 = [None,None,None,None,GroupNames[4]]
56                         GN4 = [None,None,None,None,GroupNames[4]]
57                         
58                         GN5 = [None,None,None,GroupNames[3]]
59                         GN6 = [None,None,GroupNames[2],None]
60                         
61                         GN9  = [GroupNames[0],None,None,GroupNames[3]]
62                         GN10 = [GroupNames[0],None,None,None]
63                         GN11 = [GroupNames[0],None,GroupNames[2],None]
64                         
65                         GN12 = [None,GroupNames[1],None,GroupNames[3]]
66                         GN13 = [None,GroupNames[1],None,None]
67                         GN14 = [None,GroupNames[1],GroupNames[2],None]
68                         
69         Obj = []
70
71         Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],[InternalMeshing,'NE',K], groups = GN1))
72         Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','NW',K], groups = GN2))
73         Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SW',K], groups = GN3))
74         Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SE',K], groups = GN4))
75
76         if DX > DLocal :
77                 dX = (DX - DLocal)/2.
78                 Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN5))
79                 Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN6))
80
81         if DY > DLocal :
82                 dY = (DY - DLocal)/2.
83                 if DX > DLocal : 
84                         Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN9))
85                         Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN10))
86                         Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN11))
87                         Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN12))
88                         Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN13))
89                         Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN14))
90                 else:
91                         Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN7))
92                         Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN8))
93                                         
94         return Obj