Version: 9.15.0
GEOM_Spanner.py


GEOM_Spanner.py

0 def MakeSpanner (geompy, math, isBlocksTest = 0, isMeshTest = 0, smesh = None):
33 
34 
35 
36  th = 4.0
37 
38 
39 
40  p0 = geompy.MakeVertex(0., 0., 0.)
41  pth = geompy.MakeVertex(0., 0., th)
42 
43  vx = geompy.MakeVectorDXDYDZ(1., 0., 0.)
44  vy = geompy.MakeVectorDXDYDZ(0., 1., 0.)
45  vz = geompy.MakeVectorDXDYDZ(0., 0., 1.)
46 
47  vxy = geompy.MakeVectorDXDYDZ(1., 1., 0.)

48 
49 
50 
51  p_10_0 = geompy.MakeVertex(10., 0., 0.)
52  p_10_25 = geompy.MakeVertex(10., 25., 0.)
53  p_0_35 = geompy.MakeVertex( 0., 35., 0.)
54  p_0_10 = geompy.MakeVertex( 0., 10., 0.)
55 
56  Face11 = geompy.MakeQuad4Vertices(p_10_0, p_10_25, p_0_10, p_0_35);
57  id_face11 = geompy.addToStudy(Face11, "1 Face for Block 1")

58 
59  Face12 = geompy.MakeTranslationTwoPoints(Face11, p0, pth)
60  id_face12 = geompy.addToStudy(Face12, "2 Face for Block 1")

61 
62  Block1 = geompy.MakeHexa2Faces(Face11, Face12)
63  id_block1 = geompy.addToStudy(Block1, "Block 1")
64 
65 
66 
67  p_15_0 = geompy.MakeVertex(15., 0., 0.)
68  p_15_20 = geompy.MakeVertex(15., 20., 0.)
69 
70  Edge21 = geompy.MakeEdge(p_15_0, p_15_20)
71  id_edge21 = geompy.addToStudy(Edge21, "1 Edge for Block 2")
72 
73  Edge22 = geompy.GetEdge(Block1, p_10_0, p_10_25)
74  id_edge22 = geompy.addToStudy(Edge22, "2 Edge for Block 2")
75 
76  Face21 = geompy.MakeQuad2Edges(Edge21, Edge22);
77  id_face21 = geompy.addToStudy(Face21, "1 Face for Block 2")
78 
79  Face22 = geompy.MakeTranslationTwoPoints(Face21, p0, pth)
80  id_face22 = geompy.addToStudy(Face22, "2 Face for Block 2")
81 
82  Block2 = geompy.MakeHexa2Faces(Face21, Face22)
83  id_block2 = geompy.addToStudy(Block2, "Block 2")
84 
85 
86 
87  p_15_10_1 = geompy.MakeVertex(15., 10., 1.)

88 
89  Face31 = geompy.GetFaceNearPoint(Block2, p_15_10_1)
90  id_face31 = geompy.addToStudy(Face31, "1 Face for Block 3")
91 
92  Prism1 = geompy.MakePrismVecH(Face31, vx, 5);
93  id_prism1 = geompy.addToStudy(Prism1, "Prism to be Block 3")
94 
95  nbFaces = geompy.ShapesOp.NumberOfFaces(Prism1)
96  if nbFaces == 6:
97  print("Prism 1 is a hexahedral solid")
98  else:
99  print("Prism 1 is not a hexahedral solid")

100 
101  Prism1_faces = geompy.SubShapeAllSortedCentres(Prism1, geompy.ShapeType["FACE"])
102  ii = 1
103  for aFace in Prism1_faces:
104  name = geompy.SubShapeName(aFace, Prism1)
105  Id_Face = geompy.addToStudyInFather(Prism1, aFace, name)
106  ii = ii + 1

107 
108  Block3 = geompy.MakeHexa(Prism1_faces[0], Prism1_faces[1],
109  Prism1_faces[2], Prism1_faces[3],
110  Prism1_faces[4], Prism1_faces[5]);
111  id_block3 = geompy.addToStudy(Block3, "Block 3")

