From 7245fb1a2b4d6f876a50f90633acc3d8d165cc05 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 9 Aug 2012 11:56:21 +0000 Subject: [PATCH] Merge from V6_main_20120808 08Aug12 --- AUTHORS | 3 +- ChangeLog | 3 +- HexoticPLUGIN_version.h.in | 28 +- INSTALL | 3 +- Makefile.am | 39 +- NEWS | 3 +- adm_local/Makefile.am | 27 +- adm_local/unix/Makefile.am | 27 +- adm_local/unix/config_files/Makefile.am | 30 +- .../unix/config_files/check_BLSURFPLUGIN.m4 | 76 ++ adm_local/unix/config_files/check_Hexotic.m4 | 29 +- .../unix/config_files/check_HexoticPLUGIN.m4 | 89 +- adm_local/unix/make_common_starter.am | 35 +- bin/Makefile.am | 27 +- bin/VERSION.in | 5 +- build_cmake | 27 + build_cmake.bat | 20 + build_configure | 140 ++- clean_configure | 36 +- configure.ac | 183 ++-- doc/Makefile.am | 32 + doc/salome/Makefile.am | 34 + doc/salome/gui/HexoticPLUGIN/Makefile.am | 68 ++ doc/salome/gui/HexoticPLUGIN/doxyfile.in | 80 ++ doc/salome/gui/HexoticPLUGIN/doxyfile_py.in | 159 +++ doc/salome/gui/HexoticPLUGIN/images/head.png | Bin 0 -> 78545 bytes .../images/hexotic_parameters.png | Bin 0 -> 31560 bytes .../gui/HexoticPLUGIN/input/hexotic_hypo.doc | 39 + .../input/hexoticplugin_python_intarface.doc | 9 + doc/salome/gui/HexoticPLUGIN/input/index.doc | 19 + .../gui/HexoticPLUGIN/static/doxygen.css | 836 ++++++++++++++++ .../gui/HexoticPLUGIN/static/footer.html | 12 + .../gui/HexoticPLUGIN/static/header.html.in | 20 + .../HexoticPLUGIN/static/header_py.html.in | 21 + doc/salome/gui/Makefile.am | 32 + idl/HexoticPlugin_Algorithm.idl | 33 +- idl/Makefile.am | 45 +- resources/HexoticPLUGIN.xml | 24 +- resources/HexoticPlugin.xml | 48 - resources/Makefile.am | 28 +- resources/SalomeApp.xml | 5 +- resources/mesh_tree_algo_Hexotic.png | Bin 225 -> 430 bytes resources/mesh_tree_hypo_Hexotic.png | Bin 225 -> 430 bytes src/GUI/HexoticPLUGIN_images.ts | 23 +- src/GUI/HexoticPLUGIN_msg_en.ts | 105 +- src/GUI/HexoticPLUGIN_msg_fr.ts | 51 + src/GUI/HexoticPluginGUI.cxx | 28 +- src/GUI/HexoticPluginGUI.h | 31 + .../HexoticPluginGUI_HypothesisCreator.cxx | 101 +- src/GUI/HexoticPluginGUI_HypothesisCreator.h | 39 +- src/GUI/Makefile.am | 46 +- src/HexoticPlugin/HexoticPLUGINDC.py | 54 ++ src/HexoticPlugin/HexoticPlugin_Defs.hxx | 36 + src/HexoticPlugin/HexoticPlugin_Hexotic.cxx | 904 ++++++++++++++---- src/HexoticPlugin/HexoticPlugin_Hexotic.hxx | 73 +- src/HexoticPlugin/HexoticPlugin_Hexotic_i.cxx | 27 +- src/HexoticPlugin/HexoticPlugin_Hexotic_i.hxx | 29 +- .../HexoticPlugin_Hypothesis.cxx | 85 +- .../HexoticPlugin_Hypothesis.hxx | 41 +- .../HexoticPlugin_Hypothesis_i.cxx | 73 +- .../HexoticPlugin_Hypothesis_i.hxx | 35 +- src/HexoticPlugin/HexoticPlugin_i.cxx | 28 +- src/HexoticPlugin/Makefile.am | 49 +- src/Makefile.am | 27 +- 64 files changed, 3360 insertions(+), 899 deletions(-) create mode 100644 adm_local/unix/config_files/check_BLSURFPLUGIN.m4 create mode 100755 build_cmake create mode 100644 build_cmake.bat create mode 100644 doc/Makefile.am create mode 100644 doc/salome/Makefile.am create mode 100755 doc/salome/gui/HexoticPLUGIN/Makefile.am create mode 100755 doc/salome/gui/HexoticPLUGIN/doxyfile.in create mode 100755 doc/salome/gui/HexoticPLUGIN/doxyfile_py.in create mode 100755 doc/salome/gui/HexoticPLUGIN/images/head.png create mode 100644 doc/salome/gui/HexoticPLUGIN/images/hexotic_parameters.png create mode 100644 doc/salome/gui/HexoticPLUGIN/input/hexotic_hypo.doc create mode 100644 doc/salome/gui/HexoticPLUGIN/input/hexoticplugin_python_intarface.doc create mode 100644 doc/salome/gui/HexoticPLUGIN/input/index.doc create mode 100755 doc/salome/gui/HexoticPLUGIN/static/doxygen.css create mode 100755 doc/salome/gui/HexoticPLUGIN/static/footer.html create mode 100755 doc/salome/gui/HexoticPLUGIN/static/header.html.in create mode 100644 doc/salome/gui/HexoticPLUGIN/static/header_py.html.in create mode 100644 doc/salome/gui/Makefile.am delete mode 100644 resources/HexoticPlugin.xml create mode 100755 src/GUI/HexoticPLUGIN_msg_fr.ts create mode 100755 src/GUI/HexoticPluginGUI.h create mode 100644 src/HexoticPlugin/HexoticPLUGINDC.py create mode 100755 src/HexoticPlugin/HexoticPlugin_Defs.hxx diff --git a/AUTHORS b/AUTHORS index b8578ac..cc18fd6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2008 OPEN CASCADE, CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # # File : AUTHORS diff --git a/ChangeLog b/ChangeLog index 6b675c7..403e657 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2008 OPEN CASCADE, CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # # File : ChangeLog diff --git a/HexoticPLUGIN_version.h.in b/HexoticPLUGIN_version.h.in index b5df797..c6eae56 100644 --- a/HexoticPLUGIN_version.h.in +++ b/HexoticPLUGIN_version.h.in @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPLUGIN_version.h // Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -30,5 +31,6 @@ #define HEXOTICPLUGIN_VERSION_STR "@VERSION@" #define HEXOTICPLUGIN_VERSION @XVERSION@ +#define HEXOTICPLUGIN_DEVELOPMENT @VERSION_DEV@ #endif // __HEXOTICPLUGIN_VERSION_H__ diff --git a/INSTALL b/INSTALL index 592ed47..a477b88 100644 --- a/INSTALL +++ b/INSTALL @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2008 OPEN CASCADE, CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # # File : INSTALL diff --git a/Makefile.am b/Makefile.am index 7814626..f13ae52 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -30,19 +31,25 @@ if HEXOTICPLUGIN_ENABLE_GUI -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files +# -I ${BLSURFPLUGIN_ROOT_DIR}/adm_local/unix/config_files else !HEXOTICPLUGIN_ENABLE_GUI ACLOCAL_AMFLAGS = -I adm_local/unix/config_files \ -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files +# -I ${BLSURFPLUGIN_ROOT_DIR}/adm_local/unix/config_files +endif + +if HEXOTICPLUGIN_ENABLE_BLSURFPLUGIN + ACLOCAL_AMFLAGS += -I ${BLSURFPLUGIN_ROOT_DIR}/adm_local/unix/config_files endif -SUBDIRS = idl adm_local resources src bin +SUBDIRS = idl adm_local resources src bin doc -DIST_SUBDIRS = idl adm_local resources src bin +DIST_SUBDIRS = idl adm_local resources src bin doc -DISTCLEANFILES = a.out aclocal.m4 configure +DISTCLEANFILES = a.out aclocal.m4 configure hack_libtool salomeinclude_DATA = HexoticPLUGIN_version.h diff --git a/NEWS b/NEWS index 6a0b1eb..d22503a 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2008 OPEN CASCADE, CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # # File : NEWS diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am index 3f9a07d..4e47880 100644 --- a/adm_local/Makefile.am +++ b/adm_local/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) diff --git a/adm_local/unix/Makefile.am b/adm_local/unix/Makefile.am index f70a09e..55a47ce 100644 --- a/adm_local/unix/Makefile.am +++ b/adm_local/unix/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am index ca830f1..8c85193 100644 --- a/adm_local/unix/config_files/Makefile.am +++ b/adm_local/unix/config_files/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -25,4 +26,5 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am dist_admlocalm4_DATA = \ check_Hexotic.m4 \ - check_HexoticPLUGIN.m4 + check_HexoticPLUGIN.m4 \ + check_BLSURFPLUGIN.m4 diff --git a/adm_local/unix/config_files/check_BLSURFPLUGIN.m4 b/adm_local/unix/config_files/check_BLSURFPLUGIN.m4 new file mode 100644 index 0000000..1f963bc --- /dev/null +++ b/adm_local/unix/config_files/check_BLSURFPLUGIN.m4 @@ -0,0 +1,76 @@ +dnl Copyright (C) 2007-2012 CEA/DEN, EDF R&D +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl + +dnl File : check_BLSURFPLUGIN.m4 +dnl Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) +dnl +AC_DEFUN([CHECK_BLSURFPLUGIN],[ + +AC_CHECKING(for BLSURF mesh plugin) + +BLSURFplugin_ok=no + +BLSURFPLUGIN_LDFLAGS="" +BLSURFPLUGIN_CXXFLAGS="" + +AC_ARG_WITH(BLSURFplugin, + --with-BLSURFplugin=DIR root directory path of BLSURF mesh plugin installation, + BLSURFPLUGIN_DIR="$withval",BLSURFPLUGIN_DIR="") + +if test "x$BLSURFPLUGIN_DIR" = "x" ; then + +# no --with-BLSURFplugin option used + + if test "x$BLSURFPLUGIN_ROOT_DIR" != "x" ; then + + # SALOME_ROOT_DIR environment variable defined + BLSURFPLUGIN_DIR=$BLSURFPLUGIN_ROOT_DIR + + else + + # search Salome binaries in PATH variable + AC_PATH_PROG(TEMP, libBLSURFEngine.so) + if test "x$TEMP" != "x" ; then + BLSURFPLUGIN_DIR=`dirname $TEMP` + fi + + fi + +fi + +if test -f ${BLSURFPLUGIN_DIR}/lib${LIB_LOCATION_SUFFIX}/salome/libBLSURFEngine.so ; then + BLSURFplugin_ok=yes + AC_MSG_RESULT(Using BLSURF mesh plugin distribution in ${BLSURFPLUGIN_DIR}) + + if test "x$BLSURFPLUGIN_ROOT_DIR" == "x" ; then + BLSURFPLUGIN_ROOT_DIR=${BLSURFPLUGIN_DIR} + fi + BLSURFPLUGIN_CXXFLAGS=-I${BLSURFPLUGIN_ROOT_DIR}/include/salome + BLSURFPLUGIN_LDFLAGS="-L${BLSURFPLUGIN_ROOT_DIR}/lib${LIB_LOCATION_SUFFIX}/salome -lBLSURFEngine" +else + AC_MSG_WARN("Cannot find compiled BLSURF mesh plugin distribution") +fi + +AC_MSG_RESULT(for BLSURF mesh plugin: $BLSURFplugin_ok) + +AC_SUBST(BLSURFPLUGIN_ROOT_DIR) +AC_SUBST(BLSURFPLUGIN_LDFLAGS) +AC_SUBST(BLSURFPLUGIN_CXXFLAGS) + +])dnl diff --git a/adm_local/unix/config_files/check_Hexotic.m4 b/adm_local/unix/config_files/check_Hexotic.m4 index 42e6431..ec17b47 100755 --- a/adm_local/unix/config_files/check_Hexotic.m4 +++ b/adm_local/unix/config_files/check_Hexotic.m4 @@ -1,24 +1,25 @@ -dnl Copyright (C) 2007-2008 CEA/DEN, EDF R&D +dnl Copyright (C) 2007-2012 CEA/DEN, EDF R&D dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl -dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com dnl + dnl File : check_Hexotic.m4 dnl Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) - +dnl AC_DEFUN([CHECK_HEXOTIC],[ AC_REQUIRE([AC_PROG_CXX])dnl diff --git a/adm_local/unix/config_files/check_HexoticPLUGIN.m4 b/adm_local/unix/config_files/check_HexoticPLUGIN.m4 index 2e5c5d6..6d66388 100644 --- a/adm_local/unix/config_files/check_HexoticPLUGIN.m4 +++ b/adm_local/unix/config_files/check_HexoticPLUGIN.m4 @@ -1,24 +1,25 @@ -dnl Copyright (C) 2007-2008 CEA/DEN, EDF R&D +dnl Copyright (C) 2007-2012 CEA/DEN, EDF R&D dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl -dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com dnl + dnl File : check_HexoticPLUGIN.m4 dnl Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) - +dnl AC_DEFUN([CHECK_HEXOTICPLUGIN],[ AC_CHECKING(for Hexotic mesh plugin) @@ -29,36 +30,46 @@ HexoticPLUGIN_LDFLAGS="" HexoticPLUGIN_CXXFLAGS="" AC_ARG_WITH(Hexoticplugin, - [ --with-Hexoticplugin=DIR root directory path of Hexotic mesh plugin installation ]) + --with-Hexoticplugin=DIR root directory path of Hexotic mesh plugin installation, + HexoticPLUGIN_DIR="$withval",HexoticPLUGIN_DIR="") -if test "$with_Hexoticplugin" != "no" ; then - if test "$with_Hexoticplugin" == "yes" || test "$with_Hexoticplugin" == "auto"; then - if test "x$HexoticPLUGIN_ROOT_DIR" != "x" ; then - HexoticPLUGIN_DIR=$HexoticPLUGIN_ROOT_DIR - fi - else - HexoticPLUGIN_DIR="$with_Hexoticplugin" - fi +if test "x$HexoticPLUGIN_DIR" = "x" ; then + +# no --with-Hexoticplugin option used + + if test "x$HexoticPLUGIN_ROOT_DIR" != "x" ; then + + # SALOME_ROOT_DIR environment variable defined + HexoticPLUGIN_DIR=$HexoticPLUGIN_ROOT_DIR - if test "x$HexoticPLUGIN_DIR" != "x" ; then - if test -f ${HexoticPLUGIN_DIR}/lib${LIB_LOCATION_SUFFIX}/salome/libHexoticEngine.so ; then - Hexoticplugin_ok=yes - AC_MSG_RESULT(Using Hexotic mesh plugin distribution in ${HexoticPLUGIN_DIR}) - HexoticPLUGIN_ROOT_DIR=${HexoticPLUGIN_DIR} - HexoticPLUGIN_LDFLAGS=-L${HexoticPLUGIN_DIR}/lib${LIB_LOCATION_SUFFIX}/salome - HexoticPLUGIN_CXXFLAGS=-I${HexoticPLUGIN_DIR}/include/salome - else - AC_MSG_WARN("Cannot find compiled Hexotic mesh plugin distribution") - fi - else - AC_MSG_WARN("Cannot find compiled Hexotic mesh plugin distribution") + else + + # search Salome binaries in PATH variable + AC_PATH_PROG(TEMP, libHexoticEngine.so) + if test "x$TEMP" != "x" ; then + HexoticPLUGIN_DIR=`dirname $TEMP` fi + + fi + fi -AC_MSG_RESULT(for Hexotic mesh plugin: $Hexoticplugin_ok) +if test -f ${HexoticPLUGIN_DIR}/lib${LIB_LOCATION_SUFFIX}/salome/libHexoticEngine.so ; then + Hexoticplugin_ok=yes + AC_MSG_RESULT(Using Hexotic mesh plugin distribution in ${HexoticPLUGIN_DIR}) -AC_SUBST(HexoticPLUGIN_ROOT_DIR) -AC_SUBST(HexoticPLUGIN_LDFLAGS) -AC_SUBST(HexoticPLUGIN_CXXFLAGS) + if test "x$HexoticPLUGIN_ROOT_DIR" == "x" ; then + HexoticPLUGIN_ROOT_DIR=${HexoticPLUGIN_DIR} + fi + HexoticPLUGIN_CXXFLAGS+=-I${HexoticPLUGIN_ROOT_DIR}/include/salome + HexoticPLUGIN_LDFLAGS+=-L${HexoticPLUGIN_ROOT_DIR}/lib${LIB_LOCATION_SUFFIX}/salome + AC_SUBST(HexoticPLUGIN_ROOT_DIR) + AC_SUBST(HexoticPLUGIN_LDFLAGS) + AC_SUBST(HexoticPLUGIN_CXXFLAGS) +else + AC_MSG_WARN("Cannot find compiled Hexotic mesh plugin distribution") +fi + +AC_MSG_RESULT(for Hexotic mesh plugin: $Hexoticplugin_ok) ])dnl diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index 56185e3..623dfe5 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -1,25 +1,34 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : make_common_starter.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) # --- +# ============================================================ +# The following is to avoid PACKAGE_... env variable +# redefinition compilation warnings +# ============================================================ +# +AM_CXXFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h +AM_CPPFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h + # ============================================================ # This file defines the common definitions used in several # Makefile. This file must be included, if needed, by the file diff --git a/bin/Makefile.am b/bin/Makefile.am index 4af7144..24e249a 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) diff --git a/bin/VERSION.in b/bin/VERSION.in index 603250d..d872cc8 100755 --- a/bin/VERSION.in +++ b/bin/VERSION.in @@ -1 +1,4 @@ -THIS IS SALOME - HexoticPLUGIN VERSION: @VERSION@ +[SALOME HexoticPLUGIN] : @VERSION@ +[DEVELOPMENT] : @VERSION_DEV@ +[DESCRIPTION] : DISTENE Hexotic meshing plug-in for SALOME Mesh module + diff --git a/build_cmake b/build_cmake new file mode 100755 index 0000000..166d83a --- /dev/null +++ b/build_cmake @@ -0,0 +1,27 @@ +#!/bin/sh +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +CURRENT_DIR=`pwd` +CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` +cd ${CONF_DIR} +python $KERNEL_ROOT_DIR/salome_adm/cmake_files/am2cmake.py --hexoticplugin +status=$? +cd ${CURRENT_DIR} +exit $status diff --git a/build_cmake.bat b/build_cmake.bat new file mode 100644 index 0000000..5f803d4 --- /dev/null +++ b/build_cmake.bat @@ -0,0 +1,20 @@ +@REM Copyright (C) 2007-2012 CEA/DEN, EDF R&D +@REM +@REM This library is free software; you can redistribute it and/or +@REM modify it under the terms of the GNU Lesser General Public +@REM License as published by the Free Software Foundation; either +@REM version 2.1 of the License. +@REM +@REM This library is distributed in the hope that it will be useful, +@REM but WITHOUT ANY WARRANTY; without even the implied warranty of +@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +@REM Lesser General Public License for more details. +@REM +@REM You should have received a copy of the GNU Lesser General Public +@REM License along with this library; if not, write to the Free Software +@REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +@REM +@REM See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +@REM + +%PYTHONBIN% %KERNEL_ROOT_DIR%\salome_adm\cmake_files\am2cmake.py --hexoticplugin diff --git a/build_configure b/build_configure index 2593129..5f2a133 100755 --- a/build_configure +++ b/build_configure @@ -1,22 +1,23 @@ #!/bin/bash -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : build_configure # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -24,7 +25,6 @@ # ORIG_DIR=`pwd` CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` -HEXOTICPLUGIN_WITH_GUI="yes" ######################################################################## # Test if the KERNEL_ROOT_DIR is set correctly @@ -41,28 +41,6 @@ fi # exit #fi -for option -do - case $option in - -with-gui | --with-gui) - HEXOTICPLUGIN_WITH_GUI="yes" - break;; - -without-gui | --without-gui | -with-gui=no | --with-gui=no) - HEXOTICPLUGIN_WITH_GUI="no" - break;; - esac -done - -######################################################################## -# Test if the GUI_ROOT_DIR is set correctly - -if test ${HEXOTICPLUGIN_WITH_GUI} = yes; then - if test ! -d "${GUI_ROOT_DIR}"; then - echo "failed : GUI_ROOT_DIR variable is not correct !" - exit - fi -fi - ######################################################################## # Test if the MED_ROOT_DIR is set correctly @@ -91,52 +69,48 @@ cd ${CONF_DIR} ABS_CONF_DIR=`pwd` ####################################################################### -# Update configure.ac script: to set HEXOTICPLUGIN_WITH_GUI variable -sed -e s/HEXOTICPLUGIN_WITH_GUI=[a-z]*/HEXOTICPLUGIN_WITH_GUI=${HEXOTICPLUGIN_WITH_GUI}/g configure.ac > configure.tmp -mv -f configure.tmp configure.ac - -mkdir -p salome_adm/unix/config_files -#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/* salome_adm/unix/config_files -#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/pythonbe.py salome_adm/unix - -cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/SALOMEconfig.h.in salome_adm/unix - -#cp -f ${GUI_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files -#cp -f ${MED_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files -#cp -f ${GEOM_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files -#cp -f ${SMESH_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files - -# remove KERNEL deprecated configure files -#for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \ -# check_mico.m4 config.guess ltmain.sh ac_cxx_bool.m4 ltconfig ac_cxx_typename.m4 \ -# check_pthreads.m4 config.sub libtool.m4 ac_cxx_mutable.m4 missing -# do -# rm -f salome_adm/unix/config_files/${deprecated} -# done - # ____________________________________________________________________ # aclocal creates the aclocal.m4 file from the standard macro and the -# custom macro embedded in the directory salome_adm/unix/config_files +# custom macro embedded in the directory adm_local/unix/config_files # and KERNEL config_files directory. # output: # aclocal.m4 # autom4te.cache (directory) -echo "====================================================== aclocal" - -if test ${HEXOTICPLUGIN_WITH_GUI} = yes; then - aclocal -I adm_local/unix/config_files \ - -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ - -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \ - -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ - -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ - -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files || exit 1 +echo "======================================================= aclocal" + +if test -d "${GUI_ROOT_DIR}"; then + if test -d "${BLSURFPLUGIN_ROOT_DIR}"; then + aclocal -I adm_local/unix/config_files \ + -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \ + -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ + -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ + -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files \ + -I ${BLSURFPLUGIN_ROOT_DIR}/adm_local/unix/config_files || exit 1 + else + aclocal -I adm_local/unix/config_files \ + -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \ + -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ + -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ + -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files || exit 1 + fi else - aclocal -I adm_local/unix/config_files \ - -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ - -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ - -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ - -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files || exit 1 + if test -d "${BLSURFPLUGIN_ROOT_DIR}"; then + aclocal -I adm_local/unix/config_files \ + -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ + -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ + -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files \ + -I ${BLSURFPLUGIN_ROOT_DIR}/adm_local/unix/config_files || exit 1 + else + aclocal -I adm_local/unix/config_files \ + -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I ${MED_ROOT_DIR}/adm_local/unix/config_files \ + -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files \ + -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files || exit 1 + fi fi # ____________________________________________________________________ @@ -145,10 +119,10 @@ fi # version. The files are created in the directory specified with the # AC_CONFIG_AUX_DIR() tag (see configure.ac). # output: -# salome_adm/unix/config_files/config.guess -# salome_adm/unix/config_files/config.sub -# salome_adm/unix/config_files/ltmain.sh -#echo "====================================================== libtoolize" +# adm_local/unix/config_files/config.guess +# adm_local/unix/config_files/config.sub +# adm_local/unix/config_files/ltmain.sh +echo "==================================================== libtoolize" libtoolize --force --copy --automake || exit 1 @@ -168,11 +142,11 @@ autoconf # AC_CONFIG_AUX_DIR() tag (see configure.ac). This step also # creates the Makefile.in files from the Makefile.am files. # output: -# salome_adm/unix/config_files/compile -# salome_adm/unix/config_files/depcomp -# salome_adm/unix/config_files/install-sh -# salome_adm/unix/config_files/missing -# salome_adm/unix/config_files/py-compile +# adm_local/unix/config_files/compile +# adm_local/unix/config_files/depcomp +# adm_local/unix/config_files/install-sh +# adm_local/unix/config_files/missing +# adm_local/unix/config_files/py-compile # Makefile.in (from Makefile.am) echo "====================================================== automake" diff --git a/clean_configure b/clean_configure index 8f00366..9997669 100755 --- a/clean_configure +++ b/clean_configure @@ -1,22 +1,23 @@ #!/bin/bash -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : clean_configure # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -28,10 +29,5 @@ find . -name "*.pyc" -print -exec rm {} \; # ... -find bin -name Makefile.in | xargs rm -f -find doc -name Makefile.in | xargs rm -f -find idl -name Makefile.in | xargs rm -f -find resources -name Makefile.in | xargs rm -f -find salome_adm -name Makefile.in | xargs rm -f -find src -name Makefile.in | xargs rm -f -rm -f Makefile.in +find . -name Makefile.in | xargs rm -f +( cd adm_local/unix/config_files && rm -f config.* depcomp install-sh ltmain.sh missing py-compile ) diff --git a/configure.ac b/configure.ac index 9ae08a2..96a5f16 100644 --- a/configure.ac +++ b/configure.ac @@ -1,35 +1,38 @@ #!/bin/bash -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : configure.ac # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) # --- # -AC_INIT([Salome2 Project HexoticPLUGIN module], [5.1.0], [webmaster.salome@opencascade.com], [SalomeHexoticPLUGIN]) -AC_CONFIG_AUX_DIR(salome_adm/unix/config_files) +AC_INIT([Salome2 Project HexoticPLUGIN module], [6.5.0], [webmaster.salome@opencascade.com], [SalomeHexoticPLUGIN]) +AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE +AM_INIT_AUTOMAKE([-Wno-portability]) XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'` AC_SUBST(XVERSION) +VERSION_DEV=1 +AC_SUBST(VERSION_DEV) # set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) MODULE_NAME=hexoticplugin @@ -92,7 +95,7 @@ dnl Fix up the INSTALL macro if it s a relative path. We want the dnl full-path to the binary instead. case "$INSTALL" in *install-sh*) - INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh + INSTALL='\${KERNEL_ROOT_DIR}'/adm_local/unix/config_files/install-sh ;; esac @@ -152,7 +155,15 @@ dnl testing MPICH dnl --------------------------------------------- dnl -CHECK_MPICH +dnl CHECK_MPICH + +echo +echo --------------------------------------------- +echo testing MPI +echo --------------------------------------------- +echo + +CHECK_MPI echo echo --------------------------------------------- @@ -228,11 +239,34 @@ AC_SUBST_FILE(CORBA) corba=make_$ORB CORBA=adm_local/unix/$corba -HEXOTICPLUGIN_WITH_GUI=yes +echo +echo --------------------------------------------- +echo Testing GUI +echo --------------------------------------------- +echo + +CHECK_GUI_MODULE -AM_CONDITIONAL(HEXOTICPLUGIN_ENABLE_GUI, [test "${HEXOTICPLUGIN_WITH_GUI}" = "yes"]) +gui_ok=no +if test "${SalomeGUI_need}" != "no" -a "${FullGUI_ok}" = "yes" ; then + gui_ok=yes +fi + +AM_CONDITIONAL(HEXOTICPLUGIN_ENABLE_GUI, [test "${gui_ok}" = "yes"]) + +if test "${SalomeGUI_need}" == "yes"; then + if test "${FullGUI_ok}" != "yes"; then + AC_MSG_WARN(For configure HexoticPLUGIN module necessary full GUI!) + fi +elif test "${SalomeGUI_need}" == "auto"; then + if test "${FullGUI_ok}" != "yes"; then + AC_MSG_WARN(Full GUI not found. Build will be done without GUI!) + fi +elif test "${SalomeGUI_need}" == "no"; then + echo Build without GUI option has been chosen +fi -if test "${HEXOTICPLUGIN_WITH_GUI}" = "yes"; then +if test "${gui_ok}" = "yes"; then echo echo --------------------------------------------- echo testing openGL @@ -248,35 +282,15 @@ if test "${HEXOTICPLUGIN_WITH_GUI}" = "yes"; then echo CHECK_QT +fi - echo - echo --------------------------------------------- - echo testing VTK - echo --------------------------------------------- - echo - - CHECK_VTK - - echo - echo --------------------------------------------- - echo Testing GUI - echo --------------------------------------------- - echo - - CHECK_SALOME_GUI - - echo - echo --------------------------------------------- - echo Testing full GUI - echo --------------------------------------------- - echo +echo +echo --------------------------------------------- +echo testing VTK +echo --------------------------------------------- +echo - CHECK_CORBA_IN_GUI - if test "x${CORBA_IN_GUI}" != "xyes"; then - echo "failed : For configure HexoticPLUGIN module necessary full GUI !" - exit - fi -fi +CHECK_VTK echo echo --------------------------------------------- @@ -342,6 +356,18 @@ echo CHECK_SMESH +echo +echo --------------------------------------------- +echo Testing BLSURFPlugin +echo --------------------------------------------- +echo + +CHECK_BLSURFPLUGIN +if test "${BLSURFplugin_ok}" = "yes"; then + AC_DEFINE(WITH_BLSURFPLUGIN) +fi +AM_CONDITIONAL(HEXOTICPLUGIN_ENABLE_BLSURFPLUGIN, [test "${BLSURFplugin_ok}" = "yes"]) + echo echo --------------------------------------------- echo Summary @@ -350,13 +376,15 @@ echo #AM_CONDITIONAL( USE_GFORTRAN, [test "$F77" = "gfortran"]) -if test "${HEXOTICPLUGIN_WITH_GUI}" = "yes"; then -variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok SalomeGUI_ok" -opt_variables="Hexotic_ok" -fi -if test "${HEXOTICPLUGIN_WITH_GUI}" = "no"; then -variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok" -opt_variables="Hexotic_ok" +if test "${gui_ok}" = "yes"; then + variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok gui_ok" + opt_variables="Hexotic_ok BLSURFplugin_ok" +elif test "${SalomeGUI_need}" != "no"; then + variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok gui_ok" + opt_variables="Hexotic_ok BLSURFplugin_ok" +else + variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok" + opt_variables="Hexotic_ok BLSURFplugin_ok" fi echo @@ -392,6 +420,9 @@ else AC_SUBST(SETX) SETX="set -x" fi +dnl Build with SMESH cancel compute feature +AC_DEFINE(WITH_SMESH_CANCEL_COMPUTE) + dnl copy shells and utilities contained in the bin directory dnl excluding .in files (treated in AC-OUTPUT below) and CVS dnl directory @@ -407,22 +438,40 @@ echo # chmod +x ./bin/salome/*; #]) +AC_HACK_LIBTOOL +AC_CONFIG_COMMANDS([hack_libtool],[ +sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\ + $(pwd)/hack_libtool \1 \"\$[@]\" \n\ +}\n\ +CC=\"hack_libtool\"%g" libtool +sed -i "s%\(\s*\)for searchdir in \$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path; do%\1searchdirs=\"\$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path\"\n\1for searchdir in \$searchdirs; do%g" libtool +sed -i "s%\(\s*\)searchdirs=\"\$newlib_search_path \$lib_search_path \(.*\)\"%\1searchdirs=\"\$newlib_search_path \$lib_search_path\"\n\1sss_beg=\"\"\n\1sss_end=\"\2\"%g" libtool +sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs; do\n\1 if ! test -d \$sss; then continue; fi\n\1 ssss=\$(cd \$sss; pwd)\n\1 if test \"\$ssss\" != \"\" \&\& test -d \$ssss; then\n\1 case \$ssss in\n\1 /usr/lib | /usr/lib64 ) ;;\n\1 * ) sss_beg=\"\$sss_beg \$ssss\" ;;\n\1 esac\n\1 fi\n\1done\n\1searchdirs=\"\$sss_beg \$sss_end\"\n\1\2%g" libtool +],[]) + # This list is initiated using autoscan and must be updated manually # when adding a new file .in to manage. When you execute # autoscan, the Makefile list is generated in the output file configure.scan. # This could be helpfull to update de configuration. AC_OUTPUT([ \ - ./salome_adm/unix/SALOMEconfig.h \ - ./adm_local/Makefile \ - ./adm_local/unix/Makefile \ - ./adm_local/unix/config_files/Makefile \ - ./bin/VERSION \ - ./bin/Makefile \ - ./idl/Makefile \ - ./resources/Makefile \ - ./src/Makefile \ - ./src/HexoticPlugin/Makefile \ - ./src/GUI/Makefile \ - ./HexoticPLUGIN_version.h \ + adm_local/Makefile \ + adm_local/unix/Makefile \ + adm_local/unix/config_files/Makefile \ + bin/VERSION \ + bin/Makefile \ + idl/Makefile \ + resources/Makefile \ + src/Makefile \ + src/HexoticPlugin/Makefile \ + src/GUI/Makefile \ + HexoticPLUGIN_version.h \ + doc/Makefile \ + doc/salome/Makefile \ + doc/salome/gui/Makefile \ + doc/salome/gui/HexoticPLUGIN/Makefile \ + doc/salome/gui/HexoticPLUGIN/doxyfile \ + doc/salome/gui/HexoticPLUGIN/doxyfile_py \ + doc/salome/gui/HexoticPLUGIN/static/header.html \ + doc/salome/gui/HexoticPLUGIN/static/header_py.html \ Makefile \ ]) diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..570ccb2 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,32 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# -* Makefile *- +# Author : Patrick GOLDBRONN (CEA) +# Date : 30/11/2001 +# Modified by : Alexander BORODIN (OCN) - autotools usage +# $Header$ +# source path +# +SUBDIRS = salome + +usr_docs: + (cd salome && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs: usr_docs \ No newline at end of file diff --git a/doc/salome/Makefile.am b/doc/salome/Makefile.am new file mode 100644 index 0000000..9ded0be --- /dev/null +++ b/doc/salome/Makefile.am @@ -0,0 +1,34 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# -* Makefile *- +# Author : Patrick GOLDBRONN (CEA) +# Date : 30/11/2001 +# Modified by : Alexander BORODIN (OCN) - autotools usage +# $Header: +# +SUBDIRS = gui +SUBDIRSGUI = gui + +usr_docs: + @@SETX@; for d in $(SUBDIRSGUI); do \ + (cd $$d && $(MAKE) $@) || exit 1; \ + done; + +docs: usr_docs \ No newline at end of file diff --git a/doc/salome/gui/HexoticPLUGIN/Makefile.am b/doc/salome/gui/HexoticPLUGIN/Makefile.am new file mode 100755 index 0000000..7c980d3 --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/Makefile.am @@ -0,0 +1,68 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# File : Makefile.in +# Author : Vasily Rusyaev (Open Cascade NN) +# Modified by : Alexander BORODIN (OCN) - autotools usage +# Module : doc +# +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +EXTRA_DIST += images input static/footer.html static/doxygen.css + +guidocdir = $(docdir)/gui/HexoticPLUGIN +guidoc_DATA = images/head.png + + +usr_docs: doxyfile + echo "===========================================" ; \ + echo "Generating Python interface documentation"; \ + echo "===========================================" ; \ + $(DOXYGEN) doxyfile_py \ + echo "===========================================" ; \ + echo "Generating GUI documentation" ; \ + echo "===========================================" ; \ + $(DOXYGEN) doxyfile ; + +docs: usr_docs + +clean-local: + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile | ./doxyfile_py ) ;; \ + . | .. | ./static ) ;; \ + *) echo "Removing $${filen}" ; rm -rf $${filen} ;; \ + esac ; \ + done ; + +install-data-local: usr_docs + $(INSTALL) -d $(DESTDIR)$(guidocdir) + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile | ./doxyfile_py ) ;; \ + ./doxyfile.bak | ./doxyfile_py.bak ) ;; \ + . | .. | ./static ) ;; \ + *) echo "Installing $${filen}" ; cp -rp $${filen} $(DESTDIR)$(guidocdir) ;; \ + esac ; \ + done ; + cp -rp $(srcdir)/images/head.png $(DESTDIR)$(guidocdir)/hexoticpluginpy_doc/ ; + +uninstall-local: + rm -rf $(DESTDIR)$(guidocdir) + diff --git a/doc/salome/gui/HexoticPLUGIN/doxyfile.in b/doc/salome/gui/HexoticPLUGIN/doxyfile.in new file mode 100755 index 0000000..cb13c4b --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/doxyfile.in @@ -0,0 +1,80 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "SALOME HexoticPLUGIN User's Guide" +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @srcdir@/input +FILE_PATTERNS = *.doc +EXCLUDE = +IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_HEADER = @builddir@/static/header.html +HTML_FOOTER = @srcdir@/static/footer.html +HTML_STYLESHEET = @srcdir@/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#SORT related options +#--------------------------------------------------------------------------- +SORT_GROUP_NAMES = NO + + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +EXTRA_PACKAGES = amsmath + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- +#rnv: 07.04.2011 Workaround for the doxygen 1.7.3: +#because it wrongly defines location of the html files for search. +TAGFILES = hexoticpluginpy_doc.tag=../HexoticPLUGIN/hexoticpluginpy_doc +SEARCHENGINE = YES \ No newline at end of file diff --git a/doc/salome/gui/HexoticPLUGIN/doxyfile_py.in b/doc/salome/gui/HexoticPLUGIN/doxyfile_py.in new file mode 100755 index 0000000..3735e28 --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/doxyfile_py.in @@ -0,0 +1,159 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "SALOME HexoticPLUGIN User's Guide" +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = YES +FULL_PATH_NAMES = NO +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 5 +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +MAX_INITIALIZER_LINES = 25 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +EXCLUDE_SYMLINKS = NO +EXAMPLE_RECURSIVE = NO + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @top_srcdir@/src/HexoticPlugin/HexoticPLUGINDC.py +FILE_PATTERNS = +IMAGE_PATH = @srcdir@/images +RECURSIVE = NO +EXAMPLE_PATH = + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = hexoticpluginpy_doc +HTML_HEADER = @builddir@/static/header_py.html +HTML_FOOTER = @srcdir@/static/footer.html +HTML_STYLESHEET = @srcdir@/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = NO + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = NO +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = jpg +DOT_FONTNAME = Arial +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1200 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = NO +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- +GENERATE_TAGFILE = hexoticpluginpy_doc.tag +SEARCHENGINE = YES \ No newline at end of file diff --git a/doc/salome/gui/HexoticPLUGIN/images/head.png b/doc/salome/gui/HexoticPLUGIN/images/head.png new file mode 100755 index 0000000000000000000000000000000000000000..307d9ef9a4c07f8fba2c8721309a978433bcf63c GIT binary patch literal 78545 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 D4zrO! literal 0 HcmV?d00001 diff --git a/doc/salome/gui/HexoticPLUGIN/images/hexotic_parameters.png b/doc/salome/gui/HexoticPLUGIN/images/hexotic_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..40abfedd33c7d765b6d4a622f5885d86ae721fa6 GIT binary patch literal 31560 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

