1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2019 CEA/DEN, EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 from salome.geom import geomBuilder
25 geompy = geomBuilder.New()
29 tiny_edge_length = 0.1
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)
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)
42 p_small = geompy.MakeVertexOnCurve(Curve_1, 0.001)
43 geompy.addToStudy(p_small, "p_small")
45 part = geompy.MakePartition([Face_1], [Curve_1, p_small], Limit=geompy.ShapeType["FACE"])
46 geompy.addToStudy(part, "part")
48 Vx = geompy.MakeVectorDXDYDZ(1, 0, 0)
49 Vy = geompy.MakeVectorDXDYDZ(0, 1, 0)
50 Vz = geompy.MakeVectorDXDYDZ(0, 0, 1)
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")
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")
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")
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")
74 faces = geompy.SubShapeAll(part, geompy.ShapeType["FACE"])
76 for i, face in enumerate(faces):
77 geompy.addToStudyInFather(part, face, "face_%i"%(i+1))
78 sub_shapes.append(face)
84 from salome.smesh import smeshBuilder
85 smesh = smeshBuilder.New()
87 Mesh = smesh.Mesh(part, "Mesh")
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' )
104 for sub_shape in sub_shapes:
105 Mesh.Group(sub_shape)
107 x0, y0, z0 = geompy.PointCoordinates(p_small)
108 node = Mesh.FindNodeClosestTo(x0, y0, z0)
110 elems = Mesh.GetNodeInverseElements(node)
114 if Mesh.GetElementType(elem, True) == SMESH.EDGE:
115 edge_length = Mesh.GetLength(elem)
116 edges_length.append(edge_length)
118 min_length = min(edges_length)
119 x1, y1, z1 = Mesh.GetNodeXYZ(node)
123 if min_length<tiny_edge_length:
124 raise Exception("Small edge has not been removed")
126 if salome.sg.hasDesktop():
127 salome.sg.updateObjBrowser()