112 
113 
114 
115  Face41 = geompy.GetOppositeFace(Block3, Face31)
116  id_face41 = geompy.addToStudy(Face41, "1 Face for Block 4")
117 
118  p_25_5 = geompy.MakeVertex(25., 5., 0.)
119  p_25_20 = geompy.MakeVertex(25., 20., 0.)
120 
121  Edge41 = geompy.MakeEdge(p_25_5, p_25_20)
122  id_edge41 = geompy.addToStudy(Edge41, "1 Edge for Block 4")
123 
124  p_25_5_2 = geompy.MakeVertex(25., 5., th)
125  p_25_20_2 = geompy.MakeVertex(25., 20., th)
126 
127  Edge42 = geompy.MakeEdge(p_25_5_2, p_25_20_2)
128  id_edge42 = geompy.addToStudy(Edge42, "2 Edge for Block 4")
129 
130  Edge43 = geompy.MakeEdge(p_25_5, p_25_5_2)
131  id_edge43 = geompy.addToStudy(Edge43, "3 Edge for Block 4")
132 
133  Edge44 = geompy.MakeEdge(p_25_20, p_25_20_2)
134  id_edge44 = geompy.addToStudy(Edge44, "4 Edge for Block 4")
135 
136  Face42 = geompy.MakeQuad(Edge41, Edge42, Edge43, Edge44)
137  id_face42 = geompy.addToStudy(Face42, "2 Face for Block 4")
138 
139  Block4 = geompy.MakeHexa2Faces(Face41, Face42)
140  id_block4 = geompy.addToStudy(Block4, "Block 4")
141 
142 
143 
144  p_25_30 = geompy.MakeVertex(25., 30., 0.)
145  p_25_30_1 = geompy.MakeVertex(25., 30., 1)
146  axis_rot = geompy.MakeVector(p_25_30, p_25_30_1)
147 
148  Face51 = Face42
149  Face52 = geompy.MakeRotation(Face51, axis_rot, math.pi/2.)
150  id_face52 = geompy.addToStudy(Face52, "2 Face for Block 5")
151 
152  Block5 = geompy.MakeHexa2Faces(Face51, Face52)
153  id_block5 = geompy.addToStudy(Block5, "Block 5")
154 
155 
156 
157  Comp1234 = geompy.MakeCompound([Block1, Block2, Block3, Block4])
158  Glue1234 = geompy.MakeGlueFaces(Comp1234, 1e-5)
159  id_glue1234 = geompy.addToStudy(Glue1234, "Glue 1234")
160 
161  plane_mirror = geompy.MakePlane(p_25_30, vxy, 100.)
162  #id_plane_mirror = geompy.addToStudy(plane_mirror, "Plane for mirror")
163 
164  Mirror1 = geompy.MakeMirrorByPlane(Glue1234, plane_mirror)
165  id_mirror1 = geompy.addToStudy(Mirror1, "Mirror 1")
166 
167 
168 
169  p_18_0 = geompy.MakeVertex(18., 0., 0.)
170  p_20_0 = geompy.MakeVertex(20., 0., 0.)
171  p_40_0 = geompy.MakeVertex(40., 0., 0.)
172 
173  Edge1s = geompy.MakeEdge(p_20_0, p_40_0)
174  id_edge1s = geompy.addToStudy(Edge1s, "1 Edge for Block 1s")
175 
176  Edge2s = geompy.MakeRotation(Edge1s, vz, math.pi/12.)
177  id_edge2s = geompy.addToStudy(Edge2s, "2 Edge for Block 1s")
178 
179  p_18_0_r = geompy.MakeRotation(p_18_0, vz, math.pi/24.)
180  p_20_0_r = geompy.MakeRotation(p_20_0, vz, math.pi/12.)
181  p_40_0_r = geompy.MakeRotation(p_40_0, vz, math.pi/12.)
182 
183  Edge3s = geompy.MakeEdge(p_40_0, p_40_0_r)
184  id_edge3s = geompy.addToStudy(Edge3s, "3 Edge for Block 1s")
185 
186  Edge4s = geompy.MakeArc(p_20_0, p_18_0_r, p_20_0_r)
187  id_edge4s = geompy.addToStudy(Edge4s, "4 Edge for Block 1s")
188 
189  Face1s = geompy.MakeQuad(Edge1s, Edge2s, Edge3s, Edge4s)
190  id_face1s = geompy.addToStudy(Face1s, "1 Face for Block 1s")
191 
192  Block1s = geompy.MakePrismVecH(Face1s, vz, th);
193  id_block1s = geompy.addToStudy(Block1s, "Block 1s")
194 
195  p_30_0_1 = geompy.MakeVertex(30., 0., 1.)
196 
197  Face2s = geompy.GetFaceNearPoint(Block1s, p_30_0_1)
198  id_face2s = geompy.addToStudy(Face2s, "2 Face of Block 1s")
199 
200  f2s_ind = geompy.LocalOp.GetSubShapeIndex(Block1s, Face2s)
201 
202  Block1s_tr1 = geompy.MakeMultiTransformation1D(Block1s, f2s_ind, 0, 24)
203  id_block1s_tr1 = geompy.addToStudy(Block1s_tr1, "Multi-transformed Block 1s")
204 
205  p_60_150_0 = geompy.MakeVertex(60., -150., 0.)
206  Gear = geompy.MakeTranslationTwoPoints(Block1s_tr1, p0, p_60_150_0)
207  id_gear = geompy.addToStudy(Gear, "Gear")
208 
209 
210 
211 
212 
213  p_55_0_1 = geompy.MakeVertex(55., 0., 1.)
214  p_55_110_1 = geompy.MakeVertex(55., -110., 1.)
215 
216  Face11l = geompy.GetFaceNearPoint(Block5, p_55_0_1)
217  id_face11l = geompy.addToStudy(Face11l, "1 Face for Linking Block 1")
218 
219  Face12l = geompy.GetFaceNearPoint(Gear, p_55_110_1)
220  id_face12l = geompy.addToStudy(Face12l, "2 Face for Linking Block 1")
221 
222  Block1l = geompy.MakeHexa2Faces(Face11l, Face12l)
223  id_block1l = geompy.addToStudy(Block1l, "Linking Block 1")
224 
225 
226 
227  p_25_0_1 = geompy.MakeVertex(25., 0., 1.)
228  p_45_110_1 = geompy.MakeVertex(45., -110., 1.)
229 
230  Face21l = geompy.GetFaceNearPoint(Block4, p_25_0_1)
231  id_face21l = geompy.addToStudy(Face21l, "1 Face for Linking Block 2")
232 
233  Face22l = geompy.GetFaceNearPoint(Gear, p_45_110_1)
234  id_face22l = geompy.addToStudy(Face22l, "2 Face for Linking Block 2")
235 
236  Block2l = geompy.MakeHexa2Faces(Face21l, Face22l)
237  id_block2l = geompy.addToStudy(Block2l, "Linking Block 2")
238 
239 
240 
241  p_55_30_1 = geompy.MakeVertex(55., 30., 1.)
242  p_65_110_1 = geompy.MakeVertex(65., -110., 1.)
243 
244  Face31l = geompy.GetFaceNearPoint(Mirror1, p_55_30_1)
245  id_face31l = geompy.addToStudy(Face31l, "1 Face for Linking Block 3")
246 
247  Face32l = geompy.GetFaceNearPoint(Gear, p_65_110_1)
248  id_face32l = geompy.addToStudy(Face32l, "2 Face for Linking Block 3")
249 
250  Block3l = geompy.MakeHexa2Faces(Face31l, Face32l)
251  id_block3l = geompy.addToStudy(Block3l, "Linking Block 3")
252 
253 
254 
255  CompLB = geompy.MakeCompound([Block1l, Block2l, Block3l])
256  Handle = geompy.MakeGlueFaces(CompLB, 1e-5)
257  id_handle = geompy.addToStudy(Handle, "Handle")
258 
259  Block1h = geompy.GetBlockNearPoint(Handle, p_45_110_1)
260  id_block1h = geompy.addToStudyInFather(Handle, Block1h, "Block 1 of Handle")
261 
262  Block2h = geompy.GetBlockNearPoint(Handle, p_65_110_1)
263  id_block2h = geompy.addToStudyInFather(Handle, Block2h, "Block 2 of Handle")
264 
265  Face11h = geompy.GetFaceByNormale(Block1h, vx)
266  id_face11h = geompy.addToStudyInFather(Block1h, Face11h, "Face 1")
267 
268  Face12h = geompy.GetOppositeFace(Block1h, Face11h)
269  id_face12h = geompy.addToStudyInFather(Block1h, Face12h, "Face 2")
270 
271  Face21h = geompy.GetFaceByNormale(Block2h, vx)
272  id_face21h = geompy.addToStudyInFather(Block2h, Face21h, "Face 1")
273 
274  Face22h = geompy.GetOppositeFace(Block2h, Face21h)
275  id_face22h = geompy.addToStudyInFather(Block2h, Face22h, "Face 2")
276 
277  try:
278  Block3h = geompy.GetBlockByParts(Handle, [Face11h, Face21h])
279  except RuntimeError:
280  try:
281  Block3h = geompy.GetBlockByParts(Handle, [Face11h, Face22h])
282  except RuntimeError:
283  try:
284  Block3h = geompy.GetBlockByParts(Handle, [Face12h, Face21h])
285  except RuntimeError:
286  try:
287  Block3h = geompy.GetBlockByParts(Handle, [Face12h, Face22h])
288  except RuntimeError:
289  print("ERROR: BlocksOp.GetBlockByParts() failed : ", geompy.BlocksOp.GetErrorCode())
290  else:
291  id_block3h = geompy.addToStudyInFather(Handle, Block3h, "Block 3 of Handle")
292 
293 
294 
295  CompALL = geompy.MakeCompound([Glue1234, Block5, Mirror1, Handle, Gear])
296  Spanner = geompy.MakeGlueFaces(CompALL, 1e-5)
297  id_glueALL = geompy.addToStudy(Spanner, "The Spanner")

