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_1.med')
15 # ----------------------------------------------------------------------------------
16 # --- domain extension
23 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
28 ficMeshOut = os.path.join(tmpdir, "garonne_1_brd.med")
29 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
30 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
32 #----------------------
34 #----------------------
37 from PyQt5.QtCore import *
38 from PyQt5.QtGui import *
40 hydro_doc = HYDROData_Document.Document()
41 hydro_doc.SetLocalCS( offsetX, offsetY )
43 name = "garonne_1_brd_FreeBorders"
44 shape = os.path.join(tmpdir, name+".shp" )
45 HYDROData_PolylineXY.ImportShapesFromFile(shape)
46 limite_original = hydro_doc.FindObjectByName(name + '_0')
47 for i in range(limite_original.NbSections()):
48 limite_original.SetSectionType(i, 1) # spline
49 limite_original.Update()
50 limite_original.SetZLevel( 4 )
52 name = "extension_1_1"
53 shape = os.path.join(HYDRO_SAMPLES, name+".shp" )
54 HYDROData_PolylineXY.ImportShapesFromFile(shape)
55 limite_domaine = hydro_doc.FindObjectByName(name + '_PolyXY_0')
56 for i in range(limite_domaine.NbSections()):
57 limite_domaine.SetSectionType(i, 0) # polyline
58 limite_domaine.Update()
59 limite_domaine.SetZLevel( 2 )
61 Cloud_02 = hydro_doc.CreateObject( KIND_BATHYMETRY )
62 Cloud_02.SetName( "Cloud_02" )
63 Cloud_02.SetAltitudesInverted( 0 )
64 if not(Cloud_02.ImportFromFile( os.path.join(HYDRO_SAMPLES, "Cloud_02.xyz" ))):
65 raise ValueError('problem while loading bathymetry')
69 domaine_original = hydro_doc.CreateObject( KIND_IMMERSIBLE_ZONE )
70 domaine_original.SetName( "domaine_original" )
71 domaine_original.SetZLevel( 1 )
72 domaine_original.SetAltitudeObject( Cloud_02 )
73 domaine_original.SetPolyline( limite_original )
74 domaine_original.SetIsSubmersible(False)
75 domaine_original.Update()
77 domaine_englobant = hydro_doc.CreateObject( KIND_IMMERSIBLE_ZONE )
78 domaine_englobant.SetName( "domaine_englobant" )
79 domaine_englobant.SetZLevel( 0 )
80 domaine_englobant.SetAltitudeObject( Cloud_02 )
81 domaine_englobant.SetPolyline( limite_domaine )
82 domaine_englobant.Update()
85 extension = hydro_doc.CreateObject( KIND_CALCULATION )
86 extension.SetName( "extension" )
88 extension.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
89 extension.AddGeometryObject( domaine_englobant )
90 extension.AddGeometryObject( domaine_original )
92 case_geom_group = domaine_englobant.GetGroup( 0 )
93 extension.AddGeometryGroup( case_geom_group )
94 case_geom_group = domaine_original.GetGroup( 0 )
95 extension.AddGeometryGroup( case_geom_group )
97 extension.SetBoundaryPolyline( limite_domaine )
99 # Start the algorithm of the partition and assignment
101 reg_extension = hydro_doc.FindObjectByName( "extension_Reg_1" )
102 extension_Zone_1 = hydro_doc.FindObjectByName( "extension_Zone_1" )
103 extension_Zone_1.SetColor( QColor( 28, 168, 228 ))
104 reg_extension.AddZone( extension_Zone_1 )
105 reg_original = hydro_doc.FindObjectByName( "extension_Reg_2" )
106 extension_Zone_2 = hydro_doc.FindObjectByName( "extension_Zone_2" )
107 extension_Zone_2.SetMergeType( HYDROData_Zone.Merge_Object )
108 Cloud_02 = hydro_doc.FindObjectByName( "Cloud_02" )
109 extension_Zone_2.SetMergeObject( Cloud_02 )
110 extension_Zone_2.SetColor( QColor( 28, 51, 228 ))
111 reg_original.AddZone( extension_Zone_2 )
112 reg_extension.SetName( "reg_extension" )
113 reg_original.SetName( "reg_original" )
115 # Export of the calculation case
116 extension_entry = extension.Export()
118 ##----------------------
120 ##----------------------
123 from salome.geom import geomBuilder
127 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
129 geompy = geomBuilder.New()
131 print ("Entry:", extension_entry)
132 HYDRO_extension = salome.IDToObject( str( extension_entry ) )
133 print ("Geom shape:", HYDRO_extension)
134 print ("Geom shape name:", HYDRO_extension.GetName())
136 [reg_extension] = geompy.SubShapeAll(HYDRO_extension, geompy.ShapeType["FACE"])
137 children = getChildrenInStudy(HYDRO_extension)
138 extension_domaine_original_Outer = children["extension_domaine_original_Outer"]
140 if salome.sg.hasDesktop():
141 salome.sg.updateObjBrowser()
143 #----------------------
145 #----------------------
147 import SMESH, SALOMEDS
148 from salome.smesh import smeshBuilder
149 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
151 smesh = smeshBuilder.New()
153 #--- algorithms and hypothesis
154 extensionEnglobante = smesh.Mesh(HYDRO_extension)
156 NETGEN_2D = extensionEnglobante.Triangle(algo=smeshBuilder.NETGEN_1D2D)
157 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
158 NETGEN_2D_Parameters.SetMaxSize( 200 )
159 NETGEN_2D_Parameters.SetSecondOrder( 0 )
160 NETGEN_2D_Parameters.SetOptimize( 1 )
161 NETGEN_2D_Parameters.SetFineness( 4 )
162 NETGEN_2D_Parameters.SetMinSize( 5 )
163 NETGEN_2D_Parameters.SetUseSurfaceCurvature( 1 )
164 NETGEN_2D_Parameters.SetFuseEdges( 1 )
165 NETGEN_2D_Parameters.SetQuadAllowed( 0 )
167 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
168 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
170 Import_1D = extensionEnglobante.UseExisting1DElements(geom=extension_domaine_original_Outer)
171 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
173 isDone = extensionEnglobante.Compute()
175 if salome.sg.hasDesktop():
176 salome.sg.updateObjBrowser()