1 # -*- coding: utf-8 -*-
4 HYDRO_SAMPLES = os.path.join( os.environ["HYDRO_ROOT_DIR"], "bin/salome/test/HYDRO")
5 HYDRO_TEST_RESOURCES = "/home/paul/testsHydro" #os.environ("HYDRO_TEST_RESOURCES")
8 tmpdir = tempfile.mkdtemp()
9 print("tmpdir=",tmpdir)
11 # --- generated resources
13 origFileMesh = os.path.join(HYDRO_TEST_RESOURCES, 'garonne_2.med')
15 # ----------------------------------------------------------------------------------
16 # --- domain extension
23 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
28 from salome.hydrotools.changeCoords import changeCoords
30 origFileMeshTrans = os.path.join(tmpdir, 'garonne_2_trs.med')
31 changeCoords(origFileMesh, origFileMeshTrans, 2154, 2154, offsetX, offsetY, 0, 0)
33 from salome.hydrotools.cutMesh import cutMesh
35 cutFileMesh = os.path.join(tmpdir, 'garonne_2_cut.med')
36 meshFile = cutMesh(origFileMeshTrans,
37 os.path.join(HYDRO_SAMPLES, 'zoneNouvelleDigue.shp'),
38 cutFileMesh, offsetX, offsetY)
40 ficMeshOut = os.path.join(tmpdir, "garonne_2_cut_brd.med")
41 fileMeshBrd = freeBordersGroup(cutFileMesh, ficMeshOut)
42 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
44 #----------------------
46 #----------------------
49 from PyQt5.QtCore import *
50 from PyQt5.QtGui import *
52 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines, getChildrenInStudy
54 hydro_doc = HYDROData_Document.Document()
55 hydro_doc.SetLocalCS( offsetX, offsetY )
57 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_cut_brd_FreeBorders.shp"), 'garonne_2_cut_brd_FreeBorders', False, 4)
58 [nouvelle_digue] = importPolylines(hydro_doc, os.path.join(HYDRO_SAMPLES, "nouvelleDigue.shp"), 'nouvelleDigue_PolyXY', True, 4)
60 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
62 domaine_nouveau = createImmersibleZone(hydro_doc, "domaine_nouveau", limites_original[2], Cloud_02, True, 0)
64 Profile_1 = hydro_doc.CreateObject( KIND_PROFILE )
65 Profile_1.SetName( "Profile_1" )
66 profile_points = [ gp_XY( -30, -10 ),
71 Profile_1.SetParametricPoints( profile_points )
74 Polyline3D_1_Profile_1 = hydro_doc.CreateObject( KIND_PROFILE )
75 Polyline3D_1_Profile_1.SetName( "Polyline3D_1_Profile_1" )
76 profile_points = [ gp_XY( 0, 19.63 ),
77 gp_XY( 495.678, 20.18 ),
78 gp_XY( 1116.92, 20.39 ),
79 gp_XY( 1635.79, 19.66 ),
80 gp_XY( 2040.12, 20.1 ),
81 gp_XY( 2719.6, 20.76 ),
82 gp_XY( 3184.38, 21.1 ),
83 gp_XY( 4149.72, 21.47 ),
84 gp_XY( 4546.55, 26.79 ) ];
85 Polyline3D_1_Profile_1.SetParametricPoints( profile_points )
86 Polyline3D_1_Profile_1.Update()
88 Polyline3D_1 = hydro_doc.CreateObject( KIND_POLYLINE )
89 Polyline3D_1.SetName( "Polyline3D_1" )
90 Polyline3D_1.SetPolylineXY( nouvelle_digue )
91 Polyline3D_1.SetChildProfileUZ( Polyline3D_1_Profile_1.GetProfileUZ() )
92 Polyline3D_1.SetAltitudeObject( Cloud_02 )
95 Digue_1 = hydro_doc.CreateObject( KIND_DIGUE )
96 Digue_1.SetName( "Digue_1" )
97 Digue_1.SetZLevel( 5 )
98 Digue_1.SetGuideLine( Polyline3D_1 )
99 Digue_1.SetProfileMode( True )
100 Digue_1.SetProfile( Profile_1 )
101 Digue_1.SetEquiDistance( 30 )
105 domaineNouveau = hydro_doc.CreateObject( KIND_CALCULATION )
106 domaineNouveau.SetName( "domaineNouveau" )
108 domaineNouveau.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
109 domaineNouveau.AddGeometryObject( Digue_1 )
110 domaineNouveau.AddGeometryObject( domaine_nouveau )
112 case_geom_group = Digue_1.GetGroup( 2 )
113 domaineNouveau.AddGeometryGroup( case_geom_group )
114 case_geom_group = Digue_1.GetGroup( 0 )
115 domaineNouveau.AddGeometryGroup( case_geom_group )
116 case_geom_group = Digue_1.GetGroup( 3 )
117 domaineNouveau.AddGeometryGroup( case_geom_group )
118 case_geom_group = Digue_1.GetGroup( 1 )
119 domaineNouveau.AddGeometryGroup( case_geom_group )
120 case_geom_group = domaine_nouveau.GetGroup( 0 )
121 domaineNouveau.AddGeometryGroup( case_geom_group )
123 domaineNouveau.SetBoundaryPolyline( limites_original[2] )
125 # Start the algorithm of the partition and assignment
126 domaineNouveau.Update()
127 domaineNouveau_Reg_1 = hydro_doc.FindObjectByName( "domaineNouveau_Reg_1" )
128 domaineNouveau_Zone_1 = hydro_doc.FindObjectByName( "domaineNouveau_Zone_1" )
129 domaineNouveau_Zone_1.SetMergeType( HYDROData_Zone.Merge_ZMAX )
130 domaineNouveau_Zone_1.SetColor( QColor( 28, 168, 228 ))
131 domaineNouveau_Reg_1.AddZone( domaineNouveau_Zone_1 )
132 domaineNouveau_Reg_2 = hydro_doc.FindObjectByName( "domaineNouveau_Reg_2" )
133 domaineNouveau_Zone_2 = hydro_doc.FindObjectByName( "domaineNouveau_Zone_2" )
134 domaineNouveau_Zone_2.SetColor( QColor( 28, 51, 228 ))
135 domaineNouveau_Reg_2.AddZone( domaineNouveau_Zone_2 )
136 domaineNouveau_Reg_1.SetName( "domaineNouveau_Reg_1" )
137 domaineNouveau_Reg_2.SetName( "domaineNouveau_Reg_2" )
139 # Export of the calculation case
140 domaineNouveau_entry = domaineNouveau.Export()
142 ##----------------------
144 ##----------------------
147 from salome.geom import geomBuilder
151 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
153 geompy = geomBuilder.New()
155 print ("Entry:", domaineNouveau_entry)
156 HYDRO_domaineNouveau = salome.IDToObject( str( domaineNouveau_entry ) )
157 print ("Geom shape:", HYDRO_domaineNouveau)
158 print ("Geom shape name:", HYDRO_domaineNouveau.GetName())
160 #[reg_new] = geompy.SubShapeAll(HYDRO_domaineNouveau, geompy.ShapeType["FACE"])
161 children = getChildrenInStudy(HYDRO_domaineNouveau)
162 sub_digue = children['domaineNouveau_Reg_1']
163 sub_Reg_2 = children['domaineNouveau_Reg_2']
164 sub_Digue_1_Left_Bank = children['domaineNouveau_Digue_1_Left_Bank']
165 sub_Digue_1_Outlet = children['domaineNouveau_Digue_1_Outlet']
166 sub_Digue_1_Right_Bank = children['domaineNouveau_Digue_1_Right_Bank']
167 sub_domaine_nouveau_Outer = children['domaineNouveau_domaine_nouveau_Outer']
168 sub_Digue_1_Inlet = children['domaineNouveau_Digue_1_Inlet']
170 if salome.sg.hasDesktop():
171 salome.sg.updateObjBrowser()
173 #----------------------
175 #----------------------
177 import SMESH, SALOMEDS
178 from salome.smesh import smeshBuilder
179 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
181 smesh = smeshBuilder.New()
183 #--- algorithms and hypothesis
184 domaineRemaille = smesh.Mesh(HYDRO_domaineNouveau)
186 NETGEN_2D = domaineRemaille.Triangle(algo=smeshBuilder.NETGEN_1D2D)
187 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
188 NETGEN_2D_Parameters.SetMaxSize( 200 )
189 NETGEN_2D_Parameters.SetSecondOrder( 0 )
190 NETGEN_2D_Parameters.SetOptimize( 1 )
191 NETGEN_2D_Parameters.SetFineness( 4 )
192 NETGEN_2D_Parameters.SetMinSize( 5 )
193 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
194 NETGEN_2D_Parameters.SetFuseEdges( 1 )
195 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
197 Regular_1D = domaineRemaille.Segment(geom=sub_Digue_1_Outlet)
198 Number_of_Segments_1 = Regular_1D.NumberOfSegments(4)
199 Regular_1D_1 = domaineRemaille.Segment(geom=sub_Digue_1_Inlet)
200 status = domaineRemaille.AddHypothesis(Number_of_Segments_1,sub_Digue_1_Inlet)
202 Regular_1D_2 = domaineRemaille.Segment(geom=sub_Digue_1_Left_Bank)
203 Local_Length_1 = Regular_1D_2.LocalLength(50,None,1e-07)
204 Regular_1D_3 = domaineRemaille.Segment(geom=sub_Digue_1_Right_Bank)
205 status = domaineRemaille.AddHypothesis(Local_Length_1,sub_Digue_1_Right_Bank)
206 # Regular_1D_4 = domaineRemaille.Segment(geom=sub_digue)
207 # status = domaineRemaille.AddHypothesis(Local_Length_1,sub_digue)
208 QuadFromMedialAxis_1D2D = domaineRemaille.Quadrangle(algo=smeshBuilder.QUAD_MA_PROJ,geom=sub_digue)
210 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
211 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
212 Import_1D = domaineRemaille.UseExisting1DElements(geom=sub_domaine_nouveau_Outer)
213 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
215 isDone = domaineRemaille.Compute()
216 isDone = domaineRemaille.SplitQuadObject( domaineRemaille, 1 )
218 controlMeshStats(domaineRemaille, 5179, 769, 10144)
220 if salome.sg.hasDesktop():
221 salome.sg.updateObjBrowser()