1 # -*- coding: utf-8 -*-
4 HYDRO_SAMPLES = os.path.join( os.environ["HYDRO_ROOT_DIR"], "bin/salome/test/HYDRO")
5 HYDRO_TEST_RESOURCES = os.path.join(os.environ["HYDRO_DIR"], "bin", "salome", "test", "tmp_test")
8 tmpdir = tempfile.mkdtemp()
9 print("tmpdir=",tmpdir)
11 # --- generated resources
13 origFileMesh = os.path.join(HYDRO_TEST_RESOURCES, 'garonne_2.med')
14 origFileMesh2 = os.path.join(HYDRO_TEST_RESOURCES, 'garonneAmontChevauchant.med')
16 # ----------------------------------------------------------------------------------
17 # --- domain extension
24 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
29 ficMeshOut = os.path.join(tmpdir, "garonne_2_brd.med")
30 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
31 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
33 from salome.hydrotools.changeCoords import changeCoords
35 origFileMesh2Trans = os.path.join(tmpdir, 'garonneAmontChevauchant_trs.med')
36 changeCoords(origFileMesh2, origFileMesh2Trans, 2154, 2154, offsetX, offsetY, 0, 0)
38 from salome.hydrotools.cutMesh import cutMesh
40 cutFileMesh2 = os.path.join(tmpdir, 'garonneAmontChevauchant_cut.med')
41 meshFile = cutMesh(origFileMesh2Trans,
42 os.path.join(HYDRO_SAMPLES, 'coupeDomaineAmontChevauchant.shp'),
43 cutFileMesh2, offsetX, offsetY)
45 ficMeshOut2 = os.path.join(tmpdir, "garonneAmont_brd.med")
46 fileMeshBrd2 = freeBordersGroup(cutFileMesh2, ficMeshOut2)
47 exploreEdgeGroups(fileMeshBrd2, "", offsetX, offsetY)
49 #----------------------
51 #----------------------
54 from PyQt5.QtCore import *
55 from PyQt5.QtGui import *
57 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines, getChildrenInStudy
59 hydro_doc = HYDROData_Document.Document()
60 hydro_doc.SetLocalCS( offsetX, offsetY )
62 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"), True, 4)
63 limites_amont = importPolylines(hydro_doc, os.path.join(tmpdir, "garonneAmont_brd_FreeBorders.shp"), True, 5)
64 limites_domaine = importPolylines(hydro_doc, os.path.join(HYDRO_SAMPLES, "raccord_4_2.shp"), False, 3)
66 Cloud_02 = importBathymetry(hydro_doc, os.path.join(HYDRO_SAMPLES, "Cloud_02.xyz"))
68 domaine_regroup = createImmersibleZone(hydro_doc, "domaine_regroup", limites_domaine[0], Cloud_02, True, 0)
69 domaine_original = createImmersibleZone(hydro_doc, "domaine_original", limites_original[0], Cloud_02, False, 1)
70 domaine_amont = createImmersibleZone(hydro_doc, "domaine_amont", limites_amont[0], Cloud_02, False, 2)
73 domainRegroup = hydro_doc.CreateObject( KIND_CALCULATION )
74 domainRegroup.SetName( "domainRegroup" )
76 domainRegroup.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
77 domainRegroup.AddGeometryObject( domaine_amont )
78 domainRegroup.AddGeometryObject( domaine_original )
79 domainRegroup.AddGeometryObject( domaine_regroup )
81 case_geom_group = domaine_amont.GetGroup( 0 )
82 domainRegroup.AddGeometryGroup( case_geom_group )
83 case_geom_group = domaine_original.GetGroup( 0 )
84 domainRegroup.AddGeometryGroup( case_geom_group )
85 case_geom_group = domaine_regroup.GetGroup( 0 )
86 domainRegroup.AddGeometryGroup( case_geom_group )
88 domainRegroup.SetBoundaryPolyline( limites_domaine[0] )
90 # Start the algorithm of the partition and assignment
91 domainRegroup.Update()
92 domainRegroup_Reg_1 = hydro_doc.FindObjectByName( "domainRegroup_Reg_1" )
93 domainRegroup_Zone_1 = hydro_doc.FindObjectByName( "domainRegroup_Zone_1" )
94 domainRegroup_Zone_1.SetColor( QColor( 28, 51, 228 ))
95 domainRegroup_Reg_1.AddZone( domainRegroup_Zone_1 )
96 domainRegroup_Reg_2 = hydro_doc.FindObjectByName( "domainRegroup_Reg_2" )
97 domainRegroup_Zone_2 = hydro_doc.FindObjectByName( "domainRegroup_Zone_2" )
98 domainRegroup_Zone_2.SetColor( QColor( 28, 155, 228 ))
99 domainRegroup_Reg_2.AddZone( domainRegroup_Zone_2 )
100 domainRegroup_Reg_3 = hydro_doc.FindObjectByName( "domainRegroup_Reg_3" )
101 domainRegroup_Zone_3 = hydro_doc.FindObjectByName( "domainRegroup_Zone_3" )
102 domainRegroup_Zone_3.SetColor( QColor( 145, 228, 28 ))
103 domainRegroup_Reg_3.AddZone( domainRegroup_Zone_3 )
104 domainRegroup_Reg_1.SetName( "domainRegroup_Reg_1" )
105 domainRegroup_Reg_2.SetName( "domainRegroup_Reg_2" )
106 domainRegroup_Reg_3.SetName( "domainRegroup_Reg_3" )
108 # Export of the calculation case
109 domainRegroup_entry = domainRegroup.Export()
111 ##----------------------
113 ##----------------------
116 from salome.geom import geomBuilder
120 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
122 geompy = geomBuilder.New()
124 print ("Entry:", domainRegroup_entry)
125 HYDRO_domainRegroup = salome.IDToObject( str( domainRegroup_entry ) )
126 print ("Geom shape:", HYDRO_domainRegroup)
127 print ("Geom shape name:", HYDRO_domainRegroup.GetName())
129 [reg_extension] = geompy.SubShapeAll(HYDRO_domainRegroup, geompy.ShapeType["FACE"])
130 children = getChildrenInStudy(HYDRO_domainRegroup)
131 domaine_original_Outer = children["domainRegroup_domaine_original_Outer"]
132 domaine_amont_Outer = children["domainRegroup_domaine_amont_Outer"]
134 if salome.sg.hasDesktop():
135 salome.sg.updateObjBrowser()
137 #----------------------
139 #----------------------
141 import SMESH, SALOMEDS
142 from salome.smesh import smeshBuilder
143 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
145 smesh = smeshBuilder.New()
147 #--- algorithms and hypothesis
148 domaineEnglobant = smesh.Mesh(HYDRO_domainRegroup)
150 NETGEN_2D = domaineEnglobant.Triangle(algo=smeshBuilder.NETGEN_1D2D)
151 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
152 NETGEN_2D_Parameters.SetMaxSize( 200 )
153 NETGEN_2D_Parameters.SetSecondOrder( 0 )
154 NETGEN_2D_Parameters.SetOptimize( 1 )
155 NETGEN_2D_Parameters.SetFineness( 4 )
156 NETGEN_2D_Parameters.SetMinSize( 5 )
157 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
158 NETGEN_2D_Parameters.SetFuseEdges( 1 )
159 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
161 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
162 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
163 Import_1D = domaineEnglobant.UseExisting1DElements(geom=domaine_original_Outer)
164 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
166 ([origMeshBrd2], status) = smesh.CreateMeshesFromMED(fileMeshBrd2)
167 FreeBorders2 = origMeshBrd2.GetGroupByName("FreeBorders")
168 Import_1D2 = domaineEnglobant.UseExisting1DElements(geom=domaine_amont_Outer)
169 Source_Edges_2 = Import_1D2.SourceEdges( FreeBorders2 ,1,1)
171 isDone = domaineEnglobant.Compute()
173 controlMeshStats(domaineEnglobant, 9703, 1186, 19077)
175 if salome.sg.hasDesktop():
176 salome.sg.updateObjBrowser()