Salome HOME
Updated copyright comment
[plugins/blsurfplugin.git] / tests / remove_tiny_edges.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2024  CEA, EDF
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import salome
22
23 import GEOM
24 from salome.geom import geomBuilder
25 geompy = geomBuilder.New()
26
27 import math
28
29 tiny_edge_length = 0.1
30
31 O = geompy.MakeVertex(0, 0, 0)
32 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
33 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
34 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
35
36 Face_1 = geompy.MakeFaceHW(10, 10, 1)
37 geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
38 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 )
39 vertices = geompy.ExtractShapes(Sketch_1, geompy.ShapeType["VERTEX"], True)
40 Curve_1 = geompy.MakeInterpol(vertices, True, True)
41
42 p_small = geompy.MakeVertexOnCurve(Curve_1, 0.001)
43 geompy.addToStudy(p_small, "p_small")
44
45 part = geompy.MakePartition([Face_1], [Curve_1, p_small], Limit=geompy.ShapeType["FACE"])
46 geompy.addToStudy(part, "part")
47
48 Vx = geompy.MakeVectorDXDYDZ(1, 0, 0)
49 Vy = geompy.MakeVectorDXDYDZ(0, 1, 0)
50 Vz = geompy.MakeVectorDXDYDZ(0, 0, 1)
51
52 p1 = geompy.MakeVertex(-5, -5, 0)
53 p2 = geompy.MakeVertex(5, 5, 0)
54 left_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vx, p1, GEOM.ST_ON)
55 left = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
56 geompy.UnionList(left, left_edges)
57 geompy.addToStudyInFather(part, left, "left")
58
59 right_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vx, p2, GEOM.ST_ON)
60 right = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
61 geompy.UnionList(right, right_edges)
62 geompy.addToStudyInFather(part, right, "right")
63
64 bottom_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vy, p1, GEOM.ST_ON)
65 bottom = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
66 geompy.UnionList(bottom, bottom_edges)
67 geompy.addToStudyInFather(part, bottom, "bottom")
68
69 top_edges = geompy.GetShapesOnPlaneWithLocation(part, geompy.ShapeType["EDGE"], Vy, p2, GEOM.ST_ON)
70 top = geompy.CreateGroup(part, geompy.ShapeType["EDGE"])
71 geompy.UnionList(top, top_edges)
72 geompy.addToStudyInFather(part, top, "top")
73
74 faces = geompy.SubShapeAll(part, geompy.ShapeType["FACE"])
75 sub_shapes = []
76 for i, face in enumerate(faces):
77   geompy.addToStudyInFather(part, face, "face_%i"%(i+1))
78   sub_shapes.append(face)
79
80 # Mesh
81 # ====
82
83 import SMESH
84 from salome.smesh import smeshBuilder
85 smesh = smeshBuilder.New()
86
87 Mesh = smesh.Mesh(part, "Mesh")
88
89 algo2d = Mesh.Triangle(algo=smeshBuilder.BLSURF)
90 params = algo2d.Parameters()
91 params.SetVerbosity(1)
92 #algo2d.SetTopology(smesh.PreCAD)
93 params.SetGeometricMesh( 1 )
94 params.SetAngleMesh( 4 )
95 params.SetPhySize( 8 )
96 #algo2d.SetGradation(1.05)
97 params.SetQuadraticMesh( True )
98 params.SetRemoveTinyEdges( True )
99 params.SetTinyEdgeLength( tiny_edge_length )
100 #params.SetOptionValue( 'rectify_jacobian', '0' )
101
102 Mesh.Compute()
103
104 for sub_shape in sub_shapes:
105   Mesh.Group(sub_shape)
106
107 x0, y0, z0 = geompy.PointCoordinates(p_small)
108 node = Mesh.FindNodeClosestTo(x0, y0, z0)
109
110 elems = Mesh.GetNodeInverseElements(node)
111
112 edges_length = []
113 for elem in elems:
114     if Mesh.GetElementType(elem, True) == SMESH.EDGE:
115         edge_length = Mesh.GetLength(elem)
116         edges_length.append(edge_length)
117
118 min_length = min(edges_length)
119 x1, y1, z1 = Mesh.GetNodeXYZ(node)
120
121 print(min_length)
122
123 if min_length<tiny_edge_length:
124     raise Exception("Small edge has not been removed")
125
126 if salome.sg.hasDesktop():
127   salome.sg.updateObjBrowser()