2i^8M@$Y_tVmgZ6o3DjKv8Mpdt#zD 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 E59D`!bN~PV literal 0 HcmV?d00001 diff --git a/doc/salome/gui/HexoticPLUGIN/input/hexotic_hypo.doc b/doc/salome/gui/HexoticPLUGIN/input/hexotic_hypo.doc new file mode 100644 index 0000000..d42d1f8 --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/input/hexotic_hypo.doc @@ -0,0 +1,39 @@ +/*! + +\page hexotic_hypo_page Hexotic Parameters hypothesis + +\n Hexotic Parameters hypothesis works only with Hexotic +algorithm. This algorithm is a commercial software. +\n To get a licence, visit http://www.distene.com/corp/eval-distene.html + +\image html hexotic_parameters.png + +

    +
  • Name - allows to define the name of the hypothesis (Hexotic +Parameters by default).
  • + +
  • Nb. Hexes Min Level - allows defining the minimal level of recursive partitioning on the initial octree cube.
  • + +
  • Nb. Hexes Max Level - allows defining the maximal level of recursive partitioning on the initial octree cube.
  • + +
  • Salome Quadrangles - not documented.
  • + +
  • Generate smooth meshes no ridges - specifies that the mesher can ignore ridges. A ridge is a geometrical entity (a sharp edge). The resulting meshes will have better quality elements, at the price of "smoothing" out the geometry. +
  • + +
  • Authorize invalid elements - specifies that the mesher must conform as much as possible to the geometry (especially the sharp edges). The resulting meshes may contain invalid elements (but with positive volumes: for example, three vertices of an hexahedron on the same edge), for the benefit of better geometry accuracy. +
  • + +
  • Sharp angle threshold in degrees - specifies the angle between two triangles above which the hex mesher will consider the edge common to these two triangles as being a "ridge". A ridge is a geometrical entity (a sharp edge) which has to be kept as it is in the final hex mesh.The default value is 60 (degrees).
    If you raise this value, the hex mesher will detect less ridges, and the final solid mesh will therefore be smoother. On the other hand, if you reduce this value, more ridges will be detected and the algorithm will face harder situations to conform to. +
  • + +
  • Number of threads - specifies the number of threads to be used (this should be the number of cores or processors of a shared memory parallel architecture). +
  • + +
  • Working directory - specifies the directory where the input/output files will be created. +
  • +
