#23999 EDF 22760 - integration of dev in SMESH (from branch 'gni/adaptation')

This commit is contained in:
eap 2021-03-20 16:01:14 +03:00
commit a463e46431
47 changed files with 6813 additions and 83 deletions

View File

@ -65,7 +65,7 @@ SET(BUILD_SHARED_LIBS TRUE)
# ============
OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
OPTION(SALOME_BUILD_DOC "Generate SALOME SMESH documentation" ON)
# Advanced options:
OPTION(SALOME_BUILD_GUI "Enable GUI" ON)
OPTION(SALOME_SMESH_USE_CGNS "Enable import/export to CGNS format" OFF)
@ -146,7 +146,7 @@ IF(SALOME_BUILD_GUI)
IF(EXISTS ${GUI_ROOT_DIR})
FIND_PACKAGE(SalomeGUI)
SALOME_GUI_WITH_CORBA() #check whether GUI built with CORBA
SALOME_GUI_MODE(SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT
SALOME_GUI_MODE(SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT
OPTIONAL SALOME_USE_PLOT2DVIEWER SALOME_USE_PYCONSOLE)
##
## Prerequisites From GUI:
@ -195,6 +195,15 @@ IF(NOT WITH_SHAPER_STUDY AND SALOME_BUILD_TESTS)
MESSAGE(WARNING "SHAPERSTUDY is not found; the corresponding tests will be omitted")
ENDIF()
# Find MEDCoupling
# ================
SET(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} CACHE PATH "Path to the MEDCoupling tool")
IF(EXISTS ${MEDCOUPLING_ROOT_DIR})
FIND_PACKAGE(SalomeMEDCoupling REQUIRED) # will reload HDF5, MEDFile, XDR, etc ...
ELSE(EXISTS ${MEDCOUPLING_ROOT_DIR})
MESSAGE(FATAL_ERROR "We absolutely need the MEDCoupling tool, please define MEDCOUPLING_ROOT_DIR !")
ENDIF(EXISTS ${MEDCOUPLING_ROOT_DIR})
##
## SMESH specifics
##
@ -202,7 +211,7 @@ ENDIF()
# VTK is obligatiry for the SMESH
FIND_PACKAGE(SalomeVTK REQUIRED)
FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
IF(SALOME_SMESH_USE_CGNS)
FIND_PACKAGE(SalomeCGNS)
@ -228,7 +237,7 @@ IF(WIN32)
MESSAGE(STATUS "Build MEFISTO2D mesher using Fortran to C generator")
ELSE(${F2C_FOUND})
MESSAGE(FATAL "Fortran to C generator is not found: MEFISTO2D mesher cannot be compiled! Please define F2C_ROOT_DIR !")
ENDIF(${F2C_FOUND})
ENDIF(${F2C_FOUND})
ENDIF(WIN32)
IF(SALOME_SMESH_ENABLE_MEFISTO)
@ -247,32 +256,32 @@ SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOM
SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
"Install path: SALOME scripts")
SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
"Install path: SALOME script data")
SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
"Install path: SALOME Python scripts")
SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH
SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH
"Install path: SALOME application skeleton - scripts")
SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH
SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH
"Install path: SALOME application skeleton - Python")
SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
"Install path: SALOME Python shared modules")
SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
"Install path: local SALOME CMake files")
SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
"Install path: local SALOME CMake files")
SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
"Install path: local SALOME config files (obsolete, to be removed)")
SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
# Specific to SMESH:
SET(SALOME_SMESH_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/smesh" CACHE PATH
SET(SALOME_SMESH_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/smesh" CACHE PATH
"Install path: SALOME SMESH specific data")
SET(SALOME_SMESH_INSTALL_PLUGINS share/salome/plugins/smesh CACHE PATH
SET(SALOME_SMESH_INSTALL_PLUGINS share/salome/plugins/smesh CACHE PATH
"Install path: SALOME SMESH plugins")
MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
@ -280,13 +289,23 @@ MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
MARK_AS_ADVANCED(SALOME_INSTALL_AMCONFIG_LOCAL SALOME_INSTALL_DOC)
MARK_AS_ADVANCED(SALOME_SMESH_INSTALL_RES_DATA SALOME_SMESH_INSTALL_PLUGINS)
# Specific to ADAPT:
# SET(SALOME_ADAPT_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/adapt" CACHE PATH
# "Install path: SALOME ADAPT specific data")
SET(SALOME_ADAPT_INSTALL_SAMPLES share/salome/adaptsamples CACHE PATH
"Install path: SALOME ADAPT samples")
SET(SALOME_ADAPT_INSTALL_TEST ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test CACHE PATH
"Install path: SALOME ADAPT Test files")
SET(SALOME_ADAPT_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/adapt" CACHE PATH
"Install path: SALOME ADAPT specific data")
# Accumulate environment variables for SMESH module
SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
# Sources
# Sources
# ========
ADD_SUBDIRECTORY(idl)
@ -313,7 +332,7 @@ INCLUDE(CMakePackageConfigHelpers)
# List of targets in this project we want to make visible to the rest of the world.
# They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
SET(_${PROJECT_NAME}_exposed_targets
SET(_${PROJECT_NAME}_exposed_targets
SMESHControls MeshDriver MeshDriverDAT MeshDriverGMF MeshDriverMED
MeshDriverSTL MeshDriverUNV MEDWrapper
SMDS SMESHimpl SMESHEngine SMESHClient SMESHDS
@ -323,7 +342,7 @@ SET(_${PROJECT_NAME}_exposed_targets
IF(SALOME_SMESH_ENABLE_MEFISTO)
LIST(APPEND _${PROJECT_NAME}_exposed_targets
MEFISTO2D)
MEFISTO2D)
ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
IF(SALOME_BUILD_GUI)
@ -333,7 +352,7 @@ IF(SALOME_BUILD_GUI)
ENDIF(SALOME_BUILD_GUI)
IF(SALOME_SMESH_USE_CGNS)
LIST(APPEND _${PROJECT_NAME}_exposed_targets
LIST(APPEND _${PROJECT_NAME}_exposed_targets
MeshDriverCGNS
)
ENDIF(SALOME_SMESH_USE_CGNS)
@ -350,7 +369,7 @@ SET(GEOM_ROOT_DIR "${GEOM_ROOT_DIR}")
SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
SET(CGNS_ROOT_DIR "${CGNS_ROOT_DIR}")
SET(TBB_ROOT_DIR "${TBB_ROOT_DIR}")
SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
# Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
@ -373,5 +392,5 @@ INSTALL(FILES
DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
# Install the export set for use with the install-tree
INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
FILE ${PROJECT_NAME}Targets.cmake)

View File

@ -47,3 +47,4 @@ INSTALL(FILES CTestTestfileInstall.cmake
DESTINATION ${TEST_INSTALL_DIRECTORY}
RENAME CTestTestfile.cmake)
INSTALL(FILES tests.set DESTINATION ${TEST_INSTALL_DIRECTORY})
INSTALL(DIRECTORY MGAdapt_med_files DESTINATION ${TEST_INSTALL_DIRECTORY})

View File

@ -0,0 +1,472 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Tests des adaptations par MGAdapt en standalone
Copyright 2021 EDF
Gérald NICOLAS
+33.1.78.19.43.52
"""
__revision__ = "V04.04"
#========================= Les imports - Début ===================================
import sys
import os
import salome
salome.standalone()
salome.salome_init()
import SMESH
from salome.smesh import smeshBuilder
smesh = smeshBuilder.New()
#========================== Les imports - Fin ====================================
#========================= Paramétrage - Début ===================================
# 1. REPDATA = répertoire du cas
REPDATA = "MGAdapt_med_files"
#
# 2. Repérage des données
D_DATA = dict()
D_DATA["01"] = "01" # 2D plan ; carte locale
D_DATA["02"] = "02" # 2D plan ; carte en arrière-plan
D_DATA["03"] = "01" # 2D plan ; taille constante
D_DATA["04"] = "04" # 3D ; carte locale et dernier pas de temps
D_DATA["05"] = "04" # 3D ; carte locale et pas de temps n°1
D_DATA["06"] = "06" # 2D non plan; carte locale
D_DATA["07"] = "07" # 2D plan ; carte locale anisotrope
D_DATA["08"] = "08" # 3D ; carte en arrière-plan anisotrope
D_DATA["10"] = "10" # 2D plan ; carte locale et maillage initial quadratique
D_DATA["11"] = "11" # 2D plan ; carte locale et maillage initial en quadrangles
D_DATA["13"] = "13" # 3D ; carte locale en simple précision et dernier pas de temps
#========================== Paramétrage - Fin ====================================
class MGAdaptTest (object):
"""Test de l'adaptation par MGAdapt
Options facultatives
********************
Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
"""
# A. La base
message_info = ""
_verbose = 0
_verbose_max = 0
affiche_aide_globale = 0
# B. Les variables
l_cas = None
rep_test = None
nro_cas = None
cas = None
#=========================== Début de la méthode =================================
def __init__ ( self, liste_option ):
"""Le constructeur de la classe MGAdaptTest"""
self.l_cas = list()
for option in liste_option :
#print (option)
saux = option.upper()
#print (saux)
if saux in ( "-H", "-HELP" ):
self.affiche_aide_globale = 1
elif saux == "-V" :
self._verbose = 1
elif saux == "-VMAX" :
self._verbose = 1
self._verbose_max = 1
else :
self.l_cas.append(option)
if not self.l_cas:
for cle in D_DATA:
self.l_cas.append(cle)
self.l_cas.sort()
if self._verbose_max:
print ("Liste des cas : {}".format(self.l_cas))
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def __del__(self):
"""A la suppression de l'instance de classe"""
if self._verbose_max:
print ("Suppression de l'instance de la classe.")
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _add_file_in (self, objet_adapt):
"""Ajout du fichier med d'entrée
Entrées/Sorties :
:objet_adapt: l'objet du module
"""
if self._verbose_max:
print ("_add_file_in pour {}".format(self.nro_cas))
ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
if self._verbose_max:
print ("Fichier {}".format(ficmed))
if not os.path.isfile(ficmed):
erreur = 1
message = "Le fichier {} est inconnu.".format(ficmed)
else:
objet_adapt.setMEDFileIn(ficmed)
erreur = 0
message = ""
return erreur, message
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _add_file_out (self, objet_adapt):
"""Ajout du fichier de sortie
Entrées/Sorties :
:objet_adapt: l'objet du module
"""
if self._verbose_max:
print ("_add_file_out pour {}".format(self.nro_cas))
ficmed = os.path.join (REPDATA, "test_{}.adapt.tui.med".format(self.nro_cas))
if os.path.isfile(ficmed):
os.remove(ficmed)
objet_adapt.setMEDFileOut(ficmed)
if self._verbose:
print (". Maillage adapté dans le fichier {}".format(ficmed))
return
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _add_file_bkg (self, objet_adapt):
"""Ajout du fichier med de fond
Entrées/Sorties :
:objet_adapt: l'objet du module
"""
if self._verbose_max:
print ("_add_file_bkg pour {}".format(self.nro_cas))
ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
if self._verbose_max:
print ("Fichier {}".format(ficmed))
if not os.path.isfile(ficmed):
erreur = 1
message = "Le fichier {} est inconnu.".format(ficmed)
else:
objet_adapt.setMEDFileBackground(ficmed)
erreur = 0
message = ""
return erreur, message
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _hypo_creation (self, maptype, option, niveau=3):
"""Création d'une hypothèse
Entrées :
:maptype: type de carte : "Local", "Background", "Constant"
:option: nom du champ si "Local" ou "Background", valeur si "Constant"
:niveau: niveau de verbosité
Sortie :
:hypo: l'objet hypothèse
"""
if self._verbose_max:
print ("_hypo_creation pour {} avec {}".format(maptype,option))
erreur = 0
message = ""
while not erreur :
#--- Création de l'hypothèse ---
hypo = smesh.CreateAdaptationHypothesis()
# Type de données
if ( maptype in ("Local", "Background", "Constant") ):
hypo.setSizeMapType(maptype)
else:
message = "Le type de carte {} est inconnu.".format(maptype)
erreur = 2
break
# Valeur
if ( maptype in ("Local", "Background") ):
hypo.setSizeMapFieldName(option)
else:
hypo.setConstantSize(option)
# Verbosité
self._hypo_verbose (hypo, niveau)
break
return erreur, message, hypo
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _hypo_verbose (self, hypo, niveau=10):
"""Débogage des hypothèses
Entrées :
:niveau: niveau de verbosité
Entrées/Sorties :
:hypo: l'objet hypothèse
"""
hypo.setVerbosityLevel(niveau)
if self._verbose_max:
hypo.setPrintLogInFile(True)
hypo.setKeepWorkingFiles(True)
hypo.setRemoveOnSuccess(False)
return
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _calcul (self, objet_adapt, hypo):
"""Calcul
Entrées :
:objet_adapt: l'objet du module
:hypo: l'objet hypothèse
"""
#--- association de l'hypothese à l'objet de l'adaptation
objet_adapt.AddHypothesis(hypo)
#-- Calcul
if self._verbose_max:
print (hypo.getCommandToRun())
erreur = objet_adapt.Compute(False)
if erreur:
message = "Echec dans l'adaptation."
else:
message = ""
return erreur, message
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _test_00 (self, objet_adapt):
"""Test générique
Entrées/Sorties :
:objet_adapt: l'objet du module
"""
erreur = 0
message = ""
while not erreur :
#--- les fichiers MED ---#
erreur, message = self._add_file_in (objet_adapt)
if erreur:
break
self._add_file_out (objet_adapt)
if self.nro_cas in ("02", "08"):
erreur, message = self._add_file_bkg (objet_adapt)
if erreur:
break
#--- Création de l'hypothèse ---
if self.nro_cas in ("01", "04", "05", "06", "07", "10", "11", "13"):
maptype = "Local"
if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
option = "TAILLE"
elif self.nro_cas in ("11",):
option = "Taille de maille"
elif self.nro_cas in ("13",):
option = "Elevation"
elif self.nro_cas in ("02", "08"):
maptype = "Background"
option = "TAILLE"
elif self.nro_cas in ("03",):
maptype = "Constant"
option = 0.5
if self._verbose:
niveau = 3
elif self._verbose_max:
niveau = 10
else:
niveau = 0
erreur, message, hypo = self._hypo_creation(maptype, option, niveau)
if erreur:
break
#-- Ajout des options
if self.nro_cas in ("04", "06", "07", "08", "10", "11"):
hypo.setTimeStepRankLast()
elif self.nro_cas in ("05",):
hypo.setTimeStepRank(1,1)
elif self.nro_cas in ("13",):
hypo.setTimeStepRank(0,0)
# options facultatives
if self.nro_cas in ("03",):
hypo.setOptionValue("adaptation", "surface")
#-- Calcul
try :
erreur, message = self._calcul (objet_adapt, hypo)
except :
erreur = 1871
message = "Erreur dans le calcul par SMESH"
break
return erreur, message
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def _traitement_cas (self ):
"""Traitement d'un cas
Sorties :
:erreur: code d'erreur
:message: message d'erreur
"""
nom_fonction = __name__ + "/_traitement_cas"
blabla = "\nDans {} :".format(nom_fonction)
if self._verbose_max:
print (blabla)
# 1. Préalables
erreur = 0
message = ""
if self._verbose:
print ("Passage du cas '{}'".format(self.nro_cas))
if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" ,"11" ,"13") ):
objet_adapt = smesh.Adaptation('MG_Adapt')
erreur, message = self._test_00 (objet_adapt)
del objet_adapt
else:
erreur = 1
message = "Le cas '{}' est inconnu.".format(self.nro_cas)
return erreur, message
#=========================== Fin de la méthode ==================================
#=========================== Début de la méthode =================================
def lancement (self):
"""Lancement
Sorties :
:erreur: code d'erreur
:message: message d'erreur
"""
nom_fonction = __name__ + "/lancement"
blabla = "\nDans {} :".format(nom_fonction)
erreur = 0
message = ""
if self._verbose_max:
print (blabla)
for nom_cas in self.l_cas:
self.nro_cas = nom_cas
erreur_t, message_t = self._traitement_cas ()
if erreur_t:
erreur += 1
message += "\nErreur n° {} pour le cas {} :\n".format(erreur_t,nom_cas)
message += message_t
if ( erreur and self._verbose_max ):
print (blabla, message)
return erreur, message
#=========================== Fin de la méthode ==================================
#========================== Fin de la classe ====================================
#==================================================================================
# Lancement
#==================================================================================
if __name__ == "__main__" :
# 1. Options
L_OPTIONS = list()
#L_OPTIONS.append("-h")
#L_OPTIONS.append("-v")
#L_OPTIONS.append("-vmax")
L_OPTIONS.append("01")
L_OPTIONS.append("02")
L_OPTIONS.append("03")
L_OPTIONS.append("07")
L_OPTIONS.append("10")
L_OPTIONS.append("11")
L_OPTIONS.append("04")
L_OPTIONS.append("05")
L_OPTIONS.append("06")
L_OPTIONS.append("08")
#L_OPTIONS.append("13")
# 2. Lancement de la classe
#print ("L_OPTIONS :", L_OPTIONS)
MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
if MGADAPT_TEST.affiche_aide_globale:
sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
else:
ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
if ERREUR:
sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
sys.stderr.write(MESSAGE_ERREUR)
#raise Exception(MESSAGE_ERREUR)
assert(False)
del MGADAPT_TEST
#sys.exit(0)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -45,6 +45,7 @@ SET(BAD_TESTS
radial_prism_3d_algo.py
test_smeshplugin_mg_tetra_parallele.py
test_smeshplugins.py
MGAdaptTests_without_session.py
)
SET(GOOD_TESTS

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,38 @@
.. _adaptation_page:
**********
Adaptation
**********
Mesh module provides the possibility to perform different adaptations of a mesh.
.. note::
A mesh adaptation based on splitting is available by the HOMARD module.
.. _mg_adapt_anchor:
MG_Adapt
########
For meshes made of triangles and/or tetrahedra, remeshing operations are available with the MG-Adapt plugin. The remeshing is based on wanted mesh sizes defined over the mesh or as a constant. The boundaries are dedeuced from the initial mesh.
To start **Remeshing** operation, select **MG Adapt** tab in **Adaptation** dialog.
.. image:: ../images/adaptation_01.png
:align: center
* **Mesh In** is the initial mesh to remesh.
* **Mesh Out** is the resulting mesh after remeshing. By default, the name of the initial mesh is kept and the file name is based on the name of the initial mesh.
* **Size map definition** is a choice between **Local**, **Background** and **Constant**.
- If the choice is **Background**, the name of the MED file must be given.
- If the choice is **Local** or **Background**, the name of the field must be selected from the list, together with time step.
.. image:: ../images/adaptation_02.png
:align: center
.. note::
The exhaustive description of MG-Adapt can be read into its documentation. It can be reached by the general help button.
**See Also** a sample TUI Script of :ref:`tui_adaptation_page`.

View File

@ -14,15 +14,16 @@ Introduction to Mesh module
* :ref:`creating meshes <about_meshes_page>` in different ways:
* by meshing geometrical models previously created or imported by the Geometry component;
* by meshing geometrical models previously created or imported by the Geometry component;
* bottom-up, using :ref:`mesh edition <modifying_meshes_page>`, especially :ref:`extrusion <extrusion_page>` and :ref:`revolution <revolution_page>`;
* by generation of the 3D mesh from the 2D mesh not based on the geometry (:ref:`imported <importing_exporting_meshes_page>` for example);
* by generation of the 3D mesh from the 2D mesh not based on the geometry (:ref:`imported <importing_exporting_meshes_page>` for example);
* :ref:`importing and exporting meshes <importing_exporting_meshes_page>` in various formats;
* :ref:`modifying meshes <modifying_meshes_page>` with a vast array of dedicated operations;
* :ref:`modifying meshes <modifying_meshes_page>` with a vast array of dedicated operations;
* :ref:`creating groups <grouping_elements_page>` of mesh elements;
* filtering mesh entities (nodes or elements) using :ref:`Filters <filters_page>` functionality for :ref:`creating groups <grouping_elements_page>` and applying :ref:`mesh modifications <modifying_meshes_page>`;
* :ref:`viewing meshes <viewing_meshes_overview_page>` in the VTK viewer and :ref:`getting info <mesh_infos_page>` on mesh and its sub-objects;
* :ref:`remeshing meshes <adaptation_page>`;
* applying to meshes :ref:`Quality Controls <quality_page>`, allowing to highlight important elements;
* taking various :ref:`measurements <measurements_page>` of the mesh objects.
@ -35,7 +36,7 @@ It is possible to use the variables predefined in :ref:`Salome notebook <using_n
Mesh module preferences are described in the :ref:`mesh_preferences_page` section of SALOME Mesh Help.
.. image:: ../images/image7.jpg
:align: center
:align: center
.. centered::
Example of MESH module usage for engineering tasks
@ -52,9 +53,10 @@ Mesh module preferences are described in the :ref:`mesh_preferences_page` sectio
grouping_elements
about_filters
about_quality_controls
adaptation
measurements
viewing_meshes_overview
smeshpy_interface
tools
tools
mesh_preferences
using_notebook_smesh_page

View File

@ -23,7 +23,7 @@ meshes. It can be used to create an empty mesh or to import mesh from the data f
As soon as a mesh is created, it is possible to manage it via its own
methods, described in class :class:`smeshBuilder.Mesh` documentation.
Class :class:`smeshstudytools.SMeshStudyTools` provides several methods to manipulate mesh objects in Salome study.
Class :class:`smeshstudytools.SMeshStudyTools` provides several methods to manipulate mesh objects in Salome study.
A usual workflow to generate a mesh on geometry is following:
@ -54,14 +54,14 @@ A usual workflow to generate a mesh on geometry is following:
maxArea = mefisto.LocalLength( 100. )
netgen.SetMaxSize( 20. )
netgen.SetFineness( smeshBuilder.VeryCoarse )
#. :ref:`Compute the mesh <compute_anchor>` (generate mesh nodes and elements):
.. code-block:: python
mesh.Compute()
An easiest way to start with Python scripting is to do something in
GUI and then to get a corresponding Python script via
GUI and then to get a corresponding Python script via
**File > Dump Study** menu item. Don't forget that you can get
all methods of any object in hand (e.g. a mesh group or a hypothesis)
by calling *dir()* Python built-in function.
@ -95,6 +95,7 @@ the following links:
tui_transforming_meshes
tui_viewing_meshes
tui_quality_controls
tui_adaptation
tui_measurements
tui_work_on_objects_from_gui
tui_notebook_smesh

View File

@ -0,0 +1,18 @@
.. _tui_adaptation_page:
**********
Adaptation
**********
.. _tui_mg_adapt:
MG_Adapt
========
.. literalinclude:: ../../../examples/adaptation_ex01.py
:language: python
:download:`Download this script <../../../examples/adaptation_ex01.py>`
**See Also** the GUI :ref:`adaptation_page`.

View File

@ -36,6 +36,7 @@ SET(SalomeIDLSMESH_IDLSOURCES
SMESH_Pattern.idl
SMESH_MeshEditor.idl
SMESH_Measurements.idl
MG_ADAPT.idl
)
SET(_idl_include_dirs

152
idl/MG_ADAPT.idl Normal file
View File

@ -0,0 +1,152 @@
// Copyright (C) 2011-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/
//
// File : MG_ADAPT.hxx
//
#ifndef MG_ADAPT_IDL
#define MG_ADAPT_IDL
#include "SALOME_Component.idl"
#include "SALOME_Exception.idl"
#include "SALOME_GenericObj.idl"
#include "SALOMEDS.idl"
#include "SMESH_Mesh.idl"
module SMESH{
typedef sequence<string> str_array ;
struct MgAdaptHypothesisData
{
string myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
myMeshFileOut, myFileOutDir, myFileSizeMapDir, myFieldName;
boolean fromMedFile;
boolean myPublish, myMeshOutMed;
boolean myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
double myConstantValue;
long myRank, myTimeStep;
boolean myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
string myWorkingDir, myLogFile;
boolean myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
long myVerboseLevel;
};
interface MG_ADAPT : SALOME::GenericObj
{
//MG_ADAPT CreateMG_ADAPT(in PortableServer::POA_var poa);
void setData( inout MgAdaptHypothesisData data);
void setMedFileIn(in string MedFileIn );
string getMedFileIn();
void setMedFileOut(in string MedFileOut);
string getMedFileOut();
void setMeshName(in string s);
string getMeshName();
void setMeshNameOut(in string s);
string getMeshNameOut();
void setMeshOutMed(in boolean b);
boolean getMeshOutMed();
void setPublish(in boolean b);
boolean getPublish();
void setSizeMapFieldName(in string s);
string getSizeMapFieldName();
void setTimeStep(in long s);
long getTimeStep() ;
void setTimeStepRank(in long s, in long f);
long getRank();
void setTimeStepRankLast();
void setNoTimeStep();
void setLogFile(in string f);
string getLogFile();
void setVerbosityLevel(in long f);
long getVerbosityLevel();
void setRemoveOnSuccess(in boolean f);
boolean getRemoveOnSuccess();
MgAdaptHypothesisData getData();
void setUseLocalMap(in boolean f);
boolean getUseLocalMap();
void setUseBackgroundMap(in boolean f);
boolean getUseBackgroundMap();
void setUseConstantValue(in boolean f);
boolean getUseConstantValue();
void setConstantSize(in double f);
double getConstantSize() ;
void setSizeMapFile(in string f);
string getSizeMapFile();
void setFromMedFile(in boolean f);
boolean isFromMedFile();
void setKeepWorkingFiles(in boolean f);
boolean getKeepWorkingFiles();
void setPrintLogInFile(in boolean f);
boolean getPrintLogInFile();
void setWorkingDir(in string f);
string getWorkingDir() ;
void setSizeMapType(in string f);
boolean setAll();
string getCommandToRun() ;
void compute() raises(SALOME::SALOME_Exception);
string getErrMsg();
string getFileName() ;
string getExeName();
void copyMgAdaptHypothesisData(in MgAdaptHypothesisData f ) ;
//void checkDirPath(inout string f);
boolean hasOptionDefined( in string optionName ) ;
void setOptionValue(in string optionName, in string optionValue) raises (SALOME::SALOME_Exception);
string getOptionValue(in string optionName, inout boolean isDefault) raises (SALOME::SALOME_Exception);
str_array getCustomOptionValuesStrVec() ;
str_array getOptionValuesStrVec() ;
};
typedef MG_ADAPT MG_ADAPT_HYPOTHESIS;
interface MG_ADAPT_OBJECT : SALOME::GenericObj
{
void setMeshIn(in SMESH_Mesh theMesh ) raises (SALOME::SALOME_Exception);
void setMEDFileIn(in string f) raises (SALOME::SALOME_Exception);
void setMEDFileOut(in string f) raises (SALOME::SALOME_Exception);
void setMEDFileBackground(in string f) raises (SALOME::SALOME_Exception);
void AddHypothesis(in MG_ADAPT mg) raises (SALOME::SALOME_Exception);
long Compute(in boolean Publish) raises (SALOME::SALOME_Exception);
};
};
#endif // MG_ADAPT_IDL

View File

@ -43,6 +43,8 @@ module SMESH
interface FilterManager;
interface SMESH_Pattern;
interface Measurements;
interface MG_ADAPT;
interface MG_ADAPT_OBJECT;
/*!
* Tags definition
@ -136,7 +138,6 @@ module SMESH
SMESH_Pattern GetPattern();
Measurements CreateMeasurements();
/*!
Set the current mode
*/
@ -584,7 +585,10 @@ module SMESH
in GEOM::GEOM_Object theGeom,
in double theTolerance );
MG_ADAPT CreateMG_ADAPT();
MG_ADAPT_OBJECT Adaptation(in string adaptType);
MG_ADAPT CreateAdaptationHypothesis();
};
};

View File

@ -22,6 +22,7 @@
SET(SMESH_RESOURCES_FILES
ModuleMesh.png
adapt_mg_adapt.png
advanced_mesh_info.png
bare_border_face.png
bare_border_volume.png

View File

@ -98,6 +98,11 @@
<parameter name="vol_precision" value="-6" />
<parameter name="selection_increment" value="0" />
<parameter name="controls_increment" value="2" />
<!-- Adaptation -->
<parameter name="mg_adapt_file_mesh_out" value="true" />
<parameter name="mg_adapt_publish_mesh_out" value="false" />
<parameter name="mg_adapt_size_map" value="Local" />
<parameter name="mg_adapt_time_step" value="None" />
</section>
<section name="smesh_help" >
<parameter name="User's Guide/Mesh module/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/index.html"/>
@ -106,6 +111,9 @@
<parameter name="User's Guide/Mesh module/Plug-ins/MacMesh plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MacMesh/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MacMesh/index.html"/>
<parameter name="User's Guide/Mesh module/Plug-ins/blocFissure plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/blocFissure/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/blocFissure/index.html"/>
<parameter name="User's Guide/Mesh module/Plug-ins/SpherePadder plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/padder/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/padder/index.html"/>
<parameter name="User's Guide/Mesh module/MG-Adapt plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html#adaptation;;http://docs.salome-platform.org/latest/gui/SMESH/index.html#adaptation"/>
<parameter name="User's Guide/Mesh module/MG-Adapt plugin/Reference" value="%MESHGEMS_ROOT_DIR%/Docs/mg-adapt_api_manual.pdf"/>
<parameter name="User's Guide/Mesh module/MG-Adapt plugin/Manual" value="%MESHGEMS_ROOT_DIR%/Docs/mg-adapt_user_manual.pdf"/>
<parameter name="User's Guide/Mesh module/MGCleaner plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MGCleaner/index.html"/>
<parameter name="User's Guide/Mesh module/MGCleaner plugin/Reference" value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_api_manual.pdf"/>
<parameter name="User's Guide/Mesh module/MGCleaner plugin/Manual" value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_user_manual.pdf"/>

BIN
resources/adapt_mg_adapt.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -51,7 +51,7 @@ ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
# CGNS
##
IF(SALOME_SMESH_USE_CGNS)
SET(SUBDIRS_CGNS
SET(SUBDIRS_CGNS
DriverCGNS
)
ENDIF(SALOME_SMESH_USE_CGNS)
@ -60,9 +60,9 @@ ENDIF(SALOME_SMESH_USE_CGNS)
# GUI
##
IF(SALOME_BUILD_GUI)
SET(SUBDIRS_GUI OBJECT
SMESHFiltersSelection
SMESHGUI
SET(SUBDIRS_GUI OBJECT
SMESHFiltersSelection
SMESHGUI
PluginUtils
SMESH_SWIG_WITHIHM
StdMeshersGUI

View File

@ -38,6 +38,7 @@ INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/src/SMDS
${PROJECT_SOURCE_DIR}/src/SMESHDS
${PROJECT_SOURCE_DIR}/src/SMESHUtils
${MEDCOUPLING_INCLUDE_DIRS}
)
# additional preprocessor / compiler flags
@ -67,6 +68,7 @@ SET(_link_LIBRARIES
MeshDriverUNV
MeshDriverGMF
${DriverCGNS_LIB}
${MEDCoupling_medloader}
)
# --- headers ---
@ -86,6 +88,7 @@ SET(SMESHimpl_HEADERS
SMESH_MesherHelper.hxx
SMESH_ProxyMesh.hxx
SMESH_SMESH.hxx
MG_ADAPT.hxx
)
# --- sources ---
@ -104,6 +107,7 @@ SET(SMESHimpl_SOURCES
SMESH_HypoFilter.cxx
SMESH_ProxyMesh.cxx
SMESH_MesherHelper.cxx
MG_ADAPT.cxx
)
# --- rules ---

1575
src/SMESH/MG_ADAPT.cxx Normal file

File diff suppressed because it is too large Load Diff

340
src/SMESH/MG_ADAPT.hxx Normal file
View File

@ -0,0 +1,340 @@
// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : MG_ADAPT.hxx
//
#ifndef MG_ADAPT_HXX
#define MG_ADAPT_HXX
#include <string>
# include <sstream>
#include <map>
#include <vector>
#include <set>
#include <fstream>
#include "MCAuto.hxx"
#include "MCType.hxx"
#include "MEDFileMesh.hxx"
#include <med.h>
// SMESH includes
//~#include <med.h>
std::string remove_extension(const std::string& filename);
namespace MG_ADAPT{
class MgAdapt;
typedef std::map< std::string, std::string > TOptionValues;
typedef std::set< std::string > TOptionNames;
struct MgAdaptHypothesisData
{
std::string myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
myMeshFileOut, myFileOutDir, myFileSizeMapDir, myFieldName;
bool fromMedFile;
bool myPublish, myMeshOutMed;
bool myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
double myConstantValue;
int myRank, myTimeStep;
bool myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
std::string myWorkingDir, myLogFile;
bool myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
int myVerboseLevel;
};
class outFileStream : public std::ofstream{
public:
~outFileStream(){close();} //to close file at dtor
};
/*!
* \brief Class to generate string from any type
*/
class ToComment : public std::string
{
std::ostringstream _s ;
public :
ToComment():std::string("") {}
ToComment(const ToComment& c):std::string() {
_s << c.c_str() ;
this->std::string::operator=( _s.str() );
}
ToComment & operator=(const ToComment& c) {
_s << c.c_str() ;
this->std::string::operator=( _s.str() );
return *this;
}
template <class T>
ToComment( const T &anything ) {
_s << anything ;
this->std::string::operator=( _s.str() );
}
template <class T>
ToComment & operator<<( const T &anything ) {
_s << anything ;
this->std::string::operator=( _s.str() );
return *this ;
}
operator char*() const {
return (char*)c_str();
}
std::ostream& Stream() {
return _s;
}
};
class MgAdapt
{
public:
MgAdapt();
MgAdapt(MgAdaptHypothesisData*);
MgAdapt(const MgAdapt&);
~MgAdapt();
void buildModel();
void setData( MgAdaptHypothesisData* data);
void setMedFileIn(std::string fileName);
std::string getMedFileIn();
void setMedFileOut(std::string fileOut);
std::string getMedFileOut();
void setMeshName(std::string name);
std::string getMeshName();
void setMeshNameOut(std::string name);
std::string getMeshNameOut();
void setMeshOutMed(bool mybool);
bool getMeshOutMed();
void setPublish(bool mybool);
bool getPublish();
void setFieldName(std::string myFieldName);
std::string getFieldName();
void setTimeStep(int time);
int getTimeStep() const;
void setRankTimeStep(int time, int myRank);
int getRank();
void setTimeStepRankLast();
void setNoTimeStep();
void setChosenTimeStepRank();
void updateTimeStepRank();
void setLogFile(std::string);
std::string getLogFile();
void setVerbosityLevel(int verbosity);
int getVerbosityLevel();
void setRemoveOnSuccess(bool mybool);
bool getRemoveOnSuccess();
MgAdaptHypothesisData* getData() const;
void setUseLocalMap(bool mybool);
bool getUseLocalMap();
void setUseBackgroundMap(bool mybool);
bool getUseBackgroundMap();
void setUseConstantValue(bool mybool);
bool getUseConstantValue();
void setConstantValue(double cnst);
double getConstantValue() const;
void setSizeMapFile(std::string mapFile);
std::string getSizeMapFile();
void setFromMedFile(bool mybool);
bool isFromMedFile();
void setKeepWorkingFiles(bool mybool);
bool getKeepWorkingFiles();
void setPrintLogInFile(bool mybool);
bool getPrintLogInFile();
void setWorkingDir(std::string dir);
std::string getWorkingDir() const;
bool setAll();
static std::string getCommandToRun(MgAdapt* );
std::string getCommandToRun() ;
int compute(std::string& errStr);
std::string getFileName() const;
static std::string getExeName();
void copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from) ;
void checkDirPath(std::string& dirPath);
bool hasOptionDefined( const std::string& optionName ) const;
void setOptionValue(const std::string& optionName,
const std::string& optionValue) throw (std::invalid_argument);
std::string getOptionValue(const std::string& optionName,
bool* isDefault=0) const throw (std::invalid_argument);
std::vector <std::string> getCustomOptionValuesStrVec() const;
std::vector <std::string> getOptionValuesStrVec() const;
TOptionValues getOptionValues() const;
const TOptionValues& getCustomOptionValues() const ;
static double toDbl(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static bool toBool(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument);
static std::string toLowerStr(const std::string& str);
/* default values */
static std::string defaultWorkingDirectory();
static std::string defaultLogFile();
static bool defaultKeepFiles();
static bool defaultRemoveLogOnSuccess();
static int defaultVerboseLevel();
static bool defaultPrintLogInFile();
static bool defaultFromMedFile();
static bool defaultMeshOutMed();
static bool defaultPublish();
static bool defaultUseLocalMap();
static bool defaultUseBackgroundMap();
static bool defaultUseConstantValue();
static bool defaultUseNoTimeStep();
static bool defaultUseLastTimeStep();
static bool defaultUseChosenTimeStep();
static double defaultMaximumMemory();
static bool isFileExist(const std::string& fName);
enum Status {
DRS_OK,
DRS_EMPTY, // a file contains no mesh with the given name
DRS_WARN_RENUMBER, // a file has overlapped ranges of element numbers,
// so the numbers from the file are ignored
DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
DRS_FAIL, // general failure (exception etc.)
DRS_NO_TIME_STEP // general failure (exception etc.)
};
struct group {
std::string _name;
std::vector<MEDCoupling::mcIdType> _famListId;
std::vector<std::string> _famNames;
group(std::string name, std::vector<MEDCoupling::mcIdType> famListId, std::vector<std::string> famNames):_name(name)
{
std::vector<MEDCoupling::mcIdType>::iterator it = famListId.begin();
for (; it!=famListId.end(); ++it)
_famListId.push_back(*it);
std::vector<std::string>::iterator itt = famNames.begin();
for (; itt!=famNames.end(); ++itt)
_famNames.push_back(*itt);
}
};
struct family {
std::string _famName;
mcIdType _famId;
family(std::string famName, MEDCoupling::mcIdType famId):_famName(famName), _famId(famId) {}
};
private :
bool fromMedFile;
std::string medFileIn;
std::string medFileOut;
std::string meshName;
std::string meshNameOut;
bool publish, meshOutMed;
bool useLocalMap, useBackgroundMap, useConstantValue;
bool myUseLastTimeStep, myUseNoTimeStep, myUseChosenTimeStep;
std::string sizeMapFile;
std::string fieldName;
double constantValue;
int rank, timeStep;
/* advanced options */
std::string logFile;
std::string workingDir;
int verbosityLevel;
bool removeOnSuccess;
bool toKeepWorkingFiles;
bool printLogInFile;
/* Model DATA */
MgAdaptHypothesisData* data;
/* */
TOptionValues _option2value, _customOption2value; // user defined values
TOptionValues _defaultOptionValues; // default values
TOptionNames _doubleOptions, _charOptions, _boolOptions; // to find a type of option
std::vector <std::string> _myErrorMessages;
Status _myStatus;
std::string meshFormatOutputMesh;
std::vector< std::string> solFormatOutput;
std::vector <group> groupVec;
std::vector <family> famVec;
std::vector< std::string> tmpFilesToBeDeleted;
/* convert MED-->.mesh format */
void convertMedFile(std::string& meshIn,std::string& solFileIn, std::string& sizeMapIn) ;
void storeGroups(MEDCoupling::MEDFileMesh* fileMesh);
void restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const;
void storefams(MEDCoupling::MEDFileMesh* fileMesh);
void restorefams(MEDCoupling::MEDFileMesh* fileMesh) const;
void storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh);
void restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const;
void convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const ;
void buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const mcIdType nbNodes) const;
void buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const;
void getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit);
Status addMessage(const std::string& msg, const bool isFatal = false);
med_idt openMedFile(const std::string aFile) ;
void execCmd( const char* cmd, int& err);
void cleanUp();
void appendMsgToLogFile(std::string& msg);
std::vector<std::string> getListFieldsNames(std::string fileIn) ;
void checkDimensionOptionAdaptation() ;
void checkFieldName(std::string fileIn) ;
void checkTimeStepRank(std::string fileIn) ;
};
}
#endif // MG_ADAPT_HXX

View File

@ -45,6 +45,7 @@ INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/src/SMESH_I
${PROJECT_BINARY_DIR}
${PROJECT_BINARY_DIR}/idl
${MEDCOUPLING_INCLUDE_DIRS}
)
# additional preprocessor / compiler flags
@ -75,6 +76,7 @@ SET(_link_LIBRARIES
SMESHControls
SMESHObject
SMESHEngine
${MEDCoupling_medloader}
)
# --- headers ---
@ -147,6 +149,9 @@ SET(_moc_HEADERS
SMESHGUI_SplitBiQuad.h
SMESHGUI_IdPreview.h
SMESHGUI_PreVisualObj.h
SMESHGUI_AdaptDlg.h
SMESHGUI_MG_ADAPTDRIVER.h
MG_ADAPTGUI.hxx # to replace in ../ADAPTGUI/
)
# header files / no moc processing
@ -169,6 +174,7 @@ SET(_other_HEADERS
SMESHGUI_FileValidator.h
SMESHGUI_SelectionProxy.h
SMESH_SMESHGUI.hxx
#~MG_ADAPT.hxx # to replace in ../ADAPT/
)
# header files / to install
@ -262,6 +268,10 @@ SET(_other_SOURCES
SMESHGUI_SplitBiQuad.cxx
SMESHGUI_PreVisualObj.cxx
SMESHGUI_IdPreview.cxx
SMESHGUI_AdaptDlg.cxx
SMESHGUI_MG_ADAPTDRIVER.cxx
MG_ADAPTGUI.cxx # to replace in ../ADAPTGUI/
#MG_ADAPT.cxx
)
# sources / to compile
@ -275,7 +285,7 @@ SET(_ts_RESOURCES
SMESH_msg_en.ts
SMESH_msg_fr.ts
SMESH_msg_ja.ts
)
)
# --- rules ---

1365
src/SMESHGUI/MG_ADAPTGUI.cxx Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,329 @@
// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// SMESH SMESHGUI : GUI for the adaptation in the SMESH component
// File : MG_ADAPTGUI.hxx
//
#ifndef MG_ADAPTGUI_HXX
#define MG_ADAPTGUI_HXX
#include <set>
// SMESH includes
// Qt includes
#include <QDialog>
#include <QTreeWidget>
#include<QItemDelegate>
#include "LightApp_DataOwner.h"
#include "SalomeApp_Application.h"
#include <SALOMEconfig.h>
#include <SALOME_ListIO.hxx>
#include "SalomeApp_Module.h"
#include "SalomeApp_Study.h"
#include <med.h>
#include <map>
// model
//~#include "MG_ADAPT.hxx"
#include CORBA_SERVER_HEADER(MG_ADAPT)
class SUIT_ViewWindow;
class SUIT_Desktop;
class SUIT_Study;
class SUIT_ResourceMgr;
class CAM_Module;
class SALOMEDSClient_Study;
class SALOMEDSClient_SObject;
class SalomeApp_Study;
class SalomeApp_Module;
class LightApp_SelectionMgr;
class QButtonGroup;
class QLineEdit;
class QGroupBox;
class QRadioButton;
class QLabel;
class QCheckBox;
class QGridLayout;
class QTabWidget;
class QDoubleSpinBox;
class QSpinBox;
class QTreeWidget;
class QTreeWidgetItem;
class QSpacerItem;
class QHBoxLayout;
class QItemDelegate;
class QComboBox;
// IDL includes
#include <SALOMEconfig.h>
class SVTK_ViewWindow;
class SVTK_Selector;
class SMESHGUI_MgAdaptDlg;
class SMESHGUI_MgAdaptArguments;
class SMESHGUI_SpinBox;
class MgAdaptAdvWidgetTreeWidget;
class MgAdaptAdvWidget;
//~class MgAdapt;
class QHeaderView;
class QFileDialog;
std::map<QString, int> GetListeChamps(QString aFile, bool errorMessage = true);
QString lireNomMaillage(QString aFile, med_int& meshDim);
std::string remove_extension(const std::string& filename);
enum ADAPTATION_MODE{
SURFACE,
VOLUME,
BOTH
};
//=================================================================================
// class : SMESHGUI_MgAdaptDlg
// purpose :
//=================================================================================
class SMESHGUI_MgAdaptDlg : public QDialog
{
Q_OBJECT;
public:
//! Property type
enum Mode { Arguments, AdvancedOptions};
SMESHGUI_MgAdaptDlg( SalomeApp_Module*, SMESH::MG_ADAPT_ptr, QWidget* parent= 0,bool isCreation = true );
~SMESHGUI_MgAdaptDlg();
void buildDlg();
void reject();
bool checkParams(QString& msg) ;
//~void setModel(MgAdapt*);
SMESH::MG_ADAPT_ptr getModel() const;
public slots:
protected slots:
virtual bool PushOnApply();
private slots:
virtual void PushOnHelp();
virtual void PushOnOK();
protected :
SMESHGUI_MgAdaptArguments* myArgs;
MgAdaptAdvWidget* myAdvOpt;
bool readParamsFromHypo( ) const ;
bool readParamsFromWidgets( ) ;
bool storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const;
private:
SalomeApp_Module* mySMESHGUI; /* Current SMESHGUI object */
QTabWidget* myTabWidget;
SMESH::MgAdaptHypothesisData* myData;
SMESH::MG_ADAPT_ptr model;
};
class SMESHGUI_MgAdaptArguments : public QWidget
{
Q_OBJECT;
public:
//! Property type
enum Mode { Mesh, Browser};
enum SIZEMAP { Local, Background, Constant};
SMESHGUI_MgAdaptArguments( QWidget* parent);
~SMESHGUI_MgAdaptArguments();
void setMode( const Mode, const SIZEMAP );
QString* myFileInDir;
QString* myFileOutDir;
QString* myFileSizeMapDir;
QGroupBox* aMeshIn ;
QRadioButton* aMedfile;
QRadioButton* aBrowser ;
QLineEdit* aBrowserObject;
QPushButton* selectMedFilebutton ;
QSpacerItem* hspacer;
QLineEdit* selectMedFileLineEdit ;
QButtonGroup* meshInGroup ;
QGridLayout* meshIn ;
QGroupBox* aMeshOut ;
QLabel* meshName;
QLineEdit* meshNameLineEdit;
QSpacerItem* secondHspacer;
QCheckBox* medFileCheckBox;
QPushButton* selectOutMedFilebutton;
QLineEdit* selectOutMedFileLineEdit;
QSpacerItem* thirdHspacer;
QCheckBox* publishOut;
QGridLayout* meshOut ;
QGroupBox* sizeMapDefinition ;
QRadioButton* localButton;
QRadioButton* backgroundButton ;
QRadioButton* constantButton ;
QLabel* medFileBackground;
QPushButton* selectMedFileBackgroundbutton;
QLineEdit* selectMedFileBackgroundLineEdit;
QLabel* valueLabel;
QDoubleSpinBox* dvalue;
QButtonGroup* sizeMapDefGroup ;
QGridLayout* sizeMapDefGroupLayout;
QGroupBox* sizeMapField;
QLabel* fieldName;
QComboBox* fieldNameCmb;
QRadioButton* noTimeStep;
QRadioButton* lastTimeStep ;
QRadioButton* chosenTimeStep;
QLabel* timeStepLabel;
QSpinBox* timeStep;
QLabel* rankLabel;
QSpinBox* rankSpinBox;
QButtonGroup* timeStepGroup;
QGridLayout* sizeMapFieldGroupLayout;
signals:
void updateSelection();
void toExportMED(const char *);
void meshDimSignal(ADAPTATION_MODE aMode);
public slots:
protected slots:
private slots:
void modeChanged( int);
void sizeMapDefChanged(int);
void timeStepGroupChanged(int timeStepType, bool disableOther = false, int vmax = 0);
void onSelectMedFilebuttonClicked();
void clear();
void onMedFileCheckBox(int);
void onPublishOut(int);
void onSelectOutMedFilebutton();
void onSelectMedFileBackgroundbutton();
void onLocalSelected(QString);
void onNoTimeStep(bool disableOther = false);
void onLastTimeStep(bool disableOther = false);
void onChosenTimeStep(bool disableOther = false, int vmax = 0);
void visibleTimeStepRankLabel(bool visible);
void valueAdaptation ();
private:
QString getMedFileName(bool avertir);
LightApp_SelectionMgr* selMgr ;
med_int meshDim;
med_int meshDimBG;
std::map<QString, int> myFieldList;
};
enum {
OPTION_ID_COLUMN = 0,
OPTION_TYPE_COLUMN,
OPTION_NAME_COLUMN = 0,
OPTION_VALUE_COLUMN,
NB_COLUMNS,
};
//////////////////////////////////////////
// MgAdaptAdvWidget
//////////////////////////////////////////
class MgAdaptAdvWidget : public QWidget
{
Q_OBJECT
public:
MgAdaptAdvWidget( QWidget* = 0, std::vector <std::string> * = nullptr, Qt::WindowFlags = 0 );
~MgAdaptAdvWidget();
std::vector < std::string > * myOptions;
QGridLayout *gridLayout_4;
MgAdaptAdvWidgetTreeWidget *myOptionTable;
QPushButton *addBtn;
QSpacerItem *horizontalSpacer;
QGroupBox *logGroupBox;
QGridLayout *gridLayout_2;
QGridLayout *gridLayout;
QLabel *workingDirectoryLabel;
QLineEdit *workingDirectoryLineEdit;
QPushButton *workingDirectoryPushButton;
QLabel *verboseLevelLabel;
QSpinBox *verboseLevelSpin;
QHBoxLayout *horizontalLayout;
QCheckBox *logInFileCheck;
QCheckBox *removeLogOnSuccessCheck;
QCheckBox *keepWorkingFilesCheck;
void AddOption( const char* name_value_type, bool isCustom = false );
void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt );
void setupWidget();
public slots:
void onAddOption();
void itemChanged(QTreeWidgetItem * tblRow, int column);
void onMeshDimChanged(ADAPTATION_MODE aMode);
private slots:
void _onWorkingDirectoryPushButton();
private:
void setOptionValue(QString& option, QString& value);
std::map<QString, QTreeWidgetItem *> optionTreeWidgetItem;
QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom);
};
enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME,
NAME_COL = 0, VALUE_COL
};
class ItemDelegate: public QItemDelegate
{
public:
ItemDelegate(QObject* parent=0): QItemDelegate(parent) {}
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const;
};
class MgAdaptAdvWidgetTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
MgAdaptAdvWidgetTreeWidget( QWidget* );
protected:
QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers );
void keyPressEvent( QKeyEvent* );
};
#endif // MG_ADAPTGUI_HXX

View File

@ -30,6 +30,7 @@
// SMESH includes
#include "SMESHGUI.h"
#include "SMESHGUI_AdaptDlg.h"
#include "SMESHGUI_Add0DElemsOnAllNodesDlg.h"
#include "SMESHGUI_AddMeshElementDlg.h"
#include "SMESHGUI_AddQuadraticElementDlg.h"
@ -1971,12 +1972,12 @@ void SMESHGUI::OnEditDelete()
int objectCount = 0;
QString aNameList;
QString aParentComponent = QString::null;
for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() )
{
Handle(SALOME_InteractiveObject) anIO = anIt.Value();
if ( anIO.IsNull() ) continue;
QString father = "unknown", name;
_PTR(SObject) aSO = aStudy->FindObjectID( anIO->getEntry() );
@ -3042,6 +3043,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
}
break;
}
// Adaptation - begin
case SMESHOp::OpMGAdapt:
{
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil();
SMESHGUI_AdaptDlg *objet = new SMESHGUI_AdaptDlg( this, theCommandID, aMesh);
}
// Adaptation - end
case SMESHOp::OpSplitBiQuadratic:
case SMESHOp::OpConvertMeshToQuadratic:
case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D
@ -4279,6 +4287,10 @@ void SMESHGUI::initialize( CAM_Application* app )
createSMESHAction( SMESHOp::OpAutoColor, "AUTO_COLOR" );
createSMESHAction( SMESHOp::OpDisableAutoColor, "DISABLE_AUTO_COLOR" );
// Adaptation - begin
createSMESHAction( SMESHOp::OpMGAdapt, "MG_ADAPT", "ICON_MG_ADAPT" );
// Adaptation - end
createSMESHAction( SMESHOp::OpMinimumDistance, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" );
createSMESHAction( SMESHOp::OpBoundingBox, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" );
createSMESHAction( SMESHOp::OpPropertiesLength, "MEASURE_LENGTH", "ICON_MEASURE_LENGTH" );
@ -4320,6 +4332,7 @@ void SMESHGUI::initialize( CAM_Application* app )
meshId = createMenu( tr( "MEN_MESH" ), -1, 70, 10 ),
ctrlId = createMenu( tr( "MEN_CTRL" ), -1, 60, 10 ),
modifyId = createMenu( tr( "MEN_MODIFY" ), -1, 40, 10 ),
adaptId = createMenu( tr( "MEN_ADAPT" ), -1, 80, 10 ),
measureId = createMenu( tr( "MEN_MEASURE" ), -1, 50, 10 ),
viewId = createMenu( tr( "MEN_VIEW" ), -1, 2 );
@ -4492,6 +4505,10 @@ void SMESHGUI::initialize( CAM_Application* app )
createMenu( SMESHOp::OpSmoothing, modifyId, -1 );
createMenu( SMESHOp::OpPatternMapping, modifyId, -1 );
// Adaptation - begin
createMenu( SMESHOp::OpMGAdapt, adaptId, -1 );
// Adaptation - end
createMenu( SMESHOp::OpMinimumDistance, measureId, -1 );
createMenu( SMESHOp::OpBoundingBox, measureId, -1 );
createMenu( SMESHOp::OpAngle, measureId, -1 );
@ -4506,22 +4523,7 @@ void SMESHGUI::initialize( CAM_Application* app )
connect( volumeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) );
// ----- create toolbars --------------
int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ),
info = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ),
groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ),
ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ),
ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ),
ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ),
ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ),
addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ),
addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ),
remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ),
//renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ),
transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ),
modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ),
measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ),
dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) );
int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ) ;
createTool( SMESHOp::OpCreateMesh, meshTb );
createTool( SMESHOp::OpCreateSubMesh, meshTb );
createTool( SMESHOp::OpEditMeshOrSubMesh, meshTb );
@ -4533,25 +4535,30 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpEvaluate, meshTb );
createTool( SMESHOp::OpMeshOrder, meshTb );
int infoTb = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ) ;
createTool( SMESHOp::OpMeshInformation, infoTb );
//createTool( SMESHOp::OpStdInfo, meshTb );
//createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createTool( SMESHOp::OpFindElementByPoint, infoTb );
int groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ) ;
createTool( SMESHOp::OpCreateGroup, groupTb );
createTool( SMESHOp::OpCreateGeometryGroup, groupTb );
createTool( SMESHOp::OpConstructGroup, groupTb );
createTool( SMESHOp::OpEditGroup, groupTb );
createTool( SMESHOp::OpMeshInformation, info );
//createTool( SMESHOp::OpStdInfo, meshTb );
//createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
createTool( SMESHOp::OpFindElementByPoint, info );
int ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ) ;
createTool( SMESHOp::OpFreeNode, ctrl0dTb );
createTool( SMESHOp::OpEqualNode, ctrl0dTb );
//createTool( SMESHOp::OpNodeConnectivityNb, ctrl0dTb );
int ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ) ;
createTool( SMESHOp::OpFreeBorder, ctrl1dTb );
createTool( SMESHOp::OpLength, ctrl1dTb );
createTool( SMESHOp::OpConnection, ctrl1dTb );
createTool( SMESHOp::OpEqualEdge, ctrl1dTb );
int ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ) ;
createTool( SMESHOp::OpFreeEdge, ctrl2dTb );
createTool( SMESHOp::OpFreeFace, ctrl2dTb );
createTool( SMESHOp::OpBareBorderFace, ctrl2dTb );
@ -4568,6 +4575,7 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpEqualFace, ctrl2dTb );
createTool( SMESHOp::OpDeflection2D, ctrl2dTb );
int ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ) ;
createTool( SMESHOp::OpAspectRatio3D, ctrl3dTb );
createTool( SMESHOp::OpVolume, ctrl3dTb );
createTool( SMESHOp::OpMaxElementLength3D, ctrl3dTb );
@ -4575,6 +4583,7 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpOverConstrainedVolume, ctrl3dTb );
createTool( SMESHOp::OpEqualVolume, ctrl3dTb );
int addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ) ;
createTool( SMESHOp::OpNode, addElemTb );
createTool( SMESHOp::OpElem0D, addElemTb );
createTool( SMESHOp::OpElem0DOnElemNodes, addElemTb );
@ -4590,6 +4599,7 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpHexagonalPrism, addElemTb );
createTool( SMESHOp::OpPolyhedron, addElemTb );
int addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ) ;
createTool( SMESHOp::OpQuadraticEdge, addNonElemTb );
createTool( SMESHOp::OpQuadraticTriangle, addNonElemTb );
createTool( SMESHOp::OpBiQuadraticTriangle, addNonElemTb );
@ -4603,14 +4613,17 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpQuadraticHexahedron, addNonElemTb );
createTool( SMESHOp::OpTriQuadraticHexahedron, addNonElemTb );
int remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ) ;
createTool( SMESHOp::OpRemoveNodes, remTb );
createTool( SMESHOp::OpRemoveElements, remTb );
createTool( SMESHOp::OpRemoveOrphanNodes, remTb );
createTool( SMESHOp::OpClearMesh, remTb );
// int renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ) ;
//createTool( SMESHOp::OpRenumberingNodes, renumbTb );
//createTool( SMESHOp::OpRenumberingElements, renumbTb );
int transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ) ;
createTool( SMESHOp::OpMergeNodes, transformTb );
createTool( SMESHOp::OpMergeElements, transformTb );
createTool( SMESHOp::OpTranslation, transformTb );
@ -4621,6 +4634,7 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpSewing, transformTb );
createTool( SMESHOp::OpDuplicateNodes, transformTb );
int modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ) ;
createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb );
createTool( SMESHOp::OpCreateBoundaryElements, modifyTb );
createTool( SMESHOp::OpExtrusion, modifyTb );
@ -4638,8 +4652,15 @@ void SMESHGUI::initialize( CAM_Application* app )
createTool( SMESHOp::OpSmoothing, modifyTb );
createTool( SMESHOp::OpPatternMapping, modifyTb );
// Adaptation - begin
int adaptTb = createTool( tr( "TB_ADAPTATION" ),QString( "SMESHAdaptationToolbar" ) ) ;
createTool( SMESHOp::OpMGAdapt, adaptTb );
// Adaptation - end
int measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ) ;
createTool( SMESHOp::OpMinimumDistance, measuremTb );
int dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) );
createTool( SMESHOp::OpUpdate, dispModeTb );
QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality();
@ -4715,9 +4736,11 @@ void SMESHGUI::initialize( CAM_Application* app )
popupMgr()->insert( separator(), -1, 0 );
createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh, "&& " + hasElems );
createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2");
//popupMgr()->insert( separator(), -1, 0 );
popupMgr()->insert( separator(), -1, 0 );
//popupMgr()->insert( separator(), -1, 0 );
// Adaptation - begin
createPopupItem( SMESHOp::OpMGAdapt, OB, mesh );
// Adaptation - end
QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc );
QString multiple_non_empty = QString( " && %1>0 && numberOfNodes>0" ).arg( dc );
@ -5139,7 +5162,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
lab = lab + tr("INFO_COMPUTE") + "<br/>";
lab = lab + tr("INFO_REFINE") + ":";
items << wrap(tr("INFO_REFINE_LOCAL_SIZE"), "li")
<< wrap(tr("INFO_REFINE_SUBMESH"), "li");
<< wrap(tr("INFO_REFINE_SUBMESH"), "li");
lab = lab + wrap(items.join(""), "ul");
items.clear();
@ -5147,26 +5170,26 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MESH"));
items << wrap("UNV", "li")
<< wrap("MED", "li")
<< wrap("STL", "li")
<< wrap("CGNS", "li")
<< wrap("SAUV", "li")
<< wrap("GMF", "li");
<< wrap("MED", "li")
<< wrap("STL", "li")
<< wrap("CGNS", "li")
<< wrap("SAUV", "li")
<< wrap("GMF", "li");
lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
items.clear();
app->infoPanel()->addLabel(lab, gb);
gb = app->infoPanel()->addGroup(tr("INFO_GRP_CHECK_MESH"));
lab = tr("INFO_DISPLAY") + "<br/>";
items << wrap(tr("INFO_QUALITY_AREA"), "li")
<< wrap(tr("INFO_QUALITY_VOLUME"), "li")
<< wrap(tr("INFO_QUALITY_ASPECT_RATION"), "li")
<< wrap("...", "li");
<< wrap(tr("INFO_QUALITY_VOLUME"), "li")
<< wrap(tr("INFO_QUALITY_ASPECT_RATION"), "li")
<< wrap("...", "li");
lab = lab + tr("INFO_QUALITY_INFO") + ":" + wrap(items.join(""), "ul");
items.clear();
lab = lab + tr("INFO_CLIPPING");
app->infoPanel()->addLabel(lab, gb);
// << Help Panel
@ -5374,7 +5397,7 @@ void SMESHGUI::createPreferences()
setPreferenceProperty( dispgroup, "columns", 2 );
addPreference( tr( "PREF_FITALL_ON_DISPLAYONLY" ), dispgroup, LightApp_Preferences::Bool, "SMESH", "fitall_on_displayonly" );
int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" );
QStringList modes;
modes.append( tr("MEN_WIRE") );
@ -5751,6 +5774,29 @@ void SMESHGUI::createPreferences()
setPreferenceProperty( coloringType, "indexes", indices );
addPreference( tr( "SMESH_DISTRIBUTION_COLOR" ), distributionGr, LightApp_Preferences::Color, "SMESH", "distribution_color" );
// Adaptation - begin
// Adaptation tab ------------------------------------------------------------------------
int adaptTab = addPreference( tr( "ADAPT_PREF_TAB_GENERAL" ) );
int bloc, pref ;
// MG-Adapt
bloc = addPreference( tr( "ADAPT_PREF_MG_ADAPT" ), adaptTab );
setPreferenceProperty( bloc, "columns", 1 );
pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_file_mesh_out" );
pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_publish_mesh_out" );
pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_size_map" );
QStringList aListOfSizeMap;
aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL" );
aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND" );
aListOfSizeMap << tr( "ADAPT_PREF_NONE" );;
setPreferenceProperty( pref, "strings", aListOfSizeMap );
pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_time_step" );
QStringList aListOfTimeStep;
aListOfTimeStep << tr( "ADAPT_PREF_NONE" );
aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST" );
aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_C" );;
setPreferenceProperty( pref, "strings", aListOfTimeStep );
// Adaptation - end
}
void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
@ -5964,6 +6010,10 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes
op = new SMESHGUI_Add0DElemsOnAllNodesOp();
break;
// Adaptation - begin
case SMESHOp::OpMGAdapt:
break;
// Adaptation - end
default:
break;
}

View File

@ -0,0 +1,162 @@
// Copyright (C) 2011-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// SMESH SMESHGUI : GUI for the adaptation in the SMESH component
// File : SMESHGUI_AdaptDlg.cxx
// Author : Gerald NICOLAS, EDF
// SMESH includes
#include "SMESHGUI.h"
#include "SMESHGUI_AdaptDlg.h"
#include "SMESHGUI_MG_ADAPTDRIVER.h"
//~#include "MG_ADAPT_i.hxx"
//~#include "MG_ADAPT.hxx"
// SALOME GUI includes
#include <SUIT_Desktop.h>
#include <SUIT_ResourceMgr.h>
#include <SUIT_Session.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_Study.h>
// SALOME KERNEL includes
#include "utilities.h"
#include <SALOME_LifeCycleCORBA.hxx>
//=================================================================================
// function : SMESHGUI_AdaptDlg()
// purpose :
//=================================================================================
SMESHGUI_AdaptDlg::SMESHGUI_AdaptDlg( SMESHGUI* theModule,
int theCommandID,
SMESH::SMESH_Mesh_ptr theMesh )
: mySMESHGUI( theModule )
{
action( theCommandID ) ;
}
//=================================================================================
// function : ~SMESHGUI_AdaptDlg()
// purpose : Destroys the object and frees any allocated resources
//=================================================================================
SMESHGUI_AdaptDlg::~SMESHGUI_AdaptDlg()
{
}
/*!
* \brief Pilote les actions d'adaption de maillage
* \param
* \return bool OK/notOK
*/
void SMESHGUI_AdaptDlg::action (int theCommandID)
//=======================================================================
{
// std::cout << "SMESHGUI_AdaptDlg::action avec theCommandID : " << theCommandID << std::endl;
// Preferences
// recupPreferences();
// Menus and actions
bool ok = OnGUIEvent (theCommandID) ;
if ( ! ok ) INFOS("Erreur");
return ;
}
// /*!
// * \brief Gets the preferences for the adaptation
// * \param
// * \return
// *
// * Pour chaque valeur, le defaut est la valeur definie dans ADAPT_Gen
// * . Si la recuperation dans config/salome s'est bien passee a la creation de ADAPT_Gen
// * ces valeurs sont les valeurs definies.
// * . Si cela ne s'est pas bien passe, ce sont les valeurs par defaut de ADAPT_Gen
// */
// void SMESHGUI_AdaptDlg::recupPreferences()
// {
// INFOS("Début de recupPreferences")
// //
// // A. Declarations
// //
// SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
// SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA(app->namingService());
// Engines::EngineComponent_var comp = ls->FindOrLoad_Component("FactoryServer", "SMESH");
// ADAPT::ADAPT_Gen_var adaptGen = ADAPT::ADAPT_Gen::_narrow(comp);
// if (!CORBA::is_nil(adaptGen))
// adaptGen->UpdateStudy();
//
// SUIT_ResourceMgr* resMgr = mySMESHGUI->getApp()->resourceMgr();
//
// }
/*!
* \brief Launches the GUI for the adaptation
* \param theCommandID - the integer that references the operation
* \return bool OK/notOK
*/
bool SMESHGUI_AdaptDlg::OnGUIEvent (int theCommandID)
{
// std::cout << "SMESHGUI_AdaptDlg:OnGUIEvent avec theCommandID : " << theCommandID << std::endl;
// A. Controles
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
if ( !app ) return false;
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
if ( !aStudy )
{
INFOS ( "FAILED to cast active study to SalomeApp_Study" );
return false;
}
SUIT_Desktop* parent = SUIT_Session::session()->activeApplication()->desktop();
SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA(app->namingService());
Engines::EngineComponent_var comp = ls->FindOrLoad_Component("FactoryServer", "SMESH");
// ADAPT::ADAPT_Gen_var adaptGen = ADAPT::ADAPT_Gen::_narrow(comp);
// if (!CORBA::is_nil(adaptGen))
// adaptGen->UpdateStudy();
mySMESHGUI->getApp()->updateObjectBrowser();
//
// B. Choix selon les commandes
bool ok = true ;
SCRUTE(theCommandID);
switch (theCommandID)
{
case 8020: // Adaptation avec MG-Adpat
{
// INFOS("Interface avec MG-Adapt" );
SMESH::MG_ADAPT_ptr model = SMESHGUI::GetSMESHGen()->CreateMG_ADAPT();
bool isCreation = false;
if (mySMESHGUI->isStudyLocked()) break;
mySMESHGUI->EmitSignalDeactivateDialog();
SMESHGUI_MG_ADAPTDRIVER *mgAdapt = new SMESHGUI_MG_ADAPTDRIVER(mySMESHGUI, model, isCreation);
mgAdapt->show();
break;
}
}
mySMESHGUI->getApp()->updateObjectBrowser();
return ok;
}

View File

@ -0,0 +1,77 @@
// Copyright (C) 2011-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// SMESH SMESHGUI : GUI for the adaptation in the SMESH component
// File : SMESHGUI_AdaptDlg.h
// Author : Gérald NICOLAS, EDF
//
#ifndef SMESHGUI_ADAPTDLG_H
#define SMESHGUI_ADAPTDLG_H
// SMESH includes
#include "SMESH_SMESHGUI.hxx"
// Qt includes
#include <QDialog>
// IDL includes
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SMESH_Mesh)
class SMESHGUI;
//=================================================================================
// class : SMESHGUI_AdaptDlg
// purpose :
//=================================================================================
class SMESHGUI_EXPORT SMESHGUI_AdaptDlg : public QWidget
{
public:
SMESHGUI_AdaptDlg( SMESHGUI*,
int theCommandID,
SMESH::SMESH_Mesh_ptr = SMESH::SMESH_Mesh::_nil() );
~SMESHGUI_AdaptDlg();
void action (int theCommandID);
virtual bool OnGUIEvent (int theCommandID);
// static ADAPT::ADAPT_Gen_var InitAdaptGen(SalomeApp_Application*);
public slots:
protected slots:
private slots:
private:
// void recupPreferences();
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
QString _ObjectName;
QString _LanguageShort ;
int _PublisMeshIN ;
int _PublisMeshOUT ;
int _YACSMaxIter ;
int _YACSMaxNode ;
int _YACSMaxElem ;
int _YACSTypeTest ;
};
#endif // SMESHGUI_ADAPTDLG_H

View File

@ -0,0 +1,758 @@
// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : SMESHGUI_MG_ADAPTDRIVER.cxx
#include "SMESHGUI_MG_ADAPTDRIVER.h"
#include "SUIT_Desktop.h"
#include "SUIT_Application.h"
#include "SUIT_Session.h"
#include "SalomeApp_Application.h"
#include "SalomeApp_Module.h"
#include "SalomeApp_Study.h"
#include "SMESH_Comment.hxx"
#include "SMESH_Actor.h"
#include "SMESHGUI.h"
#include "SMESHGUI_FilterDlg.h"
#include "SMESHGUI_Selection.h"
#include <SUIT_MessageBox.h>
#include "SMESHGUI_IdValidator.h"
#include "SMESHGUI_Utils.h"
#include "SMESHGUI_MeshEditPreview.h"
#include "SMESHGUI_VTKUtils.h"
#include <SMESH_TypeFilter.hxx>
#include <SMESH_MeshAlgos.hxx>
#include <SMESH_LogicalFilter.hxx>
#include <SMDS_Mesh.hxx>
#include <SMDS_MeshNode.hxx>
#include "SMESHGUI_SpinBox.h"
#include <LightApp_SelectionMgr.h>
#include <SUIT_OverrideCursor.h>
#include <SUIT_ResourceMgr.h>
#include <SVTK_ViewWindow.h>
#include <SALOME_ListIO.hxx>
#include <SUIT_FileDlg.h>
#include "SMESHGUI_MeshUtils.h"
#include <QApplication>
#include <QButtonGroup>
#include <QGridLayout>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QKeyEvent>
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QRadioButton>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QDoubleSpinBox>
#include <QSpinBox>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QSpacerItem>
#include <QString>
#include <QHeaderView>
#include <QItemDelegate>
#include <QFileDialog>
#include <QMessageBox>
#include <QComboBox>
#include <vtkPoints.h>
#include <vtkUnstructuredGrid.h>
#include <vtkIdList.h>
#include <vtkCellArray.h>
#include <vtkUnsignedCharArray.h>
#include <vtkDataSetMapper.h>
#include <VTKViewer_CellLocationsArray.h>
#include <vtkProperty.h>
#include <ElCLib.hxx>
// SALOME KERNEL includes
#include <SALOMEDS_SComponent.hxx>
#include <SALOMEDS_SObject.hxx>
#include <SALOMEDS_Study.hxx>
#include <SALOMEDS_wrap.hxx>
#include "SalomeApp_Tools.h"
#include <SALOMEconfig.h>
#include <med.h>
#include <utilities.h>
#include <TCollection_AsciiString.hxx>
const int SPACING = 6; // layout spacing
const int MARGIN = 9; // layout margin
SALOME_ListIO mySelected;
//================================================================
// Function : firstIObject
// Purpose : Return the first selected object in the selected object list
//================================================================
Handle(SALOME_InteractiveObject) firstIObject()
{
const SALOME_ListIO& aList = selectedIO();
return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)();
}
//================================================================
// Function : selectedIO
// Return the list of selected SALOME_InteractiveObject's
//================================================================
const SALOME_ListIO& selectedIO()
{
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > ( SUIT_Session::session()->activeApplication() );
LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
if( aSelectionMgr )
{
aSelectionMgr->selectedObjects( mySelected );
for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next())
SCRUTE(it.Value()->getEntry());
};
return mySelected;
}
//================================================================
// Function : getStudy
// Returne un pointeur sur l'etude active
//================================================================
_PTR(Study) getStudy()
{
static _PTR(Study) _study;
if(!_study)
_study = SalomeApp_Application::getStudy();
return _study;
}
bool createAndPublishMed(QString fileName)
{
SMESH::DriverMED_ReadStatus res;
SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
// SMESHGUI aGui;
aMeshes = SMESHGUI::GetSMESHGen()->CreateMeshesFromMED( fileName.toUtf8().constData(), res );
_PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[0] );
_PTR(Study) aStudy = SMESH::getStudy();
QStringList anEntryList;
// bool isEmpty;
if ( aMeshSO )
{
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
_PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
anEntryList.append( aMeshSO->GetID().c_str() );
}
else
{
// isEmpty = true;
return false;
}
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
// browse to the published meshes
if( LightApp_Application* anApp =
dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
anApp->browseObjects( anEntryList );
return true;
}
bool createMgAdaptObject(MgAdapt *myMgAdapt )
{
// SMESH::SMESH_Mesh_var newMesh = SMESHGUI::GetSMESHGen()->CreateEmptyMesh();
// _PTR(SObject) aHypothesis;
_PTR(Study) aStudy = SMESH::getStudy();
QStringList anEntryList;
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
_PTR(SComponent) mgadapt = aStudy->FindComponent("MG-ADAPT");
_PTR(GenericAttribute) ga;
if (!aBuilder->FindAttribute(mgadapt, ga, "AttributeName") )
{
mgadapt = aBuilder->NewComponent("MG-ADAPT");
_PTR(AttributeName) Name = aBuilder->FindOrCreateAttribute(mgadapt, "AttributeName");
Name->SetValue("MG-ADAPT");
_PTR(AttributePixMap) myPixmap = aBuilder->FindOrCreateAttribute( mgadapt, "AttributePixMap" );
myPixmap->SetPixMap( "ICON_MG_ADAPT" );
anEntryList.append( mgadapt->GetID().c_str() );
}
_PTR(SObject) obj = aBuilder->NewObject(mgadapt);
_PTR(AttributeName) myName = aBuilder->FindOrCreateAttribute(obj, "AttributeName");
myName->SetValue("hypo");
_PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( obj, "AttributePixMap" );
aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
anEntryList.append( obj->GetID().c_str() );
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
// // browse to the published meshes
if( LightApp_Application* anApp =
dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
anApp->browseObjects( anEntryList );
return true;
}
// MG ADAPT UTILS
//================================================================
// Function : IObjectCount
// Return the number of selected objects
//================================================================
int IObjectCount()
{
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
if( aSelectionMgr )
{
aSelectionMgr->selectedObjects( mySelected );
SCRUTE(mySelected.Extent());
return mySelected.Extent();
}
return 0;
}
SMESHGUI_MG_ADAPTDRIVER::SMESHGUI_MG_ADAPTDRIVER( SMESHGUI* theModule, SMESH::MG_ADAPT_ptr myModel, bool isCreation )
: mySMESHGUI( theModule ),
myFilterDlg(0),
myIsApplyAndClose( false ),
SMESHGUI_MgAdaptDlg((SalomeApp_Module*)theModule, myModel, SMESHGUI::desktop(), isCreation)
{
resMgr = resourceMgr();
selMgr = selectionMgr();
// connections
connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection()));
connect(myArgs, SIGNAL(toExportMED(const char*)), this, SLOT(exportMED(const char*)));
}
SUIT_ResourceMgr* SMESHGUI_MG_ADAPTDRIVER::resourceMgr()
{
return dynamic_cast<SUIT_ResourceMgr*>( SUIT_Session::session()->resourceMgr() );
}
LightApp_SelectionMgr* SMESHGUI_MG_ADAPTDRIVER::selectionMgr()
{
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
if( anApp )
return dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
else
return 0;
}
void SMESHGUI_MG_ADAPTDRIVER::updateSelection()
{
disconnect( selMgr, 0, this, 0 );
selMgr->clearFilters();
SMESH::SetPointRepresentation( true );
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
aViewWindow->SetSelectionMode( ActorSelection );
if (myArgs->aBrowser->isChecked())
{
connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ));
selectionChanged();
}
}
void SMESHGUI_MG_ADAPTDRIVER::selectionChanged()
{
//~ get selected mesh
SALOME_ListIO aList;
selMgr->selectedObjects(aList);
QString aString = "";
int nbSel = aList.Extent();
if (nbSel != 1)
return;
Handle(SALOME_InteractiveObject) IO = aList.First();
SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(IO);
if ( !mesh->_is_nil() )
{
myMesh = mesh;
mySelectedObject = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( mySelectedObject->_is_nil() )
return;
}
else
return;
SMESH::GetNameOfSelectedIObjects( selMgr, aString );
if ( aString.isEmpty() ) aString = " ";
else aString = aString.trimmed();
bool ok = !aString.isEmpty();
if ( !mesh->_is_nil() )
{
myArgs->aBrowserObject->setText( aString );
myArgs->meshNameLineEdit->setText( aString );
myArgs->selectOutMedFileLineEdit->setText(aString+QString(".med"));
ADAPTATION_MODE aMode;
int nbVolumes = myMesh->NbVolumes();
int nbFaces = myMesh->NbFaces();
if(nbFaces > 0 && nbVolumes > 0) aMode = ADAPTATION_MODE::BOTH;
else if(nbFaces > 0) aMode = ADAPTATION_MODE::SURFACE;
else aMode = ADAPTATION_MODE::VOLUME;
emit myArgs->meshDimSignal(aMode);
}
}
void SMESHGUI_MG_ADAPTDRIVER::exportMED(const char* tmp_file)
{
bool toOverwrite = true;
bool toFindOutDim = true;
myMesh->ExportMED(tmp_file, false, -1, toOverwrite, toFindOutDim);
}
void SMESHGUI_MG_ADAPTDRIVER::setMyMesh(SMESH::SMESH_Mesh_var mesh)
{
myMesh = mesh;
}
SMESH::SMESH_Mesh_var SMESHGUI_MG_ADAPTDRIVER::getMyMesh()
{
return myMesh;
}
//=================================================================================
// function : PushOnOk()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::PushOnOK()
{
setIsApplyAndClose( true );
bool ret = PushOnApply();
// std::cout << "SMESHGUI_MG_ADAPTDRIVER::PushOnOK ret : " <<ret<<std::endl;
if ( ret ) reject();
}
bool SMESHGUI_MG_ADAPTDRIVER::PushOnApply()
{
MESSAGE("PushOnApply");
if ( SMESHGUI::isStudyLocked() )
return false;
if( !isValid() )
return false;
bool ok = SMESHGUI_MgAdaptDlg::PushOnApply();
// std::cout << "SMESHGUI_MG_ADAPTDRIVER::PushOnApply ok 1 : " <<ok<<std::endl;
if ( ok )
{
ok = execute();
if (getModel()->getPublish()) this->createMeshInObjectBrowser();
// std::cout << "SMESHGUI_MG_ADAPTDRIVER::PushOnApply ok 2 : " <<ok<<std::endl;
if ( ok )
{
QMessageBox::information( 0, QObject::tr(""),
QObject::tr("MG_ADAPT_DIAG_1") );
}
else
{
QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
QObject::tr("MG_ADAPT_DIAG_2") );
}
}
return ok;
}
bool SMESHGUI_MG_ADAPTDRIVER::execute()
{
int err = 1;
char* errStr;
try
{
getModel()->compute();
err = 0;
errStr = getModel()->getErrMsg();
std::string msg = err == 0 ? " ok" : std::string("Not ok \n")+CORBA::string_dup(errStr) ;
}
catch (const std::exception& e)
{
std::cerr<<e.what();
}
return err == 0;
}
//=================================================================================
// function : Init()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::Init (bool ResetControls)
{
myBusy = false;
if ( ResetControls )
{
myLineEditElements->clear();
myNbOkElements = 0;
buttonOk->setEnabled(false);
buttonApply->setEnabled(false);
//~myActor = 0;
myMesh = SMESH::SMESH_Mesh::_nil();
myIdSourceCheck->setChecked(true);
onConstructor( 0 );
}
}
//=======================================================================
//function : onConstructor
//purpose : switch operation mode
//=======================================================================
void SMESHGUI_MG_ADAPTDRIVER::onConstructor( int withGeom )
{
myGeomLabel ->setVisible( withGeom );
myGeomNameEdit ->setVisible( withGeom );
myReuseHypCheck ->setVisible( withGeom );
myCopyElementsCheck->setVisible( withGeom );
myFilterBtn ->setVisible( !withGeom );
myIdSourceCheck ->setVisible( !withGeom );
if ( !withGeom )
myMeshNameEdit->setText( SMESH::UniqueMeshName("Mesh"));
}
//~void SMESHGUI_MG_ADAPTDRIVER::onSelectIdSource( bool )
//~{}
//=================================================================================
// function : enterEvent()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::enterEvent (QEvent*)
{
// if ( !ConstructorsBox->isEnabled() ) {
// SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
// if ( aViewWindow && !mySelector ) {
// mySelector = aViewWindow->GetSelector();
// }
// activateThisDialog();
// }
}
//=================================================================================
// function : keyPressEvent()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::keyPressEvent( QKeyEvent* e )
{
QDialog::keyPressEvent( e );
if ( e->isAccepted() )
return;
if ( e->key() == Qt::Key_F1 )
{
e->accept();
PushOnHelp();
}
}
//=================================================================================
// function : PushOnHelp()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::PushOnHelp()
{
QString aHelpFile = "adaptation.html#_mg_adapt_anchor";
SMESH::ShowHelpFile( aHelpFile );
}
//=======================================================================
//function : getErrorMsg
//purpose : Return an error message and entries of invalid smesh object
//=======================================================================
QString SMESHGUI_MG_ADAPTDRIVER::getErrorMsg( SMESH::string_array_var theInvalidEntries,
QStringList & theEntriesToBrowse )
{
if ( theInvalidEntries->length() == 0 )
return tr("OPERATION_FAILED");
// theInvalidEntries - SObject's that hold geometry objects whose
// counterparts are not found in the newGeometry, followed by SObject's
// holding mesh sub-objects that are invalid because they depend on a not found
// preceding sub-shape
QString msg = tr("SUBSHAPES_NOT_FOUND_MSG") + "\n";
QString objString;
for ( CORBA::ULong i = 0; i < theInvalidEntries->length(); ++i )
{
_PTR(SObject) so = SMESH::getStudy()->FindObjectID( theInvalidEntries[i].in() );
int objType = SMESHGUI_Selection::type( theInvalidEntries[i].in() );
if ( objType < 0 ) // geom object
{
objString += "\n";
if ( so )
objString += so->GetName().c_str();
else
objString += theInvalidEntries[i].in(); // it's something like "FACE #2"
}
else // smesh object
{
theEntriesToBrowse.push_back( theInvalidEntries[i].in() );
objString += "\n ";
switch ( objType ) {
case SMESH::MESH:
objString += tr("SMESH_MESH");
break;
case SMESH::HYPOTHESIS:
objString += tr("SMESH_HYPOTHESIS");
break;
case SMESH::ALGORITHM:
objString += tr("SMESH_ALGORITHM");
break;
case SMESH::SUBMESH_VERTEX:
case SMESH::SUBMESH_EDGE:
case SMESH::SUBMESH_FACE:
case SMESH::SUBMESH_SOLID:
case SMESH::SUBMESH_COMPOUND:
case SMESH::SUBMESH:
objString += tr("SMESH_SUBMESH");
break;
case SMESH::GROUP:
objString += tr("SMESH_GROUP");
break;
default:
;
}
objString += " \"";
if ( so )
objString += so->GetName().c_str();
objString += "\" (";
objString += theInvalidEntries[i].in();
objString += ")";
}
}
if ( !objString.isEmpty() )
msg += objString;
return msg;
}
//=================================================================================
// function : isValid
// purpose :
//=================================================================================
bool SMESHGUI_MG_ADAPTDRIVER::isValid()
{
bool ok = true;
return ok;
}
bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser()
{
QString filename(getModel()->getMedFileOut());
QStringList errors;
QStringList anEntryList;
bool isEmpty = false;
bool ok = false;
SMESH::SMESH_Gen_var SMESH_Gen_ptr = SMESHGUI::GetSMESHGen();
if (!SMESH_Gen_ptr) {
std::cerr << "Could not retrieve SMESH_Gen_ptr" << std::endl;
throw SALOME_Exception(LOCALIZED("Could not retrieve SMESH::GetSMESHGen()"));
}
SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
aMeshes->length( 1 ); // one mesh only
SMESH::DriverMED_ReadStatus res;
aMeshes = SMESH_Gen_ptr->CreateMeshesFromMED( filename.toUtf8().constData(), res );
if ( res != SMESH::DRS_OK ) {
errors.append( QString( "%1 :\n\t%2" ).arg( filename ).arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
}
_PTR(Study) aStudy = SMESH::getStudy();
for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ )
{
_PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] );
if ( aMeshSO )
{
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
_PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); // put REFINED mesh ico
anEntryList.append( aMeshSO->GetID().c_str() );
}
else
{
isEmpty = true;
}
}
// update Object browser
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
// browse to the published meshes
if( LightApp_Application* anApp =
dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
anApp->browseObjects( anEntryList );
// show Error message box if there were errors
if ( errors.count() > 0 ) {
SUIT_MessageBox::critical( SMESHGUI::desktop(),
QObject::tr( "SMESH_ERROR" ),
QObject::tr( "SMESH_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) );
}
// show warning message box, if some imported mesh is empty
if ( isEmpty ) {
SUIT_MessageBox::warning( SMESHGUI::desktop(),
QObject::tr( "SMESH_WRN_WARNING" ),
QObject::tr( "SMESH_DRS_SOME_EMPTY" ) );
}
return true;
}
//================================================================
// function : setIsApplyAndClose
// Purpose : Set value of the flag indicating that the dialog is
// accepted by Apply & Close button
//================================================================
void SMESHGUI_MG_ADAPTDRIVER::setIsApplyAndClose( const bool theFlag )
{
myIsApplyAndClose = theFlag;
}//================================================================
// function : isApplyAndClose
// Purpose : Get value of the flag indicating that the dialog is
// accepted by Apply & Close button
//================================================================
bool SMESHGUI_MG_ADAPTDRIVER::isApplyAndClose() const
{
return myIsApplyAndClose;
}
//=================================================================================
// function : DeactivateActiveDialog()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::deactivateActiveDialog()
{
if (ConstructorsBox->isEnabled())
{
ConstructorsBox->setEnabled(false);
GroupArguments->setEnabled(false);
GroupButtons->setEnabled(false);
mySMESHGUI->ResetState();
mySMESHGUI->SetActiveDialogBox(0);
if ( selMgr )
selMgr->removeFilter( myIdSourceFilter );
}
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::activateThisDialog()
{
/* Emit a signal to deactivate the active dialog */
// mySMESHGUI->EmitSignalDeactivateDialog();
// ConstructorsBox->setEnabled(true);
// GroupArguments->setEnabled(true);
// GroupButtons->setEnabled(true);
// mySMESHGUI->SetActiveDialogBox((QDialog*)this);
// onSelectIdSource( myIdSourceCheck->isChecked() );
// SelectionIntoArgument();
}
//=================================================================================
// function : setFilters()
// purpose : SLOT. Called when "Filter" button pressed.
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::setFilters()
{
if(myMesh->_is_nil())
{
SUIT_MessageBox::critical(this,
tr("SMESH_ERROR"),
tr("NO_MESH_SELECTED"));
return;
}
if ( !myFilterDlg )
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
QList<int> types;
if ( myMesh->NbEdges() ) types << SMESH::EDGE;
if ( myMesh->NbFaces() ) types << SMESH::FACE;
if ( myMesh->NbVolumes() ) types << SMESH::VOLUME;
if ( myMesh->NbBalls() ) types << SMESH::BALL;
if ( myMesh->Nb0DElements()) types << SMESH::ELEM0D;
if ( types.count() > 1 ) types << SMESH::ALL;
myFilterDlg->Init( types );
myFilterDlg->SetSelection();
myFilterDlg->SetMesh( myMesh );
myFilterDlg->SetSourceWg( myLineEditElements );
myFilterDlg->show();
}
//=================================================================================
// function : onOpenView()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::onOpenView()
{
if ( mySelector ) {
SMESH::SetPointRepresentation(false);
}
else {
mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector();
activateThisDialog();
}
}
//=================================================================================
// function : onCloseView()
// purpose :
//=================================================================================
void SMESHGUI_MG_ADAPTDRIVER::onCloseView()
{
deactivateActiveDialog();
mySelector = 0;
}

View File

@ -0,0 +1,210 @@
// Copyright (C) 2011-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// SMESH SMESHGUI : GUI for the adaptation in the SMESH component
// File : SMESHGUI_MG_ADAPTDRIVER.h
//
#ifndef SMESHGUI_MG_ADAPTDRIVER_H
#define SMESHGUI_MG_ADAPTDRIVER_H
#include <set>
// SMESH includes
#include "SMESH_SMESHGUI.hxx"
// Qt includes
#include <QDialog>
#include <QTreeWidget>
#include<QItemDelegate>
#include <QThread>
#include "LightApp_DataOwner.h"
#include "SalomeApp_Application.h"
#include <SALOMEconfig.h>
#include <SALOME_ListIO.hxx>
#include "SalomeApp_Module.h"
#include "SalomeApp_Study.h"
#include <med.h>
#include <QObject>
// model
#include "MG_ADAPTGUI.hxx"
#include CORBA_SERVER_HEADER(MG_ADAPT)
class SUIT_ViewWindow;
class SUIT_Desktop;
class SUIT_Study;
class SUIT_ResourceMgr;
class CAM_Module;
class SALOMEDSClient_Study;
class SALOMEDSClient_SObject;
class SalomeApp_Study;
class SalomeApp_Module;
class LightApp_SelectionMgr;
class SUIT_SelectionFilter;
class QButtonGroup;
class QLineEdit;
class QGroupBox;
class QRadioButton;
class QLabel;
class QCheckBox;
class QGridLayout;
class QTabWidget;
class QDoubleSpinBox;
class QSpinBox;
class QTreeWidget;
class QTreeWidgetItem;
class QSpacerItem;
class QHBoxLayout;
class QItemDelegate;
class QComboBox;
class QObject;
// IDL includes
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SMESH_Mesh)
#include CORBA_SERVER_HEADER(SMESH_Gen)
class SMESHGUI;
class SMESHGUI_MgAdaptDlg;
class SMESHGUI_IdValidator;
class SMESHGUI_FilterDlg;
class MgAdapt;
class QHeaderView;
class QFileDialog;
int IObjectCount();
const SALOME_ListIO& selectedIO();
_PTR(Study) getStudy();
Handle(SALOME_InteractiveObject) firstIObject();
bool createAndPublishMed(QString fileName);
bool createMgAdaptObject(MgAdapt* myMgAdapt = 0);
class SMESHGUI_MG_ADAPTDRIVER : public SMESHGUI_MgAdaptDlg
{
Q_OBJECT;
public :
SMESHGUI_MG_ADAPTDRIVER( SMESHGUI*, SMESH::MG_ADAPT_ptr, bool isCreation = true );
void setMyMesh(SMESH::SMESH_Mesh_var);
SMESH::SMESH_Mesh_var getMyMesh() ;
private :
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
LightApp_SelectionMgr* selMgr ;
SUIT_ResourceMgr* resMgr;
SUIT_ResourceMgr* resourceMgr();
LightApp_SelectionMgr* selectionMgr();
SMESH::SMESH_Mesh_var myMesh ;
void Init( bool = true );
void enterEvent( QEvent* ); /* mouse enter the QWidget */
void keyPressEvent( QKeyEvent* );
QString getErrorMsg( SMESH::string_array_var invalidEntries,
QStringList & entriesToBrowse );
bool isValid();
bool createMeshInObjectBrowser();
void setIsApplyAndClose( const bool theFlag );
bool isApplyAndClose() const;
bool execute();
SMESHGUI_IdValidator* myIdValidator;
int myNbOkElements; /* to check when elements are defined */
SVTK_Selector* mySelector;
bool myBusy;
GEOM::GEOM_Object_var myNewGeometry;
//~SMESH_Actor* myActor; //
SUIT_SelectionFilter* myIdSourceFilter;
SMESH::SMESH_IDSource_var mySelectedObject;
QTabWidget* myTabWidget;
QButtonGroup* GroupConstructors;
QGroupBox* ConstructorsBox;
QGroupBox* GroupArguments;
QGroupBox* GroupButtons;
QPushButton* buttonOk;
QPushButton* buttonCancel;
QPushButton* buttonApply;
QPushButton* buttonHelp;
QLabel* myTextLabelElements;
QLabel* myGeomLabel;
QLineEdit* myLineEditElements;
QLineEdit* myMeshNameEdit;
QLineEdit* myGeomNameEdit;
QCheckBox* myIdSourceCheck;
QCheckBox* myCopyGroupsCheck;
QCheckBox* myReuseHypCheck;
QCheckBox* myCopyElementsCheck;
QCheckBox* myKeepIdsCheck;
QPushButton* myFilterBtn;
SMESHGUI_FilterDlg* myFilterDlg;
QString myHelpFileName;
bool myIsApplyAndClose;
QString inputMeshName;
QString outputMeshName;
private slots:
void selectionChanged();
void updateSelection();
protected slots :
private slots:
void exportMED(const char* );
virtual bool PushOnApply();
virtual void PushOnOK();
virtual void PushOnHelp();
void deactivateActiveDialog();
void activateThisDialog();
void onConstructor( int );
//~void onTextChange( const QString& );
//~void onSelectIdSource( bool );
void setFilters();
void onOpenView();
void onCloseView();
};
#endif // SMESHGUI_MG_ADAPTDRIVER_H

View File

@ -186,6 +186,8 @@ namespace SMESHOp {
OpConvertMeshToQuadratic = 4513, // MENU MODIFICATION - CONVERT TO/FROM QUADRATIC
OpCreateBoundaryElements = 4514, // MENU MODIFICATION - CREATE BOUNDARY ELEMENTS
OpSplitBiQuadratic = 4515, // MENU MODIFICATION - SPLIT BI-QUADRATIC TO LINEAR
// Adaptation ---------------------//--------------------------------
OpMGAdapt = 8020, // MENU ADAPTATION - MG-ADAPT
// Measurements -------------------//--------------------------------
OpPropertiesLength = 5000, // MENU MEASUREMENTS - BASIC PROPERTIES - LENGTH
OpPropertiesArea = 5001, // MENU MEASUREMENTS - BASIC PROPERTIES - AREA

View File

@ -83,6 +83,10 @@
<source>ICON_CREATE_GEO_GROUP</source>
<translation>mesh_groups_from_gemetry.png</translation>
</message>
<message>
<source>ICON_MG_ADAPT</source>
<translation>adapt_mg_adapt.png</translation>
</message>
<message>
<source>ICON_CONV_TO_QUAD</source>
<translation>mesh_conv_to_quad.png</translation>
@ -654,7 +658,7 @@
<message>
<source>ICON_MEASURE_AREA</source>
<translation>mesh_measure_area.png</translation>
</message>
</message>
<message>
<source>ICON_MEASURE_VOLUME</source>
<translation>mesh_measure_volume.png</translation>

View File

@ -340,6 +340,126 @@
<source>MEN_CONSTRUCT_GROUP</source>
<translation>Construct Group</translation>
</message>
<message>
<source>MEN_MG_ADAPT</source>
<translation>Remesh with MG_Adapt</translation>
</message>
<message>
<source>Args</source>
<translation>Arguments</translation>
</message>
<message>
<source>MeshOut</source>
<translation>Mesh Out</translation>
</message>
<message>
<source>MeshIn</source>
<translation>Mesh In</translation>
</message>
<message>
<source>MEDFile</source>
<translation>MED file</translation>
</message>
<message>
<source>Browser</source>
<translation>Browser</translation>
</message>
<message>
<source>Publish_MG_ADAPT</source>
<translation>Publish</translation>
</message>
<message>
<source>SIZE_MAP_FIELD</source>
<translation>Size map field</translation>
</message>
<message>
<source>MG_ADAPT_FIELD_NAME</source>
<translation>Field Name</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_1</source>
<translation>This MED file cannot be read.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_2</source>
<translation>No mesh in this MED file.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_3</source>
<translation>More than one mesh in this MED file.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_4</source>
<translation>The mesh in this MED file cannot be read.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_5</source>
<translation>No field in this MED file.</translation>
</message>
<message>
<source>MG_ADAPT_ERROR</source>
<translation>Error</translation>
</message>
<message>
<source>MG_ADAPT_CH_ST</source>
<translation>Chosen time step</translation>
</message>
<message>
<source>MG_ADAPT_RANK</source>
<translation>Rank</translation>
</message>
<message>
<source>MG_ADAPT_TSTP</source>
<translation>Time step </translation>
</message>
<message>
<source>MG_ADAPT_NO_T_ST</source>
<translation>No time step</translation>
</message>
<message>
<source>MG_ADAPT_L_ST</source>
<translation>Last time step</translation>
</message>
<message>
<source>MeshName</source>
<translation>Mesh name</translation>
</message>
<message>
<source>LOCAL_MG_ADAPT</source>
<translation>Local</translation>
</message>
<message>
<source>BACKGRND_MG_ADAPT</source>
<translation>Background</translation>
</message>
<message>
<source>CNST_MG_ADAPT</source>
<translation>Constant</translation>
</message>
<message>
<source>MED_FILE_BCKG</source>
<translation>MED file background size map</translation>
</message>
<message>
<source>VALUE_MG_ADAPT</source>
<translation>Value</translation>
</message>
<message>
<source>SIZE_MAP_DEF</source>
<translation>Size map definition</translation>
</message>
<message>
<source>ADVOP</source>
<translation>Advanced Options</translation>
</message>
<message>
<source>MG_ADAPT_DIAG_1</source>
<translation>Adaptation succeeded.</translation>
</message>
<message>
<source>MG_ADAPT_DIAG_2</source>
<translation>Adaptation failed.</translation>
</message>
<message>
<source>MEN_CONV_TO_QUAD</source>
<translation>Convert to/from quadratic</translation>
@ -788,6 +908,10 @@
<source>MEN_MODIFY</source>
<translation>Modification</translation>
</message>
<message>
<source>MEN_ADAPT</source>
<translation>Adaptation</translation>
</message>
<message>
<source>MEN_MEASURE</source>
<translation>Measurements</translation>
@ -1502,6 +1626,10 @@ Please enter correct values and try again</translation>
<source>SMESH_AVAILABLE</source>
<translation>Available</translation>
</message>
<message>
<source>SMESH_NOT_AVAILABLE</source>
<translation>Not available</translation>
</message>
<message>
<source>SMESH_AVAILABLE_ALGORITHMS</source>
<translation>Available algorithms</translation>
@ -2897,6 +3025,82 @@ Check algorithm documentation for supported geometry</translation>
<source>SMESH_MULTICOLOR</source>
<translation>Multicolor</translation>
</message>
<message>
<source>ADAPT_PREF_TAB_GENERAL</source>
<translation>Adaptation</translation>
</message>
<message>
<source>ADAPT_PREF_NONE</source>
<translation>None</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT</source>
<translation>Adaptation with MG-Adapt</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT</source>
<translation>Write the OUT mesh</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT</source>
<translation>Publication of the OUT mesh</translation>
</message>
<message>
<source>OPTION_VALUE_COLUMN</source>
<translation>Option</translation>
</message>
<message>
<source>OPTION_NAME_COLUMN</source>
<translation>Value</translation>
</message>
<message>
<source>compute_ridges</source>
<translation>Compute ridges</translation>
</message>
<message>
<source>max_memory</source>
<translation>Maximum memory (Mb)</translation>
</message>
<message>
<source>Adaption</source>
<translation>adaptation</translation>
</message>
<message>
<source>components</source>
<translation>Components</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP</source>
<translation>Size map</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL</source>
<translation>Local</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND</source>
<translation>Background</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST</source>
<translation>Last</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP</source>
<translation>Choosen time step</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP_C</source>
<translation>Value</translation>
</message>
<message>
<source>MG_ADAPT_SELECT_FILE_0</source>
<translation>MG-ADAPT select file</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_ADVOP</source>
<translation>Advanced Options</translation>
</message>
<message>
<source>SMESH_VISU_PROBLEM</source>
<translation>Mesh visualization failed</translation>
@ -3112,6 +3316,10 @@ Use Display Entity menu command to show them.
<source>STB_CONSTRUCT_GROUP</source>
<translation>Construct Group</translation>
</message>
<message>
<source>STB_MG_ADAPT</source>
<translation>Remesh with MG_Adapt</translation>
</message>
<message>
<source>STB_CONV_TO_QUAD</source>
<translation>Convert to/from quadratic</translation>
@ -3708,6 +3916,10 @@ Use Display Entity menu command to show them.
<source>TB_CTRL3D</source>
<translation>Volume Controls Toolbar</translation>
</message>
<message>
<source>TB_ADAPTATION</source>
<translation>Adaptation Toolbar</translation>
</message>
<message>
<source>TB_MEASUREM</source>
<translation>Measurements Toolbar</translation>
@ -3812,6 +4024,10 @@ Use Display Entity menu command to show them.
<source>TOP_CONSTRUCT_GROUP</source>
<translation>Construct Group</translation>
</message>
<message>
<source>TOP_MG_ADAPT</source>
<translation>Remesh with MG_Adapt</translation>
</message>
<message>
<source>TOP_CONV_TO_QUAD</source>
<translation>Convert to/from quadratic</translation>
@ -4443,8 +4659,8 @@ Use Display Entity menu command to show them.
<message>
<source>FULL_RECOMPUTE_QUESTION</source>
<translation>
The mesh has been edited since a last total re-compute
that may prevent successful computation.
The mesh has been edited since a last total re-compute
that may prevent successful computation.
Do you wish to re-compute the mesh totally to discard the modifications?
</translation>
</message>
@ -6637,7 +6853,7 @@ Please specify them and try again</translation>
<message>
<source>GEOMETRY_OBJECT_IS_NOT_DEFINED_MESH</source>
<translation>Geometry object is not defined.
Do you want to create an empty mesh
Do you want to create an empty mesh
without algorithms and hypotheses? </translation>
</message>
<message>
@ -6712,7 +6928,7 @@ select mesh or sub-mesh and try again</translation>
<message>
<source>CONCURRENT_SUBMESH_APPEARS</source>
<translation>
The assigned algorithm has the same priority as one assigned to an
The assigned algorithm has the same priority as one assigned to an
adjacent sub-mesh, hence it&apos;s undefined which algorithm to use for
meshing boundary shared by two sub-meshes. Would you like to set
the order of sub-mesh computation? </translation>
@ -8322,7 +8538,7 @@ as they are of improper type:
<message>
<source>SUBSHAPES_NOT_FOUND_MSG</source>
<translation>
Some sub-shapes not found in the new geometry. They are listed
Some sub-shapes not found in the new geometry. They are listed
below along with dependent mesh objects that are marked with
red in the Object Browser.</translation>
</message>

View File

@ -340,6 +340,126 @@
<source>MEN_CONSTRUCT_GROUP</source>
<translation>Construire un groupe</translation>
</message>
<message>
<source>MEN_MG_ADAPT</source>
<translation>Remaillage avec MG_Adapt</translation>
</message>
<message>
<source>Args</source>
<translation>Arguments</translation>
</message>
<message>
<source>MeshOut</source>
<translation>Maillage en sortie</translation>
</message>
<message>
<source>MeshIn</source>
<translation>Maillage en entrée</translation>
</message>
<message>
<source>MEDFile</source>
<translation>Fichier MED</translation>
</message>
<message>
<source>Browser</source>
<translation>Arbre d'études</translation>
</message>
<message>
<source>Publish_MG_ADAPT</source>
<translation>Publication</translation>
</message>
<message>
<source>SIZE_MAP_FIELD</source>
<translation>Champ de la carte de taille</translation>
</message>
<message>
<source>MG_ADAPT_FIELD_NAME</source>
<translation>Nom du champ</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_1</source>
<translation>Ce fichier MED est illisible.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_2</source>
<translation>Ce fichier MED ne contient aucun maillage.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_3</source>
<translation>Ce fichier MED contient plus d'un maillage.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_4</source>
<translation>Impossible de lire le maillage de ce fichier MED.</translation>
</message>
<message>
<source>MG_ADAPT_MED_FILE_5</source>
<translation>Ce fichier MED ne contient aucun champ.</translation>
</message>
<message>
<source>MG_ADAPT_ERROR</source>
<translation>Erreur</translation>
</message>
<message>
<source>MG_ADAPT_CH_ST</source>
<translation>Pas de temps choisi</translation>
</message>
<message>
<source>MG_ADAPT_RANK</source>
<translation>Numéro d'ordre</translation>
</message>
<message>
<source>MG_ADAPT_TSTP</source>
<translation>Pas de temps </translation>
</message>
<message>
<source>MG_ADAPT_NO_T_ST</source>
<translation>Sans pas de temps</translation>
</message>
<message>
<source>MG_ADAPT_L_ST</source>
<translation>Dernier pas de temps</translation>
</message>
<message>
<source>MeshName</source>
<translation>Nom du maillage</translation>
</message>
<message>
<source>LOCAL_MG_ADAPT</source>
<translation>Locale</translation>
</message>
<message>
<source>BACKGRND_MG_ADAPT</source>
<translation>Arrière-plan</translation>
</message>
<message>
<source>CNST_MG_ADAPT</source>
<translation>Constante</translation>
</message>
<message>
<source>MED_FILE_BCKG</source>
<translation>Fichier MED de la carte en arrière-plan</translation>
</message>
<message>
<source>VALUE_MG_ADAPT</source>
<translation>Valeur</translation>
</message>
<message>
<source>SIZE_MAP_DEF</source>
<translation>Définition de la carte de taille</translation>
</message>
<message>
<source>ADVOP</source>
<translation>Options avancées</translation>
</message>
<message>
<source>MG_ADAPT_DIAG_1</source>
<translation>Adaptation réussie.</translation>
</message>
<message>
<source>MG_ADAPT_DIAG_2</source>
<translation>Echec de l'adaptation.</translation>
</message>
<message>
<source>MEN_CONV_TO_QUAD</source>
<translation>Convertir vers/depuis quadratique</translation>
@ -482,7 +602,7 @@
</message>
<message>
<source>MEN_EDIT</source>
<translation>Edition</translation>
<translation>Editer</translation>
</message>
<message>
<source>MEN_EDIT_GROUP</source>
@ -788,6 +908,10 @@
<source>MEN_MODIFY</source>
<translation>Modification</translation>
</message>
<message>
<source>MEN_ADAPT</source>
<translation>Adaptation</translation>
</message>
<message>
<source>MEN_MEASURE</source>
<translation>Outils de mesure</translation>
@ -2895,6 +3019,82 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée
<source>SMESH_MULTICOLOR</source>
<translation>Multicouleur</translation>
</message>
<message>
<source>ADAPT_PREF_TAB_GENERAL</source>
<translation>Adaptation</translation>
</message>
<message>
<source>ADAPT_PREF_NONE</source>
<translation>Sans</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT</source>
<translation>Adaptation avec MG-Adapt</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT</source>
<translation>Ecriture du maillage de sortie</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT</source>
<translation>Publication du maillage de sortie</translation>
</message>
<message>
<source>OPTION_VALUE_COLUMN</source>
<translation>Option</translation>
</message>
<message>
<source>OPTION_NAME_COLUMN</source>
<translation>Valeur</translation>
</message>
<message>
<source>compute_ridges</source>
<translation>Calcul des crêtes</translation>
</message>
<message>
<source>max_memory</source>
<translation>Maximum mémoire (Mb)</translation>
</message>
<message>
<source>Adaption</source>
<translation>Adaptation</translation>
</message>
<message>
<source>components</source>
<translation>Composantes</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP</source>
<translation>Carte de tailles</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL</source>
<translation>Locale</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND</source>
<translation>Arrière-plan</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST</source>
<translation>Dernier</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP</source>
<translation>Choix du pas de temps</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_TIME_STEP_C</source>
<translation>Valeur</translation>
</message>
<message>
<source>MG_ADAPT_SELECT_FILE_0</source>
<translation>MG-ADAPT selection fichier MED</translation>
</message>
<message>
<source>ADAPT_PREF_MG_ADAPT_ADVOP</source>
<translation>Options avancées</translation>
</message>
<message>
<source>SMESH_VISU_PROBLEM</source>
<translation>Impossible de visualiser le maillage, probablement à cause d'un manque de mémoire</translation>
@ -3111,6 +3311,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
<source>STB_CONSTRUCT_GROUP</source>
<translation>Construire un groupe</translation>
</message>
<message>
<source>STB_MG_ADAPT</source>
<translation>Remaillage avec MG_Adapt</translation>
</message>
<message>
<source>STB_CONV_TO_QUAD</source>
<translation>Convertir vers/depuis quadratique</translation>
@ -3707,6 +3911,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
<source>TB_CTRL3D</source>
<translation>Barre des contrôles des volumes</translation>
</message>
<message>
<source>TB_ADAPTATION</source>
<translation>Barre de l'adaptation</translation>
</message>
<message>
<source>TB_MEASUREM</source>
<translation>Barre des mesures</translation>
@ -3811,6 +4019,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
<source>TOP_CONSTRUCT_GROUP</source>
<translation>Construire un groupe</translation>
</message>
<message>
<source>TOP_MG_ADAPT</source>
<translation>Remaillage avec MG_Adapt</translation>
</message>
<message>
<source>TOP_CONV_TO_QUAD</source>
<translation>Convertir vers/de quadratique</translation>

View File

@ -40,6 +40,7 @@ INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/src/SMESHUtils
${PROJECT_BINARY_DIR}
${PROJECT_BINARY_DIR}/idl
${MEDCOUPLING_INCLUDE_DIRS}
)
# additional preprocessor / compiler flags
@ -84,6 +85,7 @@ SET(_link_LIBRARIES
SMESHDS
SMESHControls
MeshDriverMED
${MEDCoupling_medloader}
)
# --- headers ---
@ -113,6 +115,7 @@ SET(SMESHEngine_HEADERS
SMESH_MeshPartDS.hxx
SMESH.hxx
SMESH_Component_Generator.hxx
MG_ADAPT_i.hxx
)
# --- sources ---
@ -141,6 +144,7 @@ SET(SMESHEngine_SOURCES
SMESH_Measurements_i.cxx
SMESH_PreMeshInfo.cxx
SMESH_Component_Generator.cxx
MG_ADAPT_i.cxx
)
# --- rules ---

528
src/SMESH_I/MG_ADAPT_i.cxx Normal file
View File

@ -0,0 +1,528 @@
// Copyright (C) 2011-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "MG_ADAPT_i.hxx"
#include "string.h"
#include "SMESH_Gen_i.hxx"
#include <SMESH_Gen.hxx>
#include <SALOMEconfig.h>
#include CORBA_CLIENT_HEADER(SALOMEDS)
//=============================================================================
/*!
* SMESH_Gen_i::CreateMG_ADAPT
*
* Create measurement instance
*/
//=============================================================================
using namespace SMESH;
void MG_ADAPT_i::copyHypothesisDataToImpl(const SMESH::MgAdaptHypothesisData& from, ::MG_ADAPT::MgAdaptHypothesisData* to) const
{
to->myFileInDir = from.myFileInDir;
to->myMeshFileIn = from.myMeshFileIn;
to->myMeshFileBackground = from.myMeshFileBackground;
to->myOutMeshName = from.myOutMeshName;
to->myMeshFileOut = from.myMeshFileOut;
to->myFileOutDir = from.myFileOutDir;
to->myFileSizeMapDir = from.myFileSizeMapDir;
to->myFieldName = from.myFieldName;
to->fromMedFile = from.fromMedFile;
to->myPublish = from.myPublish;
to->myMeshOutMed = from.myMeshOutMed;
to->myUseLocalMap = from.myUseLocalMap;
to->myUseBackgroundMap = from.myUseBackgroundMap;
to->myUseConstantValue = from.myUseConstantValue;
to->myConstantValue = from.myConstantValue;
to->myTimeStep = from.myTimeStep;
to->myRank = from.myRank;
to->myUseNoTimeStep = from.myUseNoTimeStep;
to->myUseLastTimeStep = from.myUseLastTimeStep;
to->myUseChosenTimeStep = from.myUseChosenTimeStep;
to->myWorkingDir = from.myWorkingDir;
to->myLogFile = from.myLogFile;
to->myPrintLogInFile = from.myPrintLogInFile;
to->myKeepFiles = from.myKeepFiles;
to->myRemoveLogOnSuccess = from.myRemoveLogOnSuccess;
to->myVerboseLevel = from.myVerboseLevel;
}
void MG_ADAPT_i::copyHypothesisDataFromImpl(const ::MG_ADAPT::MgAdaptHypothesisData* from, SMESH::MgAdaptHypothesisData* to) const
{
to->myFileInDir = CORBA::string_dup(from->myFileInDir.c_str());
to->myMeshFileIn = CORBA::string_dup(from->myMeshFileIn.c_str());
to->myMeshFileBackground = CORBA::string_dup(from->myMeshFileBackground.c_str());
to->myOutMeshName = CORBA::string_dup(from->myOutMeshName.c_str());
to->myMeshFileOut = CORBA::string_dup(from->myMeshFileOut.c_str());
to->myFileOutDir = CORBA::string_dup(from->myFileOutDir.c_str());
to->myFileSizeMapDir = CORBA::string_dup(from->myFileSizeMapDir.c_str());
to->myFieldName = CORBA::string_dup(from->myFieldName.c_str());
to->fromMedFile = from->fromMedFile;
to->myPublish = from->myPublish;
to->myMeshOutMed = from->myMeshOutMed;
to->myUseLocalMap = from->myUseLocalMap;
to->myUseBackgroundMap = from->myUseBackgroundMap;
to->myUseConstantValue = from->myUseConstantValue;
to->myConstantValue = from->myConstantValue;
to->myTimeStep = from->myTimeStep;
to->myRank = from->myRank;
to->myUseNoTimeStep = from->myUseNoTimeStep;
to->myUseLastTimeStep = from->myUseLastTimeStep;
to->myUseChosenTimeStep = from->myUseChosenTimeStep;
to->myWorkingDir = CORBA::string_dup(from->myWorkingDir.c_str());
to->myLogFile = CORBA::string_dup(from->myLogFile.c_str());
to->myPrintLogInFile = from->myPrintLogInFile;
to->myKeepFiles = from->myKeepFiles;
to->myRemoveLogOnSuccess = from->myRemoveLogOnSuccess;
to->myVerboseLevel = from->myVerboseLevel;
}
SMESH::MG_ADAPT_ptr SMESH_Gen_i::CreateMG_ADAPT()
{
SMESH::MG_ADAPT_i* aMGadapt = new SMESH::MG_ADAPT_i();
SMESH::MG_ADAPT_var anObj = aMGadapt->_this();
return anObj._retn();
}
SMESH::MG_ADAPT_ptr SMESH_Gen_i::CreateAdaptationHypothesis()
{
SMESH::MG_ADAPT_i* aMGadapt = new SMESH::MG_ADAPT_i();
SMESH::MG_ADAPT_var anObj = aMGadapt->_this();
return anObj._retn();
}
SMESH::MG_ADAPT_OBJECT_ptr SMESH_Gen_i::Adaptation( const char* adaptationType)
{
if (!strcmp(adaptationType, "MG_Adapt"))
{
SMESH::MG_ADAPT_OBJECT_i* mg_adapt_object = new SMESH::MG_ADAPT_OBJECT_i();
SMESH::MG_ADAPT_OBJECT_var anObj = mg_adapt_object->_this();
return anObj._retn();
}
}
//~SMESH::MG_ADAPT_ptr MG_ADAPT_i::CreateMG_ADAPT()
//~{
//~SMESH_Gen_i* smeshGen_i = SMESH_Gen_i::GetSMESHGen();
//~SMESH::MG_ADAPT_i* aMGadapt = new SMESH::MG_ADAPT_i(smeshGen_i->GetPOA());
//~SMESH::MG_ADAPT_var anObj = aMGadapt->_this();
//~return anObj._retn();
//~}
//=============================================================================
/*!
* standard constructor
*/
//=============================================================================
MG_ADAPT_i::MG_ADAPT_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
{
myMgAdapt = new ::MG_ADAPT::MgAdapt();
}
//~MG_ADAPT_i::MG_ADAPT_i(PortableServer::POA_var myPoa): SALOME::GenericObj_i( myPoa )
//~{
//~myMgAdapt = new ::MG_ADAPT::MgAdapt();
//~}
//=============================================================================
/*!
* standard constructor
*/
//=============================================================================
//~MG_ADAPT_i::MG_ADAPT_i( CORBA::ORB_ptr orb,
//~ADAPT::ADAPT_Gen_var engine )
//~{
//~_gen_i = engine;
//~_orb = orb;
//~myMgAdapt = new MgAdapt();
//~}
//=============================================================================
/*!
* standard destructor
*/
//=============================================================================
MG_ADAPT_i::~MG_ADAPT_i()
{
}
void MG_ADAPT_i::setData( SMESH::MgAdaptHypothesisData& data)
{
::MG_ADAPT::MgAdaptHypothesisData* baseData = new ::MG_ADAPT::MgAdaptHypothesisData();
copyHypothesisDataToImpl(data, baseData);
myMgAdapt->setData(baseData);
delete baseData;
}
void MG_ADAPT_i::setMedFileIn(const char* str)
{
myMgAdapt->setMedFileIn(str);
}
char* MG_ADAPT_i::getMedFileIn()
{
return CORBA::string_dup(myMgAdapt->getMedFileIn().c_str());
}
void MG_ADAPT_i::setMedFileOut(const char* str)
{
myMgAdapt->setMedFileOut(str);
}
char* MG_ADAPT_i::getMedFileOut()
{
return CORBA::string_dup(myMgAdapt->getMedFileOut().c_str());
}
void MG_ADAPT_i::setMeshName(const char* str)
{
myMgAdapt->setMeshName(str);
}
char* MG_ADAPT_i::getMeshName()
{
return CORBA::string_dup(myMgAdapt->getMeshName().c_str());
}
void MG_ADAPT_i::setMeshNameOut(const char* str)
{
myMgAdapt->setMeshNameOut(str);
}
char* MG_ADAPT_i::getMeshNameOut()
{
return CORBA::string_dup(myMgAdapt->getMeshNameOut().c_str());
}
void MG_ADAPT_i::setMeshOutMed(bool mybool)
{
myMgAdapt->setMeshOutMed(mybool);
}
bool MG_ADAPT_i::getMeshOutMed()
{
return myMgAdapt->getMeshOutMed();
}
void MG_ADAPT_i::setPublish(bool mybool)
{
myMgAdapt->setPublish(mybool);
}
bool MG_ADAPT_i::getPublish()
{
return myMgAdapt->getPublish();
}
void MG_ADAPT_i::setSizeMapFieldName(const char* str)
{
myMgAdapt->setFieldName(str);
}
char* MG_ADAPT_i::getSizeMapFieldName()
{
return CORBA::string_dup(myMgAdapt->getFieldName().c_str());
}
void MG_ADAPT_i::setTimeStep(CORBA::Long t)
{
myMgAdapt->setTimeStep(t);
}
CORBA::Long MG_ADAPT_i::getTimeStep()
{
return myMgAdapt->getTimeStep();
}
void MG_ADAPT_i::setTimeStepRank(CORBA::Long t, CORBA::Long r)
{
myMgAdapt->setChosenTimeStepRank();
myMgAdapt->setRankTimeStep(t, r);
}
CORBA::Long MG_ADAPT_i::getRank()
{
return myMgAdapt->getRank();
}
void MG_ADAPT_i::setTimeStepRankLast()
{
myMgAdapt->setTimeStepRankLast();
}
void MG_ADAPT_i::setNoTimeStep()
{
myMgAdapt->setNoTimeStep();
}
void MG_ADAPT_i::setLogFile(const char* str)
{
myMgAdapt->setLogFile(str);
}
char* MG_ADAPT_i::getLogFile()
{
return CORBA::string_dup(myMgAdapt->getLogFile().c_str());
}
void MG_ADAPT_i::setVerbosityLevel(CORBA::Long v)
{
myMgAdapt->setVerbosityLevel(v);
}
CORBA::Long MG_ADAPT_i::getVerbosityLevel()
{
return myMgAdapt->getVerbosityLevel();
}
void MG_ADAPT_i::setRemoveOnSuccess(bool mybool)
{
myMgAdapt->setRemoveOnSuccess(mybool);
}
bool MG_ADAPT_i::getRemoveOnSuccess()
{
myMgAdapt->getRemoveOnSuccess();
}
SMESH::MgAdaptHypothesisData* MG_ADAPT_i::getData()
{
SMESH::MgAdaptHypothesisData* result = new SMESH::MgAdaptHypothesisData();
::MG_ADAPT::MgAdaptHypothesisData* from = myMgAdapt->getData();
copyHypothesisDataFromImpl(from, result);
return result;
}
void MG_ADAPT_i::setUseLocalMap(bool mybool)
{
myMgAdapt->setUseLocalMap(mybool);
}
bool MG_ADAPT_i::getUseLocalMap()
{
return myMgAdapt->getUseLocalMap();
}
void MG_ADAPT_i::setUseBackgroundMap(bool mybool)
{
myMgAdapt->setUseBackgroundMap(mybool);
}
bool MG_ADAPT_i::getUseBackgroundMap()
{
return myMgAdapt->getUseBackgroundMap();
}
void MG_ADAPT_i::setUseConstantValue(bool mybool)
{
myMgAdapt->setUseConstantValue(mybool);
}
bool MG_ADAPT_i::getUseConstantValue()
{
return myMgAdapt->getUseConstantValue();
}
void MG_ADAPT_i::setConstantSize(double value)
{
myMgAdapt->setConstantValue(value);
}
double MG_ADAPT_i::getConstantSize()
{
return myMgAdapt->getConstantValue();
}
void MG_ADAPT_i::setSizeMapFile(const char* str)
{
myMgAdapt->setSizeMapFile(str);
}
char* MG_ADAPT_i::getSizeMapFile()
{
return CORBA::string_dup(myMgAdapt->getSizeMapFile().c_str());
}
void MG_ADAPT_i::setFromMedFile(bool mybool)
{
myMgAdapt->setFromMedFile(mybool);
}
bool MG_ADAPT_i::isFromMedFile()
{
return myMgAdapt->isFromMedFile();
}
void MG_ADAPT_i::setKeepWorkingFiles(bool mybool)
{
myMgAdapt->setKeepWorkingFiles(mybool);
}
bool MG_ADAPT_i::getKeepWorkingFiles()
{
return myMgAdapt->getKeepWorkingFiles();
}
//~void MG_ADAPT_i::setPrCORBA::LongLogInFile(bool);
//~bool MG_ADAPT_i::getPrCORBA::LongLogInFile();
void MG_ADAPT_i::setSizeMapType(const char* type)
{
setUseLocalMap(false);
setUseBackgroundMap(false);
setUseConstantValue(false);
if (!strcmp("Local", type))
setUseLocalMap(true);
else if (!strcmp("Background", type))
setUseBackgroundMap(true);
else
setUseConstantValue(true);
}
void MG_ADAPT_i::setWorkingDir(const char* dir)
{
myMgAdapt->setWorkingDir(dir);
}
char* MG_ADAPT_i::getWorkingDir()
{
return CORBA::string_dup(myMgAdapt->getWorkingDir().c_str());
}
bool MG_ADAPT_i::setAll()
{
return myMgAdapt->setAll();
}
char* MG_ADAPT_i::getCommandToRun()
{
return CORBA::string_dup(myMgAdapt->getCommandToRun().c_str());
}
void MG_ADAPT_i::compute()
{
errStr = "";
try
{
myMgAdapt->compute(errStr);
}
catch (const std::exception& e)
{
std::ostringstream oss; oss << "Exception thrown on MG_ADAPT_i::compute invocation with error message \"" << errStr
<< "\" with exception message \"" << e.what() << "\"";
THROW_SALOME_CORBA_EXCEPTION(oss.str().c_str(),SALOME::INTERNAL_ERROR);
}
if(myMgAdapt->getPublish())
{
SMESH_Gen_i* smeshGen_i = SMESH_Gen_i::GetSMESHGen();
SMESH::DriverMED_ReadStatus theStatus;
smeshGen_i->CreateMeshesFromMED(myMgAdapt->getMedFileOut().c_str(), theStatus);
}
}
char* MG_ADAPT_i::getErrMsg()
{
return CORBA::string_dup(errStr.c_str());
}
char* MG_ADAPT_i::getFileName()
{
return CORBA::string_dup(myMgAdapt->getFileName().c_str());
}
char* MG_ADAPT_i::getExeName()
{
return CORBA::string_dup(myMgAdapt->getExeName().c_str());
}
void MG_ADAPT_i::copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data)
{
::MG_ADAPT::MgAdaptHypothesisData* baseData = new ::MG_ADAPT::MgAdaptHypothesisData();
copyHypothesisDataToImpl(data, baseData);
myMgAdapt->copyMgAdaptHypothesisData(baseData);
delete baseData;
}
//~void MG_ADAPT_i::checkDirPath(char*& str)
//~{
//~myMgAdapt->checkDirPath(str);
//~}
bool MG_ADAPT_i::hasOptionDefined( const char* optionName )
{
return myMgAdapt->hasOptionDefined(optionName);
}
void MG_ADAPT_i::setOptionValue(const char* optionName,
const char* optionValue) throw (std::invalid_argument)
{
myMgAdapt->setOptionValue(optionName, optionValue);
}
char* MG_ADAPT_i::getOptionValue(const char* optionName,
bool& isDefault) throw (std::invalid_argument)
{
return CORBA::string_dup(myMgAdapt->getOptionValue(optionName, &isDefault).c_str());
}
str_array* MG_ADAPT_i::getCustomOptionValuesStrVec()
{
SMESH::str_array_var result = new SMESH::str_array();
std::vector <std::string> vals = myMgAdapt->getCustomOptionValuesStrVec();
result->length(vals.size());
for (int i = 0; i<vals.size(); i++) result[i] = CORBA::string_dup(vals[i].c_str());
return result._retn();
}
str_array* MG_ADAPT_i::getOptionValuesStrVec()
{
SMESH::str_array_var result = new SMESH::str_array();
std::vector <std::string> vals = myMgAdapt->getOptionValuesStrVec();
result->length(vals.size());
for (int i = 0; i<vals.size(); i++) result[i] = CORBA::string_dup(vals[i].c_str());
return result._retn();
}
void MG_ADAPT_i::setPrintLogInFile(bool mybool)
{
myMgAdapt->setPrintLogInFile(mybool);
}
bool MG_ADAPT_i::getPrintLogInFile()
{
return myMgAdapt->getPrintLogInFile();
}
//~TOptionValues MG_ADAPT_i::getOptionValues() const;
//~const TOptionValues& MG_ADAPT_i::getCustomOptionValues() const ;
MG_ADAPT_OBJECT_i::MG_ADAPT_OBJECT_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
{
medFileIn="";
medFileOut="";
medFileBackground="";
publish = false;
//~myMesh = CORBA::nil;
}
void MG_ADAPT_OBJECT_i::setMeshIn(SMESH::SMESH_Mesh_ptr theMesh )
{
myMesh = SMESH::SMESH_Mesh::_duplicate(theMesh);
}
void MG_ADAPT_OBJECT_i::setMEDFileIn(const char* f)
{
medFileIn = f;
}
void MG_ADAPT_OBJECT_i::setMEDFileOut(const char* f)
{
medFileOut = f;
}
void MG_ADAPT_OBJECT_i::setMEDFileBackground(const char* f)
{
medFileBackground = f;
}
void MG_ADAPT_OBJECT_i::AddHypothesis(SMESH::MG_ADAPT_ptr mg)
{
mg->setMedFileIn(medFileIn.c_str());
mg->setMedFileOut(medFileOut.c_str());
mg->setSizeMapFile(medFileBackground.c_str());
hypothesis = SMESH::MG_ADAPT::_duplicate(mg);
}
CORBA::Long MG_ADAPT_OBJECT_i::Compute(bool publish)
{
if(!checkMeshFileIn()){
std::cerr<< "\n Error : Please check the MED file input or mesh input. \n";
return -1;
}
hypothesis->setPublish(publish);
hypothesis->compute();
return 0;
}
bool MG_ADAPT_OBJECT_i::checkMeshFileIn()
{
bool ret = false; // 1 ok , 0 nook
if(!::MG_ADAPT::MgAdapt::isFileExist(medFileIn))
{
if(!myMesh->_is_nil())
{
bool toOverwrite = true;
bool toFindOutDim = true;
medFileIn = hypothesis->getFileName();
medFileIn+= ".med";
myMesh->ExportMED(medFileIn.c_str(), false, -1, toOverwrite, toFindOutDim);
hypothesis->setMedFileIn(medFileIn.c_str());
ret = true;
}
}
else
ret = true;
return ret;
}

162
src/SMESH_I/MG_ADAPT_i.hxx Normal file
View File

@ -0,0 +1,162 @@
#ifndef MG_ADAPT_I_HXX
#define MG_ADAPT_I_HXX
#include "MG_ADAPT.hxx"
#include "SMESH.hxx"
#include <SALOMEconfig.h>
//~#include CORBA_SERVER_HEADER(ADAPT_Gen)
#include CORBA_SERVER_HEADER(MG_ADAPT)
#include "SALOME_GenericObj_i.hh"
#include "SALOME_Component_i.hxx"
#include "SALOME_NamingService.hxx"
#include "Utils_CorbaException.hxx"
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
//~struct MgAdaptHypothesisData;
//~static void copyHypothesisDataToImpl(SMESH::MgAdaptHypothesisData& from, MG_ADAPT::MgAdaptHypothesisData* to);
//~static void copyHypothesisDataFromImpl(MG_ADAPT::MgAdaptHypothesisData* from, SMESH::MgAdaptHypothesisData& to);
//~class MgAdapt;
namespace SMESH
{
class SMESH_I_EXPORT MG_ADAPT_i :
public virtual SALOME::GenericObj_i,
public virtual POA_SMESH::MG_ADAPT
{
public:
//~MG_ADAPT_i( CORBA::ORB_ptr orb, ADAPT::ADAPT_Gen_var gen_i );
//~static SMESH::MG_ADAPT_ptr CreateMG_ADAPT();
//~MG_ADAPT_i(PortableServer::POA_var poa);
MG_ADAPT_i();
virtual ~MG_ADAPT_i();
//~void setData( SMESH::MgAdaptHypothesisData* data);
void setData( SMESH::MgAdaptHypothesisData& data);
void setMedFileIn(const char* str);
char* getMedFileIn();
void setMedFileOut(const char* str);
char* getMedFileOut();
void setMeshName(const char* str);
char* getMeshName();
void setMeshNameOut(const char* str);
char* getMeshNameOut();
void setMeshOutMed(bool mybool);
bool getMeshOutMed();
void setPublish(bool mybool);
bool getPublish();
void setSizeMapFieldName(const char* str);
char* getSizeMapFieldName();
void setTimeStep(CORBA::Long t);
CORBA::Long getTimeStep() ;
void setTimeStepRank(CORBA::Long t, CORBA::Long r );
CORBA::Long getRank();
void setTimeStepRankLast();
void setNoTimeStep();
void setLogFile(const char* str);
char* getLogFile();
void setVerbosityLevel(CORBA::Long v);
CORBA::Long getVerbosityLevel();
void setRemoveOnSuccess(bool mybool);
bool getRemoveOnSuccess();
SMESH::MgAdaptHypothesisData* getData() ;
void setSizeMapType(const char* type);
void setUseLocalMap(bool mybool);
bool getUseLocalMap();
void setUseBackgroundMap(bool mybool);
bool getUseBackgroundMap();
void setUseConstantValue(bool mybool);
bool getUseConstantValue();
void setConstantSize(double value);
double getConstantSize();
void setSizeMapFile(const char* str);
char* getSizeMapFile();
void setFromMedFile(bool mybool);
bool isFromMedFile();
void setKeepWorkingFiles(bool mybool);
bool getKeepWorkingFiles();
//~void setPrCORBA::LongLogInFile(bool);
//~bool getPrCORBA::LongLogInFile();
void setWorkingDir(const char* str);
char* getWorkingDir() ;
void setPrintLogInFile(bool mybool);
bool getPrintLogInFile();
bool setAll();
char* getCommandToRun() ;
void compute();
char* getFileName();
char* getExeName();
void copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data ) ;
//~void copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data ) {
//~copyMgAdaptHypothesisData(&data);
//~}
//~void checkDirPath(char*& str);
bool hasOptionDefined( const char* optionName ) ;
void setOptionValue(const char* optionName,
const char* optionValue) throw (std::invalid_argument);
char* getOptionValue(const char* optionName,
bool& isDefault) throw (std::invalid_argument);
str_array* getCustomOptionValuesStrVec() ;
str_array* getOptionValuesStrVec() ;
void copyHypothesisDataFromImpl(const ::MG_ADAPT::MgAdaptHypothesisData* from, SMESH::MgAdaptHypothesisData* to) const;
void copyHypothesisDataToImpl(const SMESH::MgAdaptHypothesisData& from, ::MG_ADAPT::MgAdaptHypothesisData* to) const;
//~TOptionValues getOptionValues() const;
//~const TOptionValues& getCustomOptionValues() const ;
char* getErrMsg();
private:
::MG_ADAPT::MgAdapt* myMgAdapt;
std::string errStr;
//~CORBA::ORB_ptr _orb;
//~ADAPT::ADAPT_Gen_var _gen_i;
};
class SMESH_I_EXPORT MG_ADAPT_OBJECT_i:
public virtual SALOME::GenericObj_i,
public virtual POA_SMESH::MG_ADAPT_OBJECT {
public :
MG_ADAPT_OBJECT_i();
void setMeshIn( SMESH::SMESH_Mesh_ptr theMesh );
void setMEDFileIn(const char* f);
void setMEDFileOut(const char* f);
void setMEDFileBackground(const char* f);
void AddHypothesis(SMESH::MG_ADAPT_ptr);
CORBA::Long Compute(bool Publish);
private:
std::string medFileIn, medFileOut, medFileBackground;
bool checkMeshFileIn();
bool publish;
SMESH::SMESH_Mesh_ptr myMesh;
SMESH::MG_ADAPT_ptr hypothesis;
};
}
#endif // MG_ADAPT_I_HXX

View File

@ -477,6 +477,10 @@ public:
int CountInPyDump(const TCollection_AsciiString& text);
SMESH::MG_ADAPT_ptr CreateMG_ADAPT();
SMESH::MG_ADAPT_ptr CreateAdaptationHypothesis();
SMESH::MG_ADAPT_OBJECT_ptr Adaptation( const char* adaptationType);
// *****************************************
// Internal methods
// *****************************************