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')
15 # ----------------------------------------------------------------------------------
16 # --- domain extension
23 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
28 ficMeshOut = os.path.join(tmpdir, "garonne_2_brd.med")
29 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
30 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
32 fitShapePointsToMesh(os.path.join(tmpdir, "garonne_2_brd_FreeBorders.shp"),
33 os.path.join(HYDRO_SAMPLES, 'extension_3_2.shp'),
36 #----------------------
38 #----------------------
41 from PyQt5.QtCore import *
42 from PyQt5.QtGui import *
44 from salome.hydrotools.hydroGeoMeshUtils import importPolylines, importBathymetry, createImmersibleZone, mergePolylines
46 hydro_doc = HYDROData_Document.Document()
47 hydro_doc.SetLocalCS( offsetX, offsetY )
49 limites_original = importPolylines(hydro_doc, os.path.join(tmpdir, "garonne_2_brd_FreeBorders_split.shp"), 'garonne_2_brd_FreeBorders', True, 4)
50 limites_domaine = importPolylines(hydro_doc, os.path.join(tmpdir, "extension_3_2_adj.shp"), 'extension_3_2', False, 2)
52 limite_extension = mergePolylines(hydro_doc, 'limite_extension', [limites_original[0], limites_domaine[1]])
54 Cloud_02 = importBathymetry(hydro_doc, "Cloud_02", HYDRO_SAMPLES)
56 domaine_extension = createImmersibleZone(hydro_doc, "domaine_extension", limite_extension, Cloud_02, True, 0)
59 extension = hydro_doc.CreateObject( KIND_CALCULATION )
60 extension.SetName( "extension" )
61 extension.SetAssignmentMode( HYDROData_CalculationCase.AUTOMATIC )
62 extension.AddGeometryObject( domaine_extension )
63 extension.SetBoundaryPolyline( limite_extension )
67 # extension = hydro_doc.CreateObject( KIND_CALCULATION )
68 # extension.SetName( "extension" )
69 # extension.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
70 # extension.AddGeometryObject( domaine_extension )
71 # case_geom_group = domaine_extension.GetGroup( 0 )
72 # extension.AddGeometryGroup( case_geom_group )
73 # extension.SetBoundaryPolyline( limite_extension )
74 # extension.SetStricklerTable( Strickler_table_1 )
75 # # Start the algorithm of the partition and assignment
77 # extension_Reg_1 = hydro_doc.FindObjectByName( "extension_Reg_1" )
78 # extension_Zone_1 = hydro_doc.FindObjectByName( "extension_Zone_1" )
79 # extension_Zone_1.SetColor( QColor( 105, 228, 28 ))
80 # extension_Reg_1.AddZone( extension_Zone_1 )
81 # extension_Reg_1.SetName( "Case_1_Reg_1" )
83 # Export of the calculation case
84 extension_entry = extension.Export()
86 ##----------------------
88 ##----------------------
91 from salome.geom import geomBuilder
95 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
97 geompy = geomBuilder.New()
99 print ("Entry:", extension_entry)
100 HYDRO_extension = salome.IDToObject( str( extension_entry ) )
101 print ("Geom shape:", HYDRO_extension)
102 print ("Geom shape name:", HYDRO_extension.GetName())
104 [reg_extension] = geompy.SubShapeAll(HYDRO_extension, geompy.ShapeType["FACE"])
105 #children = getChildrenInStudy(HYDRO_extension)
106 #extension_domaine_original_Outer = children["extension_domaine_original_Outer"]
107 #TODO: better identification
108 extension_domaine_original_Outer = geompy.CreateGroup(HYDRO_extension, geompy.ShapeType["EDGE"])
109 geompy.UnionIDs(extension_domaine_original_Outer, [3])
110 geompy.addToStudyInFather( HYDRO_extension, extension_domaine_original_Outer, 'extension_domaine_original_Outer' )
112 if salome.sg.hasDesktop():
113 salome.sg.updateObjBrowser()
115 #----------------------
117 #----------------------
119 import SMESH, SALOMEDS
120 from salome.smesh import smeshBuilder
121 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
123 smesh = smeshBuilder.New()
125 #--- algorithms and hypothesis
126 extensionEnglobante = smesh.Mesh(HYDRO_extension)
128 NETGEN_2D = extensionEnglobante.Triangle(algo=smeshBuilder.NETGEN_1D2D)
129 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
130 NETGEN_2D_Parameters.SetMaxSize( 200 )
131 NETGEN_2D_Parameters.SetSecondOrder( 0 )
132 NETGEN_2D_Parameters.SetOptimize( 1 )
133 NETGEN_2D_Parameters.SetFineness( 4 )
134 NETGEN_2D_Parameters.SetMinSize( 5 )
135 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
136 NETGEN_2D_Parameters.SetFuseEdges( 1 )
137 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
139 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
140 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
142 Import_1D = extensionEnglobante.UseExisting1DElements(geom=extension_domaine_original_Outer)
143 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
145 isDone = extensionEnglobante.Compute()
147 controlMeshStats(extensionEnglobante, 4303, 588, 8371)
149 if salome.sg.hasDesktop():
150 salome.sg.updateObjBrowser()