1 # This object allows unrefining from a central point (actually, a line) to the exterior
2 # X0 and Y0 are the center points of the origin point and not those of the center of the generated block
6 import sys, salome, geompy, smesh, SMESH, math, commands
7 CWD = commands.getoutput('pwd')
10 from MacObject import *
11 import Config, GenFunctions
13 def CentralUnrefine (X0 , Y0 , DX , DY , Orientation, **args ) :
15 DirPar = {'SN' : lambda : ['NW', 'NE', 'EW', 'NW', 'SN', 'SN', 'NE', 'WE'],
16 'NS' : lambda : ['SE', 'SW', 'WE', 'SE', 'NS', 'NS', 'SW', 'EW'],
17 'EW' : lambda : ['NW', 'SW', 'SN', 'NW', 'EW', 'EW', 'SW', 'NS'],
18 'WE' : lambda : ['SE', 'NE', 'NS', 'SE', 'WE', 'WE', 'NE', 'SN'], }[Orientation]()
20 CoefVer = {'SN' : lambda : 1.,
23 'WE' : lambda : 0., }[Orientation]()
25 CoefHor = {'SN' : lambda : 0.,
28 'WE' : lambda : 1., }[Orientation]()
31 MacObject('CompBoxF',[(X0+CoefHor*DX/2,Y0+CoefVer*DY/2),(DX,DY)],['auto'],publish=0)
32 ToLook1 = {'SN' : lambda : 2,
35 'WE' : lambda : 0, }[Orientation]()
37 ToLook2 = {'SN' : lambda : 0,
40 'WE' : lambda : 2, }[Orientation]()
42 ToLook3 = {'SN' : lambda : [0,1,2,3],
43 'NS' : lambda : [1,0,3,2],
44 'EW' : lambda : [3,2,1,0],
45 'WE' : lambda : [2,3,0,1], }[Orientation]()
47 if args.__contains__('groups') :
48 GroupNames = args['groups']
49 else : GroupNames = [None, None, None, None, None, None]
51 ExistingSegments = Config.ListObj[-1].DirectionalMeshParams[ToLook1]
52 ObjIDs = Config.Connections[-1][ToLook1]
55 ExtensionSegments = math.ceil(ExistingSegments/12.)*12.
59 Boundaries = Config.ListObj[ObjID].Boundaries()
60 if Boundaries[ToLook2] < Dmin : Dmin = Boundaries[ToLook2]
61 if Boundaries[ToLook2+1] > Dmax : Dmax = Boundaries[ToLook2+1]
63 if ExtensionSegments > ExistingSegments :
64 dn = (ExtensionSegments-ExistingSegments)/2.
65 dx = dn*(Dmax-Dmin)/ExistingSegments
66 #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmin-dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmin-dx/2)),(dx,dx)],[(dn,dn)],publish=0)
67 #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmax+dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmax+dx/2)),(dx,dx)],[(dn,dn)],publish=0)
69 BoxSide = (Dmax-Dmin+2*dx)/2.
72 Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(-BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(-BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[0]],groups=GroupArray(ToLook3[0],GroupNames[0])))
73 Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[1]],groups=GroupArray(ToLook3[0],GroupNames[0])))
76 for NLevels in range (1,100) :
77 DX1 = abs(CoefVer)*BoxSide*2.**(NLevels+1)+abs(CoefHor)*BoxSide*2.**(NLevels)
78 DY1 = abs(CoefHor)*BoxSide*2.**(NLevels+1)+abs(CoefVer)*BoxSide*2.**(NLevels)
79 if DX1 > DX or DY1 > DY :
85 dummyArray = [DXinner,DYinner,DYinner,DXinner]
86 D1inner = dummyArray[ToLook2] # = DXinner for SN and NS orientations
87 D2inner = dummyArray[ToLook2+1] # = DYinner for SN and NS orientations
89 dummyArray = [DX,DY,DY,DX]
90 D1 = dummyArray[ToLook2] # = DX for SN and NS orientations
91 D2 = dummyArray[ToLook2+1] # = DY for SN and NS orientations
94 GN0a = GroupArray(ToLook3[0],GroupNames[1])
95 GN0b = GroupArray(ToLook3[0],GroupNames[2])
96 GN01 = GroupArray(ToLook3[0],GroupNames[1])
97 GN02 = GroupArray(ToLook3[0],GroupNames[2])
99 GN10 = [None,None,None,None]
100 GN11 = [None,None,None,None]
101 GN20 = [None,None,None,None]
103 GN10 = GroupArray(ToLook3[1],GroupNames[3])
104 GN11 = GroupArray(ToLook3[1],GroupNames[3])
105 GN20 = GroupArray(ToLook3[1],GroupNames[3])
107 GN0a = GroupArray(ToLook3[0],GroupNames[1])
108 GN0b = GroupArray(ToLook3[0],GroupNames[2])
109 GN01 = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])
110 GN02 = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])
112 GN10 = GroupArray(ToLook3[2],GroupNames[4])
113 GN11 = GroupArray(ToLook3[3],GroupNames[5])
114 GN20 = [None,None,None,None]
116 GN10 = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])
117 GN11 = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])
118 GN20 = GroupArray(ToLook3[1],GroupNames[3])
120 for N in range (1,NLevOpt+1):
124 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*1/2-CoefVer*3/2) , Y0+D*(CoefVer*1/2-CoefHor*3/2) ) , (D,D)],['auto',DirPar[2]], groups=GN0a))
125 Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2) , Y0+D*(CoefVer*3/2-CoefHor*3/2) ) , (D,D)],['auto',DirPar[3]]))
126 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*3/2-CoefVer*1/2) , Y0+D*(CoefVer*3/2-CoefHor*1/2) ) , (D,D)],['auto',DirPar[4]]))
127 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*3/2+CoefVer*1/2) , Y0+D*(CoefHor*1/2+CoefVer*3/2) ) , (D,D)],['auto',DirPar[5]]))
128 Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2) , Y0+D*(CoefVer*3/2+CoefHor*3/2) ) , (D,D)],['auto',DirPar[6]]))
129 Obj.append(MacObject('Box42' ,[(X0+D*(CoefVer*3/2+CoefHor*1/2) , Y0+D*(CoefHor*3/2+CoefVer*1/2) ) , (D,D)],['auto',DirPar[7]], groups=GN0b))
131 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*1/2-CoefVer*3/2) , Y0+D*(CoefVer*1/2-CoefHor*3/2) ) , (D,D)],['auto',DirPar[2]], groups=GN01))
132 Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2) , Y0+D*(CoefVer*3/2-CoefHor*3/2) ) , (D,D)],['auto',DirPar[3]], groups=GN10))
133 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*3/2-CoefVer*1/2) , Y0+D*(CoefVer*3/2-CoefHor*1/2) ) , (D,D)],['auto',DirPar[4]], groups=GN20))
134 Obj.append(MacObject('Box42' ,[(X0+D*(CoefHor*3/2+CoefVer*1/2) , Y0+D*(CoefHor*1/2+CoefVer*3/2) ) , (D,D)],['auto',DirPar[5]], groups=GN20))
135 Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2) , Y0+D*(CoefVer*3/2+CoefHor*3/2) ) , (D,D)],['auto',DirPar[6]], groups=GN11))
136 Obj.append(MacObject('Box42' ,[(X0+D*(CoefVer*3/2+CoefHor*1/2) , Y0+D*(CoefHor*3/2+CoefVer*1/2) ) , (D,D)],['auto',DirPar[7]], groups=GN02))
139 if CoefVer and DX>DXinner :
140 Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
141 Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
143 Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
144 Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
145 Obj.append(MacObject('CompBoxF',[(X0,Y0+CoefVer*(DY+DYinner)/2.),(DXinner,DY-DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
146 elif CoefHor and DY>DYinner :
147 Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0-CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
148 Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0+CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
150 Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0-CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
151 Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0+CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
152 Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0),(DX-DXinner,DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
155 def RemoveLastObj() :
156 Config.ListObj = Config.ListObj[:-1]
157 Config.Connections = Config.Connections[:-1]
159 def GroupArray(indices, GroupNames) :
160 if type(indices) is int :
162 GroupNames = [GroupNames]
163 Output = [None,None,None,None]
164 for i, ind in enumerate(indices) :
165 Output[ind] = GroupNames[i]