Salome HOME
Add full-quadrangles support, available since MeshGems v2.5
[plugins/blsurfplugin.git] / tests / test_remove_tiny_edges.py
1 # -*- coding: utf-8 -*-
2
3 import salome
4
5 import GEOM
6 from salome.geom import geomBuilder
7 geompy = geomBuilder.New(salome.myStudy)
8
9 import math
10
11 tiny_edge_length = 0.1
12
13 O = geompy.MakeVertex(0, 0, 0)
14 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
15 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
16 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
17
18 Face_1 = geompy.MakeFaceHW(10, 10, 1)
19 geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
20 Sketch_1 = geompy.MakeSketcherOnPlane("Sketcher:F -2.5209155082703 -1.4416453838348:TT -1.1105282306671 -2.9872753620148:TT 0.76354801654816 -2.3303825855255:TT 1.9614112377167 -3.0838770866394:TT 3.8354876041412 -1.2677619457245:TT 4.2218952178955 0.644955098629:TT 3.2751967906952 2.5576722621918:TT 0.58966463804245 3.5430111885071:TT -3.7380990982056 3.2338852882385:TT -4.433632850647 0.85747921466827:WW", Face_1 )
21 vertices = geompy.ExtractShapes(Sketch_1, geompy.ShapeType["VERTEX"], True)
22 Curve_1 = geompy.MakeInterpol(vertices, True, True)
23
24 p_small = geompy.MakeVertexOnCurve(Curve_1, 0.001)
25 geompy.addToStudy(p_small, "p_small")
26
27 part = geompy.MakePartition([Face_1], [Curve_1, p_small], Limit=geompy.ShapeType["FACE"])
28 geompy.addToStudy(part, "part")
29
30 Vx = geompy.MakeVectorDXDYDZ(1, 0, 0)
31 Vy = geompy.MakeVectorDXDYDZ(0, 1, 0)
32 Vz = geompy.MakeVectorDXDYDZ(0, 0, 1)
33
34 p1 = geompy.MakeVertex(-5, -5, 0)
35 p2 = geompy.MakeVertex(5, 5, 0)
36 left_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vx, p1, GEOM.ST_ON)
37 left = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
38 geompy.UnionList(left, left_edges)
39 geompy.addToStudyInFather(part, left, "left")
40
41 right_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vx, p2, GEOM.ST_ON)
42 right = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
43 geompy.UnionList(right, right_edges)
44 geompy.addToStudyInFather(part, right, "right")
45
46 bottom_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vy, p1, GEOM.ST_ON)
47 bottom = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
48 geompy.UnionList(bottom, bottom_edges)
49 geompy.addToStudyInFather(part, bottom, "bottom")
50
51 top_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vy, p2, GEOM.ST_ON)
52 top = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
53 geompy.UnionList(top, top_edges)
54 geompy.addToStudyInFather(part, top, "top")
55
56 faces = geompy.SubShapeAll(part, geompy.ShapeType["FACE"])
57 sub_shapes = []
58 for i, face in enumerate(faces):
59   geompy.addToStudyInFather(part, face, "face_%i"%(i+1))
60   sub_shapes.append(face)
61
62 # Mesh
63 # ====
64
65 import SMESH
66 from salome.smesh import smeshBuilder
67 smesh = smeshBuilder.New(salome.myStudy)
68
69 Mesh = smesh.Mesh(part, "Mesh")
70
71 algo2d = Mesh.Triangle(algo=smeshBuilder.BLSURF)
72 params = algo2d.Parameters()
73 params.SetVerbosity(1)
74 #algo2d.SetTopology(smesh.PreCAD)
75 params.SetGeometricMesh( 1 )
76 params.SetAngleMesh( 4 )
77 params.SetPhySize( 8 )
78 #algo2d.SetGradation(1.05)
79 params.SetQuadraticMesh( True )
80 params.SetRemoveTinyEdges( True )
81 params.SetTinyEdgeLength( tiny_edge_length )
82 #params.SetOptionValue( 'rectify_jacobian', '0' )
83
84 Mesh.Compute()
85
86 for sub_shape in sub_shapes:
87   Mesh.Group(sub_shape)
88
89 x0, y0, z0 = geompy.PointCoordinates(p_small)
90 node = Mesh.FindNodeClosestTo(x0, y0, z0)
91
92 elems = Mesh.GetNodeInverseElements(node)
93
94 edges_length = []
95 for elem in elems:
96     if Mesh.GetElementType(elem, True) == SMESH.EDGE:
97         edge_length = Mesh.GetLength(elem)
98         edges_length.append(edge_length)
99
100 min_length = min(edges_length)
101 x1, y1, z1 = Mesh.GetNodeXYZ(node)
102
103 print min_length
104
105 if min_length<tiny_edge_length:
106     raise Exception("Small edge has not been removed")
107
108 if salome.sg.hasDesktop():
109   salome.sg.updateObjBrowser(True)