From 49fb797789d9300b06ac40ba8bd7f91b0e5c61e4 Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 8 Oct 2012 13:10:21 +0000 Subject: [PATCH] Merge from V6_main (04/10/2012) --- doc/salome/gui/GHS3DPLUGIN/Makefile.am | 19 +- doc/salome/gui/GHS3DPLUGIN/doxyfile_py.in | 26 +- .../images/ghs3d_enforced_meshes.png | Bin 32993 -> 24134 bytes .../images/ghs3d_enforced_vertices.png | Bin 33075 -> 26700 bytes .../images/ghs3d_parameters_advanced.png | Bin 36277 -> 40859 bytes .../images/ghs3d_parameters_basic.png | Bin 25962 -> 20489 bytes .../gui/GHS3DPLUGIN/input/ghs3d_hypo.doc | 167 ++- .../input/ghs3dplugin_python_interface.doc | 25 +- doc/salome/gui/GHS3DPLUGIN/input/index.doc | 12 +- idl/GHS3DPlugin_Algorithm.idl | 13 +- resources/GHS3DPlugin.xml | 19 +- src/GHS3DPlugin/GHS3DPluginDC.py | 101 +- src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx | 24 +- src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx | 2 +- src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx | 622 +++++---- src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx | 32 +- src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx | 208 +-- src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.hxx | 11 +- src/GHS3DPlugin/Makefile.am | 4 +- src/GHS3DPlugin/libmesh5.c | 1192 ----------------- src/GHS3DPlugin/libmesh5.h | 152 --- src/GUI/GHS3DPluginGUI_Enums.h | 4 +- src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx | 138 +- src/GUI/GHS3DPluginGUI_HypothesisCreator.h | 6 +- src/GUI/GHS3DPlugin_msg_en.ts | 4 + src/GUI/GHS3DPlugin_msg_fr.ts | 4 + 26 files changed, 779 insertions(+), 2006 deletions(-) delete mode 100644 src/GHS3DPlugin/libmesh5.c delete mode 100755 src/GHS3DPlugin/libmesh5.h diff --git a/doc/salome/gui/GHS3DPLUGIN/Makefile.am b/doc/salome/gui/GHS3DPLUGIN/Makefile.am index dfe458e..8d25b01 100755 --- a/doc/salome/gui/GHS3DPLUGIN/Makefile.am +++ b/doc/salome/gui/GHS3DPLUGIN/Makefile.am @@ -23,16 +23,15 @@ EXTRA_DIST += images input static/footer.html static/doxygen.css guidocdir = $(docdir)/gui/GHS3DPLUGIN guidoc_DATA = images/head.png +DOC_PYTHONPATH=$(prefix)/bin/salome:$(SMESH_ROOT_DIR)/bin/salome:$(SMESH_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(MED_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(GEOM_ROOT_DIR)/bin/salome:$(GEOM_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/bin/salome:$(KERNEL_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(OMNIORB_ROOT)/lib/python$(PYTHON_VERSION)/site-packages:$(OMNIORB_ROOT)/lib64/python$(PYTHON_VERSION)/site-packages +DOC_SMESH_MeshersList=GHS3DPlugin -usr_docs: doxyfile - echo "===========================================" ; \ - echo "Generating Python interface documentation"; \ - echo "===========================================" ; \ - $(DOXYGEN) doxyfile_py \ - echo "===========================================" ; \ - echo "Generating GUI documentation" ; \ - echo "===========================================" ; \ - $(DOXYGEN) doxyfile ; +smesh.py: $(top_srcdir)/src/GHS3DPlugin/GHS3DPluginDC.py + @PYTHONPATH=$(DOC_PYTHONPATH):${PYTHONPATH} SMESH_MeshersList=$(DOC_SMESH_MeshersList) $(PYTHON) $(SMESH_ROOT_DIR)/bin/salome/collect_mesh_methods.py -d -o $@ GHS3DPlugin + +usr_docs: doxyfile_py doxyfile smesh.py + @$(DOXYGEN) doxyfile_py ; \ + $(DOXYGEN) doxyfile docs: usr_docs @@ -55,7 +54,7 @@ install-data-local: usr_docs *) echo "Installing $${filen}" ; cp -rp $${filen} $(DESTDIR)$(docdir)/gui/GHS3DPLUGIN ;; \ esac ; \ done ; - cp -rp $(srcdir)/images/head.png $(DESTDIR)$(docdir)/gui/GHS3DPLUGIN/ghs3dpluginpy_doc/ ; + cp -rfp $(srcdir)/images/head.png $(DESTDIR)$(docdir)/gui/GHS3DPLUGIN/ghs3dpluginpy_doc/ ; uninstall-local: rm -rf $(DESTDIR)$(docdir)/gui/GHS3DPLUGIN diff --git a/doc/salome/gui/GHS3DPLUGIN/doxyfile_py.in b/doc/salome/gui/GHS3DPLUGIN/doxyfile_py.in index 47082b5..84c92fa 100755 --- a/doc/salome/gui/GHS3DPLUGIN/doxyfile_py.in +++ b/doc/salome/gui/GHS3DPLUGIN/doxyfile_py.in @@ -96,7 +96,9 @@ EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = @top_srcdir@/src/GHS3DPlugin/GHS3DPluginDC.py +INPUT = @top_srcdir@/src/GHS3DPlugin/GHS3DPluginDC.py \ + smesh.py \ + @SMESH_ROOT_DIR@/bin/salome/smesh_algorithm.py FILE_PATTERNS = IMAGE_PATH = @srcdir@/images RECURSIVE = NO @@ -129,24 +131,24 @@ GENERATE_RTF = NO #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO HIDE_UNDOC_RELATIONS = NO -HAVE_DOT = NO -CLASS_GRAPH = NO +HAVE_DOT = YES +CLASS_GRAPH = YES COLLABORATION_GRAPH = NO GROUP_GRAPHS = NO UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = NO -INCLUDED_BY_GRAPH = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = NO -DIRECTORY_GRAPH = NO -DOT_IMAGE_FORMAT = jpg +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png DOT_FONTNAME = Arial DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 -MAX_DOT_GRAPH_DEPTH = 0 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = NO @@ -156,4 +158,4 @@ DOT_CLEANUP = YES #External reference options #--------------------------------------------------------------------------- GENERATE_TAGFILE = ghs3dpluginpy_doc.tag -SEARCHENGINE = YES \ No newline at end of file +SEARCHENGINE = YES diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png index 9ddc0127df92bf99b76244a00271ff76cabfa8c2..df87f7751497e8b4cc4dfbf2376f9e758e874219 100644 GIT binary patch literal 24134 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 literal 32993 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 Wq100DFUN3rl(M3lLg5XQ!2bghwoVrS diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png index d3a4bbcfa49c2ddd8d28f288c594bb7a5d207735..27768e4259a2f76d6017ab6ef7b984438f7d3a23 100644 GIT binary patch literal 26700 zcmbrmWmMJO+Aq9F>6S)Py1QFIL0UjMrArzX-3=mL0xBTVDcz{Fbc1wv*O}|yV?XbH zpELHS zfd8KY|03bu;q2yv54l`l=(x&SxR|}Sc5=0Lbb!d%nYg%EP?=j$y|ZxGaeZ&$B21;` z%I4x`YU1Q%XKiKzJ4#usRu`O10XtdK8XN>s@N#l=wX$%rcA=7SbZ~Kf?`8%&kb{2q z3<9Boyp)yF^vv4J_J9&h%=Y=usRttBDR4*z(7EDBBO)P|DQFz26C6HW|AwNFimndN z_$dKGn2>MyEdcG0FH^n~6MU+wtn90R5CZs@{M5f3>IQG+tGW)}xqG;K)X|9=iJww8 zx#Vn$Zte|aEoHg9i?bT<+fA=X2qT^>#nkN$kz`H|G9lh_6&6HDG>$_&T~j+^e#6Gr zBoy=NHYC{qTW@Dp)i130Zg|k70dvFomo1cnb3;*ewV$4saOXF@K#*r~oDOT40$q?? z!3)E5(kaE~##CXvyu64S$nJ8+3yq8%9O17@k-IoM`8K@2u{%gdBQ8EDv6t2H_dZL; zmX|RZjdN6T|5}}v7VpZI@V zRjL&Dd_N};7@tbC_FjnC_iOEnLntRYf}d%Kqp*}Qv0q~vAq0zc;;j@@zz!p zc~se+=RGl6rGatgPj6DoxQ<7m!`zTRJA zD9wLFWJbnA3=z?-?T=ZCV#Qie2=~tRHQss&nRAnTR%hZR#ngQI^yu)QPXCnAuZ!p8iH#CC{S9Q@Z2EKuCTS zdUpqvm6xZb;v8XQ>f%i3U;p`gKvqEkrMbD8io1nam~(BJnQYOW{n>lY%tbgUY6V?O z6eNM`+P?b4Sc=#-4R6e=zd!X6^z5@oTO4h@iLPqX3ykT%Uc3MQr#9`?g2%PAPT!%)=0#bL(ocebo9EH_kENo#V7XD z{A7PucM;T_ow+pfG_}fKGN2*V>c%#C98gtS&~*R(J@auRL4j_>#;xIEGdChOHdKk; zg;iPmwQ)_~&`cLr-Di(H)n%naCd|gt)@+>kggS?g#F;xR-m{Bo�q{w8dbgAhB(v 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 LRKJubZyNAl`Q-z2 literal 33075 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 u$TXTTvjINh2lhh?5QF&t`3HQmfXX3$|1%TC4{W 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 +to the solid. + +- Optimization level - allows choosing the required +optimization level (higher level of optimisation provides better mesh, +but can be time-consuming): + + - none + + - light + + - medium (standard) + + - standard+ + + - strong \ref ghs3d_top "Back to top" @@ -45,36 +42,38 @@ optimisation provides better mesh, but can be time-consuming. \image html ghs3d_parameters_advanced.png -
  • Maximum memory size - launches ghs3d software with +- Maximum memory size - launches ghs3d software with work space limited to the specified amount of RAM, in Mbytes. If this option is -checked off, the software will be launched with 7O% of the total RAM space.
  • +checked off, the software will be launched with 7O% of the total RAM space. -
  • Initial memory size - starts ghs3d software with +- Initial memory size - starts ghs3d software with the specified amount of work space, in Mbytes. If this option is checked off, the -software will be started with 100 Megabytes of working space.
  • +software will be started with 100 Megabytes of working space. -
  • Working directory - allows defining the folder for input and output -files of ghs3d software, which are the files starting with "GHS3D_" prefix.
  • +- Working directory - allows defining the folder for input and output +files of ghs3d software, which are the files starting with "GHS3D_" prefix. -
  • Keep working files - allows checking input and output files +- Keep working files - allows checking input and output files of ghs3d software, while usually these files are removed after the -launch of the mesher.
  • +launch of the mesher. -
  • Verbose level - to choose verbosity level in the range from +- Verbose level - to choose verbosity level in the range from 0 to 10. -
    • 0, no standard output, -
    • 2, prints the data, quality statistics of the skin and final -meshes and indicates when the final mesh is being saved. In addition -the software gives indication regarding the CPU time. -
    • 10, same as 2 plus the main steps in the computation, quality -statistics histogram of the skin mesh, quality statistics histogram -together with the characteristics of the final mesh. -
  • - -
  • To create new nodes - if this option is checked off, ghs3d -tries to create tetrahedrons using only the nodes of the 2D mesh.
  • - -
  • To remove the initial central point TetMesh-GHS3D adds an internal point + + - 0, no standard output, + + - 2, prints the data, quality statistics of the skin and final + meshes and indicates when the final mesh is being saved. In addition + the software gives indication regarding the CPU time. + + - 10, same as 2 plus the main steps in the computation, quality + statistics histogram of the skin mesh, quality statistics histogram + together with the characteristics of the final mesh. + +- To create new nodes - if this option is checked off, ghs3d +tries to create tetrahedrons using only the nodes of the 2D mesh. + +- To remove the initial central point TetMesh-GHS3D adds an internal point at the gravity centre of the bounding box to speed up and to simplify the meshing process. However, it is possible to refrain from creating this point by using the command line option -no initial central point. This can be @@ -86,18 +85,18 @@ Use this option if the boundary regeneration has failed with the standard parame the recovery version (command line option -C). Note: when using this option, the speed of the meshing process may decrease, and the quality may change. -Note: the boundary regeneration may fail with this option, in some rare cases.
  • +Note: the boundary regeneration may fail with this option, in some rare cases. -
  • To use boundary recovery version - enables using a +- To use boundary recovery version - enables using a boundary recovery module which tries to create volume meshes starting from very poor quality surface meshes (almost flat triangles on the surface, high density propagation, extreme aspect ratios, etc.) which fails with the standard version. The resulting volume mesh will however most likely have a very poor quality (poor aspect ratio of elements, tetrahedra with a very small -positive volume).
  • +positive volume). -
  • To use FEM correction - Applies finite-element correction by +- To use FEM correction - Applies finite-element correction by replacing overconstrained elements where it is possible. At first the process slices the overconstrained edges and at second the overconstrained facets. This ensures that there are no edges with two boundary @@ -106,24 +105,25 @@ and final overconstrained edges and facets. It also gives the facets which have three edges on the boundary. Note: when using this option, the speed of the meshing process may decrease, quality may change, and the smallest volume may be smaller. -By default, the FEM correction is not used.
  • +By default, the FEM correction is not used. -
  • Option as text - allows to input in the command line any text -for ghs3d, for example, advanced options.
  • +- Volumic gradation - Defines the volumic ratio between 2 consecutive elements. +WARNING: Changing the default value of this parameter may dramatically decrease the quality of the resulting mesh. - +- Option as text - allows to input in the command line any text +for ghs3d, for example, advanced options. \ref ghs3d_top "Back to top" \section ghs3d_enforced_vertices Enforced vertices -\note This feature is currently available only on meshes with no +\note This feature is currently partially available only on meshes with no geometry attached. Such meshes can be obtained by -
      -
    • Copying an existing mesh
    • -
    • Importing a mesh from file
    • -
    • Applying a transformation to a mesh a get result in a new mesh
    • -
    +- Copying an existing mesh +- Importing a mesh from file +- Applying a transformation to a mesh a get result in a new mesh +. +See below for more details. \image html ghs3d_enforced_vertices.png @@ -132,49 +132,38 @@ define enforced vertices in the volume where the mesh will be detailed. A node will be created at the enforced vertex coordinates. An enforced vertex is defined by: -
      -
    • A vertex
    • -
        -
      • from GEOM (Vertex, Compound)
      • -
      • or from (x,y,z) cartesian coordinates
      • -
      -
    • A constant physical size
    • -
    • If a group name is given, the created node will be added to the -group. If the group does not exist, it is created.
    • -
    +- A vertex + - from GEOM (Vertex, Compound) - only avaible on meshes with no + geometry attached + - or from (x,y,z) cartesian coordinates +- A constant physical size +- If a group name is given, the created node will be added to the +group. If the group does not exist, it is created. + \ref ghs3d_top "Back to top" \section ghs3d_enforced_meshes Enforced Meshes \note This feature is currently only available on 2D meshes with no geometry attached. Such meshes can be obtained by -
      -
    • Copying an existing 2D mesh
    • -
    • Importing a 2D mesh from file
    • -
    • Applying a transformation to a 2D mesh a get result in a new mesh
    • -
    +- Copying an existing 2D mesh +- Importing a 2D mesh from file +- Applying a transformation to a 2D mesh a get result in a new mesh \image html ghs3d_enforced_meshes.png GHS3D algorithm can be forced by other meshes, sub-meshes or groups. The constraint elements should be contained entirely into the solid mesh. -
      -
    • The constraint element types are: -
        -
      • NODE
      • -
      • EDGE
      • -
      • FACE
      • -
    • -
    • If a size is given, the mesh will be refined around the enforced -elements given the size (not available yet)
    • -
    • If a group name is given, the enforced elements will be added to -the group. If the group does not exist, it is created.
    • -
    +- The constraint element types are: + - NODE + - EDGE + - FACE +- If a group name is given, the enforced elements will be added to +the group. If the group does not exist, it is created.
    See Also a sample TUI Script of the \ref tui_ghs3d "creation of a Ghs3D hypothesis", including enforced vertices and meshes. \ref ghs3d_top "Back to top" - */ diff --git a/doc/salome/gui/GHS3DPLUGIN/input/ghs3dplugin_python_interface.doc b/doc/salome/gui/GHS3DPLUGIN/input/ghs3dplugin_python_interface.doc index 09825c1..220bd07 100644 --- a/doc/salome/gui/GHS3DPLUGIN/input/ghs3dplugin_python_interface.doc +++ b/doc/salome/gui/GHS3DPLUGIN/input/ghs3dplugin_python_interface.doc @@ -2,22 +2,19 @@ \page ghs3dplugin_python_interface_page Python Interface -Python package \ref GHS3DPluginDC "GHS3DPlugin" defines several classes, destined for creation of the 3D meshes. +Python package GHS3DPluginDC defines several classes, destined for creation of the 3D meshes. -Documentation for GHS3DPlugin package is available in linear form grouped by classes, declared in the GHS3DPluginDC.py file. +GHS3D meshing plugin dynamically adds several methods to the smesh.Mesh class to create meshing algorithms. -Below you can see an example of usage of the GHS3DPlugin package for mesh generation: +Below you can see an example of usage of the GHS3DPlugin Python API for mesh generation: \anchor tui_ghs3d -
      -
    1. \ref tui_ghs3d_basic "Construction of Mesh using Ghs3D algorithm"
    2. -
    3. \ref tui_ghs3d_enforced_vertices "Adding enforced vertices"
    4. -
    5. \ref tui_ghs3d_enforced_meshes "Adding enforced mesh"
    6. -
    +-# \ref tui_ghs3d_basic +-# \ref tui_ghs3d_enforced_vertices +-# \ref tui_ghs3d_enforced_meshes -\anchor tui_ghs3d_basic -

    Construction of Mesh using Ghs3D algorithm

    +\section tui_ghs3d_basic Construction of Mesh using Ghs3D algorithm \code import geompy @@ -42,12 +39,11 @@ ghs3dMesh.Compute() # End of script \endcode -\image html ghs3d_screenshot.png Ghs3d mesh withtout hypothesis +\image html ghs3d_screenshot.png Ghs3d mesh without hypothesis \ref tui_ghs3d "Back to top" -\anchor tui_ghs3d_enforced_vertices -

    Adding enforced vertices

    +\section tui_ghs3d_enforced_vertices Adding enforced vertices \code @@ -121,8 +117,7 @@ GHS3D_Parameters.ClearEnforcedVertices() \ref tui_ghs3d "Back to top" -\anchor tui_ghs3d_enforced_meshes -

    Adding enforced mesh

    +\section tui_ghs3d_enforced_meshes Adding enforced mesh \code diff --git a/doc/salome/gui/GHS3DPLUGIN/input/index.doc b/doc/salome/gui/GHS3DPLUGIN/input/index.doc index e39ba6d..354df11 100644 --- a/doc/salome/gui/GHS3DPLUGIN/input/index.doc +++ b/doc/salome/gui/GHS3DPLUGIN/input/index.doc @@ -2,17 +2,13 @@ \mainpage Introduction to GHS3DPLUGIN +\b GHS3DPLUGIN plugin is destined for: +- Meshing 3D geometric entities: volumes are split into tetrahedral (pyramidal) elements. +- Generating 3D meshes from 2D meshes (triangles and quadrangles), working without geometrical objects. + \note GHS3DPLUGIN plugin used GHS3D commercial mesher and require a license to be used within the Mesh module. -\n \b GHS3DPLUGIN plugin is destined for: - -
      -
    • Meshing 3D geometric entities.
    • - - Volumes are split into tetrahedral (pyramidal) elements. -
    • Generating 3D meshes from 2D meshes, working without geometrical objects.
    • -
    - To manage parameters of the GHS3DPLUGIN use \subpage ghs3d_hypo_page and \subpage additional_hypo_page Also all GHS3DPLUGIN functionalities are accessible via diff --git a/idl/GHS3DPlugin_Algorithm.idl b/idl/GHS3DPlugin_Algorithm.idl index 8af4f1e..6bb10d8 100644 --- a/idl/GHS3DPlugin_Algorithm.idl +++ b/idl/GHS3DPlugin_Algorithm.idl @@ -50,7 +50,6 @@ module GHS3DPlugin string entry; SMESH::ElementType elementType; string groupName; - double size; }; typedef sequence GHS3DEnforcedMeshList; @@ -142,6 +141,11 @@ module GHS3DPlugin */ void SetTextOption(in string option); string GetTextOption(); + /*! + * To define the volumic gradation + */ + void SetGradation(in double gradation); + double GetGradation(); /*! * To set an enforced vertex */ @@ -166,15 +170,18 @@ module GHS3DPlugin boolean SetEnforcedMesh(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType) raises (SALOME::SALOME_Exception); boolean SetEnforcedMeshWithGroup(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType, in string groupName) raises (SALOME::SALOME_Exception); + + /* OBSOLETE FUNCTIONS */ boolean SetEnforcedMeshSize(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType, in double size) raises (SALOME::SALOME_Exception); boolean SetEnforcedMeshSizeWithGroup(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType, in double size, in string groupName) raises (SALOME::SALOME_Exception); + /* OBSOLETE FUNCTIONS */ + GHS3DEnforcedMeshList GetEnforcedMeshes(); void ClearEnforcedMeshes(); /*! * Set/get/unset an enforced vertex (private method for GUI) */ - boolean p_SetEnforcedMesh(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType, - in double size, in string groupName) raises (SALOME::SALOME_Exception); + boolean p_SetEnforcedMesh(in SMESH::SMESH_IDSource theSource, in SMESH::ElementType elementType, in string name, in string groupName) raises (SALOME::SALOME_Exception); }; }; diff --git a/resources/GHS3DPlugin.xml b/resources/GHS3DPlugin.xml index 2c1ece4..b0cebaa 100644 --- a/resources/GHS3DPlugin.xml +++ b/resources/GHS3DPlugin.xml @@ -33,8 +33,25 @@ + dim="3"> + + + SetEnforcedVertex, + SetEnforcedVertexNamed, + SetEnforcedVertexWithGroup, + SetEnforcedVertexNamedWithGroup, + SetEnforcedVertexGeom, + SetEnforcedVertexGeomWithGroup, + RemoveEnforcedVertex, + RemoveEnforcedVertexGeom, + SetEnforcedMeshWithGroup, + SetEnforcedMeshSize, + SetEnforcedMeshSizeWithGroup + + + + - #
  • 0 - no standard output, - #
  • 2 - prints the data, quality statistics of the skin and final meshes and - # indicates when the final mesh is being saved. In addition the software - # gives indication regarding the CPU time. - #
  • 10 - same as 2 plus the main steps in the computation, quality statistics - # histogram of the skin mesh, quality statistics histogram together with - # the characteristics of the final mesh. + pass + + ## Set verbosity level [0-10]. + # @param level verbosity level + # - 0 - no standard output, + # - 2 - prints the data, quality statistics of the skin and final meshes and + # indicates when the final mesh is being saved. In addition the software + # gives indication regarding the CPU time. + # - 10 - same as 2 plus the main steps in the computation, quality statistics + # histogram of the skin mesh, quality statistics histogram together with + # the characteristics of the final mesh. def SetVerboseLevel(self, level): self.Parameters().SetVerboseLevel(level) + pass ## To create new nodes. + # @param toCreate "create new nodes" flag value def SetToCreateNewNodes(self, toCreate): self.Parameters().SetToCreateNewNodes(toCreate) + pass ## To use boundary recovery version which tries to create mesh on a very poor # quality surface mesh. + # @param toUse "use boundary recovery version" flag value def SetToUseBoundaryRecoveryVersion(self, toUse): self.Parameters().SetToUseBoundaryRecoveryVersion(toUse) + pass ## Applies finite-element correction by replacing overconstrained elements where # it is possible. The process is cutting first the overconstrained edges and # second the overconstrained facets. This insure that no edges have two boundary # vertices and that no facets have three boundary vertices. + # @param toUseFem "apply finite-element correction" flag value def SetFEMCorrection(self, toUseFem): self.Parameters().SetFEMCorrection(toUseFem) + pass - ## To removes initial central point. + ## To remove initial central point. + # @param toRemove "remove initial central point" flag value def SetToRemoveCentralPoint(self, toRemove): self.Parameters().SetToRemoveCentralPoint(toRemove) + pass ## To set an enforced vertex. # @param x : x coordinate @@ -133,11 +178,14 @@ class GHS3D_Algorithm(Mesh_Algorithm): return self.Parameters().SetEnforcedVertex(x, y, z, size) else: return self.Parameters().SetEnforcedVertexWithGroup(x, y, z, size, groupName) + pass else: if groupName == "": return self.Parameters().SetEnforcedVertexNamed(x, y, z, size, vertexName) else: return self.Parameters().SetEnforcedVertexNamedWithGroup(x, y, z, size, vertexName, groupName) + pass + pass ## To set an enforced vertex given a GEOM vertex, group or compound. # @param theVertex : GEOM vertex (or group, compound) to be projected on theFace. @@ -149,6 +197,7 @@ class GHS3D_Algorithm(Mesh_Algorithm): return self.Parameters().SetEnforcedVertexGeom(theVertex, size) else: return self.Parameters().SetEnforcedVertexGeomWithGroup(theVertex, size, groupName) + pass ## To remove an enforced vertex. # @param x : x coordinate @@ -174,13 +223,19 @@ class GHS3D_Algorithm(Mesh_Algorithm): return self.Parameters().SetEnforcedMesh(theSource, elementType) else: return self.Parameters().SetEnforcedMeshWithGroup(theSource, elementType, groupName) + pass else: if groupName == "": return self.Parameters().SetEnforcedMeshSize(theSource, elementType, size) else: return self.Parameters().SetEnforcedMeshSizeWithGroup(theSource, elementType, size, groupName) + pass + pass ## Sets command line option as text. + # @param option command line option def SetTextOption(self, option): self.Parameters().SetTextOption(option) + pass + pass # end of GHS3D_Algorithm class diff --git a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx index 6da9eec..68d805e 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx @@ -1001,11 +1001,13 @@ static int findShapeID(SMESH_Mesh& mesh, //purpose : Update or create groups in mesh //======================================================================= -static void addElemInMeshGroup(SMESH_Mesh* theMesh, - const SMDS_MeshElement* anElem, - std::string groupName, - std::set groupsToRemove) +static void addElemInMeshGroup(SMESH_Mesh* theMesh, + const SMDS_MeshElement* anElem, + std::string& groupName, + std::set& groupsToRemove) { + if ( !anElem ) return; // issue 0021776 + bool groupDone = false; SMESH_Mesh::GroupIteratorPtr grIt = theMesh->GetGroups(); while (grIt->more()) { @@ -1033,7 +1035,7 @@ static void addElemInMeshGroup(SMESH_Mesh* theMesh, groupDone = true; } if (!groupDone) - throw SALOME_Exception(LOCALIZED("A enforced vertex node was not added to a group")); + throw SALOME_Exception(LOCALIZED("A given element was not added to a group")); } @@ -1331,6 +1333,7 @@ static bool readGMFFile(const char* theFile, // for ( int iRef = 0; iRef < nbRef; iRef++ ) // nodeAssigne[ nodeID[ iRef ]] = 1; } + break; case GmfTetrahedra: if ( elemSearcher ) { // Issue 0020682. Avoid creating nodes and tetras at place where @@ -1779,8 +1782,8 @@ static bool writeGMFFile(const char* theMesh TopAbs_State result = pntCls->GetPointState( myPoint ); if ( result == TopAbs_OUT ) continue; - if (pntCls->FindElementsByPoint(myPoint, SMDSAbs_Node, foundElems) == 0) - continue; + //if (pntCls->FindElementsByPoint(myPoint, SMDSAbs_Node, foundElems) == 0) + //continue; // if ( result != TopAbs_IN ) // continue; @@ -1821,13 +1824,14 @@ static bool writeGMFFile(const char* theMesh return false; } int TypTab[] = {GmfSca}; + double ValTab[] = {0.0}; GmfSetKwd(idxRequired, GmfVertices, requiredNodes + solSize); GmfSetKwd(idxSol, GmfSolAtVertices, requiredNodes + solSize, 1, TypTab); // int usedEnforcedNodes = 0; // std::string gn = ""; for (ghs3dNodeIt = theRequiredNodes.begin();ghs3dNodeIt != theRequiredNodes.end();++ghs3dNodeIt) { GmfSetLin(idxRequired, GmfVertices, (*ghs3dNodeIt)->X(), (*ghs3dNodeIt)->Y(), (*ghs3dNodeIt)->Z(), dummyint); - GmfSetLin(idxSol, GmfSolAtVertices, 0.0); + GmfSetLin(idxSol, GmfSolAtVertices, ValTab); if (theEnforcedNodes.find((*ghs3dNodeIt)) != theEnforcedNodes.end()) gn = theEnforcedNodes.find((*ghs3dNodeIt))->second; aNodeGroupByGhs3dId[usedEnforcedNodes] = gn; @@ -2745,7 +2749,7 @@ static bool writePoints (ofstream & theFile, if (theEnforcedVertices.find(coords) != theEnforcedVertices.end()) continue; - double size = theNodeIDToSizeMap.find(nodeIt->first->GetID())->second; +// double size = theNodeIDToSizeMap.find(nodeIt->first->GetID())->second; // theGhs3dIdToNodeMap.insert( make_pair( nbNodes + i, (*nodeIt) )); // MESSAGE("Adding enforced node (" << x << "," << y <<"," << z << ")"); // X Y Z PHY_SIZE DUMMY_INT @@ -2753,7 +2757,7 @@ static bool writePoints (ofstream & theFile, << x << space << y << space << z << space - << size << space + << -1 << space << dummyint << space; theFile << std::endl; theEnforcedNodeIdToGhs3dIdMap.insert( make_pair( nodeIt->first->GetID(), aGhs3dID )); diff --git a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx index 7b9b02e..7be3a9f 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx +++ b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.hxx @@ -26,7 +26,7 @@ #ifndef _GHS3DPlugin_GHS3D_HXX_ #define _GHS3DPlugin_GHS3D_HXX_ -#include "SMESH_3D_Algo.hxx" +#include "SMESH_Algo.hxx" #include "SMESH_Gen.hxx" #include "SMESH_Gen_i.hxx" diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx index 7aa5341..4deccaa 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.cxx @@ -52,6 +52,7 @@ GHS3DPlugin_Hypothesis::GHS3DPlugin_Hypothesis(int hypId, int studyId, SMESH_Gen myToUseBoundaryRecoveryVersion(DefaultToUseBoundaryRecoveryVersion()), myToUseFemCorrection(DefaultToUseFEMCorrection()), myToRemoveCentralPoint(DefaultToRemoveCentralPoint()), + myGradation(DefaultGradation()), _enfVertexList(DefaultGHS3DEnforcedVertexList()), _enfVertexCoordsSizeList(DefaultGHS3DEnforcedVertexCoordsValues()), _enfVertexEntrySizeList(DefaultGHS3DEnforcedVertexEntryValues()), @@ -63,7 +64,6 @@ GHS3DPlugin_Hypothesis::GHS3DPlugin_Hypothesis(int hypId, int studyId, SMESH_Gen _enfEdges(TIDSortedElemGroupMap()), _enfTriangles(TIDSortedElemGroupMap()), _nodeIDToSizeMap(DefaultID2SizeMap()), - _elementIDToSizeMap(DefaultID2SizeMap()), _groupsToRemove(DefaultGroupsToRemove()) { _name = "GHS3D_Parameters"; @@ -329,6 +329,27 @@ std::string GHS3DPlugin_Hypothesis::GetTextOption() const return myTextOption; } +//======================================================================= +//function : SetGradation +//======================================================================= + +void GHS3DPlugin_Hypothesis::SetGradation(double gradation) +{ + if ( myGradation != gradation ) { + myGradation = gradation; + NotifySubMeshesHypothesisModification(); + } +} + +//======================================================================= +//function : GetGradation +//======================================================================= + +double GHS3DPlugin_Hypothesis::GetGradation() const +{ + return myGradation; +} + //======================================================================= //function : SetEnforcedVertex //======================================================================= @@ -419,20 +440,19 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedVertex(std::string theName, std::string //======================================================================= //function : SetEnforcedMesh //======================================================================= -bool GHS3DPlugin_Hypothesis::SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::ElementType elementType, std::string name, std::string entry, double size, std::string groupName) +bool GHS3DPlugin_Hypothesis::SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::ElementType elementType, std::string name, std::string entry, std::string groupName) { TIDSortedElemSet theElemSet; SMDS_ElemIteratorPtr eIt = theMesh.GetMeshDS()->elementsIterator(SMDSAbs_ElementType(elementType)); while ( eIt->more() ) theElemSet.insert( eIt->next() ); MESSAGE("Add "<name = name; newEnfMesh->entry = entry; newEnfMesh->elementType = elementType; - newEnfMesh->size = size; newEnfMesh->groupName = groupName; TGHS3DEnforcedMeshList::iterator it = _enfMeshList.find(newEnfMesh); @@ -447,7 +467,7 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::Element //======================================================================= //function : SetEnforcedGroup //======================================================================= -bool GHS3DPlugin_Hypothesis::SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SMESH::long_array_var theIDs, SMESH::ElementType elementType, std::string name, std::string entry, double size, std::string groupName) +bool GHS3DPlugin_Hypothesis::SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SMESH::long_array_var theIDs, SMESH::ElementType elementType, std::string name, std::string entry, std::string groupName) { MESSAGE("GHS3DPlugin_Hypothesis::SetEnforcedGroup"); TIDSortedElemSet theElemSet; @@ -473,13 +493,12 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SME // theElemSet.insert( it->next() ); MESSAGE("Add "<name = name; newEnfMesh->entry = entry; newEnfMesh->elementType = elementType; - newEnfMesh->size = size; newEnfMesh->groupName = groupName; TGHS3DEnforcedMeshList::iterator it = _enfMeshList.find(newEnfMesh); @@ -494,13 +513,16 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SME //======================================================================= //function : SetEnforcedElements //======================================================================= -bool GHS3DPlugin_Hypothesis::SetEnforcedElements(TIDSortedElemSet theElemSet, SMESH::ElementType elementType, double size, std::string groupName) +bool GHS3DPlugin_Hypothesis::SetEnforcedElements(TIDSortedElemSet theElemSet, SMESH::ElementType elementType, std::string groupName) { MESSAGE("GHS3DPlugin_Hypothesis::SetEnforcedElements"); TIDSortedElemSet::const_iterator it = theElemSet.begin(); const SMDS_MeshElement* elem; const SMDS_MeshNode* node; - bool added = false; + bool added = true; + pair nodeRet; + pair elemRet; + for (;it != theElemSet.end();++it) { elem = (*it); @@ -508,43 +530,41 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedElements(TIDSortedElemSet theElemSet, SM case SMESH::NODE: node = dynamic_cast(elem); if (node) { - _enfNodes.insert(make_pair(node,groupName)); - _nodeIDToSizeMap.insert(make_pair(node->GetID(), size)); - added = true; + nodeRet = _enfNodes.insert(make_pair(node,groupName)); + added = added && nodeRet.second; + string msg = added ? "yes":"no"; + MESSAGE( "Node (" <X()<<","<Y()<<","<Z()<< ") with ID " << node->GetID() <<" added ? " << msg); } else { SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator(); for (;nodeIt->more();) { node = dynamic_cast(nodeIt->next()); - _enfNodes.insert(make_pair(node,groupName)); - _nodeIDToSizeMap.insert(make_pair(node->GetID(), size)); + nodeRet = _enfNodes.insert(make_pair(node,groupName)); + added = added && nodeRet.second; } - added = true; +// added = true;s } break; case SMESH::EDGE: if (elem->GetType() == SMDSAbs_Edge) { - _enfEdges.insert(make_pair(elem,groupName)); - _elementIDToSizeMap.insert(make_pair(elem->GetID(), size)); - added = true; + elemRet = _enfEdges.insert(make_pair(elem,groupName)); + added = added && elemRet.second; } else if (elem->GetType() > SMDSAbs_Edge) { SMDS_ElemIteratorPtr it = elem->edgesIterator(); for (;it->more();) { const SMDS_MeshElement* anEdge = it->next(); - _enfEdges.insert(make_pair(anEdge,groupName)); - _elementIDToSizeMap.insert(make_pair(anEdge->GetID(), size)); + elemRet = _enfEdges.insert(make_pair(anEdge,groupName)); + added = added && elemRet.second; } - added = true; } break; case SMESH::FACE: if (elem->GetType() == SMDSAbs_Face) { if (elem->NbCornerNodes() == 3) { - _enfTriangles.insert(make_pair(elem,groupName)); - _elementIDToSizeMap.insert(make_pair(elem->GetID(), size)); - added = true; + elemRet = _enfTriangles.insert(make_pair(elem,groupName)); + added = added && elemRet.second; } } else if (elem->GetType() > SMDSAbs_Face) { // Group of faces @@ -552,9 +572,8 @@ bool GHS3DPlugin_Hypothesis::SetEnforcedElements(TIDSortedElemSet theElemSet, SM for (;it->more();) { const SMDS_MeshElement* aFace = it->next(); if (aFace->NbCornerNodes() == 3) { - _enfTriangles.insert(make_pair(aFace,groupName)); - _elementIDToSizeMap.insert(make_pair(aFace->GetID(), size)); - added = true; + elemRet = _enfTriangles.insert(make_pair(aFace,groupName)); + added = added && elemRet.second; } } } @@ -688,7 +707,6 @@ void GHS3DPlugin_Hypothesis::ClearEnforcedMeshes() _enfEdges.clear(); _enfTriangles.clear(); _nodeIDToSizeMap.clear(); - _elementIDToSizeMap.clear(); _enfMeshList.clear(); _entryEnfMeshMap.clear(); NotifySubMeshesHypothesisModification(); @@ -843,6 +861,15 @@ bool GHS3DPlugin_Hypothesis::DefaultToRemoveCentralPoint() return false; } +//======================================================================= +//function : DefaultGradation +//======================================================================= + +double GHS3DPlugin_Hypothesis::DefaultGradation() +{ + return 1.05; +} + // //======================================================================= // //function : DefaultID2SizeMap // //======================================================================= @@ -870,6 +897,7 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) save << (int)myToUseBoundaryRecoveryVersion << " "; save << (int)myToUseFemCorrection << " "; save << (int)myToRemoveCentralPoint << " "; + save << myGradation << " "; if (!myTextOption.empty()) { save << "__OPTIONS_BEGIN__ "; save << myTextOption << " "; @@ -879,7 +907,7 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) TGHS3DEnforcedVertexList::iterator it = _enfVertexList.begin(); if (it != _enfVertexList.end()) { - save << "__ENFORCED_VERTICES_BEGIN__ "; + save << " " << "__ENFORCED_VERTICES_BEGIN__ "; for ( ; it != _enfVertexList.end(); ++it ) { TGHS3DEnforcedVertex *enfVertex = (*it); save << " " << "__BEGIN_VERTEX__"; @@ -910,9 +938,38 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) save << " " << "__END_SIZE__"; save << " " << "__END_VERTEX__"; } - save << "__ENFORCED_VERTICES_END__ "; + save << " " << "__ENFORCED_VERTICES_END__ "; } + TGHS3DEnforcedMeshList::iterator it_mesh = _enfMeshList.begin(); + if (it_mesh != _enfMeshList.end()) { + save << " " << "__ENFORCED_MESHES_BEGIN__ "; + for ( ; it_mesh != _enfMeshList.end(); ++it_mesh ) { + TGHS3DEnforcedMesh *enfMesh = (*it_mesh); + save << " " << "__BEGIN_ENF_MESH__"; + + save << " " << "__BEGIN_NAME__"; + save << " " << enfMesh->name; + save << " " << "__END_NAME__"; + + save << " " << "__BEGIN_ENTRY__"; + save << " " << enfMesh->entry; + save << " " << "__END_ENTRY__"; + + save << " " << "__BEGIN_ELEM_TYPE__"; + save << " " << (int)enfMesh->elementType; + save << " " << "__END_ELEM_TYPE__"; + + if (!enfMesh->groupName.empty()) { + save << " " << "__BEGIN_GROUP__"; + save << " " << enfMesh->groupName; + save << " " << "__END_GROUP__"; + } + save << " " << "__END_ENF_MESH__"; + std::cout << "Saving of enforced mesh " << enfMesh->name.c_str() << " done" << std::endl; + } + save << " " << "__ENFORCED_MESHES_END__ "; + } return save; } @@ -922,214 +979,305 @@ std::ostream & GHS3DPlugin_Hypothesis::SaveTo(std::ostream & save) std::istream & GHS3DPlugin_Hypothesis::LoadFrom(std::istream & load) { - bool isOK = true; - int i; - - isOK = (load >> i); - if (isOK) - myToMeshHoles = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myMaximumMemory = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myInitialMemory = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myOptimizationLevel = i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> myWorkingDirectory); - if (isOK) { - if ( myWorkingDirectory == "0") { // myWorkingDirectory was empty - myKeepFiles = false; - myWorkingDirectory.clear(); - } - else if ( myWorkingDirectory == "1" ) { - myKeepFiles = true; - myWorkingDirectory.clear(); - } - } - else - load.clear(ios::badbit | load.rdstate()); - - if ( !myWorkingDirectory.empty() ) { - isOK = (load >> i); + bool isOK = true; + int i; + double d; + + isOK = (load >> i); + if (isOK) + myToMeshHoles = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myMaximumMemory = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myInitialMemory = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myOptimizationLevel = i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> myWorkingDirectory); + if (isOK) { + if ( myWorkingDirectory == "0") { // myWorkingDirectory was empty + myKeepFiles = false; + myWorkingDirectory.clear(); + } + else if ( myWorkingDirectory == "1" ) { + myKeepFiles = true; + myWorkingDirectory.clear(); + } + } + else + load.clear(ios::badbit | load.rdstate()); + + if ( !myWorkingDirectory.empty() ) { + isOK = (load >> i); + if (isOK) + myKeepFiles = i; + else + load.clear(ios::badbit | load.rdstate()); + } + + isOK = (load >> i); + if (isOK) + myVerboseLevel = (short) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToCreateNewNodes = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToUseBoundaryRecoveryVersion = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToUseFemCorrection = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> i); + if (isOK) + myToRemoveCentralPoint = (bool) i; + else + load.clear(ios::badbit | load.rdstate()); + + isOK = (load >> d); if (isOK) - myKeepFiles = i; + myGradation = d; else - load.clear(ios::badbit | load.rdstate()); - } - - isOK = (load >> i); - if (isOK) - myVerboseLevel = (short) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToCreateNewNodes = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToUseBoundaryRecoveryVersion = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToUseFemCorrection = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - isOK = (load >> i); - if (isOK) - myToRemoveCentralPoint = (bool) i; - else - load.clear(ios::badbit | load.rdstate()); - - std::string separator; - bool hasOptions = false; - bool hasEnforcedVertices = false; - isOK = (load >> separator); - - if (isOK) { - if (separator == "__OPTIONS_BEGIN__") - hasOptions = true; - else if (separator == "__ENFORCED_VERTICES_BEGIN__") - hasEnforcedVertices = true; - } - - if (hasOptions) { - std::string txt; - while (isOK) { - isOK = (load >> txt); - if (isOK) { - if (txt == "__OPTIONS_END__") { - if (!myTextOption.empty()) { - // Remove last space - myTextOption.erase(myTextOption.end()-1); - } - isOK = false; - break; - } - myTextOption += txt; - myTextOption += " "; - } - } - } + load.clear(ios::badbit | load.rdstate()); + + std::string separator; + bool hasOptions = false; + bool hasEnforcedVertices = false; + bool hasEnforcedMeshes = false; + isOK = (load >> separator); + + if (isOK) { + if (separator == "__OPTIONS_BEGIN__") + hasOptions = true; + else if (separator == "__ENFORCED_VERTICES_BEGIN__") + hasEnforcedVertices = true; + else if (separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; + } + + if (hasOptions) { + std::string txt; + while (isOK) { + isOK = (load >> txt); + if (isOK) { + if (txt == "__OPTIONS_END__") { + if (!myTextOption.empty()) { + // Remove last space + myTextOption.erase(myTextOption.end()-1); + } + isOK = false; + break; + } + myTextOption += txt; + myTextOption += " "; + } + } + } + + if (hasOptions) { + isOK = (load >> separator); + if (isOK && separator == "__ENFORCED_VERTICES_BEGIN__") + hasEnforcedVertices = true; + if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; + } - if (hasOptions) { - isOK = (load >> separator); - if (isOK && separator == "__ENFORCED_VERTICES_BEGIN__") - hasEnforcedVertices = true; + if (hasEnforcedVertices) { + std::string txt, name, entry, groupName; + double size, coords[3]; + bool isCompound; + bool hasCoords = false; + isOK = (load >> txt); // __BEGIN_VERTEX__ + while (isOK) { + if (txt == "__ENFORCED_VERTICES_END__") + isOK = false; + + TGHS3DEnforcedVertex *enfVertex = new TGHS3DEnforcedVertex(); + while (isOK) { + isOK = (load >> txt); + if (txt == "__END_VERTEX__") { + enfVertex->name = name; + enfVertex->geomEntry = entry; + enfVertex->isCompound = isCompound; + enfVertex->groupName = groupName; + enfVertex->coords.clear(); + if (hasCoords) + enfVertex->coords.assign(coords,coords+3); + + _enfVertexList.insert(enfVertex); + + if (enfVertex->coords.size()) + _coordsEnfVertexMap[enfVertex->coords] = enfVertex; + if (!enfVertex->geomEntry.empty()) + _geomEntryEnfVertexMap[enfVertex->geomEntry] = enfVertex; + + name.clear(); + entry.clear(); + groupName.clear(); + hasCoords = false; + isOK = false; + } + + if (txt == "__BEGIN_NAME__") { // __BEGIN_NAME__ + while (isOK && (txt != "__END_NAME__")) { + isOK = (load >> txt); + if (txt != "__END_NAME__") { + if (!name.empty()) + name += " "; + name += txt; + } + } + MESSAGE("name: " <> entry); + isOK = (load >> isCompound); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_ENTRY__") + throw std::exception(); + MESSAGE("entry: " << entry); + } + + if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ + while (isOK && (txt != "__END_GROUP__")) { + isOK = (load >> txt); + if (txt != "__END_GROUP__") { + if (!groupName.empty()) + groupName += " "; + groupName += txt; + } + } + MESSAGE("groupName: " << groupName); + } + + if (txt == "__BEGIN_COORDS__") { // __BEGIN_COORDS__ + hasCoords = true; + isOK = (load >> coords[0] >> coords[1] >> coords[2]); + isOK = (load >> txt); // __END_COORDS__ + if (txt != "__END_COORDS__") + throw std::exception(); + MESSAGE("coords: " << coords[0] <<","<< coords[1] <<","<< coords[2]); + } + + if (txt == "__BEGIN_SIZE__") { // __BEGIN_ENTRY__ + isOK = (load >> size); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_SIZE__") { + throw std::exception(); + } + MESSAGE("size: " << size); + } + } + isOK = (load >> txt); // __BEGIN_VERTEX__ + } } if (hasEnforcedVertices) { - std::string txt, name, entry, groupName; - double size, coords[3]; - bool isCompound; - bool hasCoords = false; - while (isOK) { - isOK = (load >> txt); // __BEGIN_VERTEX__ - if (isOK) { - if (txt == "__ENFORCED_VERTICES_END__") - isOK = false; - - TGHS3DEnforcedVertex *enfVertex = new TGHS3DEnforcedVertex(); - while (isOK) { - isOK = (load >> txt); - if (txt == "__END_VERTEX__") { - enfVertex->name = name; - enfVertex->geomEntry = entry; - enfVertex->isCompound = isCompound; - enfVertex->groupName = groupName; - enfVertex->coords.clear(); - if (hasCoords) - enfVertex->coords.assign(coords,coords+3); - - _enfVertexList.insert(enfVertex); - - if (enfVertex->coords.size()) - _coordsEnfVertexMap[enfVertex->coords] = enfVertex; - if (!enfVertex->geomEntry.empty()) - _geomEntryEnfVertexMap[enfVertex->geomEntry] = enfVertex; - - name.clear(); - entry.clear(); - groupName.clear(); - hasCoords = false; - isOK = false; - } - - if (txt == "__BEGIN_NAME__") { // __BEGIN_NAME__ - while (isOK && (txt != "__END_NAME__")) { - isOK = (load >> txt); - if (txt != "__END_NAME__") { - if (!name.empty()) - name += " "; - name += txt; - } - } - MESSAGE("name: " <> entry); - isOK = (load >> isCompound); - isOK = (load >> txt); // __END_ENTRY__ - if (txt != "__END_ENTRY__") - throw std::exception(); - MESSAGE("entry: " << entry); - } - - if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ - while (isOK && (txt != "__END_GROUP__")) { - isOK = (load >> txt); - if (txt != "__END_GROUP__") { - if (!groupName.empty()) - groupName += " "; - groupName += txt; - } - } - MESSAGE("groupName: " << groupName); - } - - if (txt == "__BEGIN_COORDS__") { // __BEGIN_COORDS__ - hasCoords = true; - isOK = (load >> coords[0] >> coords[1] >> coords[2]); - isOK = (load >> txt); // __END_COORDS__ - if (txt != "__END_COORDS__") - throw std::exception(); - MESSAGE("coords: " << coords[0] <<","<< coords[1] <<","<< coords[2]); - } - - if (txt == "__BEGIN_SIZE__") { // __BEGIN_ENTRY__ - isOK = (load >> size); - isOK = (load >> txt); // __END_ENTRY__ - if (txt != "__END_SIZE__") { - throw std::exception(); - } - MESSAGE("size: " << size); - } - } - } - } + isOK = (load >> separator); + if (isOK && separator == "__ENFORCED_MESHES_BEGIN__") + hasEnforcedMeshes = true; } + if (hasEnforcedMeshes) { + std::string txt, name, entry, groupName; + int elementType = -1; + isOK = (load >> txt); // __BEGIN_ENF_MESH__ + while (isOK) { +// if (isOK) { + if (txt == "__ENFORCED_MESHES_END__") + isOK = false; + + TGHS3DEnforcedMesh *enfMesh = new TGHS3DEnforcedMesh(); + while (isOK) { + isOK = (load >> txt); + if (txt == "__END_ENF_MESH__") { + enfMesh->name = name; + enfMesh->entry = entry; + enfMesh->elementType = (SMESH::ElementType)elementType; + enfMesh->groupName = groupName; + + _enfMeshList.insert(enfMesh); + std::cout << "Restoring of enforced mesh " <> txt); + if (txt != "__END_NAME__") { + if (!name.empty()) + name += " "; + name += txt; + } + } + MESSAGE("name: " <> entry); + isOK = (load >> txt); // __END_ENTRY__ + if (txt != "__END_ENTRY__") + throw std::exception(); + MESSAGE("entry: " << entry); + } + + if (txt == "__BEGIN_ELEM_TYPE__") { // __BEGIN_ELEM_TYPE__ + isOK = (load >> elementType); + isOK = (load >> txt); // __END_ELEM_TYPE__ + if (txt != "__END_ELEM_TYPE__") + throw std::exception(); + MESSAGE("elementType: " << elementType); + } + + if (txt == "__BEGIN_GROUP__") { // __BEGIN_GROUP__ + while (isOK && (txt != "__END_GROUP__")) { + isOK = (load >> txt); + if (txt != "__END_GROUP__") { + if (!groupName.empty()) + groupName += " "; + groupName += txt; + } + } // while + MESSAGE("groupName: " << groupName); + } // if + std::cout << "isOK: " << isOK << std::endl; + } // while +// } // if + isOK = (load >> txt); // __BEGIN_ENF_MESH__ + } // while + } // if + return load; } @@ -1162,7 +1310,7 @@ bool GHS3DPlugin_Hypothesis::SetParametersByDefaults(const TDefaults& /*dflts*/ //================================================================================ std::string GHS3DPlugin_Hypothesis::CommandToRun(const GHS3DPlugin_Hypothesis* hyp, - const bool hasShapeToMesh) + const bool hasShapeToMesh) { TCollection_AsciiString cmd; if (hasShapeToMesh) @@ -1179,6 +1327,7 @@ std::string GHS3DPlugin_Hypothesis::CommandToRun(const GHS3DPlugin_Hypothesis* h bool v = hyp ? ( hyp->myTextOption.find("-v") == std::string::npos ) : true; bool fem = hyp ? ( hyp->myTextOption.find("-FEM")== std::string::npos ) : true; bool rem = hyp ? ( hyp->myTextOption.find("-no_initial_central_point")== std::string::npos ) : true; + bool gra = hyp ? ( hyp->myTextOption.find("-Dcpropa")== std::string::npos ) : true; // if use boundary recovery version, few options are allowed bool useBndRecovery = !C; @@ -1261,6 +1410,12 @@ std::string GHS3DPlugin_Hypothesis::CommandToRun(const GHS3DPlugin_Hypothesis* h cmd += (char*) hyp->myTextOption.c_str(); } + // to define volumic gradation. + if ( gra && hyp) { + cmd += " -Dcpropa="; + cmd += hyp->myGradation; + } + #ifdef WNT cmd += " < NUL"; #endif @@ -1345,11 +1500,6 @@ GHS3DPlugin_Hypothesis::TID2SizeMap GHS3DPlugin_Hypothesis::GetNodeIDToSizeMap(c return hyp ? hyp->_GetNodeIDToSizeMap(): DefaultID2SizeMap(); } -GHS3DPlugin_Hypothesis::TID2SizeMap GHS3DPlugin_Hypothesis::GetElementIDToSizeMap(const GHS3DPlugin_Hypothesis* hyp) -{ - return hyp ? hyp->_GetElementIDToSizeMap(): DefaultID2SizeMap(); -} - GHS3DPlugin_Hypothesis::TSetStrings GHS3DPlugin_Hypothesis::GetGroupsToRemove(const GHS3DPlugin_Hypothesis* hyp) { return hyp ? hyp->_GetGroupsToRemove(): DefaultGroupsToRemove(); diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx index 93723bb..2e1acc5 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis.hxx @@ -84,9 +84,8 @@ public: struct TGHS3DEnforcedMesh { std::string name; std::string entry; - SMESH::ElementType elementType; std::string groupName; - double size; + SMESH::ElementType elementType; }; struct CompareGHS3DEnforcedMesh { @@ -103,14 +102,19 @@ public: }; typedef std::set< TGHS3DEnforcedMesh*, CompareGHS3DEnforcedMesh > TGHS3DEnforcedMeshList; // Map mesh entry / Enforced mesh list - // ex: 0:1:2:1 -> [ ("Mesh_1", "0:1:2:1", TopAbs_NODE, "", -1), - // ("Mesh_1", "0:1:2:1", TopAbs_EDGE, "edge group", 5)] + // ex: 0:1:2:1 -> [ ("Mesh_1", "0:1:2:1", TopAbs_NODE, ""), + // ("Mesh_1", "0:1:2:1", TopAbs_EDGE, "edge group")] typedef std::map< std::string, TGHS3DEnforcedMeshList > TEntryGHS3DEnforcedMeshListMap; typedef std::map TID2SizeMap; + + struct TIDMeshIDCompare { + bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const + { return e1->getMeshId() == e2->getMeshId() ? e1->GetID() < e2->GetID() : e1->getMeshId() < e2->getMeshId() ; } + }; - typedef std::map TIDSortedElemGroupMap; - typedef std::map TIDSortedNodeGroupMap; + typedef std::map TIDSortedElemGroupMap; + typedef std::map TIDSortedNodeGroupMap; typedef std::set TSetStrings; static const char* GetHypType() { return "GHS3D_Parameters"; } @@ -187,6 +191,11 @@ public: */ void SetTextOption(const std::string& option); std::string GetTextOption() const; + /*! + * To define the volumic gradation + */ + void SetGradation(double gradation); + double GetGradation() const ; // struct TEnforcedEdge { @@ -225,9 +234,9 @@ public: /*! * To set enforced elements */ - bool SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::ElementType elementType, std::string name, std::string entry, double size, std::string groupName = ""); - bool SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SMESH::long_array_var theIDs, SMESH::ElementType elementType, std::string name, std::string entry, double size, std::string groupName = ""); - bool SetEnforcedElements(TIDSortedElemSet theElemSet, SMESH::ElementType elementType, double size, std::string groupName = ""); + bool SetEnforcedMesh(SMESH_Mesh& theMesh, SMESH::ElementType elementType, std::string name, std::string entry, std::string groupName = ""); + bool SetEnforcedGroup(const SMESHDS_Mesh* theMeshDS, SMESH::long_array_var theIDs, SMESH::ElementType elementType, std::string name, std::string entry, std::string groupName = ""); + bool SetEnforcedElements(TIDSortedElemSet theElemSet, SMESH::ElementType elementType, std::string groupName = ""); const TGHS3DEnforcedMeshList _GetEnforcedMeshes() const { return _enfMeshList; } const TEntryGHS3DEnforcedMeshListMap _GetEnforcedMeshesByEntry() const { return _entryEnfMeshMap; } void ClearEnforcedMeshes(); @@ -235,7 +244,6 @@ public: const TIDSortedElemGroupMap _GetEnforcedEdges() const { return _enfEdges; } const TIDSortedElemGroupMap _GetEnforcedTriangles() const { return _enfTriangles; } const TID2SizeMap _GetNodeIDToSizeMap() const {return _nodeIDToSizeMap; } - const TID2SizeMap _GetElementIDToSizeMap() const {return _elementIDToSizeMap; } const TSetStrings _GetGroupsToRemove() const {return _groupsToRemove; } /*! * \brief Return the enforced vertices @@ -252,7 +260,6 @@ public: static TIDSortedElemGroupMap GetEnforcedEdges(const GHS3DPlugin_Hypothesis* hyp); static TIDSortedElemGroupMap GetEnforcedTriangles(const GHS3DPlugin_Hypothesis* hyp); static TID2SizeMap GetNodeIDToSizeMap(const GHS3DPlugin_Hypothesis* hyp); - static TID2SizeMap GetElementIDToSizeMap(const GHS3DPlugin_Hypothesis* hyp); static TSetStrings GetGroupsToRemove(const GHS3DPlugin_Hypothesis* hyp); void ClearGroupsToRemove(); @@ -267,6 +274,7 @@ public: static bool DefaultToUseBoundaryRecoveryVersion(); static bool DefaultToUseFEMCorrection(); static bool DefaultToRemoveCentralPoint(); + static double DefaultGradation(); static TGHS3DEnforcedVertex DefaultGHS3DEnforcedVertex() {return TGHS3DEnforcedVertex();} static TGHS3DEnforcedVertexList DefaultGHS3DEnforcedVertexList() {return TGHS3DEnforcedVertexList();} @@ -314,6 +322,7 @@ private: bool myToUseFemCorrection; bool myToRemoveCentralPoint; std::string myTextOption; + double myGradation; TGHS3DEnforcedVertexList _enfVertexList; TGHS3DEnforcedVertexCoordsValues _enfVertexCoordsSizeList; @@ -331,7 +340,6 @@ private: TIDSortedElemGroupMap _enfEdges; TIDSortedElemGroupMap _enfTriangles; TID2SizeMap _nodeIDToSizeMap; - TID2SizeMap _elementIDToSizeMap; std::map _entryToElemsMap; TSetStrings _groupsToRemove; diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx index 5b8466b..9129727 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.cxx @@ -354,6 +354,31 @@ char* GHS3DPlugin_Hypothesis_i::GetTextOption() return CORBA::string_dup( this->GetImpl()->GetTextOption().c_str() ); } +//======================================================================= +//function : SetToRemoveCentralPoint +//======================================================================= + +void GHS3DPlugin_Hypothesis_i::SetGradation(CORBA::Double gradation) +{ + if (gradation <= 1) + THROW_SALOME_CORBA_EXCEPTION( "The volumic gradation must be > 1",SALOME::BAD_PARAM ); + ASSERT(myBaseImpl); + if (gradation != GetGradation()) { + this->GetImpl()->SetGradation(gradation); + SMESH::TPythonDump() << _this() << ".SetGradation( " << gradation << " )"; + } +} + +//======================================================================= +//function : GetToRemoveCentralPoint +//======================================================================= + +CORBA::Double GHS3DPlugin_Hypothesis_i::GetGradation() +{ + ASSERT(myBaseImpl); + return this->GetImpl()->GetGradation(); +} + //======================================================================= //function : SetEnforcedVertex //======================================================================= @@ -799,8 +824,6 @@ GHS3DPlugin::GHS3DEnforcedMeshList* GHS3DPlugin_Hypothesis_i::GetEnforcedMeshes( enfMesh->elementType = currentMesh->elementType; // Group Name enfMesh->groupName = CORBA::string_dup(currentMesh->groupName.c_str()); - // Size - enfMesh->size = currentMesh->size; result[i]=enfMesh; } @@ -817,22 +840,7 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshWithGroup(SMESH::SMESH_IDSource_pt throw (SALOME::SALOME_Exception) { #if GHS3D_VERSION >= 42 - return p_SetEnforcedMesh(theSource, theType, -1.0, theGroupName); -// bool res = p_SetEnforcedMesh(theSource, theType, -1.0, theGroupName); -// SMESH_Mesh_i* theMesh_i = SMESH::DownCast( theSource); -// SMESH_Group_i* theGroup_i = SMESH::DownCast( theSource); -// SMESH_GroupOnGeom_i* theGroupOnGeom_i = SMESH::DownCast( theSource); -// if (theGroup_i || theGroupOnGeom_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " -// << theSource << ", " << theType << ", \"" << theGroupName << "\" )"; -// } -// else if (theMesh_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " -// << theSource << ".GetMesh(), " << theType << ", \"" << theGroupName << "\" )"; -// } -// return res; + return p_SetEnforcedMesh(theSource, theType, "", theGroupName); #else SALOME::ExceptionStruct ExDescription; ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; @@ -852,21 +860,6 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSour // MESSAGE("GHS3DPlugin_Hypothesis_i::SetEnforcedMesh"); #if GHS3D_VERSION >= 42 return p_SetEnforcedMesh(theSource, theType); -// bool res = p_SetEnforcedMesh(theSource, theType); -// SMESH_Mesh_i* theMesh_i = SMESH::DownCast( theSource); -// SMESH_Group_i* theGroup_i = SMESH::DownCast( theSource); -// SMESH_GroupOnGeom_i* theGroupOnGeom_i = SMESH::DownCast( theSource); -// if (theGroup_i || theGroupOnGeom_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " -// << theSource << ", " << theType << " )"; -// } -// else if (theMesh_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " -// << theSource << ".GetMesh(), " << theType << " )"; -// } -// return res; #else SALOME::ExceptionStruct ExDescription; ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; @@ -878,37 +871,13 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSour } /*! - * \brief Adds enforced elements of type elementType using another mesh/sub-mesh/mesh group theSource and a size. The elements will be grouped in theGroupName. + * \brief OBSOLETE FUNCTION - Adds enforced elements of type elementType using another mesh/sub-mesh/mesh group theSource and a size. The elements will be grouped in theGroupName. */ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, double theSize, const char* theGroupName) throw (SALOME::SALOME_Exception) { #if GHS3D_VERSION >= 42 - if (theSize < 0) { - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Size cannot be negative"; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 781; - throw SALOME::SALOME_Exception(ExDescription); - } - - return p_SetEnforcedMesh(theSource, theType, theSize, theGroupName); -// bool res = p_SetEnforcedMesh(theSource, theType, theSize, theGroupName); -// SMESH_Mesh_i* theMesh_i = SMESH::DownCast( theSource); -// SMESH_Group_i* theGroup_i = SMESH::DownCast( theSource); -// SMESH_GroupOnGeom_i* theGroupOnGeom_i = SMESH::DownCast( theSource); -// if (theGroup_i || theGroupOnGeom_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSizeWithGroup( " -// << theSource << ", " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; -// } -// else if (theMesh_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSizeWithGroup( " -// << theSource << ".GetMesh(), " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; -// } -// return res; + return p_SetEnforcedMesh(theSource, theType, "", theGroupName); #else SALOME::ExceptionStruct ExDescription; ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; @@ -920,36 +889,13 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSourc } /*! - * \brief Adds enforced elements of type elementType using another mesh/sub-mesh/mesh group theSource and a size. + * \brief OBSOLETE FUNCTION - Adds enforced elements of type elementType using another mesh/sub-mesh/mesh group theSource and a size. */ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSize(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, double theSize) throw (SALOME::SALOME_Exception) { #if GHS3D_VERSION >= 42 - if (theSize < 0) { - SALOME::ExceptionStruct ExDescription; - ExDescription.text = "Size cannot be negative"; - ExDescription.type = SALOME::BAD_PARAM; - ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; - ExDescription.lineNumber = 781; - throw SALOME::SALOME_Exception(ExDescription); - } - return p_SetEnforcedMesh(theSource, theType, theSize); -// bool res = p_SetEnforcedMesh(theSource, theType, theSize); -// SMESH_Mesh_i* theMesh_i = SMESH::DownCast( theSource); -// SMESH_Group_i* theGroup_i = SMESH::DownCast( theSource); -// SMESH_GroupOnGeom_i* theGroupOnGeom_i = SMESH::DownCast( theSource); -// if (theGroup_i || theGroupOnGeom_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSize( " -// << theSource << ", " << theType << ", " << theSize << " )"; -// } -// else if (theMesh_i) -// { -// SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSize( " -// << theSource << ".GetMesh(), " << theType << ", " << theSize << " )"; -// } -// return res; + return p_SetEnforcedMesh(theSource, theType); #else SALOME::ExceptionStruct ExDescription; ExDescription.text = "Bad version of GHS3D. It must >= 4.2."; @@ -960,7 +906,7 @@ bool GHS3DPlugin_Hypothesis_i::SetEnforcedMeshSize(SMESH::SMESH_IDSource_ptr the #endif } -bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, double theSize, const char* theGroupName) +bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType theType, const char* theName, const char* theGroupName) throw (SALOME::SALOME_Exception) { MESSAGE("GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh"); @@ -976,18 +922,6 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo throw SALOME::SALOME_Exception(ExDescription); } - if ((theType != SMESH::NODE) && (theType != SMESH::EDGE) && (theType != SMESH::FACE)) - { - return false; -// SALOME::ExceptionStruct ExDescription; -// ExDescription.text = "Bad elementType"; -// ExDescription.type = SALOME::BAD_PARAM; -// ExDescription.sourceFile = "GHS3DPlugin_Hypothesis_i.cxx"; -// ExDescription.lineNumber = 840; -// throw SALOME::SALOME_Exception(ExDescription); - } - - SMESH::array_of_ElementType_var types = theSource->GetTypes(); switch (theType) { case SMESH::NODE: MESSAGE("Required type is NODE"); @@ -999,13 +933,16 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo MESSAGE("Required type is FACE"); break; default: - break; + MESSAGE("Incompatible required type: " << theType); + return false; } // MESSAGE("Required type is "<GetTypes(); MESSAGE("Available types:"); for (int i=0;ilength();i++){MESSAGE(types[i]);} if ( types->length() >= 1 && types[types->length()-1] < theType) { + MESSAGE("Required type not available"); return false; // SALOME::ExceptionStruct ExDescription; // ExDescription.text = "The source mesh has bad type"; @@ -1015,36 +952,31 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo // throw SALOME::SALOME_Exception(ExDescription); } + + SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen(); + SALOMEDS::SObject_ptr SObj = smeshGen->ObjectToSObject(smeshGen->GetCurrentStudy(),theSource); + SMESH_Mesh_i* theMesh_i = SMESH::DownCast( theSource); SMESH_Group_i* theGroup_i = SMESH::DownCast( theSource); SMESH_GroupOnGeom_i* theGroupOnGeom_i = SMESH::DownCast( theSource); - TIDSortedElemSet theElemSet; - SMESH_Gen_i *smeshGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::SObject_ptr SObj = smeshGen->ObjectToSObject(smeshGen->GetCurrentStudy(),theSource); + + string enfMeshName = theName; + if (enfMeshName.empty()) + enfMeshName = SObj->GetName(); + if (theMesh_i) { try { - bool res = this->GetImpl()->SetEnforcedMesh(theMesh_i->GetImpl(), theType, SObj->GetName() , SObj->GetID(), theSize, theGroupName); - if (theSize > 0) { - if (theGroupName != "") { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSizeWithGroup( " - << theSource << ".GetMesh(), " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - else { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSize( " - << theSource << ".GetMesh(), " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - } - else { - if (theGroupName != "") { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " - << theSource << ".GetMesh(), " << theType << ", \"" << theGroupName << "\" )"; - } - else { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " - << theSource << ".GetMesh(), " << theType << " )"; - } - } + bool res = this->GetImpl()->SetEnforcedMesh(theMesh_i->GetImpl(), theType, enfMeshName , SObj->GetID(), theGroupName); + if (theGroupName != "") { + SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " + << theSource << ".GetMesh(), " << theType << ", \"" << theGroupName << "\" )"; + } + else { + SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " + << theSource << ".GetMesh(), " << theType << " )"; + } + return res; } catch (const std::invalid_argument& ex) { @@ -1059,22 +991,11 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo THROW_SALOME_CORBA_EXCEPTION( ex.what() ,SALOME::BAD_PARAM ); } } - else if (theGroup_i && types->length() == 1 && types[0] == theType) + else if (theGroup_i)// && types->length() == 1 && types[0] == theType) { MESSAGE("The source is a group") try { - bool res = this->GetImpl()->SetEnforcedGroup(theGroup_i->GetGroupDS()->GetMesh(), theGroup_i->GetListOfID(), theType, SObj->GetName() , SObj->GetID(), theSize, theGroupName); - if (theSize > 0) { - if (theGroupName != "") { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSizeWithGroup( " - << theSource << ", " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - else { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSize( " - << theSource << ", " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - } - else { + bool res = this->GetImpl()->SetEnforcedGroup(theGroup_i->GetGroupDS()->GetMesh(), theGroup_i->GetListOfID(), theType, enfMeshName , SObj->GetID(), theGroupName); if (theGroupName != "") { SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " << theSource << ", " << theType << ", \"" << theGroupName << "\" )"; @@ -1083,7 +1004,6 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " << theSource << ", " << theType << " )"; } - } return res; } catch (const std::invalid_argument& ex) { @@ -1098,22 +1018,11 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo THROW_SALOME_CORBA_EXCEPTION( ex.what() ,SALOME::BAD_PARAM ); } } - else if (theGroupOnGeom_i && types->length() == 1 && types[0] == theType) + else if (theGroupOnGeom_i)// && types->length() == 1 && types[0] == theType) { MESSAGE("The source is a group on geom") try { - bool res = this->GetImpl()->SetEnforcedGroup(theGroupOnGeom_i->GetGroupDS()->GetMesh(),theGroupOnGeom_i->GetListOfID(), theType, SObj->GetName() , SObj->GetID(), theSize, theGroupName); - if (theSize > 0) { - if (theGroupName != "") { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSizeWithGroup( " - << theSource << ", " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - else { - SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshSize( " - << theSource << ", " << theType << ", " << theSize << ", \"" << theGroupName << "\" )"; - } - } - else { + bool res = this->GetImpl()->SetEnforcedGroup(theGroupOnGeom_i->GetGroupDS()->GetMesh(),theGroupOnGeom_i->GetListOfID(), theType, enfMeshName , SObj->GetID(), theGroupName); if (theGroupName != "") { SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMeshWithGroup( " << theSource << ", " << theType << ", \"" << theGroupName << "\" )"; @@ -1122,7 +1031,6 @@ bool GHS3DPlugin_Hypothesis_i::p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSo SMESH::TPythonDump () << "isDone = " << _this() << ".SetEnforcedMesh( " << theSource << ", " << theType << " )"; } - } return res; } catch (const std::invalid_argument& ex) { diff --git a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.hxx b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.hxx index 7ca3cac..6b1539c 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.hxx +++ b/src/GHS3DPlugin/GHS3DPlugin_Hypothesis_i.hxx @@ -122,6 +122,11 @@ class GHS3DPLUGIN_EXPORT GHS3DPlugin_Hypothesis_i: */ void SetTextOption(const char* option); char* GetTextOption(); + /*! + * To define the volumic gradation + */ + void SetGradation(CORBA::Double gradation); + CORBA::Double GetGradation(); /*! * To set an enforced vertex */ @@ -144,11 +149,15 @@ class GHS3DPLUGIN_EXPORT GHS3DPlugin_Hypothesis_i: /*! * To set an enforced mesh */ - bool p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, double size = -1, const char* theGroupName="") throw (SALOME::SALOME_Exception); + bool p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, const char* theName="", const char* theGroupName="") throw (SALOME::SALOME_Exception); bool SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType) throw (SALOME::SALOME_Exception); bool SetEnforcedMeshWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, const char* theGroupName) throw (SALOME::SALOME_Exception); + + /* OBSOLETE FUNCTIONS */ bool SetEnforcedMeshSize(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, double size) throw (SALOME::SALOME_Exception); bool SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, double size, const char* theGroupName) throw (SALOME::SALOME_Exception); + /* OBSOLETE FUNCTIONS */ + GHS3DPlugin::GHS3DEnforcedMeshList* GetEnforcedMeshes(); void ClearEnforcedMeshes(); diff --git a/src/GHS3DPlugin/Makefile.am b/src/GHS3DPlugin/Makefile.am index a761826..1d7fc51 100644 --- a/src/GHS3DPlugin/Makefile.am +++ b/src/GHS3DPlugin/Makefile.am @@ -27,7 +27,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am # header files salomeinclude_HEADERS = \ - libmesh5.h \ GHS3DPlugin_Defs.hxx \ GHS3DPlugin_GHS3D.hxx \ GHS3DPlugin_GHS3D_i.hxx \ @@ -38,7 +37,6 @@ salomeinclude_HEADERS = \ lib_LTLIBRARIES = libGHS3DEngine.la dist_libGHS3DEngine_la_SOURCES = \ - libmesh5.c \ GHS3DPlugin_GHS3D.cxx \ GHS3DPlugin_GHS3D_i.cxx \ GHS3DPlugin_i.cxx \ @@ -61,7 +59,7 @@ libGHS3DEngine_la_LDFLAGS = \ ../../idl/libSalomeIDLGHS3DPLUGIN.la \ $(CAS_KERNEL) -lTKBRep -lTKG2d -lTKG3d -lTKTopAlgo -lTKGeomBase -lTKGeomAlgo -lTKCDF \ $(MED_LDFLAGS) -lSalomeIDLMED \ - $(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lSMESHDS -lSMDS -lStdMeshers \ + $(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lSMESHDS -lSMDS -lStdMeshers -lMeshDriverGMF \ $(KERNEL_LDFLAGS) -lSalomeGenericObj -lSALOMELocalTrace -lSALOMEBasics -lSalomeNS -lOpUtil # Scripts to be installed. diff --git a/src/GHS3DPlugin/libmesh5.c b/src/GHS3DPlugin/libmesh5.c deleted file mode 100644 index 4277b97..0000000 --- a/src/GHS3DPlugin/libmesh5.c +++ /dev/null @@ -1,1192 +0,0 @@ - - -/*----------------------------------------------------------*/ -/* */ -/* LIBMESH V 5.45 */ -/* */ -/*----------------------------------------------------------*/ -/* */ -/* Description: handle .meshb file format I/O */ -/* Author: Loic MARECHAL */ -/* Creation date: feb 16 2007 */ -/* Last modification: feb 08 2011 */ -/* */ -/*----------------------------------------------------------*/ - - -/*----------------------------------------------------------*/ -/* Includes */ -/*----------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include "libmesh5.h" - - -/*----------------------------------------------------------*/ -/* Defines */ -/*----------------------------------------------------------*/ - -#define Asc 1 -#define Bin 2 -#define MshFil 4 -#define SolFil 8 -#define MaxMsh 100 -#define InfKwd 1 -#define RegKwd 2 -#define SolKwd 3 -#define WrdSiz 4 -#define BufSiz 10000 - - -/*----------------------------------------------------------*/ -/* Structures */ -/*----------------------------------------------------------*/ - -typedef struct -{ - int typ, SolSiz, NmbWrd, NmbLin, NmbTyp, TypTab[ GmfMaxTyp ]; - long pos; - char fmt[ GmfMaxTyp*9 ]; -}KwdSct; - -typedef struct -{ - int dim, ver, mod, typ, cod, pos; - long NexKwdPos; - KwdSct KwdTab[ GmfMaxKwd + 1 ]; - FILE *hdl; - int *IntBuf; - float *FltBuf; - unsigned char *buf; - char FilNam[ GmfStrSiz ]; - double DblBuf[1000/8]; - unsigned char blk[ BufSiz + 1000 ]; -}GmfMshSct; - - -/*----------------------------------------------------------*/ -/* Global variables */ -/*----------------------------------------------------------*/ - -int GmfIniFlg=0; -GmfMshSct *GmfMshTab[ MaxMsh + 1 ]; -char *GmfKwdFmt[ GmfMaxKwd + 1 ][4] = -{ {"Reserved", "", "", ""}, - {"MeshVersionFormatted", "", "", "i"}, - {"Reserved", "", "", ""}, - {"Dimension", "", "", "i"}, - {"Vertices", "Vertex", "i", "dri"}, - {"Edges", "Edge", "i", "iii"}, - {"Triangles", "Triangle", "i", "iiii"}, - {"Quadrilaterals", "Quadrilateral", "i", "iiiii"}, - {"Tetrahedra", "Tetrahedron", "i", "iiiii"}, - {"Prisms", "Prism", "i", "iiiiiii"}, - {"Hexahedra", "Hexahedron", "i", "iiiiiiiii"}, - {"IterationsAll", "IterationAll","","i"}, - {"TimesAll", "TimeAll","","r"}, - {"Corners", "Corner", "i", "i"}, - {"Ridges", "Ridge", "i", "i"}, - {"RequiredVertices", "RequiredVertex", "i", "i"}, - {"RequiredEdges", "RequiredEdge", "i", "i"}, - {"RequiredTriangles", "RequiredTriangle", "i", "i"}, - {"RequiredQuadrilaterals", "RequiredQuadrilateral", "i", "i"}, - {"TangentAtEdgeVertices", "TangentAtEdgeVertex", "i", "iii"}, - {"NormalAtVertices", "NormalAtVertex", "i", "ii"}, - {"NormalAtTriangleVertices", "NormalAtTriangleVertex", "i", "iii"}, - {"NormalAtQuadrilateralVertices", "NormalAtQuadrilateralVertex", "i", "iiii"}, - {"AngleOfCornerBound", "", "", "r"}, - {"TrianglesP2", "TriangleP2", "i", "iiiiiii"}, - {"EdgesP2", "EdgeP2", "i", "iiii"}, - {"SolAtPyramids", "SolAtPyramid", "i", "sr"}, - {"QuadrilateralsQ2", "QuadrilateralQ2", "i", "iiiiiiiiii"}, - {"ISolAtPyramids", "ISolAtPyramid", "i", "iiiii"}, - {"Reserved", "", "", ""}, - {"TetrahedraP2", "TetrahedronP2", "i", "iiiiiiiiiii"}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"HexahedraQ2", "HexahedronQ2", "i", "iiiiiiiiiiiiiiiiiiiiiiiiiiii"}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Polyhedra", "Polyhedron", "i", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"}, - {"Polygons", "Polygon", "", "iiiiiiiii"}, - {"Reserved", "", "", ""}, - {"Pyramids", "Pyramid", "i", "iiiiii"}, - {"BoundingBox", "", "", "drdr"}, - {"Body","i", "drdrdrdr"}, - {"PrivateTable", "PrivateTable", "i", "i"}, - {"Reserved", "", "", ""}, - {"End", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Reserved", "", "", ""}, - {"Tangents", "Tangent", "i", "dr"}, - {"Normals", "Normal", "i", "dr"}, - {"TangentAtVertices", "TangentAtVertex", "i", "ii"}, - {"SolAtVertices", "SolAtVertex", "i", "sr"}, - {"SolAtEdges", "SolAtEdge", "i", "sr"}, - {"SolAtTriangles", "SolAtTriangle", "i", "sr"}, - {"SolAtQuadrilaterals", "SolAtQuadrilateral", "i", "sr"}, - {"SolAtTetrahedra", "SolAtTetrahedron", "i", "sr"}, - {"SolAtPrisms", "SolAtPrism", "i", "sr"}, - {"SolAtHexahedra", "SolAtHexahedron", "i", "sr"}, - {"DSolAtVertices", "DSolAtVertex", "i", "sr"}, - {"ISolAtVertices", "ISolAtVertex", "i", "i"}, - {"ISolAtEdges", "ISolAtEdge", "i", "ii"}, - {"ISolAtTriangles", "ISolAtTriangle", "i", "iii"}, - {"ISolAtQuadrilaterals", "ISolAtQuadrilateral", "i", "iiii"}, - {"ISolAtTetrahedra", "ISolAtTetrahedron", "i", "iiii"}, - {"ISolAtPrisms", "ISolAtPrism", "i", "iiiiii"}, - {"ISolAtHexahedra", "ISolAtHexahedron", "i", "iiiiiiii"}, - {"Iterations", "","","i"}, - {"Time", "","","r"}, - {"Reserved", "","",""} - }; - - -/*----------------------------------------------------------*/ -/* Prototypes of local procedures */ -/*----------------------------------------------------------*/ - -static void ScaWrd(GmfMshSct *, unsigned char *); -static void ScaDblWrd(GmfMshSct *, unsigned char *); -static void ScaBlk(GmfMshSct *, unsigned char *, int); -static long GetPos(GmfMshSct *); -static void RecWrd(GmfMshSct *, unsigned char *); -static void RecDblWrd(GmfMshSct *, unsigned char *); -static void RecBlk(GmfMshSct *, unsigned char *, int); -static void SetPos(GmfMshSct *, long); -static int ScaKwdTab(GmfMshSct *); -static void ExpFmt(GmfMshSct *, int); -static void ScaKwdHdr(GmfMshSct *, int); - - -/*----------------------------------------------------------*/ -/* Open a mesh file in read or write mod */ -/*----------------------------------------------------------*/ - -int GmfOpenMesh(const char *FilNam, int mod, ...) -{ - int i, KwdCod, res, *PtrVer, *PtrDim, MshIdx=0; - char str[ GmfStrSiz ]; - va_list VarArg; - GmfMshSct *msh; - - if(!GmfIniFlg) - { - for(i=0;i<=MaxMsh;i++) - GmfMshTab[i] = NULL; - - GmfIniFlg = 1; - } - - /*---------------------*/ - /* MESH STRUCTURE INIT */ - /*---------------------*/ - - for(i=1;i<=MaxMsh;i++) - if(!GmfMshTab[i]) - { - MshIdx = i; - break; - } - - if( !MshIdx || !(msh = calloc(1, sizeof(GmfMshSct))) ) - return(0); - - /* Copy the FilNam into the structure */ - - if(strlen(FilNam) + 7 >= GmfStrSiz) - return(0); - - strcpy(msh->FilNam, FilNam); - - /* Store the opening mod (read or write) and guess the filetype (binary or ascii) depending on the extension */ - - msh->mod = mod; - msh->buf = (void *)msh->DblBuf; - msh->FltBuf = (void *)msh->DblBuf; - msh->IntBuf = (void *)msh->DblBuf; - - if(strstr(msh->FilNam, ".meshb")) - msh->typ |= (Bin | MshFil); - else if(strstr(msh->FilNam, ".mesh")) - msh->typ |= (Asc | MshFil); - else if(strstr(msh->FilNam, ".solb")) - msh->typ |= (Bin | SolFil); - else if(strstr(msh->FilNam, ".sol")) - msh->typ |= (Asc | SolFil); - else - return(0); - - /* Open the file in the required mod and initialyse the mesh structure */ - - if(msh->mod == GmfRead) - { - - /*-----------------------*/ - /* OPEN FILE FOR READING */ - /*-----------------------*/ - - va_start(VarArg, mod); - PtrVer = va_arg(VarArg, int *); - PtrDim = va_arg(VarArg, int *); - va_end(VarArg); - - /* Create the name string and open the file */ - - if(!(msh->hdl = fopen(msh->FilNam, "rb"))) - return(0); - - /* Read the endian coding tag, the mesh version and the mesh dimension (mandatory kwd) */ - - if(msh->typ & Bin) - { - fread((unsigned char *)&msh->cod, WrdSiz, 1, msh->hdl); - - if( (msh->cod != 1) && (msh->cod != 16777216) ) - return(0); - - ScaWrd(msh, (unsigned char *)&msh->ver); - - if( (msh->ver < 1) || (msh->ver > 3) ) - return(0); - - if( (msh->ver == 3) && (sizeof(long) == 4) ) - return(0); - - ScaWrd(msh, (unsigned char *)&KwdCod); - - if(KwdCod != GmfDimension) - return(0); - - GetPos(msh); - ScaWrd(msh, (unsigned char *)&msh->dim); - } - else - { - do - { - res = fscanf(msh->hdl, "%s", str); - }while( (res != EOF) && strcmp(str, "MeshVersionFormatted") ); - - if(res == EOF) - return(0); - - fscanf(msh->hdl, "%d", &msh->ver); - - if( (msh->ver < 1) || (msh->ver > 3) ) - return(0); - - do - { - res = fscanf(msh->hdl, "%s", str); - }while( (res != EOF) && strcmp(str, "Dimension") ); - - if(res == EOF) - return(0); - - fscanf(msh->hdl, "%d", &msh->dim); - } - - if( (msh->dim != 2) && (msh->dim != 3) ) - return(0); - - (*PtrVer) = msh->ver; - (*PtrDim) = msh->dim; - - /*------------*/ - /* KW READING */ - /*------------*/ - - /* Read the list of kw present in the file */ - - if(!ScaKwdTab(msh)) - return(0); - - GmfMshTab[ MshIdx ] = msh; - - return(MshIdx); - } - else if(msh->mod == GmfWrite) - { - - /*-----------------------*/ - /* OPEN FILE FOR WRITING */ - /*-----------------------*/ - - msh->cod = 1; - - /* Check if the user provided a valid version number and dimension */ - - va_start(VarArg, mod); - msh->ver = va_arg(VarArg, int); - msh->dim = va_arg(VarArg, int); - va_end(VarArg); - - if( (msh->ver < 1) || (msh->ver > 3) ) - return(0); - - if( (msh->ver == 3) && (sizeof(long) == 4) ) - return(0); - - if( (msh->dim != 2) && (msh->dim != 3) ) - return(0); - - /* Create the mesh file */ - - if(!(msh->hdl = fopen(msh->FilNam, "wb"))) - return(0); - - GmfMshTab[ MshIdx ] = msh; - - - /*------------*/ - /* KW WRITING */ - /*------------*/ - - /* Write the mesh version and dimension */ - - if(msh->typ & Asc) - { - fprintf(msh->hdl, "%s %d\n\n", GmfKwdFmt[ GmfVersionFormatted ][0], msh->ver); - fprintf(msh->hdl, "%s %d\n", GmfKwdFmt[ GmfDimension ][0], msh->dim); - } - else - { - RecWrd(msh, (unsigned char *)&msh->cod); - RecWrd(msh, (unsigned char *)&msh->ver); - GmfSetKwd(MshIdx, GmfDimension, 0); - RecWrd(msh, (unsigned char *)&msh->dim); - } - - return(MshIdx); - } - else - return(0); -} - - -/*----------------------------------------------------------*/ -/* Close a meshfile in the right way */ -/*----------------------------------------------------------*/ - -int GmfCloseMesh(int MshIdx) -{ - int res = 1; - GmfMshSct *msh; - - if( (MshIdx < 1) || (MshIdx > MaxMsh) ) - return(0); - - msh = GmfMshTab[ MshIdx ]; - RecBlk(msh, msh->buf, 0); - - /* In write down the "End" kw in write mode */ - - if(msh->mod == GmfWrite) { - if(msh->typ & Asc) - fprintf(msh->hdl, "\n%s\n", GmfKwdFmt[ GmfEnd ][0]); - else - GmfSetKwd(MshIdx, GmfEnd, 0); - } - - /* Close the file and free the mesh structure */ - - if(fclose(msh->hdl)) - res = 0; - - free(msh); - GmfMshTab[ MshIdx ] = NULL; - - return(res); -} - - -/*----------------------------------------------------------*/ -/* Read the number of lines and set the position to this kwd*/ -/*----------------------------------------------------------*/ - -int GmfStatKwd(int MshIdx, int KwdCod, ...) -{ - int i, *PtrNmbTyp, *PtrSolSiz, *TypTab; - GmfMshSct *msh; - KwdSct *kwd; - va_list VarArg; - - if( (MshIdx < 1) || (MshIdx > MaxMsh) ) - return(0); - - msh = GmfMshTab[ MshIdx ]; - - if( (KwdCod < 1) || (KwdCod > GmfMaxKwd) ) - return(0); - - kwd = &msh->KwdTab[ KwdCod ]; - - if(!kwd->NmbLin) - return(0); - - /* Read further arguments if this kw is a sol */ - - if(kwd->typ == SolKwd) - { - va_start(VarArg, KwdCod); - - PtrNmbTyp = va_arg(VarArg, int *); - *PtrNmbTyp = kwd->NmbTyp; - - PtrSolSiz = va_arg(VarArg, int *); - *PtrSolSiz = kwd->SolSiz; - - TypTab = va_arg(VarArg, int *); - - for(i=0;iNmbTyp;i++) - TypTab[i] = kwd->TypTab[i]; - - va_end(VarArg); - } - - return(kwd->NmbLin); -} - - -/*----------------------------------------------------------*/ -/* Set the current file position to a given kwd */ -/*----------------------------------------------------------*/ - -int GmfGotoKwd(int MshIdx, int KwdCod) -{ - GmfMshSct *msh; - KwdSct *kwd; - - if( (MshIdx < 1) || (MshIdx > MaxMsh) ) - return(0); - - msh = GmfMshTab[ MshIdx ]; - - if( (KwdCod < 1) || (KwdCod > GmfMaxKwd) ) - return(0); - - kwd = &msh->KwdTab[ KwdCod ]; - - if(!kwd->NmbLin) - return(0); - - return(fseek(msh->hdl, kwd->pos, SEEK_SET)); -} - - -/*----------------------------------------------------------*/ -/* Write the kwd and set the number of lines */ -/*----------------------------------------------------------*/ - -int GmfSetKwd(int MshIdx, int KwdCod, ...) -{ - int i, NmbLin=0, *TypTab; - long CurPos; - va_list VarArg; - GmfMshSct *msh; - KwdSct *kwd; - - if( (MshIdx < 1) || (MshIdx > MaxMsh) ) - return(0); - - msh = GmfMshTab[ MshIdx ]; - RecBlk(msh, msh->buf, 0); - - if( (KwdCod < 1) || (KwdCod > GmfMaxKwd) ) - return(0); - - kwd = &msh->KwdTab[ KwdCod ]; - - /* Read further arguments if this kw has a header */ - - if(strlen(GmfKwdFmt[ KwdCod ][2])) - { - va_start(VarArg, KwdCod); - NmbLin = va_arg(VarArg, int); - - if(!strcmp(GmfKwdFmt[ KwdCod ][3], "sr")) - { - kwd->NmbTyp = va_arg(VarArg, int); - TypTab = va_arg(VarArg, int *); - - for(i=0;iNmbTyp;i++) - kwd->TypTab[i] = TypTab[i]; - } - - va_end(VarArg); - } - - /* Setup the kwd info */ - - ExpFmt(msh, KwdCod); - - if(!kwd->typ) - return(0); - else if(kwd->typ == InfKwd) - kwd->NmbLin = 1; - else - kwd->NmbLin = NmbLin; - - /* Store the next kwd position in binary file */ - - if( (msh->typ & Bin) && msh->NexKwdPos ) - { - CurPos = ftell(msh->hdl); - fseek(msh->hdl, msh->NexKwdPos, SEEK_SET); - SetPos(msh, CurPos); - fseek(msh->hdl, CurPos, SEEK_SET); - } - - /* Write the header */ - - if(msh->typ & Asc) - { - fprintf(msh->hdl, "\n%s\n", GmfKwdFmt[ KwdCod ][0]); - - if(kwd->typ != InfKwd) - fprintf(msh->hdl, "%d\n", kwd->NmbLin); - - /* In case of solution field, write the extended header */ - - if(kwd->typ == SolKwd) - { - fprintf(msh->hdl, "%d ", kwd->NmbTyp); - - for(i=0;iNmbTyp;i++) - fprintf(msh->hdl, "%d ", kwd->TypTab[i]); - - fprintf(msh->hdl, "\n\n"); - } - } - else - { - RecWrd(msh, (unsigned char *)&KwdCod); - msh->NexKwdPos = ftell(msh->hdl); - SetPos(msh, 0); - - if(kwd->typ != InfKwd) - RecWrd(msh, (unsigned char *)&kwd->NmbLin); - - /* In case of solution field, write the extended header at once */ - - if(kwd->typ == SolKwd) - { - RecWrd(msh, (unsigned char *)&kwd->NmbTyp); - - for(i=0;iNmbTyp;i++) - RecWrd(msh, (unsigned char *)&kwd->TypTab[i]); - } - } - msh->pos = 0; - return(kwd->NmbLin); -} - - -/*----------------------------------------------------------*/ -/* Read a full line from the current kwd */ -/*----------------------------------------------------------*/ - -void GmfGetLin(int MshIdx, int KwdCod, ...) -{ - int i, j; - float *FltSolTab; - double *DblSolTab; - va_list VarArg; - GmfMshSct *msh = GmfMshTab[ MshIdx ]; - KwdSct *kwd = &msh->KwdTab[ KwdCod ]; - - /* Start decoding the arguments */ - - va_start(VarArg, KwdCod); - - if(kwd->typ != SolKwd) - { - if(msh->ver == 1) - { - if(msh->typ & Asc) - { - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - fscanf(msh->hdl, "%f", va_arg(VarArg, float *)); - else - fscanf(msh->hdl, "%d", va_arg(VarArg, int *)); - } - else - { - ScaBlk(msh, msh->buf, kwd->SolSiz); - - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - *(va_arg(VarArg, float *)) = msh->FltBuf[i]; - else - *(va_arg(VarArg, int *)) = msh->IntBuf[i]; - } - } - else - { - if(msh->typ & Asc) - { - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - fscanf(msh->hdl, "%lf", va_arg(VarArg, double *)); - else - fscanf(msh->hdl, "%d", va_arg(VarArg, int *)); - } - else - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - ScaDblWrd(msh, (unsigned char *)va_arg(VarArg, double *)); - else - ScaWrd(msh, (unsigned char *)va_arg(VarArg, int *)); - } - } - else - { - if(msh->ver == 1) - { - FltSolTab = va_arg(VarArg, float *); - - if(msh->typ & Asc) - for(j=0;jSolSiz;j++) - fscanf(msh->hdl, "%f", &FltSolTab[j]); - else - ScaBlk(msh, (unsigned char *)FltSolTab, kwd->NmbWrd); - } - else - { - DblSolTab = va_arg(VarArg, double *); - - if(msh->typ & Asc) - for(j=0;jSolSiz;j++) - fscanf(msh->hdl, "%lf", &DblSolTab[j]); - else - for(j=0;jSolSiz;j++) - ScaDblWrd(msh, (unsigned char *)&DblSolTab[j]); - } - } - - va_end(VarArg); -} - - -/*----------------------------------------------------------*/ -/* Write a full line from the current kwd */ -/*----------------------------------------------------------*/ - -void GmfSetLin(int MshIdx, int KwdCod, ...) -{ - int i, j, pos, *IntBuf; - float *FltSolTab; - double *DblSolTab, *DblBuf; - va_list VarArg; - GmfMshSct *msh = GmfMshTab[ MshIdx ]; - KwdSct *kwd = &msh->KwdTab[ KwdCod ]; - - /* Start decoding the arguments */ - - va_start(VarArg, KwdCod); - - if(kwd->typ != SolKwd) - { - if(msh->ver == 1) - { - if(msh->typ & Asc) - { - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - fprintf(msh->hdl, "%g ", (float)va_arg(VarArg, double)); - else - fprintf(msh->hdl, "%d ", va_arg(VarArg, int)); - } - else - { - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - msh->FltBuf[i] = va_arg(VarArg, double); - else - msh->IntBuf[i] = va_arg(VarArg, int); - - RecBlk(msh, msh->buf, kwd->SolSiz); - } - } - else - { - if(msh->typ & Asc) - { - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - fprintf(msh->hdl, "%.15lg ", va_arg(VarArg, double)); - else - fprintf(msh->hdl, "%d ", va_arg(VarArg, int)); - } - else - { - pos = 0; - - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'r') - { - DblBuf = (void *)&msh->buf[ pos ]; - *DblBuf = va_arg(VarArg, double); - pos += 8; - } - else - { - IntBuf = (void *)&msh->buf[ pos ]; - *IntBuf = va_arg(VarArg, int); - pos += 4; - } - RecBlk(msh, msh->buf, kwd->NmbWrd); - } - } - } - else - { - if(msh->ver == 1) - { - FltSolTab = va_arg(VarArg, float *); - - if(msh->typ & Asc) - for(j=0;jSolSiz;j++) - fprintf(msh->hdl, "%g ", FltSolTab[j]); - else - RecBlk(msh, (unsigned char *)FltSolTab, kwd->NmbWrd); - } - else - { - DblSolTab = va_arg(VarArg, double *); - - if(msh->typ & Asc) - for(j=0;jSolSiz;j++) - fprintf(msh->hdl, "%.15lg ", DblSolTab[j]); - else - RecBlk(msh, (unsigned char *)DblSolTab, kwd->NmbWrd); - } - } - - va_end(VarArg); - - if(msh->typ & Asc) - fprintf(msh->hdl, "\n"); -} - - -/*----------------------------------------------------------*/ -/* Private procedure for transmesh : copy a whole line */ -/*----------------------------------------------------------*/ - -void GmfCpyLin(int InpIdx, int OutIdx, int KwdCod) -{ - double d; - float f; - int i, a; - GmfMshSct *InpMsh = GmfMshTab[ InpIdx ], *OutMsh = GmfMshTab[ OutIdx ]; - KwdSct *kwd = &InpMsh->KwdTab[ KwdCod ]; - - for(i=0;iSolSiz;i++) - { - if(kwd->fmt[i] == 'r') - { - if(InpMsh->ver == 1) - { - if(InpMsh->typ & Asc) - fscanf(InpMsh->hdl, "%f", &f); - else - ScaWrd(InpMsh, (unsigned char *)&f); - - d = f; - } - else - { - if(InpMsh->typ & Asc) - fscanf(InpMsh->hdl, "%lf", &d); - else - ScaDblWrd(InpMsh, (unsigned char *)&d); - - f = (float)d; - } - - if(OutMsh->ver == 1) - if(OutMsh->typ & Asc) - fprintf(OutMsh->hdl, "%g ", f); - else - RecWrd(OutMsh, (unsigned char *)&f); - else - if(OutMsh->typ & Asc) - fprintf(OutMsh->hdl, "%.15g ", d); - else - RecDblWrd(OutMsh, (unsigned char *)&d); - } - else - { - if(InpMsh->typ & Asc) - fscanf(InpMsh->hdl, "%d", &a); - else - ScaWrd(InpMsh, (unsigned char *)&a); - - if(OutMsh->typ & Asc) - fprintf(OutMsh->hdl, "%d ", a); - else - RecWrd(OutMsh, (unsigned char *)&a); - } - } - - if(OutMsh->typ & Asc) - fprintf(OutMsh->hdl, "\n"); -} - - -/*----------------------------------------------------------*/ -/* Find every kw present in a meshfile */ -/*----------------------------------------------------------*/ - -static int ScaKwdTab(GmfMshSct *msh) -{ - int KwdCod; - long NexPos, CurPos, EndPos; - char str[ GmfStrSiz ]; - - if(msh->typ & Asc) - { - /* Scan each string in the file until the end */ - - while(fscanf(msh->hdl, "%s", str) != EOF) - { - /* Fast test in order to reject quickly the numeric values */ - - if(isalpha(str[0])) - { - /* Search which kwd code this string is associated with, - then get its header and save the curent position in file (just before the data) */ - - for(KwdCod=1; KwdCod<= GmfMaxKwd; KwdCod++) - if(!strcmp(str, GmfKwdFmt[ KwdCod ][0])) - { - ScaKwdHdr(msh, KwdCod); - break; - } - } - else if(str[0] == '#') - while(fgetc(msh->hdl) != '\n'); - } - } - else - { - /* Get file size */ - - CurPos = ftell(msh->hdl); - fseek(msh->hdl, 0, SEEK_END); - EndPos = ftell(msh->hdl); - fseek(msh->hdl, CurPos, SEEK_SET); - - /* Jump through kwd positions in the file */ - - do - { - /* Get the kwd code and the next kwd position */ - - ScaWrd(msh, (unsigned char *)&KwdCod); - NexPos = GetPos(msh); - - if(NexPos > EndPos) - return(0); - - /* Check if this kwd belongs to this mesh version */ - - if( (KwdCod >= 1) && (KwdCod <= GmfMaxKwd) ) - ScaKwdHdr(msh, KwdCod); - - /* Go to the next kwd */ - - if(NexPos) - fseek(msh->hdl, NexPos, SEEK_SET); - }while(NexPos && (KwdCod != GmfEnd)); - } - - return(1); -} - - -/*----------------------------------------------------------*/ -/* Read and setup the keyword's header */ -/*----------------------------------------------------------*/ - -static void ScaKwdHdr(GmfMshSct *msh, int KwdCod) -{ - int i; - KwdSct *kwd = &msh->KwdTab[ KwdCod ]; - - if(!strcmp("i", GmfKwdFmt[ KwdCod ][2])) - { - if(msh->typ & Asc) - fscanf(msh->hdl, "%d", &kwd->NmbLin); - else - ScaWrd(msh, (unsigned char *)&kwd->NmbLin); - } - else - kwd->NmbLin = 1; - - if(!strcmp("sr", GmfKwdFmt[ KwdCod ][3])) - { - if(msh->typ & Asc) - { - fscanf(msh->hdl, "%d", &kwd->NmbTyp); - - for(i=0;iNmbTyp;i++) - fscanf(msh->hdl, "%d", &kwd->TypTab[i]); - } - else - { - ScaWrd(msh, (unsigned char *)&kwd->NmbTyp); - - for(i=0;iNmbTyp;i++) - ScaWrd(msh, (unsigned char *)&kwd->TypTab[i]); - } - } - - ExpFmt(msh, KwdCod); - kwd->pos = ftell(msh->hdl); -} - - -/*----------------------------------------------------------*/ -/* Expand the compacted format and compute the line size */ -/*----------------------------------------------------------*/ - -static void ExpFmt(GmfMshSct *msh, int KwdCod) -{ - int i, j, TmpSiz=0; - char chr, *InpFmt = GmfKwdFmt[ KwdCod ][3]; - KwdSct *kwd = &msh->KwdTab[ KwdCod ]; - - /* Set the kwd's type */ - - if(!strlen(GmfKwdFmt[ KwdCod ][2])) - kwd->typ = InfKwd; - else if(!strcmp(InpFmt, "sr")) - kwd->typ = SolKwd; - else - kwd->typ = RegKwd; - - /* Get the solution-field's size */ - - if(kwd->typ == SolKwd) - for(i=0;iNmbTyp;i++) - switch(kwd->TypTab[i]) - { - case GmfSca : TmpSiz += 1; break; - case GmfVec : TmpSiz += msh->dim; break; - case GmfSymMat : TmpSiz += (msh->dim * (msh->dim+1)) / 2; break; - case GmfMat : TmpSiz += msh->dim * msh->dim; break; - } - - /* Scan each character from the format string */ - - i = kwd->SolSiz = kwd->NmbWrd = 0; - - while(i < strlen(InpFmt)) - { - chr = InpFmt[ i++ ]; - - if(chr == 'd') - { - chr = InpFmt[i++]; - - for(j=0;jdim;j++) - kwd->fmt[ kwd->SolSiz++ ] = chr; - } - else if(chr == 's') - { - chr = InpFmt[i++]; - - for(j=0;jfmt[ kwd->SolSiz++ ] = chr; - } - else - kwd->fmt[ kwd->SolSiz++ ] = chr; - } - - for(i=0;iSolSiz;i++) - if(kwd->fmt[i] == 'i') - kwd->NmbWrd++; - else if(msh->ver >= 2) - kwd->NmbWrd += 2; - else - kwd->NmbWrd++; -} - - -/*----------------------------------------------------------*/ -/* Read a four bytes word from a mesh file */ -/*----------------------------------------------------------*/ - -static void ScaWrd(GmfMshSct *msh, unsigned char *wrd) -{ - unsigned char swp; - - fread(wrd, WrdSiz, 1, msh->hdl); - - if(msh->cod == 1) - return; - - swp = wrd[3]; - wrd[3] = wrd[0]; - wrd[0] = swp; - - swp = wrd[2]; - wrd[2] = wrd[1]; - wrd[1] = swp; -} - - -/*----------------------------------------------------------*/ -/* Read an eight bytes word from a mesh file */ -/*----------------------------------------------------------*/ - -static void ScaDblWrd(GmfMshSct *msh, unsigned char *wrd) -{ - int i; - unsigned char swp; - - fread(wrd, WrdSiz, 2, msh->hdl); - - if(msh->cod == 1) - return; - - for(i=0;i<4;i++) - { - swp = wrd[7-i]; - wrd[7-i] = wrd[i]; - wrd[i] = swp; - } -} - - -/*----------------------------------------------------------*/ -/* Read ablock of four bytes word from a mesh file */ -/*----------------------------------------------------------*/ - -static void ScaBlk(GmfMshSct *msh, unsigned char *blk, int siz) -{ - int i, j; - unsigned char swp, *wrd; - - fread(blk, WrdSiz, siz, msh->hdl); - - if(msh->cod == 1) - return; - - for(i=0;iver >= 3) - ScaDblWrd(msh, (unsigned char*)&pos); - else - { - ScaWrd(msh, (unsigned char*)&IntVal); - pos = IntVal; - } - - return(pos); -} - - -/*----------------------------------------------------------*/ -/* Write a four bytes word to a mesh file */ -/*----------------------------------------------------------*/ - -static void RecWrd(GmfMshSct *msh, unsigned char *wrd) -{ - fwrite(wrd, WrdSiz, 1, msh->hdl); -} - - -/*----------------------------------------------------------*/ -/* Write an eight bytes word to a mesh file */ -/*----------------------------------------------------------*/ - -static void RecDblWrd(GmfMshSct *msh, unsigned char *wrd) -{ - fwrite(wrd, WrdSiz, 2, msh->hdl); -} - - -/*----------------------------------------------------------*/ -/* Write a block of four bytes word to a mesh file */ -/*----------------------------------------------------------*/ - -static void RecBlk(GmfMshSct *msh, unsigned char *blk, int siz) -{ - /* Copy this line-block into the main mesh buffer */ - - if(siz) - { - memcpy(&msh->blk[ msh->pos ], blk, siz * WrdSiz); - msh->pos += siz * WrdSiz; - } - - /* When the buffer is full or this procedure is called with a 0 size, flush the cache on disk */ - - if( (msh->pos > BufSiz) || (!siz && msh->pos) ) - { - fwrite(msh->blk, 1, msh->pos, msh->hdl); - msh->pos = 0; - } -} - - -/*----------------------------------------------------------*/ -/* Read a 4 or 8 bytes position in mesh file */ -/*----------------------------------------------------------*/ - -static void SetPos(GmfMshSct *msh, long pos) -{ - int IntVal; - - if(msh->ver >= 3) - RecDblWrd(msh, (unsigned char*)&pos); - else - { - IntVal = pos; - RecWrd(msh, (unsigned char*)&IntVal); - } -} diff --git a/src/GHS3DPlugin/libmesh5.h b/src/GHS3DPlugin/libmesh5.h deleted file mode 100755 index cfaf9fb..0000000 --- a/src/GHS3DPlugin/libmesh5.h +++ /dev/null @@ -1,152 +0,0 @@ - - -/*----------------------------------------------------------*/ -/* */ -/* LIBMESH V 5.45 */ -/* */ -/*----------------------------------------------------------*/ -/* */ -/* Description: handle .meshb file format I/O */ -/* Author: Loic MARECHAL */ -/* Creation date: feb 16 2007 */ -/* Last modification: sep 27 2010 */ -/* */ -/*----------------------------------------------------------*/ - - -/*----------------------------------------------------------*/ -/* Defines */ -/*----------------------------------------------------------*/ - -#define GmfStrSiz 1024 -#define GmfMaxTyp 1000 -#define GmfMaxKwd 79 -#define GmfMshVer 1 -#define GmfRead 1 -#define GmfWrite 2 -#define GmfSca 1 -#define GmfVec 2 -#define GmfSymMat 3 -#define GmfMat 4 -#define GmfFloat 1 -#define GmfDouble 2 - -enum GmfKwdCod -{ - GmfReserved1, \ - GmfVersionFormatted, \ - GmfReserved2, \ - GmfDimension, \ - GmfVertices, \ - GmfEdges, \ - GmfTriangles, \ - GmfQuadrilaterals, \ - GmfTetrahedra, \ - GmfPrisms, \ - GmfHexahedra, \ - GmfIterationsAll, \ - GmfTimesAll, \ - GmfCorners, \ - GmfRidges, \ - GmfRequiredVertices, \ - GmfRequiredEdges, \ - GmfRequiredTriangles, \ - GmfRequiredQuadrilaterals, \ - GmfTangentAtEdgeVertices, \ - GmfNormalAtVertices, \ - GmfNormalAtTriangleVertices, \ - GmfNormalAtQuadrilateralVertices, \ - GmfAngleOfCornerBound, \ - GmfTrianglesP2, \ - GmfEdgesP2, \ - GmfSolAtPyramids, \ - GmfQuadrilateralsQ2, \ - GmfISolAtPyramids, \ - GmfReserved6, \ - GmfTetrahedraP2, \ - GmfReserved7, \ - GmfReserved8, \ - GmfHexahedraQ2, \ - GmfReserved9, \ - GmfReserved10, \ - GmfReserved17, \ - GmfReserved18, \ - GmfReserved19, \ - GmfReserved20, \ - GmfReserved21, \ - GmfReserved22, \ - GmfReserved23, \ - GmfReserved24, \ - GmfReserved25, \ - GmfReserved26, \ - GmfPolyhedra, \ - GmfPolygons, \ - GmfReserved29, \ - GmfPyramids, \ - GmfBoundingBox, \ - GmfBody, \ - GmfPrivateTable, \ - GmfReserved33, \ - GmfEnd, \ - GmfReserved34, \ - GmfReserved35, \ - GmfReserved36, \ - GmfReserved37, \ - GmfTangents, \ - GmfNormals, \ - GmfTangentAtVertices, \ - GmfSolAtVertices, \ - GmfSolAtEdges, \ - GmfSolAtTriangles, \ - GmfSolAtQuadrilaterals, \ - GmfSolAtTetrahedra, \ - GmfSolAtPrisms, \ - GmfSolAtHexahedra, \ - GmfDSolAtVertices, \ - GmfISolAtVertices, \ - GmfISolAtEdges, \ - GmfISolAtTriangles, \ - GmfISolAtQuadrilaterals, \ - GmfISolAtTetrahedra, \ - GmfISolAtPrisms, \ - GmfISolAtHexahedra, \ - GmfIterations, \ - GmfTime, \ - GmfReserved38 -}; - - -/*----------------------------------------------------------*/ -/* External procedures */ -/*----------------------------------------------------------*/ - -extern int GmfOpenMesh(const char *, int, ...); -extern int GmfCloseMesh(int); -extern int GmfStatKwd(int, int, ...); -extern int GmfGotoKwd(int, int); -extern int GmfSetKwd(int, int, ...); -extern void GmfGetLin(int, int, ...); -extern void GmfSetLin(int, int, ...); - - -/*----------------------------------------------------------*/ -/* Fortran 77 API */ -/*----------------------------------------------------------*/ - -#if defined(F77_NO_UNDER_SCORE) -#define call(x) x -#else -#define call(x) x ## _ -#endif - - -/*----------------------------------------------------------*/ -/* Transmesh private API */ -/*----------------------------------------------------------*/ - -#ifdef TRANSMESH - -extern char *GmfKwdFmt[ GmfMaxKwd + 1 ][4]; -extern int GmfCpyLin(int, int, int); - -#endif diff --git a/src/GUI/GHS3DPluginGUI_Enums.h b/src/GUI/GHS3DPluginGUI_Enums.h index 8516565..87c2563 100644 --- a/src/GUI/GHS3DPluginGUI_Enums.h +++ b/src/GUI/GHS3DPluginGUI_Enums.h @@ -51,7 +51,6 @@ enum { ENF_MESH_NAME_COLUMN = 0, ENF_MESH_ENTRY_COLUMN, ENF_MESH_CONSTRAINT_COLUMN, - ENF_MESH_SIZE_COLUMN, ENF_MESH_GROUP_COLUMN, ENF_MESH_NB_COLUMNS }; @@ -59,7 +58,7 @@ enum { // Enforced vertices widget inputs enum { ENF_VER_WARNING = 0, - ENF_VER_VERTEX /*= 0*/, + ENF_VER_VERTEX,// = 0, ENF_VER_X_COORD, ENF_VER_Y_COORD, ENF_VER_Z_COORD, @@ -74,7 +73,6 @@ enum { ENF_MESH_WARNING = 0, ENF_MESH_MESH /*= 0*/, ENF_MESH_CONSTRAINT, - ENF_MESH_SIZE, ENF_MESH_GROUP, ENF_MESH_BTN, ENF_MESH_NB_LINES diff --git a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx index 6c097cc..4f32cba 100644 --- a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx @@ -287,38 +287,20 @@ EnforcedMeshTableWidgetDelegate::EnforcedMeshTableWidgetDelegate(QObject *parent QWidget *EnforcedMeshTableWidgetDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & option , const QModelIndex & index ) const -{ - if (index.column() == ENF_MESH_SIZE_COLUMN) { - SMESHGUI_SpinBox *editor = new SMESHGUI_SpinBox(parent); - editor->RangeStepAndValidator(0, COORD_MAX, 10.0, "length_precision"); - return editor; - } +{ return QItemDelegate::createEditor(parent, option, index); } void EnforcedMeshTableWidgetDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { - if (index.column() == ENF_MESH_SIZE_COLUMN) { - SMESHGUI_SpinBox *spinBox = qobject_cast(editor); - spinBox->SetValue(index.data().toDouble()); - } - else - QItemDelegate::setEditorData(editor, index); + QItemDelegate::setEditorData(editor, index); } void EnforcedMeshTableWidgetDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { - if (index.column() == ENF_MESH_SIZE_COLUMN) - { - SMESHGUI_SpinBox *spinBox = qobject_cast(editor); - const double newsize = spinBox->GetValue(); - if (newsize > 0) - model->setData(index, newsize, Qt::EditRole); - } - else - QItemDelegate::setModelData(editor, model, index); + QItemDelegate::setModelData(editor, model, index); } @@ -463,28 +445,35 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() myBoundaryRecoveryCheck = new QCheckBox( tr( "RECOVERY_VERSION" ), myAdvGroup ); myFEMCorrectionCheck = new QCheckBox( tr( "FEM_CORRECTION" ), myAdvGroup ); + + QLabel* myGradationLabel = new QLabel( tr( "GHS3D_GRADATION" ), myAdvGroup ); + myGradation = new SMESHGUI_SpinBox(myAdvGroup); + myGradation->RangeStepAndValidator(1.05, 5.0, 0.05, "length_precision"); QLabel* aTextOptionLabel = new QLabel( tr( "TEXT_OPTION" ), myAdvGroup ); myTextOption = new QLineEdit( myAdvGroup ); - anAdvLayout->addWidget( myMaximumMemoryCheck, 0, 0, 1, 1 ); - anAdvLayout->addWidget( myMaximumMemorySpin, 0, 1, 1, 1 ); - anAdvLayout->addWidget( aMegabyteLabel, 0, 2, 1, 1 ); - anAdvLayout->addWidget( myInitialMemoryCheck, 1, 0, 1, 1 ); - anAdvLayout->addWidget( myInitialMemorySpin, 1, 1, 1, 1 ); - anAdvLayout->addWidget( aMegabyteLabel2, 1, 2, 1, 1 ); - anAdvLayout->addWidget( aWorkinDirLabel, 2, 0, 1, 1 ); - anAdvLayout->addWidget( myWorkingDir, 2, 1, 1, 2 ); - anAdvLayout->addWidget( dirBtn, 2, 3, 1, 1 ); - anAdvLayout->addWidget( myKeepFiles, 3, 0, 1, 4 ); - anAdvLayout->addWidget( aVerboseLevelLabel, 4, 0, 1, 1 ); - anAdvLayout->addWidget( myVerboseLevelSpin, 4, 1, 1, 1 ); - anAdvLayout->addWidget( myToCreateNewNodesCheck, 5, 0, 1, 4 ); - anAdvLayout->addWidget( myRemoveInitialCentralPointCheck, 6, 0, 1, 4 ); - anAdvLayout->addWidget( myBoundaryRecoveryCheck, 7, 0, 1, 4 ); - anAdvLayout->addWidget( myFEMCorrectionCheck, 8, 0, 1, 4 ); - anAdvLayout->addWidget( aTextOptionLabel, 9, 0, 1, 1 ); - anAdvLayout->addWidget( myTextOption, 9, 1, 1, 2 ); + row = 0; + anAdvLayout->addWidget( myMaximumMemoryCheck, row, 0, 1, 1 ); + anAdvLayout->addWidget( myMaximumMemorySpin, row, 1, 1, 1 ); + anAdvLayout->addWidget( aMegabyteLabel, row++, 2, 1, 1 ); + anAdvLayout->addWidget( myInitialMemoryCheck, row, 0, 1, 1 ); + anAdvLayout->addWidget( myInitialMemorySpin, row, 1, 1, 1 ); + anAdvLayout->addWidget( aMegabyteLabel2, row++, 2, 1, 1 ); + anAdvLayout->addWidget( aWorkinDirLabel, row, 0, 1, 1 ); + anAdvLayout->addWidget( myWorkingDir, row, 1, 1, 2 ); + anAdvLayout->addWidget( dirBtn, row++, 3, 1, 1 ); + anAdvLayout->addWidget( myKeepFiles, row++, 0, 1, 4 ); + anAdvLayout->addWidget( aVerboseLevelLabel, row, 0, 1, 1 ); + anAdvLayout->addWidget( myVerboseLevelSpin, row++, 1, 1, 2 ); + anAdvLayout->addWidget( myToCreateNewNodesCheck, row++, 0, 1, 4 ); + anAdvLayout->addWidget( myRemoveInitialCentralPointCheck, row++, 0, 1, 4 ); + anAdvLayout->addWidget( myBoundaryRecoveryCheck, row++, 0, 1, 4 ); + anAdvLayout->addWidget( myFEMCorrectionCheck, row++, 0, 1, 4 ); + anAdvLayout->addWidget( myGradationLabel, row, 0, 1, 1 ); + anAdvLayout->addWidget( myGradation, row++, 1, 1, 2 ); + anAdvLayout->addWidget( aTextOptionLabel, row, 0, 1, 1 ); + anAdvLayout->addWidget( myTextOption, row++, 1, 1, 2 ); // Enforced vertices parameters myEnfGroup = new QWidget(); @@ -496,10 +485,10 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() myEnforcedTableWidget->setColumnCount( ENF_VER_NB_COLUMNS ); myEnforcedTableWidget->setSortingEnabled(true); QStringList enforcedHeaders; - enforcedHeaders << tr( "GHS3D_ENF_NAME_COLUMN" ) - << tr( "GHS3D_ENF_VER_X_COLUMN" )<< tr( "GHS3D_ENF_VER_Y_COLUMN" ) << tr( "GHS3D_ENF_VER_Z_COLUMN" ) + enforcedHeaders << tr( "GHS3D_ENF_NAME_COLUMN" ) + << tr( "GHS3D_ENF_VER_X_COLUMN" )<< tr( "GHS3D_ENF_VER_Y_COLUMN" ) << tr( "GHS3D_ENF_VER_Z_COLUMN" ) << tr( "GHS3D_ENF_SIZE_COLUMN" ) << tr("GHS3D_ENF_ENTRY_COLUMN") << tr("GHS3D_ENF_VER_COMPOUND_COLUMN") << tr( "GHS3D_ENF_GROUP_COLUMN" ); - + myEnforcedTableWidget->setHorizontalHeaderLabels(enforcedHeaders); myEnforcedTableWidget->verticalHeader()->hide(); myEnforcedTableWidget->horizontalHeader()->setStretchLastSection(true); @@ -590,7 +579,6 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() enforcedMeshHeaders << tr( "GHS3D_ENF_NAME_COLUMN" ) << tr( "GHS3D_ENF_ENTRY_COLUMN" ) << tr( "GHS3D_ENF_MESH_CONSTRAINT_COLUMN" ) - << tr( "GHS3D_ENF_SIZE_COLUMN" ) << tr( "GHS3D_ENF_GROUP_COLUMN" ); myEnforcedMeshTableWidget->setHorizontalHeaderLabels(enforcedMeshHeaders); myEnforcedMeshTableWidget->horizontalHeader()->setStretchLastSection(true); @@ -616,10 +604,6 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() myEnfMeshConstraint->insertItems(0,myEnfMeshConstraintLabels); myEnfMeshConstraint->setEditable(false); myEnfMeshConstraint->setCurrentIndex(0); - - QLabel* myMeshSizeLabel = new QLabel( tr( "GHS3D_ENF_SIZE_LABEL" ), myEnfMeshGroup ); - myMeshSizeValue = new SMESHGUI_SpinBox(myEnfMeshGroup); - myMeshSizeValue->RangeStepAndValidator(0, COORD_MAX, 10.0, "length_precision"); QLabel* myMeshGroupNameLabel = new QLabel( tr( "GHS3D_ENF_GROUP_LABEL" ), myEnfMeshGroup ); myMeshGroupName = new QLineEdit(myEnfMeshGroup); @@ -644,8 +628,6 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() anEnfMeshLayout2->addWidget(myEnfMeshWdg, ENF_MESH_MESH, 0, 1, 2); anEnfMeshLayout2->addWidget(myMeshConstraintLabel, ENF_MESH_CONSTRAINT, 0, 1, 1); anEnfMeshLayout2->addWidget(myEnfMeshConstraint, ENF_MESH_CONSTRAINT, 1, 1, 1); - anEnfMeshLayout2->addWidget(myMeshSizeLabel, ENF_MESH_SIZE, 0, 1, 1); - anEnfMeshLayout2->addWidget(myMeshSizeValue, ENF_MESH_SIZE, 1, 1, 1); anEnfMeshLayout2->addWidget(myMeshGroupNameLabel, ENF_MESH_GROUP, 0, 1, 1); anEnfMeshLayout2->addWidget(myMeshGroupName, ENF_MESH_GROUP, 1, 1, 1); anEnfMeshLayout2->addWidget(addEnfMeshButton, ENF_MESH_BTN, 0, 1, 1); @@ -688,7 +670,6 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() connect( removeEnfMeshButton, SIGNAL( clicked()), this, SLOT( onRemoveEnforcedMesh() ) ); // connect( myEnfMeshWdg, SIGNAL( contentModified()), this, SLOT( checkEnfMeshIsDefined() ) ); // connect( myEnfMeshConstraint, SIGNAL( currentIndexChanged(int) ), this, SLOT( checkEnfMeshIsDefined() ) ); -// connect( myMeshSizeValue, SIGNAL( textChanged(const QString&) ), this, SLOT( checkEnfMeshIsDefined() ) ); // connect( this, SIGNAL( enfMeshDefined(bool) ), addEnfMeshButton, SLOT( setEnabled(bool) ) ); return fr; @@ -729,7 +710,7 @@ void GHS3DPluginGUI_HypothesisCreator::checkVertexIsDefined() **/ void GHS3DPluginGUI_HypothesisCreator::checkEnfMeshIsDefined() { - emit enfMeshDefined((!myMeshSizeValue->GetString().isEmpty() && !myEnfVertexWdg->NbObjects() == 0)); + emit enfMeshDefined( myEnfVertexWdg->NbObjects() != 0); } /** @@ -924,9 +905,9 @@ void GHS3DPluginGUI_HypothesisCreator::synchronizeCoords() { /** GHS3DPluginGUI_HypothesisCreator::addEnforcedMesh( meshName, geomEntry, elemType, size, groupName) This method adds in the tree widget an enforced mesh from mesh, submesh or group with optionally size and and groupName. */ -void GHS3DPluginGUI_HypothesisCreator::addEnforcedMesh(std::string name, std::string entry, int elementType, double size, std::string groupName) +void GHS3DPluginGUI_HypothesisCreator::addEnforcedMesh(std::string name, std::string entry, int elementType, std::string groupName) { - MESSAGE("addEnforcedMesh(\"" << name << ", \"" << entry << "\", " << elementType << ", " << size << ", \"" << groupName << "\")"); + MESSAGE("addEnforcedMesh(\"" << name << ", \"" << entry << "\", " << elementType << ", \"" << groupName << "\")"); bool okToCreate = true; QString itemEntry = ""; int itemElementType = 0; @@ -960,11 +941,6 @@ void GHS3DPluginGUI_HypothesisCreator::addEnforcedMesh(std::string name, std::st break; if (itemEntry == QString(entry.c_str()) && itemElementType == elementType) { -// // update size -// if (itemSize != size) { -// MESSAGE("Size is updated from \"" << itemSize << "\" to \"" << size << "\""); -// myEnforcedMeshTableWidget->item(row, ENF_MESH_SIZE_COLUMN)->setData( Qt::EditRole, QVariant(size)); -// } // // update group name // if (itemGroupName.toStdString() != groupName) { // MESSAGE("Group is updated from \"" << itemGroupName.toStdString() << "\" to \"" << groupName << "\""); @@ -1013,11 +989,6 @@ void GHS3DPluginGUI_HypothesisCreator::addEnforcedMesh(std::string name, std::st MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); myEnforcedMeshTableWidget->setItem(rowCount,col,item); break; - case ENF_MESH_SIZE_COLUMN: - item->setData( 0, size ); - MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); - myEnforcedMeshTableWidget->setItem(rowCount,col,item); - break; case ENF_MESH_GROUP_COLUMN: item->setData( 0, groupName.c_str() ); MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); @@ -1233,12 +1204,6 @@ void GHS3DPluginGUI_HypothesisCreator::onAddEnforcedMesh() groupName = ""; - double size = -1; - if (!myMeshSizeValue->GetString().isEmpty()) - size = myMeshSizeValue->GetValue(); -// if (size < 0) -// return; - int elementType = myEnfMeshConstraint->currentIndex(); @@ -1256,7 +1221,7 @@ void GHS3DPluginGUI_HypothesisCreator::onAddEnforcedMesh() CORBA::Object_var anObj = SMESH::SObjectToObject(aSObj,aStudy); if (!CORBA::is_nil(anObj)) { // SMESH::SMESH_IDSource_var theSource = SMESH::SObjectToInterface( aSObj ); - addEnforcedMesh( aSObj->GetName(), aSObj->GetID(), elementType, size, groupName); + addEnforcedMesh( aSObj->GetName(), aSObj->GetID(), elementType, groupName); } } else @@ -1269,7 +1234,7 @@ void GHS3DPluginGUI_HypothesisCreator::onAddEnforcedMesh() CORBA::Object_var anObj = SMESH::SObjectToObject(aSObj,aStudy); if (!CORBA::is_nil(anObj)) { // SMESH::SMESH_IDSource_var theSource = SMESH::SObjectToInterface( aSObj ); - addEnforcedMesh( aSObj->GetName(), aSObj->GetID(), elementType, size, groupName); + addEnforcedMesh( aSObj->GetName(), aSObj->GetID(), elementType, groupName); } } } @@ -1473,10 +1438,12 @@ void GHS3DPluginGUI_HypothesisCreator::retrieveParams() const myRemoveInitialCentralPointCheck ->setChecked ( data.myRemoveInitialCentralPoint ); myBoundaryRecoveryCheck ->setChecked ( data.myBoundaryRecovery ); myFEMCorrectionCheck ->setChecked ( data.myFEMCorrection ); + myGradation ->setValue ( data.myGradation ); myTextOption ->setText ( data.myTextOption ); TEnfVertexList::const_iterator it; int rowCount = 0; + myEnforcedTableWidget->clearContents(); myEnforcedTableWidget->setSortingEnabled(false); myEnforcedTableWidget->disconnect(SIGNAL( itemChanged(QTableWidgetItem *))); for(it = data.myEnforcedVertices.begin() ; it != data.myEnforcedVertices.end(); it++ ) @@ -1556,6 +1523,7 @@ void GHS3DPluginGUI_HypothesisCreator::retrieveParams() const // Update Enforced meshes QTableWidget TEnfMeshList::const_iterator itMesh; rowCount = 0; + myEnforcedMeshTableWidget->clearContents(); myEnforcedMeshTableWidget->setSortingEnabled(false); // myEnforcedMeshTableWidget->disconnect(SIGNAL( itemChanged(QTableWidgetItem *))); for(itMesh = data.myEnforcedMeshes.begin() ; itMesh != data.myEnforcedMeshes.end(); itMesh++ ) @@ -1592,11 +1560,6 @@ void GHS3DPluginGUI_HypothesisCreator::retrieveParams() const MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); myEnforcedMeshTableWidget->setItem(rowCount,col,item); break; - case ENF_MESH_SIZE_COLUMN: - item->setData( 0, enfMesh->size ); - MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); - myEnforcedMeshTableWidget->setItem(rowCount,col,item); - break; case ENF_MESH_GROUP_COLUMN: item->setData( 0, enfMesh->groupName.c_str() ); MESSAGE("Add item in table at (" << rowCount << "," << col << "): " << item->text().toStdString()); @@ -1664,6 +1627,11 @@ QString GHS3DPluginGUI_HypothesisCreator::storeParams() const if ( data.myFEMCorrection ) valStr += " -FEM"; + if ( data.myGradation != 1.05 ) { + valStr += " -Dcpropa="; + valStr += QString::number( data.myGradation ); + } + valStr += " "; valStr += data.myTextOption; @@ -1711,6 +1679,7 @@ bool GHS3DPluginGUI_HypothesisCreator::readParamsFromHypo( GHS3DHypothesisData& h_data.myRemoveInitialCentralPoint = h->GetToRemoveCentralPoint(); h_data.myBoundaryRecovery = h->GetToUseBoundaryRecoveryVersion(); h_data.myFEMCorrection = h->GetFEMCorrection(); + h_data.myGradation = h->GetGradation(); h_data.myTextOption = h->GetTextOption(); GHS3DPlugin::GHS3DEnforcedVertexList_var vertices = h->GetEnforcedVertices(); @@ -1739,7 +1708,6 @@ bool GHS3DPluginGUI_HypothesisCreator::readParamsFromHypo( GHS3DHypothesisData& myEnfMesh->name = CORBA::string_dup(enfMeshes[i].name.in()); myEnfMesh->entry = CORBA::string_dup(enfMeshes[i].entry.in()); myEnfMesh->groupName = CORBA::string_dup(enfMeshes[i].groupName.in()); - myEnfMesh->size = enfMeshes[i].size; switch (enfMeshes[i].elementType) { case SMESH::NODE: myEnfMesh->elementType = 0; @@ -1795,6 +1763,8 @@ bool GHS3DPluginGUI_HypothesisCreator::storeParamsToHypo( const GHS3DHypothesisD h->SetToUseBoundaryRecoveryVersion( h_data.myBoundaryRecovery ); if ( h->GetFEMCorrection() != h_data.myFEMCorrection ) h->SetFEMCorrection( h_data.myFEMCorrection ); + if ( h->GetGradation() != h_data.myGradation ) + h->SetGradation ( h_data.myGradation ); if ( h->GetTextOption() != h_data.myTextOption ) h->SetTextOption ( h_data.myTextOption.toLatin1().constData() ); @@ -1838,14 +1808,17 @@ bool GHS3DPluginGUI_HypothesisCreator::storeParamsToHypo( const GHS3DHypothesisD h->ClearEnforcedMeshes(); TEnfMeshList::const_iterator itEnfMesh; + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + for(itEnfMesh = h_data.myEnforcedMeshes.begin() ; itEnfMesh != h_data.myEnforcedMeshes.end(); itEnfMesh++ ) { TEnfMesh* enfMesh = (*itEnfMesh); - + _PTR(SObject) aSObj = aStudy->FindObjectID(enfMesh->entry.c_str()); SMESH::SMESH_IDSource_var theSource = SMESH::SObjectToInterface( aSObj ); - SMESH::ElementType elementType; + MESSAGE("enfMesh->elementType: " << enfMesh->elementType); + SMESH::ElementType elementType; switch(enfMesh->elementType) { case 0: elementType = SMESH::NODE; @@ -1860,7 +1833,8 @@ bool GHS3DPluginGUI_HypothesisCreator::storeParamsToHypo( const GHS3DHypothesisD break; } - ok = h->p_SetEnforcedMesh(theSource, elementType, enfMesh->size, enfMesh->groupName.c_str()); + std::cout << "h->p_SetEnforcedMesh(theSource, "<< elementType <<", \""<< enfMesh->name << "\", \"" << enfMesh->groupName.c_str() <<"\")"<p_SetEnforcedMesh(theSource, elementType, enfMesh->name.c_str(), enfMesh->groupName.c_str()); } // for } // try // catch(const std::exception& ex) { @@ -1890,6 +1864,7 @@ bool GHS3DPluginGUI_HypothesisCreator::readParamsFromWidgets( GHS3DHypothesisDat h_data.myRemoveInitialCentralPoint = myRemoveInitialCentralPointCheck->isChecked(); h_data.myBoundaryRecovery = myBoundaryRecoveryCheck->isChecked(); h_data.myFEMCorrection = myFEMCorrectionCheck->isChecked(); + h_data.myGradation = myGradation->value(); h_data.myTextOption = myTextOption->text(); // Enforced vertices @@ -1936,12 +1911,11 @@ bool GHS3DPluginGUI_HypothesisCreator::readParamsFromWidgets( GHS3DHypothesisDat MESSAGE("Entry is \"" << myEnfMesh->entry << "\"" ); myEnfMesh->groupName = myEnforcedMeshTableWidget->item(row,ENF_MESH_GROUP_COLUMN)->data(Qt::EditRole).toString().toStdString(); MESSAGE("Group name is \"" << myEnfMesh->groupName << "\"" ); - myEnfMesh->size = myEnforcedMeshTableWidget->item(row,ENF_MESH_SIZE_COLUMN)->data(Qt::EditRole).toDouble(); - MESSAGE("Size is " << myEnfMesh->size); QComboBox* combo = qobject_cast(myEnforcedMeshTableWidget->cellWidget(row,ENF_MESH_CONSTRAINT_COLUMN)); myEnfMesh->elementType = combo->currentIndex(); MESSAGE("Element type: " << myEnfMesh->elementType); h_data.myEnforcedMeshes.insert(myEnfMesh); + std::cout << "h_data.myEnforcedMeshes.size(): " << h_data.myEnforcedMeshes.size() << std::endl; } return true; diff --git a/src/GUI/GHS3DPluginGUI_HypothesisCreator.h b/src/GUI/GHS3DPluginGUI_HypothesisCreator.h index 693f9ce..5e311ec 100644 --- a/src/GUI/GHS3DPluginGUI_HypothesisCreator.h +++ b/src/GUI/GHS3DPluginGUI_HypothesisCreator.h @@ -120,7 +120,6 @@ struct TEnfMesh{ std::string entry; int elementType; std::string groupName; - double size; }; struct CompareEnfMeshes @@ -144,6 +143,7 @@ typedef struct bool myToMeshHoles,myKeepFiles,myToCreateNewNodes,myBoundaryRecovery,myFEMCorrection,myRemoveInitialCentralPoint; int myMaximumMemory,myInitialMemory,myOptimizationLevel; QString myName,myWorkingDir,myTextOption; + double myGradation; short myVerboseLevel; TEnfVertexList myEnforcedVertices; TEnfMeshList myEnforcedMeshes; @@ -188,7 +188,7 @@ protected slots: void checkVertexIsDefined(); void clearEnfVertexSelection(); - void addEnforcedMesh(std::string name, std::string entry, int elementType, double size = 0, std::string groupName = ""); + void addEnforcedMesh(std::string name, std::string entry, int elementType, std::string groupName = ""); void onAddEnforcedMesh(); void onRemoveEnforcedMesh(); //void synchronizeEnforcedMesh(); @@ -223,6 +223,7 @@ private: QCheckBox* myRemoveInitialCentralPointCheck; QCheckBox* myBoundaryRecoveryCheck; QCheckBox* myFEMCorrectionCheck; + SMESHGUI_SpinBox* myGradation; QLineEdit* myTextOption; QWidget* myEnfGroup; @@ -247,7 +248,6 @@ private: QStringList myEnfMeshConstraintLabels; // SMESH::mesh_array_var myEnfMeshArray; QTableWidget* myEnforcedMeshTableWidget; - SMESHGUI_SpinBox* myMeshSizeValue; QLineEdit* myMeshGroupName; QPushButton* addEnfMeshButton; QPushButton* removeEnfMeshButton; diff --git a/src/GUI/GHS3DPlugin_msg_en.ts b/src/GUI/GHS3DPlugin_msg_en.ts index 65569d8..9c8884b 100644 --- a/src/GUI/GHS3DPlugin_msg_en.ts +++ b/src/GUI/GHS3DPlugin_msg_en.ts @@ -79,6 +79,10 @@ FEM_CORRECTION To use FEM correction + + GHS3D_GRADATION + Volumic gradation + SELECT_DIR ... diff --git a/src/GUI/GHS3DPlugin_msg_fr.ts b/src/GUI/GHS3DPlugin_msg_fr.ts index 86452f3..922e2cc 100755 --- a/src/GUI/GHS3DPlugin_msg_fr.ts +++ b/src/GUI/GHS3DPlugin_msg_fr.ts @@ -79,6 +79,10 @@ FEM_CORRECTION Utiliser correction FEM + + GHS3D_GRADATION + Gradation volumique + SELECT_DIR ... -- 2.39.2
  • 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 V#n|QjO@snGbhQjME7k47{s%82R=fZJ literal 36277 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 diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_parameters_basic.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_parameters_basic.png index 9519c1461d3734447fd669b37a63f7fea55d83cf..e272cefdd0ba5f5bc8e99c25749cf4423fca8751 100644 GIT binary patch literal 20489 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 wMn(o+UbPAzdF8;f7 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 UNr5qaLEo(?t143>^)m3k062y4DgXcg diff --git a/doc/salome/gui/GHS3DPLUGIN/input/ghs3d_hypo.doc b/doc/salome/gui/GHS3DPLUGIN/input/ghs3d_hypo.doc index 4c4ce5f..9cececf 100644 --- a/doc/salome/gui/GHS3DPLUGIN/input/ghs3d_hypo.doc +++ b/doc/salome/gui/GHS3DPLUGIN/input/ghs3d_hypo.doc @@ -3,41 +3,38 @@ \page ghs3d_hypo_page GHS3D Parameters hypothesis \anchor ghs3d_top -\n GHS3D Parameters hypothesis works only with Tetrahedron (GHS3D) +GHS3D Parameters hypothesis works only with Tetrahedron (GHS3D) algorithm. This algorithm is a commercial software. -\n To get a licence, visit http://www.distene.com/corp/eval-distene.html --# \ref ghs3d_general_parameters --# \ref ghs3d_advanced_parameters --# \ref ghs3d_enforced_vertices --# \ref ghs3d_enforced_meshes +To get a licence, visit http://www.distene.com/en/corp/eval-distene.html + +\tableofcontents \section ghs3d_general_parameters General parameters \image html ghs3d_parameters_basic.png -