Salome HOME
ec543f49f5da94d69d84273d36c6bb1dbc3dc99e
[modules/hydro.git] / doc / salome / examples / h022_extensionSimpleComplete.py
1 # -*- coding: utf-8 -*-
2
3 import os
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")
6
7 import tempfile
8 tmpdir = tempfile.mkdtemp()
9 print("tmpdir=",tmpdir)
10
11 # --- generated resources
12
13 origFileMesh = os.path.join(HYDRO_TEST_RESOURCES, 'garonne_1.med')
14
15 # ----------------------------------------------------------------------------------
16 # --- domain extension
17
18 import sys
19 import salome
20
21 salome.salome_init()
22
23 from salome.hydrotools.shapesGroups import freeBordersGroup, exploreEdgeGroups, fitShapePointsToMesh
24
25 offsetX = 430000.
26 offsetY = 6350000.
27
28 ficMeshOut = os.path.join(tmpdir, "garonne_1_brd.med")
29 fileMeshBrd = freeBordersGroup(origFileMesh, ficMeshOut)
30 exploreEdgeGroups(fileMeshBrd, "", offsetX, offsetY)
31
32 #----------------------
33 # --- HYDRO
34 #----------------------
35
36 from HYDROPy import *
37 from PyQt5.QtCore import *
38 from PyQt5.QtGui import *
39
40 hydro_doc = HYDROData_Document.Document()
41 hydro_doc.SetLocalCS( offsetX, offsetY )
42
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 )
51
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 )
60
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')
66 Cloud_02.Update()
67
68
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()
76
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()
83
84 # Calculation case
85 extension = hydro_doc.CreateObject( KIND_CALCULATION )
86 extension.SetName( "extension" )
87
88 extension.SetAssignmentMode( HYDROData_CalculationCase.MANUAL )
89 extension.AddGeometryObject( domaine_englobant )
90 extension.AddGeometryObject( domaine_original )
91
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 )
96
97 extension.SetBoundaryPolyline( limite_domaine )
98
99 # Start the algorithm of the partition and assignment
100 extension.Update()
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" )
114
115 # Export of the calculation case
116 extension_entry = extension.Export()
117
118 ##----------------------
119 ## --- Geometry
120 ##----------------------
121
122 import GEOM
123 from salome.geom import geomBuilder
124 import math
125 import SALOMEDS
126
127 from salome.hydrotools.hydroGeoMeshUtils import getChildrenInStudy
128
129 geompy = geomBuilder.New()
130
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())
135
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"]
139
140 if salome.sg.hasDesktop():
141   salome.sg.updateObjBrowser()
142
143 #----------------------
144 #--- Meshing
145 #----------------------
146
147 import  SMESH, SALOMEDS
148 from salome.smesh import smeshBuilder
149 from salome.hydrotools.controls import controlMeshStats, controlSubMeshStats
150
151 smesh = smeshBuilder.New()
152
153 #--- algorithms and hypothesis
154 extensionEnglobante = smesh.Mesh(HYDRO_extension)
155
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 )
166
167 ([origMeshBrd], status) = smesh.CreateMeshesFromMED(fileMeshBrd)
168 FreeBorders = origMeshBrd.GetGroupByName("FreeBorders")
169
170 Import_1D = extensionEnglobante.UseExisting1DElements(geom=extension_domaine_original_Outer)
171 Source_Edges_1 = Import_1D.SourceEdges( FreeBorders ,1,1)
172
173 isDone = extensionEnglobante.Compute()
174
175 if salome.sg.hasDesktop():
176   salome.sg.updateObjBrowser()