298 
299 
300 
301  isCompOfBlocks6 = geompy.CheckCompoundOfBlocks(Spanner)
302  if isCompOfBlocks6 == 0:
303  print("Spanner is not a compound of hexahedral solids")
304  (NonBlocks, NonQuads) = geompy.GetNonBlocks(Spanner)
305  if NonBlocks is not None:
306  geompy.addToStudyInFather(Spanner, NonBlocks, "Group of non-hexahedral solids")
307  if NonQuads is not None:
308  geompy.addToStudyInFather(Spanner, NonQuads, "Group of non-quadrangular faces")
309  else:
310  print("Spanner is a compound of hexahedral solids")

311 
312  if isBlocksTest == 1:
313 
314  print("##################### Test More #####################")
315 
316 
317 
318  Face42_sp = geompy.GetFaceByEdges(Spanner, Edge41, Edge42)
319  id_face42_sp = geompy.addToStudyInFather(Spanner, Face42_sp, "Face 4_2")
320 
321  Blocks_f4_sp = geompy.GetBlocksByParts(Spanner, [Face42_sp])
322 
323  isMRot2D = 0
324 
325  for aBlock in Blocks_f4_sp:
326  name = geompy.SubShapeName(aBlock, Spanner)
327  Id_block = geompy.addToStudyInFather(Spanner, aBlock, name)
328 
329  f42_sp_ind = geompy.LocalOp.GetSubShapeIndex(aBlock, Face42_sp)
330 
331  Face_5_horiz = geompy.GetFaceByNormale(aBlock, vz)
332  f_5_horiz_ind = geompy.LocalOp.GetSubShapeIndex(aBlock, Face_5_horiz)
333 
334  MRot = None
335  is2Dok = True
336  try:
337  MRot = geompy.MakeMultiTransformation2D(aBlock, f42_sp_ind, 0, 3, f_5_horiz_ind, 0, 5)
338  except:
339  is2Dok = False
340  if is2Dok and MRot is not None:
341  isMRot2D = 1
342  p_z100 = geompy.MakeVertex(0., 0., 100.)
343  MRot_tr = geompy.MakeTranslationTwoPoints(MRot, p0, p_z100)
344  id_MRot_tr = geompy.addToStudy(MRot_tr, "Multi-rotated block 5")
345 
346  if isMRot2D == 0:
347  print("2D Multi Transformation failed")
348 
349 
350 
351  p_20_0_tr = geompy.MakeTranslationTwoPoints(p_20_0 , p0, p_60_150_0)
352  p_20_0_r_tr = geompy.MakeTranslationTwoPoints(p_20_0_r, p0, p_60_150_0)
353  p_40_0_tr = geompy.MakeTranslationTwoPoints(p_40_0 , p0, p_60_150_0)
354  p_40_0_r_tr = geompy.MakeTranslationTwoPoints(p_40_0_r, p0, p_60_150_0)
355 
356  Face_g_1 = geompy.GetFaceByPoints(Gear, p_20_0_tr, p_20_0_r_tr, p_40_0_tr, p_40_0_r_tr)
357  id_face_g_1 = geompy.addToStudyInFather(Gear, Face_g_1, "Face of Gear by four points")
358 
359  edgesNb = geompy.ShapesOp.NumberOfEdges(Face_g_1)
360  print("Face of Gear has ", edgesNb, " edges")
361 
362  Face_g_1_tr = geompy.MakeTranslationTwoPoints(Face_g_1, p0, pth)
363  id_face_g_1_tr = geompy.addToStudyInFather(Gear, Face_g_1_tr, "Face of Gear by four points, translated")
364 
365 
366 
367  Block_new = geompy.MakeHexa2Faces(Face_g_1, Face_g_1_tr)
368  id_block_new = geompy.addToStudy(Block_new, "Block New")
369 
370  if isMeshTest == 1 and smesh is not None:
371 
372  print("##################### Build Mesh #####################")
373 
374 
375  # ---- add a middle block of spanner handle in study
376 
377  p_45_0_1 = geompy.MakeVertex(45., 0., 1.)
378  BlockMh = geompy.GetBlockNearPoint(Spanner, p_45_0_1)
379  id_blockMh = geompy.addToStudyInFather(Spanner, BlockMh, "Middle Block of Spanner Handle")
380 
381  # ---- add the top face of the middle block in study
382 
383  FaceTop = geompy.GetFaceByNormale(BlockMh, vz)
384  id_facetop = geompy.addToStudyInFather(BlockMh, FaceTop, "Top Face")
385 
386  # ---- add long edges of the top face in study
387 
388  FaceTop_edges = geompy.SubShapeAllSortedCentres(FaceTop, geompy.ShapeType["EDGE"])
389  Edge1 = FaceTop_edges[0]
390  Edge2 = FaceTop_edges[3]
391  Id_Edge1 = geompy.addToStudyInFather(FaceTop, Edge1, "Edge 1")
392  Id_Edge2 = geompy.addToStudyInFather(FaceTop, Edge2, "Edge 2")
393 
394  print("-------------------------- Algorithm and Hypothesis")
395 
396  print("---- Init a Mesh with the Spanner")
397 
398  mesh = smesh.Mesh(Spanner, "Meshed Spanner")
399 
400  print("-------------------------- add hypothesis to Spanner")
401 
402  print("-------------------------- NumberOfSegments")
403  algoReg = mesh.Segment()
404  listHyp = algoReg.GetCompatibleHypothesis()
405  for hyp in listHyp:
406  print(hyp)
407  print(algoReg.GetName())
408  print(algoReg.GetId())
409  algoReg.SetName("Regular_1D")
410 
411 
412  hypNbSeg3 = algoReg.NumberOfSegments(3)
413  print(hypNbSeg3.GetName())
414  print(hypNbSeg3.GetId())
415  print(hypNbSeg3.GetNumberOfSegments())
416  smesh.SetName(hypNbSeg3, "NumberOfSegments_3")
417 
418  print("-------------------------- Quadrangle_2D")
419 
420  algoQuad = mesh.Quadrangle()
421  listHyp = algoQuad.GetCompatibleHypothesis()
422  for hyp in listHyp:
423  print(hyp)
424  print(algoQuad.GetName())
425  print(algoQuad.GetId())
426  algoQuad.SetName("Quadrangle_2D")
427 
428  print("-------------------------- add hypothesis to the Middle Block")
429 
430  print("-------------------------- LocalLength")
431  algoRegMb = mesh.Segment(BlockMh)
432  hypLen1 = algoRegMb.LocalLength(10)
433  print(hypLen1.GetName())
434  print(hypLen1.GetId())
435  print(hypLen1.GetLength())
436  smesh.SetName(hypLen1, "Local_Length_10")
437 
438  print("-------------------------- add hypothesis to the long edges of the Top Face of the Middle Block")
439 
440  algoRegE1 = mesh.Segment(Edge1)
441  hypPropE1 = algoRegE1.Propagation()
442  print(hypPropE1.GetName())
443  print(hypPropE1.GetId())
444  smesh.SetName(hypPropE1, "Propagation hypothesis")
445  smesh.SetName(algoRegE1.GetSubMesh(), "SubMesh Edge 1 of Top Face")
446 
447  algoRegE2 = mesh.Segment(Edge2)
448  hypPropE2 = algoRegE2.Propagation()
449  print(hypPropE2.GetName())
450  print(hypPropE2.GetId())
451  smesh.SetName(hypPropE2, "Propagation hypothesis")
452  smesh.SetName(algoRegE2.GetSubMesh(), "SubMesh Edge 2 of Top Face")
453 
454  print("-------------------------- compute the mesh")
455  mesh.Compute()
456 
457  print("Information about the Mesh:")
458  print("Number of nodes : ", mesh.NbNodes())
459  print("Number of edges : ", mesh.NbEdges())
460  print("Number of faces : ", mesh.NbFaces())
461  print("Number of triangles : ", mesh.NbTriangles())
462  print("Number of quadrangles : ", mesh.NbQuadrangles())
463  print("Number of volumes : ", mesh.NbVolumes())
464  print("Number of tetrahedrons: ", mesh.NbTetras())
465 
466  return Spanner