+ +\note If BLSURF is used as 2D algo, and if a GMF file is defined as output file (using SetGMFFile(my2Dmesh.mesh)), then Hexotic will use this file as input. +This allows to avoid the reconstruction of the GMF file from the SMESH structure and can improve the global computation time. +*/ diff --git a/doc/salome/gui/HexoticPLUGIN/input/hexoticplugin_python_intarface.doc b/doc/salome/gui/HexoticPLUGIN/input/hexoticplugin_python_intarface.doc new file mode 100644 index 0000000..cb13cae --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/input/hexoticplugin_python_intarface.doc @@ -0,0 +1,9 @@ +/*! + +\page hexoticplugin_python_intarface_page Python Interface + +Python package \ref HexoticPLUGINDC "HexoticPLUGIN" defines several classes, destined for creation of the 3D meshes. + +Documentation for HexoticPLUGIN package is available in linear form grouped by classes, declared in the HexoticPLUGINDC.py file. + +*/ diff --git a/doc/salome/gui/HexoticPLUGIN/input/index.doc b/doc/salome/gui/HexoticPLUGIN/input/index.doc new file mode 100644 index 0000000..331bf18 --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/input/index.doc @@ -0,0 +1,19 @@ +/*! + +\mainpage Introduction to HexoticPLUGIN + +\n \b HexoticPLUGIN plugin is destined for: + + +
    +
  • Meshing 3D geometric entities.
  • +
  • Generating 3D meshes from 2D meshes, working without geometrical objects.
  • +
+ +To manage parameters of the HexoticPLUGIN use \subpage hexotic_hypo_page. + +Also all HexoticPLUGIN functionalities are accessible via +\subpage hexoticplugin_python_intarface_page "HexoticPLUGIN Python interface". + + +*/ diff --git a/doc/salome/gui/HexoticPLUGIN/static/doxygen.css b/doc/salome/gui/HexoticPLUGIN/static/doxygen.css new file mode 100755 index 0000000..7a2dcbd --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/static/doxygen.css @@ -0,0 +1,836 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.version { + border:1px solid #0000FF; + color: #CCCCCC; + font-family: Arial, Helvetica, sans-serif; + font-size: 9pt; + text-align: center; + width:100px; + -moz-border-radius: 8px; + margin: 5px; +} + +div.footer1 { + background-color: #DFE5F1; + border: 1px solid #AAAAAA; + font-family: Arial, Helvetica, sans-serif; + font-size: 11px; + padding: 10px; + margin-top: 15px; +} + + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin-bottom: 10px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +dl +{ + padding: 0 0 0 10px; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0D000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + background-color: #175783; + border: 1px solid; + height: 80px; + background-repeat: no-repeat; +/* font: 300% arial,sans-serif;*/ + margin: 0px; + padding: 0px; +} + +#projectbrief +{ + font: 120% arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + background: url("head.png"); + background-color: #175783; + border: 1px solid; + height: 80px; + background-repeat: no-repeat; + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + diff --git a/doc/salome/gui/HexoticPLUGIN/static/footer.html b/doc/salome/gui/HexoticPLUGIN/static/footer.html new file mode 100755 index 0000000..4c89a2b --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/static/footer.html @@ -0,0 +1,12 @@ + + + +
+
+ Copyright © 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+ Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+
+
+ + + \ No newline at end of file diff --git a/doc/salome/gui/HexoticPLUGIN/static/header.html.in b/doc/salome/gui/HexoticPLUGIN/static/header.html.in new file mode 100755 index 0000000..4571b43 --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/static/header.html.in @@ -0,0 +1,20 @@ + + + + + +$title + +$treeview +$search +$mathjax + + + + +
+
Version: @VERSION@
+ +
diff --git a/doc/salome/gui/HexoticPLUGIN/static/header_py.html.in b/doc/salome/gui/HexoticPLUGIN/static/header_py.html.in new file mode 100644 index 0000000..61414bb --- /dev/null +++ b/doc/salome/gui/HexoticPLUGIN/static/header_py.html.in @@ -0,0 +1,21 @@ + + + + + +$title + +$treeview +$search +$mathjax + + + + +
diff --git a/doc/salome/gui/Makefile.am b/doc/salome/gui/Makefile.am new file mode 100644 index 0000000..9f88ae0 --- /dev/null +++ b/doc/salome/gui/Makefile.am @@ -0,0 +1,32 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# File : Makefile.in +# Author : Vasily Rusyaev (Open Cascade NN) +# Modified by : Alexander BORODIN (OCN) - autotools usage +# Module : doc +# +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SUBDIRS = HexoticPLUGIN + +usr_docs: + (cd HexoticPLUGIN && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs: usr_docs diff --git a/idl/HexoticPlugin_Algorithm.idl b/idl/HexoticPlugin_Algorithm.idl index 094dd8c..66bb491 100644 --- a/idl/HexoticPlugin_Algorithm.idl +++ b/idl/HexoticPlugin_Algorithm.idl @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Algorithm.idl // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -60,6 +61,12 @@ module HexoticPlugin void SetHexoticSharpAngleThreshold(in long value); long GetHexoticSharpAngleThreshold(); + + void SetHexoticNbProc(in long value); + long GetHexoticNbProc(); + + void SetHexoticWorkingDirectory(in string path) raises (SALOME::SALOME_Exception); + string GetHexoticWorkingDirectory(); }; }; diff --git a/idl/Makefile.am b/idl/Makefile.am index 7112189..cea2378 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -29,6 +30,8 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am BASEIDL_FILES = HexoticPlugin_Algorithm.idl +BASEIDL_FILES_PY=$(BASEIDL_FILES:%.idl=%_idl.py) + # This variable defines the files to be installed dist_salomeidl_DATA = $(BASEIDL_FILES) @@ -47,7 +50,6 @@ libSalomeIDLHexoticPLUGIN_la_CPPFLAGS =\ $(SMESH_CXXFLAGS) \ @CORBA_CXXFLAGS@ \ @CORBA_INCLUDES@ \ - -I$(top_builddir)/salome_adm/unix \ -I$(top_builddir)/idl libSalomeIDLHexoticPLUGIN_la_LDFLAGS = -no-undefined -version-info=0:0:0 @@ -72,8 +74,7 @@ IDLCXXFLAGS = \ -I$(top_builddir)/idl/salome \ -I$(KERNEL_ROOT_DIR)/idl/salome \ -I$(GEOM_ROOT_DIR)/idl/salome \ - -I$(SMESH_ROOT_DIR)/idl/salome \ - -I$(top_builddir)/salome_adm/unix + -I$(SMESH_ROOT_DIR)/idl/salome IDLPYFLAGS = \ @IDLPYFLAGS@ \ -I$(KERNEL_ROOT_DIR)/idl/salome \ @@ -93,9 +94,15 @@ install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; \ done -# uninstall-local removes too much, but it works in distcheck +# we want to remove only staff generated for IDL files and nothing more uninstall-local: - rm -rf $(DESTDIR)$(salomepythondir)/* + @for modulen in HexoticPlugin ; do \ + test -d $(DESTDIR)$(salomepythondir)/$${modulen} && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen} ; \ + test -d $(DESTDIR)$(salomepythondir)/$${modulen}__POA && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}__POA" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen}__POA ; \ + done ; \ + for filen in $(BASEIDL_FILES_PY) ; do \ + echo "Removing $(DESTDIR)$(salomepythondir)/$${filen}" && rm -f $(DESTDIR)$(salomepythondir)/$${filen}* ; \ + done mostlyclean-local: -rm -f *.hh *.cc .depidl @@ -109,7 +116,7 @@ mostlyclean-local: @for dep in $^ dummy; do \ if [ $$dep != "dummy" ]; then \ echo Building dependencies for $$dep; \ - $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(SMESH_ROOT_DIR)/idl/salome -I$(top_builddir)/salome_adm/unix $$dep 2>/dev/null | \ + $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(SMESH_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \ sed 's/\.o/\SK.cc/' >>$@; \ fi; \ done ; diff --git a/resources/HexoticPLUGIN.xml b/resources/HexoticPLUGIN.xml index 7600da0..fe30c32 100644 --- a/resources/HexoticPLUGIN.xml +++ b/resources/HexoticPLUGIN.xml @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - diff --git a/resources/Makefile.am b/resources/Makefile.am index 97fb79e..8bc42a8 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -25,7 +26,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am dist_salomeres_DATA = \ HexoticPLUGIN.xml \ - HexoticPlugin.xml \ SalomeApp.xml if HEXOTICPLUGIN_ENABLE_GUI diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml index 4d07b89..0e8c742 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml @@ -1,5 +1,5 @@ +
+ +
diff --git a/resources/mesh_tree_algo_Hexotic.png b/resources/mesh_tree_algo_Hexotic.png index 092eae3c049d4e0190e7bee44dd45172f8234d25..d5417e3387cae4f01dadac22c56a95832fd28592 100755 GIT binary patch delta 404 zcmV;F0c-x@0j>j(B!3BTNLh0L01FcU01FcV0GgZ_00004XF*Lt006O$eEU(80000W zV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F}0003bNklY`liRF~P1E3j(B!3BTNLh0L01FcU01FcV0GgZ_00004XF*Lt006O$eEU(80000W zV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F}0003bNklY`liRF~P1E3 - - + @default diff --git a/src/GUI/HexoticPLUGIN_msg_en.ts b/src/GUI/HexoticPLUGIN_msg_en.ts index b3f4e61..362823c 100644 --- a/src/GUI/HexoticPLUGIN_msg_en.ts +++ b/src/GUI/HexoticPLUGIN_msg_en.ts @@ -1,58 +1,51 @@ + - - - - @default - - Hexotic_3D_HYPOTHESIS - Hexotic 3D - - - Hexotic_3D_TITLE - Hypothesis Construction - - - Hexotic_HEXES_MAX_LEVEL - Nb. Hexes Max Level - - - Hexotic_HEXES_MIN_LEVEL - Nb. Hexes Min Level - - - Hexotic_IGNORE_RIDGES - Generate smooth meshes no ridges - - - Hexotic_INVALID_ELEMENTS - Authorize invalid elements - - - Hexotic_QUADRANGLES - Salome Quadrangles - - - Hexotic_SHARP_ANGLE_THRESHOLD - Sharp angle threshold in degrees - - + + + @default + + Hexotic_3D_HYPOTHESIS + Hexotic 3D + + + Hexotic_3D_TITLE + Hypothesis Construction + + + Hexotic_HEXES_MAX_LEVEL + Nb. Hexes Max Level + + + Hexotic_HEXES_MIN_LEVEL + Nb. Hexes Min Level + + + Hexotic_IGNORE_RIDGES + Generate smooth meshes no ridges + + + Hexotic_INVALID_ELEMENTS + Authorize invalid elements + + + Hexotic_QUADRANGLES + Salome Quadrangles + + + Hexotic_SHARP_ANGLE_THRESHOLD + Sharp angle threshold in degrees + + + Hexotic_NB_PROC + Number of threads + + + Hexotic_WORKING_DIR + Working directory + + + Hexotic_SELECT_DIR + ... + + diff --git a/src/GUI/HexoticPLUGIN_msg_fr.ts b/src/GUI/HexoticPLUGIN_msg_fr.ts new file mode 100755 index 0000000..73770b5 --- /dev/null +++ b/src/GUI/HexoticPLUGIN_msg_fr.ts @@ -0,0 +1,51 @@ + + + + + @default + + Hexotic_3D_HYPOTHESIS + Hexotic 3D + + + Hexotic_3D_TITLE + Construction de l'hypothèse + + + Hexotic_HEXES_MAX_LEVEL + Nb. des hexagones: niveau max + + + Hexotic_HEXES_MIN_LEVEL + Nb. des hexagones: niveau min + + + Hexotic_IGNORE_RIDGES + Générer des maillages lisses sans crête + + + Hexotic_INVALID_ELEMENTS + Autoriser des éléments invalides + + + Hexotic_QUADRANGLES + Quadrangles Salomé + + + Hexotic_SHARP_ANGLE_THRESHOLD + Seuil d'un angle aigu en degrés + + + Hexotic_NB_PROC + Nombre de process + + + Hexotic_WORKING_DIR + Répertoire de travail + + + Hexotic_SELECT_DIR + ... + + + diff --git a/src/GUI/HexoticPluginGUI.cxx b/src/GUI/HexoticPluginGUI.cxx index 2116d53..a45ce2f 100755 --- a/src/GUI/HexoticPluginGUI.cxx +++ b/src/GUI/HexoticPluginGUI.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPluginGUI.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -30,6 +31,7 @@ //============================================================================= extern "C" { + HEXOTICPLUGIN_GUI_EXPORT SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator( const QString& aHypType ) { SMESHGUI_GenericHypothesisCreator* aCreator = NULL; diff --git a/src/GUI/HexoticPluginGUI.h b/src/GUI/HexoticPluginGUI.h new file mode 100755 index 0000000..5c928b7 --- /dev/null +++ b/src/GUI/HexoticPluginGUI.h @@ -0,0 +1,31 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// File : HexoticPluginGUI.h +// + +#ifdef WIN32 + #if defined HEXOTICPLUGIN_GUI_EXPORTS || defined HexoticPluginGUI_EXPORTS + #define HEXOTICPLUGIN_GUI_EXPORT __declspec( dllexport ) + #else + #define HEXOTICPLUGIN_GUI_EXPORT __declspec( dllimport ) + #endif +#else + #define HEXOTICPLUGIN_GUI_EXPORT +#endif diff --git a/src/GUI/HexoticPluginGUI_HypothesisCreator.cxx b/src/GUI/HexoticPluginGUI_HypothesisCreator.cxx index c09ae4f..a1ba5a4 100644 --- a/src/GUI/HexoticPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/HexoticPluginGUI_HypothesisCreator.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPluginGUI_HypothesisCreator.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -30,6 +31,7 @@ #include #include +#include #include #include @@ -40,6 +42,7 @@ #include #include #include +#include enum Fineness { VeryCoarse, @@ -73,8 +76,8 @@ QFrame* HexoticPluginGUI_HypothesisCreator::buildFrame() { QFrame* fr = new QFrame( 0 ); QVBoxLayout* lay = new QVBoxLayout( fr ); - lay->setMargin( 5 ); - lay->setSpacing( 0 ); + lay->setMargin( 0 ); + lay->setSpacing( 6 ); QGroupBox* GroupC1 = new QGroupBox( tr( "SMESH_ARGUMENTS" ), fr ); lay->addWidget( GroupC1 ); @@ -86,46 +89,63 @@ QFrame* HexoticPluginGUI_HypothesisCreator::buildFrame() int row = 0; myName = 0; if( isCreation() ) { - l->addWidget( new QLabel( tr( "SMESH_NAME" ), GroupC1 ), row, 0, 1, 1 ); + l->addWidget( new QLabel( tr( "SMESH_NAME" ), GroupC1 ), row, 0, 1, 2 ); myName = new QLineEdit( GroupC1 ); - l->addWidget( myName, row++, 1, 1, 1 ); + l->addWidget( myName, row++, 2, 1, 1 ); + myName->setMinimumWidth( 150 ); } HexoticPlugin::HexoticPlugin_Hypothesis_var h = HexoticPlugin::HexoticPlugin_Hypothesis::_narrow( initParamsHypothesis() ); - l->addWidget( new QLabel( tr( "Hexotic_HEXES_MIN_LEVEL" ), GroupC1 ), row, 0, 1, 1 ); + l->addWidget( new QLabel( tr( "Hexotic_HEXES_MIN_LEVEL" ), GroupC1 ), row, 0, 1, 2 ); myHexesMinLevel = new QtxIntSpinBox( GroupC1 ); - // myHexesMinLevel->setMinimum( 3 ); - myHexesMinLevel->setMinimum( h->GetHexesMinLevel() ); + myHexesMinLevel->setMinimum( 3 ); + //myHexesMinLevel->setMinimum( h->GetHexesMinLevel() ); myHexesMinLevel->setMaximum( 10 ); myHexesMinLevel->setSingleStep( 1 ); - l->addWidget( myHexesMinLevel, row++, 1, 1, 1 ); + l->addWidget( myHexesMinLevel, row++, 2, 1, 1 ); - l->addWidget( new QLabel( tr( "Hexotic_HEXES_MAX_LEVEL" ), GroupC1 ), row, 0, 1, 1 ); + l->addWidget( new QLabel( tr( "Hexotic_HEXES_MAX_LEVEL" ), GroupC1 ), row, 0, 1, 2 ); myHexesMaxLevel = new QtxIntSpinBox( GroupC1 ); myHexesMaxLevel->setMinimum( 3 ); myHexesMaxLevel->setMaximum( 10 ); myHexesMaxLevel->setSingleStep( 1 ); - l->addWidget( myHexesMaxLevel, row++, 1, 1, 1 ); + l->addWidget( myHexesMaxLevel, row++, 2, 1, 1 ); myHexoticQuadrangles = new QCheckBox( tr( "Hexotic_QUADRANGLES" ), GroupC1 ); - l->addWidget( myHexoticQuadrangles, row++, 0, 1, 2 ); + l->addWidget( myHexoticQuadrangles, row++, 0, 1, 3 ); myIs3D = true; myHexoticIgnoreRidges = new QCheckBox( tr( "Hexotic_IGNORE_RIDGES" ), GroupC1 ); - l->addWidget( myHexoticIgnoreRidges, row++, 0, 1, 2 ); + l->addWidget( myHexoticIgnoreRidges, row++, 0, 1, 3 ); myHexoticInvalidElements = new QCheckBox( tr( "Hexotic_INVALID_ELEMENTS" ), GroupC1 ); - l->addWidget( myHexoticInvalidElements, row++, 0, 1, 2 ); + l->addWidget( myHexoticInvalidElements, row++, 0, 1, 3 ); - l->addWidget( new QLabel( tr( "Hexotic_SHARP_ANGLE_THRESHOLD" ), GroupC1 ), row, 0, 1, 1 ); + l->addWidget( new QLabel( tr( "Hexotic_SHARP_ANGLE_THRESHOLD" ), GroupC1 ), row, 0, 1, 2 ); myHexoticSharpAngleThreshold = new QtxIntSpinBox( GroupC1 ); myHexoticSharpAngleThreshold->setMinimum( 0 ); myHexoticSharpAngleThreshold->setMaximum( 90 ); myHexoticSharpAngleThreshold->setSingleStep( 1 ); - l->addWidget( myHexoticSharpAngleThreshold, row++, 1, 1, 1 ); - + l->addWidget( myHexoticSharpAngleThreshold, row++, 2, 1, 1 ); + + l->addWidget( new QLabel( tr( "Hexotic_NB_PROC" ), GroupC1 ), row, 0, 1, 2 ); + myHexoticNbProc = new QtxIntSpinBox( GroupC1 ); + myHexoticNbProc->setMinimum( 1 ); + myHexoticNbProc->setMaximum( 256 ); + myHexoticNbProc->setSingleStep( 1 ); + l->addWidget( myHexoticNbProc, row++, 2, 1, 1 ); + + l->addWidget( new QLabel( tr( "Hexotic_WORKING_DIR" ), GroupC1 ), row, 0, 1, 1 ); + QPushButton* dirBtn = new QPushButton( tr( "Hexotic_SELECT_DIR" ), GroupC1 ); + dirBtn->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); + l->addWidget( dirBtn, row, 1, 1, 1 ); + myHexoticWorkingDir = new QLineEdit( GroupC1 ); + l->addWidget( myHexoticWorkingDir, row++, 2, 1, 1 ); + + connect( dirBtn, SIGNAL( clicked() ), this, SLOT( onDirBtnClicked() ) ); + return fr; } @@ -147,6 +167,9 @@ void HexoticPluginGUI_HypothesisCreator::retrieveParams() const myHexesMinLevel->setEnabled(true); myHexesMaxLevel->setEnabled(true); myHexoticSharpAngleThreshold->setEnabled(true); + + myHexoticNbProc->setValue( data.myHexoticNbProc ); + myHexoticWorkingDir->setText( data.myHexoticWorkingDir ); } QString HexoticPluginGUI_HypothesisCreator::storeParams() const @@ -162,6 +185,8 @@ QString HexoticPluginGUI_HypothesisCreator::storeParams() const valStr += tr("Hexotic_IGNORE_RIDGES") + " = " + QString::number( data.myHexoticIgnoreRidges ) + "; "; valStr += tr("Hexotic_INVALID_ELEMENTS") + " = " + QString::number( data.myHexoticInvalidElements ) + "; "; valStr += tr("Hexotic_SHARP_ANGLE_THRESHOLD") + " = " + QString::number( data.myHexoticSharpAngleThreshold ) + "; "; + valStr += tr("Hexotic_NB_PROC") + " = " + QString::number( data.myHexoticNbProc ) + "; "; + valStr += tr("Hexotic_WORKING_DIR") + " = " + data.myHexoticWorkingDir + "; "; return valStr; } @@ -179,6 +204,8 @@ bool HexoticPluginGUI_HypothesisCreator::readParamsFromHypo( HexoticHypothesisDa h_data.myHexoticIgnoreRidges = h->GetHexoticIgnoreRidges(); h_data.myHexoticInvalidElements = h->GetHexoticInvalidElements(); h_data.myHexoticSharpAngleThreshold = h->GetHexoticSharpAngleThreshold(); + h_data.myHexoticNbProc = h->GetHexoticNbProc(); + h_data.myHexoticWorkingDir = h->GetHexoticWorkingDirectory(); return true; } @@ -200,6 +227,8 @@ bool HexoticPluginGUI_HypothesisCreator::storeParamsToHypo( const HexoticHypothe h->SetHexoticIgnoreRidges( h_data.myHexoticIgnoreRidges ); h->SetHexoticInvalidElements( h_data.myHexoticInvalidElements ); h->SetHexoticSharpAngleThreshold( h_data.myHexoticSharpAngleThreshold ); + h->SetHexoticNbProc( h_data.myHexoticNbProc ); + h->SetHexoticWorkingDirectory( h_data.myHexoticWorkingDir.toLatin1().constData() ); } catch(const SALOME::SALOME_Exception& ex) { @@ -218,6 +247,8 @@ bool HexoticPluginGUI_HypothesisCreator::readParamsFromWidgets( HexoticHypothesi h_data.myHexoticIgnoreRidges = myHexoticIgnoreRidges->isChecked(); h_data.myHexoticInvalidElements = myHexoticInvalidElements->isChecked(); h_data.myHexoticSharpAngleThreshold = myHexoticSharpAngleThreshold->value(); + h_data.myHexoticNbProc = myHexoticNbProc->value(); + h_data.myHexoticWorkingDir = myHexoticWorkingDir->text(); return true; } @@ -237,3 +268,15 @@ QString HexoticPluginGUI_HypothesisCreator::type() const { return myIs3D ? tr( "Hexotic_3D_HYPOTHESIS" ) : tr( "Hexotic_3D_HYPOTHESIS" ); // ??? 3D/2D ??? } + +QString HexoticPluginGUI_HypothesisCreator::helpPage() const +{ + return "hexotic_hypo_page.html"; +} + +void HexoticPluginGUI_HypothesisCreator::onDirBtnClicked() +{ + QString dir = SUIT_FileDlg::getExistingDirectory( dlg(), myHexoticWorkingDir->text(), QString() ); + if ( !dir.isEmpty() ) + myHexoticWorkingDir->setText( dir ); +} diff --git a/src/GUI/HexoticPluginGUI_HypothesisCreator.h b/src/GUI/HexoticPluginGUI_HypothesisCreator.h index 50858cd..21cdcd4 100644 --- a/src/GUI/HexoticPluginGUI_HypothesisCreator.h +++ b/src/GUI/HexoticPluginGUI_HypothesisCreator.h @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPluginGUI_HypothesisCreator.h // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -24,6 +25,8 @@ #ifndef HexoticPLUGINGUI_HypothesisCreator_H #define HexoticPLUGINGUI_HypothesisCreator_H +#include "HexoticPluginGUI.h" + #include class QtxIntSpinBox; @@ -38,12 +41,14 @@ typedef struct bool myHexoticInvalidElements; bool myHexoticIgnoreRidges; int myHexoticSharpAngleThreshold; + int myHexoticNbProc; + QString myHexoticWorkingDir; } HexoticHypothesisData; /*! * \brief Class for creation of Hexotic hypotheses */ -class HexoticPluginGUI_HypothesisCreator : public SMESHGUI_GenericHypothesisCreator +class HEXOTICPLUGIN_GUI_EXPORT HexoticPluginGUI_HypothesisCreator : public SMESHGUI_GenericHypothesisCreator { Q_OBJECT @@ -52,6 +57,7 @@ public: virtual ~HexoticPluginGUI_HypothesisCreator(); virtual bool checkParams() const; + virtual QString helpPage() const; protected: virtual QFrame* buildFrame (); @@ -61,6 +67,9 @@ protected: virtual QString caption() const; virtual QPixmap icon() const; virtual QString type() const; + +protected slots: + void onDirBtnClicked(); private: bool readParamsFromHypo( HexoticHypothesisData& ) const; @@ -75,6 +84,8 @@ private: QCheckBox* myHexoticIgnoreRidges; QCheckBox* myHexoticInvalidElements; QtxIntSpinBox* myHexoticSharpAngleThreshold; + QtxIntSpinBox* myHexoticNbProc; + QLineEdit* myHexoticWorkingDir; bool myIs3D; }; diff --git a/src/GUI/Makefile.am b/src/GUI/Makefile.am index 04c1c77..2aba130 100644 --- a/src/GUI/Makefile.am +++ b/src/GUI/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -31,6 +32,7 @@ lib_LTLIBRARIES = libHexoticPluginGUI.la dist_libHexoticPluginGUI_la_SOURCES = \ HexoticPluginGUI.cxx \ + HexoticPluginGUI.h \ HexoticPluginGUI_HypothesisCreator.h \ HexoticPluginGUI_HypothesisCreator.cxx @@ -55,15 +57,17 @@ libHexoticPluginGUI_la_CPPFLAGS = \ $(CORBA_CXXFLAGS) \ $(CORBA_INCLUDES) \ -I$(srcdir)/../HexoticPlugin \ - -I$(top_builddir)/idl \ - -I$(top_builddir)/salome_adm/unix + -I$(top_builddir)/idl -libHexoticPluginGUI_la_LDFLAGS = \ - ../HexoticPlugin/libHexoticEngine.la \ - ${SMESH_LDFLAGS} -lSMESH \ - $(CAS_KERNEL) +libHexoticPluginGUI_la_LDFLAGS = \ + ../HexoticPlugin/libHexoticEngine.la \ + ${SMESH_LDFLAGS} -lSMESH \ + $(CAS_KERNEL) \ + $(GUI_LDFLAGS) -lsuit -lqtx -lSalomeApp \ + $(QT_LIBS) # resources files -nodist_salomeres_DATA = \ +nodist_salomeres_DATA = \ HexoticPLUGIN_images.qm \ - HexoticPLUGIN_msg_en.qm + HexoticPLUGIN_msg_en.qm \ + HexoticPLUGIN_msg_fr.qm diff --git a/src/HexoticPlugin/HexoticPLUGINDC.py b/src/HexoticPlugin/HexoticPLUGINDC.py new file mode 100644 index 0000000..92bdd68 --- /dev/null +++ b/src/HexoticPlugin/HexoticPLUGINDC.py @@ -0,0 +1,54 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from smesh import Mesh_Algorithm, AssureGeomPublished + +# import HexoticPlugin module if possible +noHexoticPlugin = 0 +try: + import HexoticPlugin +except ImportError: + noHexoticPlugin = 1 + pass + +Hexotic = "Hexotic_3D" + + +## Defines a hexahedron 3D algorithm +# +class Hexotic_Algorithm(Mesh_Algorithm): + + meshMethod = "Hexahedron" + algoType = Hexotic + + ## Private constructor. + def __init__(self, mesh, geom=0): + Mesh_Algorithm.__init__(self) + if noHexoticPlugin: print "Warning: HexoticPlugin module unavailable" + self.Create(mesh, geom, Hexotic, "libHexoticEngine.so") + pass + + ## Defines "MinMaxQuad" hypothesis to give three hexotic parameters + def MinMaxQuad(self, min=3, max=8, quad=True): + self.params = self.Hypothesis("Hexotic_Parameters", [], "libHexoticEngine.so", + UseExisting=0) + self.params.SetHexesMinLevel(min) + self.params.SetHexesMaxLevel(max) + self.params.SetHexoticQuadrangles(quad) + return self.params diff --git a/src/HexoticPlugin/HexoticPlugin_Defs.hxx b/src/HexoticPlugin/HexoticPlugin_Defs.hxx new file mode 100755 index 0000000..9830771 --- /dev/null +++ b/src/HexoticPlugin/HexoticPlugin_Defs.hxx @@ -0,0 +1,36 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +//============================================================================= +// File : HexoticPlugin_Defs.hxx +// +#ifndef _HexoticPlugin_DEFS_HXX_ +#define _HexoticPlugin_DEFS_HXX_ + +#ifdef WIN32 + #if defined HEXOTICPLUGIN_EXPORTS || defined HexoticEngine_EXPORTS + #define HEXOTICPLUGIN_EXPORT __declspec( dllexport ) + #else + #define HEXOTICPLUGIN_EXPORT __declspec( dllimport ) + #endif +#else + #define HEXOTICPLUGIN_EXPORT +#endif + +#endif diff --git a/src/HexoticPlugin/HexoticPlugin_Hexotic.cxx b/src/HexoticPlugin/HexoticPlugin_Hexotic.cxx index fd3d01c..ceba57e 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hexotic.cxx +++ b/src/HexoticPlugin/HexoticPlugin_Hexotic.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hexotic.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -46,12 +47,18 @@ #include #include +#include #include +#include +#include "SMESH_HypoFilter.hxx" +#include #include #include #include +#include + #include #include #include @@ -65,6 +72,16 @@ #include #include +static void removeFile( const TCollection_AsciiString& fileName ) +{ + try { + OSD_File( fileName ).Remove(); + } + catch ( Standard_ProgramError ) { + MESSAGE("Can't remove file: " << fileName.ToCString() << " ; file does not exist or permission denied"); + } +} + //============================================================================= /*! * @@ -78,10 +95,17 @@ HexoticPlugin_Hexotic::HexoticPlugin_Hexotic(int hypId, int studyId, SMESH_Gen* _name = "Hexotic_3D"; _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);// 1 bit /shape type // _onlyUnaryInput = false; + _requireShape = false; _iShape=0; _nbShape=0; _hexoticFilesKept=false; _compatibleHypothesis.push_back("Hexotic_Parameters"); +#ifdef WITH_BLSURFPLUGIN + _blsurfHypo = NULL; +#endif +#ifdef WITH_SMESH_CANCEL_COMPUTE + _compute_canceled = false; +#endif } //============================================================================= @@ -95,6 +119,37 @@ HexoticPlugin_Hexotic::~HexoticPlugin_Hexotic() MESSAGE("HexoticPlugin_Hexotic::~HexoticPlugin_Hexotic"); } + +#ifdef WITH_BLSURFPLUGIN +bool HexoticPlugin_Hexotic::CheckBLSURFHypothesis( SMESH_Mesh& aMesh, + const TopoDS_Shape& aShape ) +{ + // MESSAGE("HexoticPlugin_Hexotic::CheckBLSURFHypothesis"); + _blsurfHypo = NULL; + + std::list::const_iterator itl; + const SMESHDS_Hypothesis* theHyp; + + // If a BLSURF hypothesis is applied, get it + SMESH_HypoFilter blsurfFilter; + blsurfFilter.Init( blsurfFilter.HasName( "BLSURF_Parameters" )); + std::list appliedHyps; + aMesh.GetHypotheses( aShape, blsurfFilter, appliedHyps, false ); + + if ( appliedHyps.size() > 0 ) { + itl = appliedHyps.begin(); + theHyp = (*itl); // use only the first hypothesis + std::string hypName = theHyp->GetName(); + if (hypName == "BLSURF_Parameters") { + _blsurfHypo = static_cast (theHyp); + ASSERT(_blsurfHypo); + return true; + } + } + return false; +} +#endif + //============================================================================= /*! * @@ -111,7 +166,7 @@ bool HexoticPlugin_Hexotic::CheckHypothesis( SMESH_Mesh& std::list::const_iterator itl; const SMESHDS_Hypothesis* theHyp; - const std::list& hyps = GetUsedHypothesis(aMesh, aShape); + const std::list& hyps = GetUsedHypothesis(aMesh, aShape, false); int nbHyp = hyps.size(); if (!nbHyp) { aStatus = SMESH_Hypothesis::HYP_OK; @@ -129,7 +184,11 @@ bool HexoticPlugin_Hexotic::CheckHypothesis( SMESH_Mesh& } else aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; - + +#ifdef WITH_BLSURFPLUGIN + CheckBLSURFHypothesis(aMesh, aShape); +#endif + return aStatus == SMESH_Hypothesis::HYP_OK; } @@ -142,11 +201,11 @@ static TopoDS_Shape findShape(SMDS_MeshNode** t_Node, TopoDS_Shape aShape, const TopoDS_Shape* t_Shape, double** t_Box, - const int nShape) { - double *pntCoor; + const int nShape) +{ + double pntCoor[3]; int iShape, nbNode = 8; - pntCoor = new double[3]; for ( int i=0; i<3; i++ ) { pntCoor[i] = 0; for ( int j=0; j> number; + number = ( number + defaultValue + std::abs(number - defaultValue) ) / 2; break; } } @@ -290,8 +350,8 @@ static void printWarning(const int nbExpected, std::string aString, const int nb //======================================================================= static void removeHexoticFiles(TCollection_AsciiString file_In, TCollection_AsciiString file_Out) { - OSD_File( file_In ).Remove(); - OSD_File( file_Out ).Remove(); + removeFile( file_In ); + removeFile( file_Out ); } //======================================================================= @@ -300,10 +360,10 @@ static void removeHexoticFiles(TCollection_AsciiString file_In, TCollection_Asci //======================================================================= static bool writeHexoticFile (std::ofstream& theFile, - const SMESHDS_Mesh* theMesh, - std::map & theSmdsToHexoticIdMap, - std::map & theHexoticIdToNodeMap, - const TCollection_AsciiString& Hexotic_In) { + const SMESHDS_Mesh* theMesh, + std::map & theSmdsToHexoticIdMap, + std::map & /*theHexoticIdToNodeMap*/, + const TCollection_AsciiString& Hexotic_In) { cout << std::endl; cout << "Creating Hexotic processed mesh file : " << Hexotic_In << std::endl; @@ -323,8 +383,9 @@ static bool writeHexoticFile (std::ofstream& theFile, int nbVertices = 0; int nbTriangles = 0; const char* space = " "; - int dummy_1D = 0; + int dummy_0D = 0; int dummy_2D; + int nbNodes = 0; int aSmdsNodeID = 1; const SMDS_MeshNode* aNode; @@ -341,7 +402,7 @@ static bool writeHexoticFile (std::ofstream& theFile, nbVertices = theMesh->NbNodes(); - theFile << "MeshVersionFormatted 1" << std::endl; + theFile << "MeshVersionFormatted 2" << std::endl; theFile << std::endl; theFile << "Dimension" << std::endl; theFile << 3 << std::endl; @@ -356,31 +417,26 @@ static bool writeHexoticFile (std::ofstream& theFile, itOnNode = theMesh->nodesIterator(); while ( itOnNode->more() ) { aNode = itOnNode->next(); - dummy_1D = aNode->GetPosition()->GetShapeId(); + dummy_0D = aNode->getshapeId(); tabNodeId[ aSmdsNodeID - 1 ] = 0; idFound = false; for ( int j=0; j< aSmdsNodeID; j++ ) { - if ( dummy_1D == tabNodeId[j] ) { + if ( dummy_0D == tabNodeId[j] ) { idFound = true; break; } } - if ( not idFound ) - tabNodeId[ aSmdsNodeID - 1 ] = dummy_1D; + if ( ! idFound ) + tabNodeId[ aSmdsNodeID - 1 ] = dummy_0D; theSmdsToHexoticIdMap.insert(std::map ::value_type( aNode->GetID(), aSmdsNodeID )); - theHexoticIdToNodeMap.insert(std::map ::value_type( aSmdsNodeID, aNode )); aSmdsNodeID++; - theFile << aNode->X() << space << aNode->Y() << space << aNode->Z() << space << dummy_1D << std::endl; + theFile << aNode->X() << space << aNode->Y() << space << aNode->Z() << space << dummy_0D << std::endl; } // Writing SMESH faces into Hexotic File - nbTriangles = theMesh->NbFaces(); - - theFile << std::endl; - theFile << "# Set of mesh triangles (v1,v2,v3,tag)" << std::endl; - theFile << "Triangles" << std::endl; - theFile << nbTriangles << std::endl; + ostringstream triaOut; + nbTriangles = 0; expface.ReInit(); for ( int i = 0; expface.More(); expface.Next(), i++ ) { @@ -394,13 +450,13 @@ static bool writeHexoticFile (std::ofstream& theFile, break; } } - if ( not idFound ) { + if ( ! idFound ) { tabID[i] = shapeID; tabShape[i] = aShape; } } for ( int i=0; iMeshElements( aShape ); @@ -408,18 +464,42 @@ static bool writeHexoticFile (std::ofstream& theFile, while ( itOnSubFace->more() ) { aFace = itOnSubFace->next(); dummy_2D = shapeID; - itOnSubNode = aFace->nodesIterator(); - while ( itOnSubNode->more() ) { - aSmdsNodeID = itOnSubNode->next()->GetID(); - itOnSmdsNode = theSmdsToHexoticIdMap.find( aSmdsNodeID ); - ASSERT( itOnSmdsNode != theSmdsToHexoticIdMap.end() ); - theFile << (*itOnSmdsNode).second << space; + + nbNodes = aFace->IsQuadratic() ? aFace->NbNodes()/2 : aFace->NbNodes(); + if ( nbNodes == 3 ) // triangle + { + nbTriangles++; + for ( int i = 0; i < nbNodes; ++i ) + { + aSmdsNodeID = aFace->GetNode( i )->GetID(); + itOnSmdsNode = theSmdsToHexoticIdMap.find( aSmdsNodeID ); + ASSERT( itOnSmdsNode != theSmdsToHexoticIdMap.end() ); + triaOut << (*itOnSmdsNode).second << space; + } + triaOut << dummy_2D << std::endl; + } + else // polygon + { + int nbTria = nbNodes - 2, n0 = theSmdsToHexoticIdMap[ aFace->GetNode(0)->GetID() ]; + nbTriangles += nbTria; + for ( int i = 0; i < nbTria; ++i ) + { + triaOut << n0 << space; + triaOut << theSmdsToHexoticIdMap[ aFace->GetNode(i+1)->GetID() ] << space; + triaOut << theSmdsToHexoticIdMap[ aFace->GetNode(i+2)->GetID() ] << space; + triaOut << dummy_2D << std::endl; + } } - theFile << dummy_2D << std::endl; } } } + theFile << std::endl; + theFile << "# Set of mesh triangles (v1,v2,v3,tag)" << std::endl; + theFile << "Triangles" << std::endl; + theFile << nbTriangles << std::endl; + theFile << triaOut.str() << std::endl; + theFile << std::endl; theFile << "End" << std::endl; @@ -435,17 +515,143 @@ static bool writeHexoticFile (std::ofstream& theFile, return true; } +//======================================================================= +//function : writeHexoticFile +//purpose : +//======================================================================= + +static bool writeHexoticFile (std::ofstream& theFile, + const SMESH_MesherHelper* theHelper, + std::map & theSmdsToHexoticIdMap, + const TCollection_AsciiString& Hexotic_In) +{ + cout << std::endl; + cout << "Creating Hexotic processed mesh file : " << Hexotic_In << std::endl; + + int nbVertices = 0; + int nbTriangles = 0; + const char* space = " "; + int dummy_0D = 0; + int dummy_2D = 0; + + int aSmdsNodeID = 1; + const SMDS_MeshNode* aNode; + SMDS_NodeIteratorPtr itOnNode; + + const SMDS_MeshElement* aFace; + std::map::const_iterator itOnSmdsNode; + SMDS_ElemIteratorPtr itOnSubNode, itOnSubFace; + + // Writing SMESH points into Hexotic File + + nbVertices = theHelper->GetMeshDS()->NbNodes(); + + theFile << "MeshVersionFormatted 2" << std::endl; + theFile << std::endl; + theFile << "Dimension" << std::endl; + theFile << 3 << std::endl; + theFile << "# Set of mesh vertices" << std::endl; + theFile << "Vertices" << std::endl; + theFile << nbVertices << std::endl; + + itOnNode = theHelper->GetMeshDS()->nodesIterator(); + while ( itOnNode->more() ) + { + aNode = itOnNode->next(); + theSmdsToHexoticIdMap.insert(make_pair( aNode->GetID(), aSmdsNodeID )); + aSmdsNodeID++; + theFile << aNode->X() << space << aNode->Y() << space << aNode->Z() << space << dummy_0D << std::endl; + } + + // Writing SMESH faces into Hexotic File + + ostringstream triaOut; + + itOnSubFace = theHelper->GetMeshDS()->elementsIterator(SMDSAbs_Face); + while ( itOnSubFace->more() ) + { + aFace = itOnSubFace->next(); + int nbNodes = aFace->IsQuadratic() ? aFace->NbNodes()/2 : aFace->NbNodes(); + if ( nbNodes == 3 ) // triangle + { + nbTriangles++; + for ( int i = 0; i < nbNodes; ++i ) + { + aSmdsNodeID = aFace->GetNode( i )->GetID(); + itOnSmdsNode = theSmdsToHexoticIdMap.find( aSmdsNodeID ); + ASSERT( itOnSmdsNode != theSmdsToHexoticIdMap.end() ); + triaOut << (*itOnSmdsNode).second << space; + } + triaOut << dummy_2D << std::endl; + } + else // polygon + { + int nbTria = nbNodes - 2, n0 = theSmdsToHexoticIdMap[ aFace->GetNode(0)->GetID() ]; + nbTriangles += nbTria; + for ( int i = 0; i < nbTria; ++i ) + { + triaOut << n0 << space; + triaOut << theSmdsToHexoticIdMap[ aFace->GetNode(i+1)->GetID() ] << space; + triaOut << theSmdsToHexoticIdMap[ aFace->GetNode(i+2)->GetID() ] << space; + triaOut << dummy_2D << std::endl; + } + } + } + + theFile << std::endl; + theFile << "# Set of mesh triangles (v1,v2,v3,tag)" << std::endl; + theFile << "Triangles" << std::endl; + theFile << nbTriangles << std::endl; + theFile << triaOut.str() << std::endl; + + theFile << std::endl; + theFile << "End" << std::endl; + + cout << "Processed mesh file created, it contains :" << std::endl; + cout << " " << nbVertices << " vertices" << std::endl; + cout << " " << nbTriangles << " triangles" << std::endl; + cout << std::endl; + + return true; +} + //======================================================================= //function : readResult //purpose : //======================================================================= static bool readResult(std::string theFile, +#ifdef WITH_SMESH_CANCEL_COMPUTE + HexoticPlugin_Hexotic* theAlgo, +#endif SMESHDS_Mesh* theMesh, const int nbShape, const TopoDS_Shape* tabShape, double** tabBox) { + // --------------------------------- + // Optimisation of the plugin ... + // Retrieve the correspondance edge --> shape + // (which is very costly) only when user + // has defined at least one group of edges + // which should be rare for a 3d mesh ! + // --------------------------------- + + bool retrieve_edges = false; + const std::set& aGroups = theMesh->GetGroups(); + set::const_iterator GrIt = aGroups.begin(); + for (; GrIt != aGroups.end(); GrIt++) + { + SMESHDS_GroupBase* aGrp = *GrIt; + if ( !aGrp ) + continue; + if ( aGrp->GetType() == SMDSAbs_Edge ) + { + retrieve_edges = true; + break; + } + } + // --------------------------------- // Read generated elements and nodes // --------------------------------- @@ -455,7 +661,7 @@ static bool readResult(std::string theFile, std::string token; int EndOfFile = 0, nbElem = 0, nField = 9, nbRef = 0; int aHexoticNodeID = 0, shapeID, hexoticShapeID; - int IdShapeRef = 2; + const int IdShapeRef = 2; int *tabID, *tabRef, *nodeAssigne; bool *tabDummy, hasDummy = false; double epsilon = Precision::Confusion(); @@ -463,13 +669,17 @@ static bool readResult(std::string theFile, SMDS_MeshNode** HexoticNode; TopoDS_Shape *tabCorner, *tabEdge; - tabID = new int[nbShape]; + const int nbDomains = countShape( theMesh, TopAbs_SHELL ); + const int holeID = -1; + + // tabID = new int[nbShape]; + tabID = new int[nbDomains]; tabRef = new int[nField]; tabDummy = new bool[nField]; - for (int i=0; iShapeToIndex( tabShape[0] ); mapField["MeshVersionFormatted"] = 0; tabRef[0] = 0; tabDummy[0] = false; @@ -487,16 +697,9 @@ static bool readResult(std::string theFile, theMesh->RemoveNode( itOnHexoticInputNode->next() ); int nbVertices = getNbShape(theFile, "Vertices"); - int nbHexCorners = getNbShape(theFile, "Corners"); - int nbCorners = countShape( theMesh, TopAbs_VERTEX ); + int nbCorners = getNbShape(theFile, "Corners", countShape( theMesh, TopAbs_VERTEX )); int nbShapeEdge = countShape( theMesh, TopAbs_EDGE ); - if ( nbHexCorners != nbCorners ) { - printWarning(nbCorners, "corners", nbHexCorners); - if ( nbHexCorners > nbCorners ) - nbCorners = nbHexCorners; - } - tabCorner = new TopoDS_Shape[ nbCorners ]; tabEdge = new TopoDS_Shape[ nbShapeEdge ]; nodeAssigne = new int[ nbVertices + 1 ]; @@ -544,6 +747,12 @@ static bool readResult(std::string theFile, coord = new double[nbRef]; for ( int iElem = 0; iElem < nbElem; iElem++ ) { +#ifdef WITH_SMESH_CANCEL_COMPUTE + if(theAlgo->computeCanceled()) + { + return false; + } +#endif aHexoticID = iElem + 1; for ( int iCoord = 0; iCoord < 3; iCoord++ ) fileRes >> coord[ iCoord ]; @@ -563,11 +772,17 @@ static bool readResult(std::string theFile, MESSAGE("Read " << nbElem << " " << token); SMDS_MeshNode** node; int nodeDim, *nodeID; - SMDS_MeshElement * aHexoticElement; + SMDS_MeshElement * aHexoticElement = 0; node = new SMDS_MeshNode*[ nbRef ]; nodeID = new int[ nbRef ]; for ( int iElem = 0; iElem < nbElem; iElem++ ) { +#ifdef WITH_SMESH_CANCEL_COMPUTE + if(theAlgo->computeCanceled()) + { + return false; + } +#endif for ( int iRef = 0; iRef < nbRef; iRef++ ) { fileRes >> aHexoticNodeID; // read nbRef aHexoticNodeID node[ iRef ] = HexoticNode[ aHexoticNodeID ]; @@ -593,7 +808,10 @@ static bool readResult(std::string theFile, int iNode = 1; if ( nodeAssigne[ nodeID[0] ] == 0 || nodeAssigne[ nodeID[0] ] == 2 ) iNode = 0; - shapeID = findEdge( node[iNode], theMesh, nbShapeEdge, tabEdge ); + if(retrieve_edges) + shapeID = findEdge( node[iNode], theMesh, nbShapeEdge, tabEdge ); + else + shapeID = 0; break; } case 5: { // "Ridges" @@ -607,22 +825,19 @@ static bool readResult(std::string theFile, } case 7: { // "Hexahedra" nodeDim = 4; - aHexoticElement = theMesh->AddVolume( node[0], node[3], node[2], node[1], node[4], node[7], node[6], node[5] ); - if ( nbShape > 1 ) { + if ( nbDomains > 1 ) { hexoticShapeID = dummy - IdShapeRef; if ( tabID[ hexoticShapeID ] == 0 ) { - if (iElem == 0) - aShape = tabShape[0]; aShape = findShape(node, aShape, tabShape, tabBox, nbShape); - shapeID = theMesh->ShapeToIndex( aShape ); + shapeID = aShape.IsNull() ? holeID : theMesh->ShapeToIndex( aShape ); tabID[ hexoticShapeID ] = shapeID; } else shapeID = tabID[ hexoticShapeID ]; if ( iElem == (nbElem - 1) ) { int shapeAssociated = 0; - for ( int i=0; i 0 ) shapeAssociated += 1; } if ( shapeAssociated != nbShape ) @@ -632,10 +847,13 @@ static bool readResult(std::string theFile, else { shapeID = tabID[0]; } + if ( shapeID != holeID ) + aHexoticElement = theMesh->AddVolume( node[0], node[3], node[2], node[1], node[4], node[7], node[6], node[5] ); break; } - } - if ( token != "Ridges" ) { + } // switch (nField) + + if ( token != "Ridges" && ( shapeID > 0 || token == "Corners")) { for ( int i=0; iSetNodeOnVertex( node[0], aVertex ); @@ -645,7 +863,7 @@ static bool readResult(std::string theFile, nodeAssigne[ nodeID[i] ] = nodeDim; } } - if ( token != "Corners" ) + if ( token != "Corners" && aHexoticElement ) theMesh->SetMeshElementOnShape( aHexoticElement, shapeID ); } } @@ -664,6 +882,18 @@ static bool readResult(std::string theFile, } } cout << std::endl; + + // remove nodes in holes + if ( nbDomains > 1 ) + { + SMESHDS_SubMesh* subMesh; + for ( int i = 1; i <= nbVertices; ++i ) + if ( HexoticNode[i]->NbInverseElements() == 0 ) + { + subMesh = HexoticNode[i]->getshapeId() > 0 ? theMesh->MeshElements(HexoticNode[i]->getshapeId() ) : 0; + theMesh->RemoveFreeNode( HexoticNode[i], subMesh, /*fromGroups=*/false ); + } + } delete [] tabID; delete [] tabRef; delete [] tabDummy; @@ -674,6 +904,168 @@ static bool readResult(std::string theFile, return true; } + +//======================================================================= +//function : readResult +//purpose : +//======================================================================= + +static bool readResult(std::string theFile, +#ifdef WITH_SMESH_CANCEL_COMPUTE + HexoticPlugin_Hexotic* theAlgo, +#endif + SMESH_MesherHelper* theHelper) +{ + SMESHDS_Mesh* theMesh = theHelper->GetMeshDS(); + + // --------------------------------- + // Read generated elements and nodes + // --------------------------------- + + std::string token; + const int nbField = 9; + int nField, EndOfFile = 0, nbElem = 0, nbRef = 0; + int aHexoticNodeID = 0, shapeID; + int tabRef[nbField], *nodeAssigne; + bool tabDummy[nbField], hasDummy = false; + std::map mapField; + SMDS_MeshNode** HexoticNode; + + mapField["MeshVersionFormatted"] = 0; tabRef[0] = 0; tabDummy[0] = false; + mapField["Dimension"] = 1; tabRef[1] = 0; tabDummy[1] = false; + mapField["Vertices"] = 2; tabRef[2] = 3; tabDummy[2] = true; + mapField["Corners"] = 3; tabRef[3] = 1; tabDummy[3] = false; + mapField["Edges"] = 4; tabRef[4] = 2; tabDummy[4] = true; + mapField["Ridges"] = 5; tabRef[5] = 1; tabDummy[5] = false; + mapField["Quadrilaterals"] = 6; tabRef[6] = 4; tabDummy[6] = true; + mapField["Hexahedra"] = 7; tabRef[7] = 8; tabDummy[7] = true; + mapField["End"] = 8; tabRef[8] = 0; tabDummy[8] = false; + + theHelper->GetMesh()->Clear(); + + int nbVertices = getNbShape(theFile, "Vertices"); + HexoticNode = new SMDS_MeshNode*[ nbVertices + 1 ]; + nodeAssigne = new int[ nbVertices + 1 ]; + + MESSAGE("Read " << theFile << " file"); + std::ifstream fileRes(theFile.c_str()); + ASSERT(fileRes); + + while ( !EndOfFile ) + { + int dummy; + fileRes >> token; + + if (mapField.count(token)) { + nField = mapField[token]; + nbRef = tabRef[nField]; + hasDummy = tabDummy[nField]; + } + else { + nField = -1; + nbRef = 0; + } + + nbElem = 0; + if ( nField < (mapField.size() - 1) && nField >= 0 ) + fileRes >> nbElem; + + switch (nField) { + case 0: { // "MeshVersionFormatted" + MESSAGE(token << " " << nbElem); + break; + } + case 1: { // "Dimension" + MESSAGE("Mesh dimension " << nbElem << "D"); + break; + } + case 2: { // "Vertices" + MESSAGE("Read " << nbElem << " " << token); + int aHexoticID; + double coord[3]; + SMDS_MeshNode * aHexoticNode; + + for ( int iElem = 0; iElem < nbElem; iElem++ ) { +#ifdef WITH_SMESH_CANCEL_COMPUTE + if(theAlgo->computeCanceled()) + { + return false; + } +#endif + aHexoticID = iElem + 1; + for ( int iCoord = 0; iCoord < 3; iCoord++ ) + fileRes >> coord[ iCoord ]; + fileRes >> dummy; + aHexoticNode = theMesh->AddNode(coord[0], coord[1], coord[2]); + HexoticNode[ aHexoticID ] = aHexoticNode; + nodeAssigne[ aHexoticID ] = 0; + } + break; + } + case 3: // "Corners" + case 4: // "Edges" + case 5: // "Ridges" + case 6: // "Quadrilaterals" + case 7: { // "Hexahedra" + MESSAGE("Read " << nbElem << " " << token); + std::vector< SMDS_MeshNode* > node( nbRef ); + std::vector< int > nodeID( nbRef ); + + for ( int iElem = 0; iElem < nbElem; iElem++ ) + { +#ifdef WITH_SMESH_CANCEL_COMPUTE + if(theAlgo->computeCanceled()) + { + return false; + } +#endif + for ( int iRef = 0; iRef < nbRef; iRef++ ) + { + fileRes >> aHexoticNodeID; // read nbRef aHexoticNodeID + node [ iRef ] = HexoticNode[ aHexoticNodeID ]; + nodeID[ iRef ] = aHexoticNodeID; + } + if ( hasDummy ) + fileRes >> dummy; + switch (nField) + { + case 4: // "Edges" + theHelper->AddEdge( node[0], node[1] ); break; + case 6: // "Quadrilaterals" + theMesh->AddFace( node[0], node[1], node[2], node[3] ); break; + case 7: // "Hexahedra" + theHelper->AddVolume( node[0], node[3], node[2], node[1], + node[4], node[7], node[6], node[5] ); break; + default: continue; + } + if ( nField == 6 ) + for ( int iRef = 0; iRef < nbRef; iRef++ ) + nodeAssigne[ nodeID[ iRef ]] = 1; + } + break; + } + case 8: { // "End" + EndOfFile = 1; + MESSAGE("End of " << theFile << " file"); + break; + } + default: { + MESSAGE("Unknown Token: " << token); + } + } + } + cout << std::endl; + + shapeID = theHelper->GetSubShapeID(); + for ( int i = 0; i < nbVertices; ++i ) + if ( !nodeAssigne[ i+1 ]) + theMesh->SetNodeInVolume( HexoticNode[ i+1 ], shapeID ); + + delete [] HexoticNode; + delete [] nodeAssigne; + return true; +} + //============================================================================= /*! * Pass parameters to Hexotic @@ -690,6 +1082,8 @@ void HexoticPlugin_Hexotic::SetParameters(const HexoticPlugin_Hypothesis* hyp) { _hexoticIgnoreRidges = hyp->GetHexoticIgnoreRidges(); _hexoticInvalidElements = hyp->GetHexoticInvalidElements(); _hexoticSharpAngleThreshold = hyp->GetHexoticSharpAngleThreshold(); + _hexoticNbProc = hyp->GetHexoticNbProc(); + _hexoticWorkingDirectory = hyp->GetHexoticWorkingDirectory(); } else { cout << std::endl; @@ -701,6 +1095,8 @@ void HexoticPlugin_Hexotic::SetParameters(const HexoticPlugin_Hypothesis* hyp) { _hexoticIgnoreRidges = hyp->GetDefaultHexoticIgnoreRidges(); _hexoticInvalidElements = hyp->GetDefaultHexoticInvalidElements(); _hexoticSharpAngleThreshold = hyp->GetDefaultHexoticSharpAngleThreshold(); + _hexoticNbProc = hyp->GetDefaultHexoticNbProc(); + _hexoticWorkingDirectory = hyp->GetDefaultHexoticWorkingDirectory(); } } @@ -717,21 +1113,74 @@ static TCollection_AsciiString getTmpDir() if(Tmp_dir != NULL) { aTmpDir = Tmp_dir; #ifdef WIN32 - if(aTmpDir.Value(aTmpDir.Length()) != '\\') aTmpDir+='\\'; - #else - if(aTmpDir.Value(aTmpDir.Length()) != '/') aTmpDir+='/'; - #endif + if(aTmpDir.Value(aTmpDir.Length()) != '\\') aTmpDir+='\\'; +#else + if(aTmpDir.Value(aTmpDir.Length()) != '/') aTmpDir+='/'; +#endif } else { - #ifdef WIN32 - aTmpDir = TCollection_AsciiString("C:\\"); - #else - aTmpDir = TCollection_AsciiString("/tmp/"); - #endif +#ifdef WIN32 + aTmpDir = TCollection_AsciiString("C:\\"); +#else + aTmpDir = TCollection_AsciiString("/tmp/"); +#endif } return aTmpDir; } +//================================================================================ +/*! + * \brief Returns a command to run Hexotic mesher + */ +//================================================================================ + +std::string HexoticPlugin_Hexotic::getHexoticCommand(const TCollection_AsciiString& Hexotic_In, + const TCollection_AsciiString& Hexotic_Out) const +{ + cout << std::endl; + cout << "Hexotic execution..." << std::endl; + cout << _name << " parameters :" << std::endl; + cout << " " << _name << " Segments Min Level = " << _hexesMinLevel << std::endl; + cout << " " << _name << " Segments Max Level = " << _hexesMaxLevel << std::endl; + cout << " " << "Salome Quadrangles : " << (_hexoticQuadrangles ? "yes":"no") << std::endl; + cout << " " << "Hexotic can ignore ridges : " << (_hexoticIgnoreRidges ? "yes":"no") << std::endl; + cout << " " << "Hexotic authorize invalide elements : " << ( _hexoticInvalidElements ? "yes":"no") << std::endl; + cout << " " << _name << " Sharp angle threshold = " << _hexoticSharpAngleThreshold << " degrees" << std::endl; + cout << " " << _name << " Number of threads = " << _hexoticNbProc << std::endl; + cout << " " << _name << " Working directory = \"" << _hexoticWorkingDirectory << "\"" << std::endl; + + TCollection_AsciiString run_Hexotic( "hexotic" ); + + TCollection_AsciiString minl = " -minl ", maxl = " -maxl ", angle = " -ra "; + TCollection_AsciiString in = " -in ", out = " -out "; + TCollection_AsciiString ignoreRidges = " -nr ", invalideElements = " -inv "; + TCollection_AsciiString subdom = " -sd ", sharp = " -sharp "; + TCollection_AsciiString proc = " -nproc "; + + TCollection_AsciiString minLevel, maxLevel, sharpAngle, mode, subdivision, nbproc; + minLevel = _hexesMinLevel; + maxLevel = _hexesMaxLevel; + sharpAngle = _hexoticSharpAngleThreshold; + mode = 4; + subdivision = 3; + nbproc = _hexoticNbProc; + + if (_hexoticIgnoreRidges) + run_Hexotic += ignoreRidges; + + if (_hexoticInvalidElements) + run_Hexotic += invalideElements; + + run_Hexotic += angle + sharpAngle + minl + minLevel + maxl + maxLevel + in + Hexotic_In + out + Hexotic_Out; + run_Hexotic += subdom + mode; + run_Hexotic += proc + nbproc; + // run_Hexotic += subdom + mode + invalideElements; + // run_Hexotic += subdom + mode + ignoreRidges; + // run_Hexotic += subdom + mode + sharp + subdivision; + + return run_Hexotic.ToCString(); +} + //============================================================================= /*! * Here we are going to use the Hexotic mesher @@ -741,28 +1190,40 @@ static TCollection_AsciiString getTmpDir() bool HexoticPlugin_Hexotic::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theShape) { +#ifdef WITH_SMESH_CANCEL_COMPUTE + _compute_canceled = false; +#endif bool Ok = true; SMESHDS_Mesh* meshDS = theMesh.GetMeshDS(); TCollection_AsciiString hexahedraMessage; if (_iShape == 0 && _nbShape == 0) { _nbShape = countShape( meshDS, TopAbs_SOLID ); // we count the number of shapes - _tabNode = new SMDS_MeshNode*[_nbShape]; // we declare the size of the node array + //_tabNode = new SMDS_MeshNode*[_nbShape]; // we declare the size of the node array } // to prevent from displaying error message after computing, - // we need to create one node for each shape theShape. - - _tabNode[_iShape] = meshDS->AddNode(0, 0, 0); - meshDS->SetNodeInVolume( _tabNode[_iShape], meshDS->ShapeToIndex(theShape) ); + // SetIsAlwaysComputed( true ) to empty sub-meshes + for ( int i = 0; i < _nbShape; ++i ) + if ( SMESH_subMesh* sm = theMesh.GetSubMeshContaining( theShape )) + { + SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true, + /*complexShapeFirst=*/false); + while ( smIt->more() ) + { + sm = smIt->next(); + if ( !sm->IsMeshComputed() ) + sm->SetIsAlwaysComputed( true ); + } + } _iShape++; if (_iShape == _nbShape ) { - for (int i=0; i<_nbShape; i++) // we destroy the (_nbShape - 1) nodes created and used - meshDS->RemoveNode( _tabNode[i] ); // to simulate successful mesh computing. - delete [] _tabNode; + // for (int i=0; i<_nbShape; i++) // we destroy the (_nbShape - 1) nodes created and used + // meshDS->RemoveNode( _tabNode[i] ); // to simulate successful mesh computing. + // delete [] _tabNode; // create bounding box for each shape of the compound @@ -790,76 +1251,97 @@ bool HexoticPlugin_Hexotic::Compute(SMESH_Mesh& theMesh, SetParameters(_hypothesis); - cout << std::endl; - cout << "Hexotic execution..." << std::endl; - cout << _name << " parameters :" << std::endl; - cout << " " << _name << " Segments Min Level = " << _hexesMinLevel << std::endl; - cout << " " << _name << " Segments Max Level = " << _hexesMaxLevel << std::endl; - cout << " " << "Salome Quadrangles : " << (_hexoticQuadrangles ? "yes":"no") << std::endl; - cout << " " << "Hexotic can ignore ridges : " << (_hexoticIgnoreRidges ? "yes":"no") << std::endl; - cout << " " << "Hexotic authorize invalide elements : " << ( _hexoticInvalidElements ? "yes":"no") << std::endl; - cout << " " << _name << " Sharp angle threshold = " << _hexoticSharpAngleThreshold << " degrees" << std::endl; - - TCollection_AsciiString aTmpDir = getTmpDir(); - TCollection_AsciiString Hexotic_In, Hexotic_Out; - TCollection_AsciiString run_Hexotic( "hexotic" ); - - TCollection_AsciiString minl = " -minl ", maxl = " -maxl ", angle = " -ra "; - TCollection_AsciiString in = " -in ", out = " -out "; - TCollection_AsciiString ignoreRidges = " -nr ", invalideElements = " -inv "; - TCollection_AsciiString subdom = " -sd "; - - TCollection_AsciiString minLevel, maxLevel, sharpAngle, mode; - minLevel = _hexesMinLevel; - maxLevel = _hexesMaxLevel; - sharpAngle = _hexoticSharpAngleThreshold; - mode = 4; +// TCollection_AsciiString aTmpDir = getTmpDir(); + TCollection_AsciiString aTmpDir = TCollection_AsciiString(_hexoticWorkingDirectory.c_str()); +#ifdef WIN32 + if ( aTmpDir.Value(aTmpDir.Length()) != '\\' ) aTmpDir += '\\'; +#else + if ( aTmpDir.Value(aTmpDir.Length()) != '/' ) aTmpDir += '/'; +#endif + TCollection_AsciiString Hexotic_In(""), Hexotic_Out; + TCollection_AsciiString modeFile_In( "chmod 666 " ), modeFile_Out( "chmod 666 " ); + TCollection_AsciiString aLogFileName = aTmpDir + "Hexotic.log"; // log std::map aSmdsToHexoticIdMap; std::map aHexoticIdToNodeMap; - Hexotic_In = aTmpDir + "Hexotic_In.mesh"; Hexotic_Out = aTmpDir + "Hexotic_Out.mesh"; +#ifdef WITH_BLSURFPLUGIN + bool defaultInputFile = true; + if (_blsurfHypo && !_blsurfHypo->GetQuadAllowed()) { + Hexotic_In = TCollection_AsciiString(_blsurfHypo->GetGMFFile().c_str()); + if (Hexotic_In != "") + defaultInputFile = false; + } + if (defaultInputFile) { +#endif + Hexotic_In = aTmpDir + "Hexotic_In.mesh"; + removeHexoticFiles(Hexotic_In, Hexotic_Out); + std::ofstream HexoticFile (Hexotic_In.ToCString(), std::ios::out); + Ok = ( writeHexoticFile(HexoticFile, meshDS, aSmdsToHexoticIdMap, aHexoticIdToNodeMap, Hexotic_In) ); + HexoticFile.close(); +#ifdef WITH_BLSURFPLUGIN + } + else { + removeFile( Hexotic_Out ); + } +#endif + - if (_hexoticIgnoreRidges) - run_Hexotic += ignoreRidges; - - if (_hexoticInvalidElements) - run_Hexotic += invalideElements; - - run_Hexotic += angle + sharpAngle + minl + minLevel + maxl + maxLevel + in + Hexotic_In + out + Hexotic_Out; - run_Hexotic += subdom + mode; + std::string run_Hexotic = getHexoticCommand(Hexotic_In, Hexotic_Out); + run_Hexotic += std::string(" 1>") + aLogFileName.ToCString(); // dump into file cout << std::endl; cout << "Hexotic command : " << run_Hexotic << std::endl; - removeHexoticFiles(Hexotic_In, Hexotic_Out); - - std::ofstream HexoticFile (Hexotic_In.ToCString(), std::ios::out); + +// removeHexoticFiles(Hexotic_In, Hexotic_Out); +// +// std::ofstream HexoticFile (Hexotic_In.ToCString(), std::ios::out); +// +// Ok = ( writeHexoticFile(HexoticFile, meshDS, aSmdsToHexoticIdMap, aHexoticIdToNodeMap, Hexotic_In) ); - Ok = ( writeHexoticFile(HexoticFile, meshDS, aSmdsToHexoticIdMap, aHexoticIdToNodeMap, Hexotic_In) ); - - HexoticFile.close(); +// HexoticFile.close(); + modeFile_In += Hexotic_In; + system( modeFile_In.ToCString() ); aSmdsToHexoticIdMap.clear(); aHexoticIdToNodeMap.clear(); MESSAGE("HexoticPlugin_Hexotic::Compute"); - system( run_Hexotic.ToCString() ); + system( run_Hexotic.data() ); // -------------- // read a result // -------------- std::ifstream fileRes( Hexotic_Out.ToCString() ); + modeFile_Out += Hexotic_Out; + system( modeFile_Out.ToCString() ); if ( ! fileRes.fail() ) { - Ok = readResult( Hexotic_Out.ToCString(), meshDS, _nbShape, tabShape, tabBox ); - hexahedraMessage = "success"; + Ok = readResult( Hexotic_Out.ToCString(), +#ifdef WITH_SMESH_CANCEL_COMPUTE + this, +#endif + meshDS, _nbShape, tabShape, tabBox ); + if(Ok) + hexahedraMessage = "success"; + else + hexahedraMessage = "failed"; } else { hexahedraMessage = "failed"; cout << "Problem with Hexotic output file " << Hexotic_Out.ToCString() << std::endl; Ok = false; + // analyse log file + SMESH_File logFile( aLogFileName.ToCString() ); + if ( !logFile.eof() ) + { + char msgLic[] = " Dlim "; + const char* fileBeg = logFile.getPos(), *fileEnd = fileBeg + logFile.size(); + if ( std::search( fileBeg, fileEnd, msgLic, msgLic+strlen(msgLic)) != fileEnd ) + error("Licence problems."); + } } cout << "Hexahedra meshing " << hexahedraMessage << std::endl; cout << std::endl; @@ -871,49 +1353,141 @@ bool HexoticPlugin_Hexotic::Compute(SMESH_Mesh& theMesh, _nbShape = 0; _iShape = 0; } +#ifdef WITH_SMESH_CANCEL_COMPUTE + if(_compute_canceled) + return error(SMESH_Comment("interruption initiated by user")); +#endif return Ok; } //============================================================================= /*! - * + * \brief Computes mesh without geometry + * \param aMesh - the mesh + * \param aHelper - helper that must be used for adding elements to \aaMesh + * \retval bool - is a success + * + * The method is called if ( !aMesh->HasShapeToMesh() ) */ //============================================================================= -std::ostream& HexoticPlugin_Hexotic::SaveTo(std::ostream& save) +bool HexoticPlugin_Hexotic::Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper) { - return save; -} +#ifdef WITH_SMESH_CANCEL_COMPUTE + _compute_canceled = false; +#endif + bool Ok = true; + TCollection_AsciiString hexahedraMessage; -//============================================================================= -/*! - * - */ -//============================================================================= + SetParameters(_hypothesis); -std::istream& HexoticPlugin_Hexotic::LoadFrom(std::istream& load) -{ - return load; + TCollection_AsciiString aTmpDir = getTmpDir(); + TCollection_AsciiString Hexotic_In, Hexotic_Out; + TCollection_AsciiString modeFile_In( "chmod 666 " ), modeFile_Out( "chmod 666 " ); + TCollection_AsciiString aLogFileName = aTmpDir + "Hexotic.log"; // log + + std::map aSmdsToHexoticIdMap; + std::map aHexoticIdToNodeMap; + + Hexotic_In = aTmpDir + "Hexotic_In.mesh"; + Hexotic_Out = aTmpDir + "Hexotic_Out.mesh"; + + std::string run_Hexotic = getHexoticCommand(Hexotic_In, Hexotic_Out); + run_Hexotic += std::string(" 1>") + aLogFileName.ToCString(); // dump into file + + cout << std::endl; + cout << "Hexotic command : " << run_Hexotic << std::endl; + + removeHexoticFiles(Hexotic_In, Hexotic_Out); + + std::ofstream HexoticFile (Hexotic_In.ToCString(), std::ios::out); + + Ok = ( writeHexoticFile(HexoticFile, aHelper, aSmdsToHexoticIdMap, Hexotic_In) ); + + HexoticFile.close(); + modeFile_In += Hexotic_In; + system( modeFile_In.ToCString() ); + aSmdsToHexoticIdMap.clear(); + aHexoticIdToNodeMap.clear(); + + MESSAGE("HexoticPlugin_Hexotic::Compute"); + + system( run_Hexotic.data() ); + + // -------------- + // read a result + // -------------- + + std::ifstream fileRes( Hexotic_Out.ToCString() ); + modeFile_Out += Hexotic_Out; + system( modeFile_Out.ToCString() ); + if ( ! fileRes.fail() ) { + Ok = readResult( Hexotic_Out.ToCString(), +#ifdef WITH_SMESH_CANCEL_COMPUTE + this, +#endif + aHelper ); + if(Ok) + hexahedraMessage = "success"; + else + hexahedraMessage = "failed"; + } + else { + hexahedraMessage = "failed"; + cout << "Problem with Hexotic output file " << Hexotic_Out << std::endl; + // analyse log file + SMESH_File logFile( aLogFileName.ToCString() ); + if ( !logFile.eof() ) + { + char msgLic[] = " Dlim "; + const char* fileBeg = logFile.getPos(), *fileEnd = fileBeg + logFile.size(); + if ( std::search( fileBeg, fileEnd, msgLic, msgLic+strlen(msgLic)) != fileEnd ) + return error("Licence problems."); + } + return error(SMESH_Comment("Problem with Hexotic output file ")< aResVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; iGetComputeError(); + smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED,"Evaluation is not implemented",this)); + + return true; +} -std::istream& operator >> (std::istream& load, HexoticPlugin_Hexotic& hyp) +#ifdef WITH_SMESH_CANCEL_COMPUTE +void HexoticPlugin_Hexotic::CancelCompute() { - return hyp.LoadFrom( load ); + _compute_canceled = true; +#ifdef WNT +#else + TCollection_AsciiString aTmpDir = getTmpDir(); + TCollection_AsciiString Hexotic_In = aTmpDir + "Hexotic_In.mesh"; + TCollection_AsciiString cmd = TCollection_AsciiString("ps ux | grep ") + Hexotic_In; + cmd += TCollection_AsciiString(" | grep -v grep | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1"); + system( cmd.ToCString() ); +#endif } +#endif diff --git a/src/HexoticPlugin/HexoticPlugin_Hexotic.hxx b/src/HexoticPlugin/HexoticPlugin_Hexotic.hxx index 63749c7..893c0e0 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hexotic.hxx +++ b/src/HexoticPlugin/HexoticPlugin_Hexotic.hxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hexotic.hxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -24,37 +25,59 @@ #ifndef _HexoticPlugin_Hexotic_HXX_ #define _HexoticPlugin_Hexotic_HXX_ +#include "HexoticPlugin_Defs.hxx" + #include "SMESH_3D_Algo.hxx" #include "SMESH_Mesh.hxx" #include "Utils_SALOME_Exception.hxx" +#ifdef WITH_BLSURFPLUGIN +#include "BLSURFPlugin_Hypothesis.hxx" +#endif + +#include + class SMESH_Mesh; class HexoticPlugin_Hypothesis; +class TCollection_AsciiString; -class HexoticPlugin_Hexotic: public SMESH_3D_Algo +class HEXOTICPLUGIN_EXPORT HexoticPlugin_Hexotic: public SMESH_3D_Algo { public: HexoticPlugin_Hexotic(int hypId, int studyId, SMESH_Gen* gen); virtual ~HexoticPlugin_Hexotic(); +#ifdef WITH_BLSURFPLUGIN + bool CheckBLSURFHypothesis(SMESH_Mesh& aMesh, + const TopoDS_Shape& aShape); +#endif + virtual bool CheckHypothesis(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape, SMESH_Hypothesis::Hypothesis_Status& aStatus); void SetParameters(const HexoticPlugin_Hypothesis* hyp); - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape); + virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); - std::ostream& SaveTo(std::ostream& save); - std::istream& LoadFrom(std::istream& load); - friend std::ostream& operator << (std::ostream& save, HexoticPlugin_Hexotic& hyp); - friend std::istream& operator >> (std::istream& load, HexoticPlugin_Hexotic& hyp); + virtual bool Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper); + +#ifdef WITH_SMESH_CANCEL_COMPUTE + virtual void CancelCompute(); + bool computeCanceled() { return _compute_canceled;}; +#endif + + virtual bool Evaluate(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape, + MapShapeNbElems& aResMap); protected: const HexoticPlugin_Hypothesis* _hypothesis; private: + + std::string getHexoticCommand(const TCollection_AsciiString& Hexotic_In, + const TCollection_AsciiString& Hexotic_Out) const; + int _iShape; int _nbShape; int _hexesMinLevel; @@ -64,7 +87,17 @@ private: bool _hexoticInvalidElements; bool _hexoticFilesKept; int _hexoticSharpAngleThreshold; + int _hexoticNbProc; + std::string _hexoticWorkingDirectory; SMDS_MeshNode** _tabNode; + +#ifdef WITH_BLSURFPLUGIN + const BLSURFPlugin_Hypothesis* _blsurfHypo; +#endif + +#ifdef WITH_SMESH_CANCEL_COMPUTE + volatile bool _compute_canceled; +#endif }; #endif diff --git a/src/HexoticPlugin/HexoticPlugin_Hexotic_i.cxx b/src/HexoticPlugin/HexoticPlugin_Hexotic_i.cxx index 1d42424..b2bc88d 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hexotic_i.cxx +++ b/src/HexoticPlugin/HexoticPlugin_Hexotic_i.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hexotic_i.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) diff --git a/src/HexoticPlugin/HexoticPlugin_Hexotic_i.hxx b/src/HexoticPlugin/HexoticPlugin_Hexotic_i.hxx index cacb9d2..4772856 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hexotic_i.hxx +++ b/src/HexoticPlugin/HexoticPlugin_Hexotic_i.hxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hexotic_i.hxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -34,7 +35,7 @@ // ====================================================== // Hexotic 3d algorithm // ====================================================== -class HexoticPlugin_Hexotic_i: +class HEXOTICPLUGIN_EXPORT HexoticPlugin_Hexotic_i: public virtual POA_HexoticPlugin::HexoticPlugin_Hexotic, public virtual SMESH_3D_Algo_i { diff --git a/src/HexoticPlugin/HexoticPlugin_Hypothesis.cxx b/src/HexoticPlugin/HexoticPlugin_Hypothesis.cxx index b0b2f4a..8f8c83d 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hypothesis.cxx +++ b/src/HexoticPlugin/HexoticPlugin_Hypothesis.cxx @@ -1,43 +1,48 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hypothesis.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) // --- // -#include +#include "HexoticPlugin_Hypothesis.hxx" #include +#include + //============================================================================= /*! * */ //============================================================================= HexoticPlugin_Hypothesis::HexoticPlugin_Hypothesis (int hypId, int studyId, - SMESH_Gen* gen) + SMESH_Gen* gen) : SMESH_Hypothesis(hypId, studyId, gen), _hexesMinLevel( GetDefaultHexesMinLevel() ), _hexesMaxLevel( GetDefaultHexesMaxLevel() ), _hexoticQuadrangles( GetDefaultHexoticQuadrangles() ), _hexoticIgnoreRidges( GetDefaultHexoticIgnoreRidges() ), _hexoticInvalidElements( GetDefaultHexoticInvalidElements() ), - _hexoticSharpAngleThreshold( GetDefaultHexoticSharpAngleThreshold() ) + _hexoticSharpAngleThreshold( GetDefaultHexoticSharpAngleThreshold() ), + _hexoticNbProc( GetDefaultHexoticNbProc() ), + _hexoticWorkingDirectory( GetDefaultHexoticWorkingDirectory() ) { MESSAGE("HexoticPlugin_Hypothesis::HexoticPlugin_Hypothesis"); _name = "Hexotic_Parameters"; @@ -92,6 +97,21 @@ void HexoticPlugin_Hypothesis::SetHexoticSharpAngleThreshold(int theVal) { } } +void HexoticPlugin_Hypothesis::SetHexoticNbProc(int theVal) { + if (theVal != _hexoticNbProc) { + _hexoticNbProc = theVal; + NotifySubMeshesHypothesisModification(); + } +} + +void HexoticPlugin_Hypothesis::SetHexoticWorkingDirectory(const std::string& path) +{ + if ( _hexoticWorkingDirectory != path ) { + _hexoticWorkingDirectory = path; + NotifySubMeshesHypothesisModification(); + } +} + //============================================================================= /*! * @@ -116,6 +136,8 @@ std::ostream& HexoticPlugin_Hypothesis::SaveTo(std::ostream& save) save<<"hexoticIgnoreRidges="<<(int)_hexoticIgnoreRidges<<";"; save<<"hexoticInvalidElements="<<(int)_hexoticInvalidElements<<";"; save<<"hexoticSharpAngleThreshold="<<_hexoticSharpAngleThreshold<<";"; + save<<"hexoticNbProc="<<_hexoticNbProc<<";"; + save<<"hexoticWorkingDirectory="<<_hexoticWorkingDirectory<<";"; return save; } @@ -153,6 +175,8 @@ std::istream& HexoticPlugin_Hypothesis::LoadFrom(std::istream& load) if (str3=="hexoticIgnoreRidges") _hexoticIgnoreRidges = (bool) atoi(str4.c_str()); if (str3=="hexoticInvalidElements") _hexoticInvalidElements = (bool) atoi(str4.c_str()); if (str3=="hexoticSharpAngleThreshold") _hexoticSharpAngleThreshold = atoi(str4.c_str()); + if (str3=="hexoticNbProc") _hexoticNbProc = atoi(str4.c_str()); + if (str3=="hexoticWorkingDirectory") _hexoticWorkingDirectory = str4; } return load; } @@ -187,7 +211,7 @@ std::istream& operator >>(std::istream& load, HexoticPlugin_Hypothesis& hyp) */ //================================================================================ bool HexoticPlugin_Hypothesis::SetParametersByMesh(const SMESH_Mesh* theMesh, - const TopoDS_Shape& theShape) + const TopoDS_Shape& theShape) { return false; } @@ -207,12 +231,12 @@ bool HexoticPlugin_Hypothesis::SetParametersByDefaults(const TDefaults& /*dflts //============================================================================= int HexoticPlugin_Hypothesis::GetDefaultHexesMinLevel() { - return 3; + return 6; } int HexoticPlugin_Hypothesis::GetDefaultHexesMaxLevel() { - return 8; + return 10; } bool HexoticPlugin_Hypothesis::GetDefaultHexoticQuadrangles() @@ -234,3 +258,26 @@ int HexoticPlugin_Hypothesis::GetDefaultHexoticSharpAngleThreshold() { return 60; } + +int HexoticPlugin_Hypothesis::GetDefaultHexoticNbProc() +{ + return 1; +} + +std::string HexoticPlugin_Hypothesis::GetDefaultHexoticWorkingDirectory() +{ + TCollection_AsciiString aTmpDir; + + char *Tmp_dir = getenv("SALOME_TMP_DIR"); + if(Tmp_dir != NULL) { + aTmpDir = Tmp_dir; + } + else { +#ifdef WIN32 + aTmpDir = TCollection_AsciiString("C:\\"); +#else + aTmpDir = TCollection_AsciiString("/tmp/"); +#endif + } + return aTmpDir.ToCString(); +} diff --git a/src/HexoticPlugin/HexoticPlugin_Hypothesis.hxx b/src/HexoticPlugin/HexoticPlugin_Hypothesis.hxx index 90cd37e..b3c0f44 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hypothesis.hxx +++ b/src/HexoticPlugin/HexoticPlugin_Hypothesis.hxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hypothesis.hxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -24,13 +25,15 @@ #ifndef _HexoticPlugin_Hypothesis_HXX_ #define _HexoticPlugin_Hypothesis_HXX_ +#include "HexoticPlugin_Defs.hxx" + #include "SMESH_Hypothesis.hxx" #include "Utils_SALOME_Exception.hxx" // Parameters for work of Hexotic // -class HexoticPlugin_Hypothesis: public SMESH_Hypothesis +class HEXOTICPLUGIN_EXPORT HexoticPlugin_Hypothesis: public SMESH_Hypothesis { public: @@ -53,6 +56,12 @@ public: void SetHexoticSharpAngleThreshold(int theVal); int GetHexoticSharpAngleThreshold() const { return _hexoticSharpAngleThreshold; } + + void SetHexoticNbProc(int theVal); + int GetHexoticNbProc() const { return _hexoticNbProc; } + + void SetHexoticWorkingDirectory(const std::string& path); + std::string GetHexoticWorkingDirectory() const { return _hexoticWorkingDirectory; } // the parameters default values @@ -62,6 +71,8 @@ public: static bool GetDefaultHexoticIgnoreRidges(); static bool GetDefaultHexoticInvalidElements(); static int GetDefaultHexoticSharpAngleThreshold(); + static int GetDefaultHexoticNbProc(); + static std::string GetDefaultHexoticWorkingDirectory(); // Persistence virtual std::ostream& SaveTo(std::ostream& save); @@ -90,6 +101,8 @@ private: bool _hexoticIgnoreRidges; bool _hexoticInvalidElements; int _hexoticSharpAngleThreshold; + int _hexoticNbProc; + std::string _hexoticWorkingDirectory ; }; #endif diff --git a/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.cxx b/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.cxx index 715a7fa..19a85bb 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.cxx +++ b/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.cxx @@ -1,27 +1,29 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hypothesis_i.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) // --- // #include "HexoticPlugin_Hypothesis_i.hxx" +#include "SMESH_Mesh_i.hxx" #include "SMESH_Gen.hxx" #include "SMESH_PythonDump.hxx" @@ -68,6 +70,8 @@ HexoticPlugin_Hypothesis_i::~HexoticPlugin_Hypothesis_i() * HexoticPlugin_Hypothesis_i::SetHexoticIgnoreRidges * HexoticPlugin_Hypothesis_i::SetHexoticInvalidElements * HexoticPlugin_Hypothesis_i::SetHexoticSharpAngleThreshold + * HexoticPlugin_Hypothesis_i::SetHexoticNbProc + * HexoticPlugin_Hypothesis_i::SetHexoticWorkingDirectory */ //============================================================================= @@ -119,6 +123,34 @@ void HexoticPlugin_Hypothesis_i::SetHexoticSharpAngleThreshold (CORBA::Long theV SMESH::TPythonDump() << _this() << ".SetHexoticSharpAngleThreshold( " << theValue << " )"; } +void HexoticPlugin_Hypothesis_i::SetHexoticNbProc (CORBA::Long theValue) +{ + // MESSAGE("HexoticPlugin_Hypothesis_i::SetHexoticNbProc"); + ASSERT(myBaseImpl); + this->GetImpl()->SetHexoticNbProc(theValue); + SMESH::TPythonDump() << _this() << ".SetHexoticNbProc( " << theValue << " )"; +} + +void HexoticPlugin_Hypothesis_i::SetHexoticWorkingDirectory(const char* path) throw ( SALOME::SALOME_Exception ) +{ + if (!path ) + THROW_SALOME_CORBA_EXCEPTION( "Null working directory",SALOME::BAD_PARAM ); + + string file(path); + const char lastChar = *file.rbegin(); +#ifdef WIN32 + if ( lastChar != '\\' ) file += '\\'; +#else + if ( lastChar != '/' ) file += '/'; +#endif + file += "Hexotic_In.mesh"; + SMESH_Mesh_i::PrepareForWriting (file.c_str()); + + ASSERT(myBaseImpl); + this->GetImpl()->SetHexoticWorkingDirectory(path); + SMESH::TPythonDump() << _this() << ".SetHexoticWorkingDirectory( '" << path << "' )"; +} + //============================================================================= /*! * HexoticPlugin_Hypothesis_i::GetHexesMinLevel @@ -127,6 +159,8 @@ void HexoticPlugin_Hypothesis_i::SetHexoticSharpAngleThreshold (CORBA::Long theV * HexoticPlugin_Hypothesis_i::GetHexoticIgnoreRidges * HexoticPlugin_Hypothesis_i::GetHexoticInvalidElements * HexoticPlugin_Hypothesis_i::GetHexoticSharpAngleThreshold + * HexoticPlugin_Hypothesis_i::GetHexoticNbProc + * HexoticPlugin_Hypothesis_i::GetHexoticWorkingDirectory */ //============================================================================= @@ -172,6 +206,19 @@ CORBA::Long HexoticPlugin_Hypothesis_i::GetHexoticSharpAngleThreshold() return this->GetImpl()->GetHexoticSharpAngleThreshold(); } +CORBA::Long HexoticPlugin_Hypothesis_i::GetHexoticNbProc() +{ + // MESSAGE("HexoticPlugin_Hypothesis_i::GetHexoticNbProc"); + ASSERT(myBaseImpl); + return this->GetImpl()->GetHexoticNbProc(); +} + +char* HexoticPlugin_Hypothesis_i::GetHexoticWorkingDirectory() +{ + ASSERT(myBaseImpl); + return CORBA::string_dup( this->GetImpl()->GetHexoticWorkingDirectory().c_str() ); +} + //============================================================================= /*! * HexoticPlugin_Hypothesis_i::GetImpl diff --git a/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.hxx b/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.hxx index d680e69..a6377be 100644 --- a/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.hxx +++ b/src/HexoticPlugin/HexoticPlugin_Hypothesis_i.hxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_Hypothesis_i.hxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -34,7 +35,7 @@ class SMESH_Gen; // HexoticPlugin parameters hypothesis -class HexoticPlugin_Hypothesis_i: +class HEXOTICPLUGIN_EXPORT HexoticPlugin_Hypothesis_i: public virtual POA_HexoticPlugin::HexoticPlugin_Hypothesis, public virtual SMESH_Hypothesis_i { @@ -64,6 +65,12 @@ class HexoticPlugin_Hypothesis_i: void SetHexoticSharpAngleThreshold(CORBA::Long theVal); CORBA::Long GetHexoticSharpAngleThreshold(); + + void SetHexoticNbProc(CORBA::Long theVal); + CORBA::Long GetHexoticNbProc(); + + void SetHexoticWorkingDirectory(const char* path) throw ( SALOME::SALOME_Exception ); + char* GetHexoticWorkingDirectory(); // Get implementation ::HexoticPlugin_Hypothesis* GetImpl(); diff --git a/src/HexoticPlugin/HexoticPlugin_i.cxx b/src/HexoticPlugin/HexoticPlugin_i.cxx index b94af39..101e1e0 100644 --- a/src/HexoticPlugin/HexoticPlugin_i.cxx +++ b/src/HexoticPlugin/HexoticPlugin_i.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // --- // File : HexoticPlugin_i.cxx // Author : Lioka RAZAFINDRAZAKA (CEA) @@ -42,6 +43,7 @@ template class HexoticPlugin_Creator_i:public HypothesisCreator_i extern "C" { + HEXOTICPLUGIN_EXPORT GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName) { MESSAGE("GetHypothesisCreator " << aHypName); diff --git a/src/HexoticPlugin/Makefile.am b/src/HexoticPlugin/Makefile.am index 087e61c..1d80ffa 100644 --- a/src/HexoticPlugin/Makefile.am +++ b/src/HexoticPlugin/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) @@ -38,22 +39,30 @@ dist_libHexoticEngine_la_SOURCES = \ HexoticPlugin_Hypothesis.cxx \ HexoticPlugin_Hypothesis_i.hxx \ HexoticPlugin_Hypothesis_i.cxx \ - HexoticPlugin_i.cxx + HexoticPlugin_i.cxx \ + HexoticPlugin_Defs.hxx libHexoticEngine_la_CPPFLAGS = \ -I$(top_builddir)/idl \ - -I$(top_builddir)/salome_adm/unix \ $(SMESH_CXXFLAGS) \ $(CORBA_CXXFLAGS) \ $(CORBA_INCLUDES) \ $(BOOST_CPPFLAGS) \ $(CAS_CPPFLAGS) \ - $(KERNEL_CXXFLAGS) \ - $(GUI_CXXFLAGS) \ + $(VTK_INCLUDES) \ + $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ $(MED_CXXFLAGS) \ - $(GEOM_CXXFLAGS) + $(GEOM_CXXFLAGS) \ + $(BLSURFPLUGIN_CXXFLAGS) libHexoticEngine_la_LDFLAGS = \ ../../idl/libSalomeIDLHexoticPLUGIN.la \ - $(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lStdMeshersEngine \ - $(KERNEL_LDFLAGS) -lSalomeGenericObj + $(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lStdMeshersEngine -lSMDS -lSMESHDS -lSalomeIDLSMESH -lSMESHUtils \ + $(KERNEL_LDFLAGS) -lSalomeGenericObj -lSALOMELocalTrace \ + $(CAS_LDPATH) -lTKernel -lTKMath -lTKG3d -lTKTopAlgo -lTKBRep $(MED_LDFLAGS) -lSalomeIDLMED -lSALOMELocalTrace \ + $(BLSURFPLUGIN_LDFLAGS) + +# Scripts to be installed. +dist_salomescript_DATA=HexoticPLUGINDC.py + diff --git a/src/Makefile.am b/src/Makefile.am index 5354ba3..99e5f64 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,21 +1,22 @@ -# Copyright (C) 2007-2008 CEA/DEN, EDF R&D +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + # --- # File : Makefile.am # Author : Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com) -- 2.39.2