* `SpherePadder plugin <padder/padder_userguide_page.html>`_
* `MGSurfOpt plugin <yams/index.html>`_
* `MGCleaner plugin <MGCleaner/index.html>`_
+* `topIIVolMesh plugin <TopIIVolMesh/index.html>`_
* `Z-cracks plugin <zcracks/index.html>`_
* `MacMesh plugin <MacMesh/index.html>`_
* `blocFissure plugin <blocFissure/index.html>`_
IF(SALOME_BUILD_GUI)
ADD_SUBDIRECTORY(MGCleanerPlug)
ADD_SUBDIRECTORY(YamsPlug)
+ ADD_SUBDIRECTORY(TopIIVolMeshPlug)
# ADD_SUBDIRECTORY(ZCracksPlug)
ENDIF(SALOME_BUILD_GUI)
--- /dev/null
+# Copyright (C) 2013-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+IF(SALOME_BUILD_DOC)
+ ADD_SUBDIRECTORY(doc)
+ENDIF(SALOME_BUILD_DOC)
+
+IF(SALOME_BUILD_GUI)
+ INCLUDE(UsePyQt)
+ENDIF(SALOME_BUILD_GUI)
+
+# --- scripts ---
+
+# scripts / static
+SET(_plugin_SCRIPTS
+ TopIIVolMeshPluginDialog.py
+ TopIIVolMeshPlugin.py
+ TopIIVolMeshPlugin_plugin.py
+ TopIIVolMeshMonitor.py
+ README
+)
+
+IF(SALOME_BUILD_GUI)
+ # uic files / to be processed by pyuic
+ SET(_pyuic_FILES
+ TopIIVolMeshPluginDialog.ui
+ TopIIVolMeshMonitor.ui
+ )
+ # scripts / pyuic wrappings
+ PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
+ENDIF(SALOME_BUILD_GUI)
+
+# --- rules ---
+
+SALOME_INSTALL_SCRIPTS("${_plugin_SCRIPTS}" ${SALOME_SMESH_INSTALL_PLUGINS})
+MESSAGE(VERBOSE "iNSTALLATION FOLDER ${SALOME_SMESH_INSTALL_PLUGINS}")
+IF(SALOME_BUILD_GUI)
+ SALOME_INSTALL_SCRIPTS("${_pyuic_SCRIPTS}" ${SALOME_SMESH_INSTALL_PLUGINS} TARGET_NAME _target_name_pyuic_py)
+ # add dependency of compiled py files on uic files in order
+ # to avoid races problems when compiling in parallel
+ ADD_DEPENDENCIES(${_target_name_pyuic_py} ${_target_name_pyuic})
+ # Install the CMake configuration files:
+ INSTALL(FILES "${PROJECT_SOURCE_DIR}/README" DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
+ENDIF(SALOME_BUILD_GUI)
--- /dev/null
+******************************
+About SALOME TopIIVolMesh plug-in
+******************************
+
+SALOME TopIIVolMesh plug-in implements an interface to the topIIvol meshing tool.
+
+SALOME TopIIVolMesh plug-in is integrated into SALOME platform via the SALOME Mesh
+module.
+
+For more information please visit the SALOME platform web site:
+
+ <http://www.salome-platform.org/>
+
+=======
+License
+=======
+
+SALOME platform is distributed under the GNU Lesser General Public License.
+See COPYING file for more details.
+
+Also, additional information can be found at SALOME platform web site:
+
+ <http://www.salome-platform.org/downloads/license/>
+
+============
+Installation
+============
+
+=============
+Documentation
+=============
+
+===============
+Troubleshooting
+===============
+
+Please, send a mail to webmaster.salome@opencascade.com.
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2020 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import os
+import sys
+import string
+import types
+import tempfile
+import traceback
+import pprint as PP #pretty print
+
+from qtsalome import *
+
+# Import des panels
+
+from TopIIVolMeshMonitor_ui import Ui_qdLogger
+
+verbose = True
+
+class TopIIVolMeshMonitor(Ui_qdLogger, QDialog):
+ def __init__(self, parent, txt):
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.resize( QSize(1000,600).expandedTo(self.minimumSizeHint()) )
+ self.qpbOK.clicked.connect( self.OnQpbOKClicked )
+ # Button OK is disabled until computation is finished
+ self.qpbOK.setEnabled(False)
+ self.qpbSave.clicked.connect( self.OnQpbSaveClicked )
+ self.qpbSave.setToolTip("Save trace in log file")
+ self.qpbOK.setToolTip("Close view")
+ self.myExecutable=QProcess(self)
+ self.myExecutable.readyReadStandardOutput.connect( self.readFromStdOut )
+ self.myExecutable.readyReadStandardError.connect( self.readFromStdErr )
+ self.myExecutable.finished.connect( self.computationFinished )
+ self.myExecutable.errorOccurred.connect( self.computationOnError )
+ if os.path.exists(self.parent().outputMesh):
+ os.remove(self.parent().outputMesh)
+ self.myExecutable.start(txt)
+ self.myExecutable.closeWriteChannel()
+ self.show()
+
+ def OnQpbOKClicked(self):
+ self.close()
+
+ def OnQpbSaveClicked(self):
+ outputDirectory=os.path.expanduser("~")
+ fn, mask = QFileDialog.getSaveFileName(None,"Save File",outputDirectory)
+ if not fn:
+ return
+ ulfile = os.path.abspath(str(fn))
+ try:
+ f = open(fn, 'wb')
+ f.write(self.qtbLogWindow.toPlainText().encode("utf-8"))
+ f.close()
+ except IOError as why:
+ QMessageBox.critical(self, 'Save File',
+ 'The file <b>%s</b> could not be saved.<br>Reason: %s'%(str(fn), str(why)))
+
+ def readFromStdErr(self):
+ a=self.myExecutable.readAllStandardError()
+ aa=a.data().decode(errors='ignore')
+ self.qtbLogWindow.append(aa)
+
+ def readFromStdOut(self) :
+ a=self.myExecutable.readAllStandardOutput()
+ aa=a.data().decode(errors='ignore')
+ self.qtbLogWindow.append(aa)
+
+ def computationFinished(self):
+ self.qpbOK.setEnabled(True)
+ if self.myExecutable.exitCode() == 0:
+ self.parent().saveOutputMesh()
+ else:
+ QMessageBox.critical(self, 'Computation failed',
+ 'The computation has failed.<br>Please, check the log message.')
+
+ def computationOnError(self):
+ self.qpbOK.setEnabled(True)
+ QMessageBox.critical(self, 'Computation failed',
+ 'The computation has failed.<br>Please, check the log message.')
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>qdLogger</class>
+ <widget class="QDialog" name="qdLogger">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>469</width>
+ <height>489</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Run TopIIVolMesh</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="1" column="1">
+ <widget class="QPushButton" name="qpbSave">
+ <property name="text">
+ <string>Save log</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QTextBrowser" name="qtbLogWindow"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QPushButton" name="qpbOK">
+ <property name="text">
+ <string>Ok</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2020 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
+# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
+
+def TopIIVolMeshLct(context):
+ # get context study, salomeGui
+ study = context.study
+ sg = context.sg
+
+ import os
+ import subprocess
+ import tempfile
+ from qtsalome import QFileDialog, QMessageBox
+
+ import TopIIVolMeshPluginDialog
+ window = TopIIVolMeshPluginDialog.getInstance()
+ window.show()
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2020 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+
+import os, subprocess
+import random
+import getpass
+import time
+import pathlib
+
+# set seed
+from datetime import datetime
+random.seed(datetime.now())
+
+import platform
+import tempfile
+from TopIIVolMeshPluginDialog_ui import Ui_TopIIVolMeshMainFrame
+from TopIIVolMeshMonitor import TopIIVolMeshMonitor
+from qtsalome import *
+
+verbose = True
+
+class TopIIVolMeshPluginDialog(Ui_TopIIVolMeshMainFrame,QWidget):
+ """
+ """
+ def __init__(self):
+ QWidget.__init__(self)
+ self.setupUi(self)
+ self.qpbHelp.clicked.connect(self.OnQpbHelpClicked)
+ self.qpbCompute.clicked.connect(self.OnQpbComputeClicked)
+ self.qpbMeshFile.clicked.connect(self.OnQpbMeshFileClicked)
+ self.qpbMeshFile.setToolTip("Select input DEM file")
+ self.qpbClose.clicked.connect(self.OnQpbCloseClicked)
+ self.qcbDistributed.stateChanged[int].connect(self.OnqcbDistributedClicked)
+ self.qlbXParts.setVisible(False)
+ self.qlbYParts.setVisible(False)
+ self.qlbZParts.setVisible(False)
+ self.qsbXParts.setVisible(False)
+ self.qsbYParts.setVisible(False)
+ self.qsbZParts.setVisible(False)
+ self.SALOME_TMP_DIR = None
+ try:
+ self.qleTmpDir.setText(os.path.join('/tmp',getpass.getuser(),'top-ii-vol'))
+ except:
+ self.qleTmpDir.setText('/tmp')
+ self.resize(800, 500)
+ self.outputMesh = ''
+
+ def OnQpbHelpClicked(self):
+ import SalomePyQt
+ sgPyQt = SalomePyQt.SalomePyQt()
+ try:
+ mydir=os.environ["SMESH_ROOT_DIR"]
+ except Exception:
+ QMessageBox.warning(self, "Help", "Help unavailable $SMESH_ROOT_DIR not found")
+ return
+
+ myDoc=mydir + "/share/doc/salome/gui/SMESH/TopIIVolMesh/index.html"
+ sgPyQt.helpContext(myDoc,"")
+
+ def OnQpbMeshFileClicked(self):
+ fd = QFileDialog(self, "select an existing Mesh file", self.qleMeshFile.text(), "Mesh-Files (*.xyz);;All Files (*)")
+ if fd.exec_():
+ infile = fd.selectedFiles()[0]
+ self.qleMeshFile.setText(infile)
+
+ def OnQpbComputeClicked(self):
+ if self.qleMeshFile.text() == '':
+ QMessageBox.critical(self, "Mesh", "select an input mesh")
+ return
+ inputMesh = self.qleMeshFile.text()
+ # retrieve x,y,z and depth parameters
+ xPoints = self.qsbXPoints.value()
+ yPoints = self.qsbYPoints.value()
+ zPoints = self.qsbZPoints.value()
+ depth = self.qsbDepth.value()
+ nProcs = self.qsbNBprocs.value()
+ if not self.qcbDistributed.isChecked():
+ if nProcs == 1:
+ shellCmd = "topIIvol_Mesher"
+ else:
+ shellCmd = "mpirun -np {} topIIvol_ParMesher".format(nProcs)
+ shellCmd+= " --xpoints " + str(xPoints)
+ shellCmd+= " --ypoints " + str(yPoints)
+ shellCmd+= " --zpoints " + str(zPoints)
+ shellCmd+= " --depth " + str(depth)
+ shellCmd+= " --in " + inputMesh
+ else:
+ xParts = self.qsbXParts.value()
+ yParts = self.qsbYParts.value()
+ zParts = self.qsbZParts.value()
+ shellCmd = "mpirun -np {} topIIvol_DistMesher".format(nProcs)
+ shellCmd+= " --xpoints " + str(xPoints)
+ shellCmd+= " --ypoints " + str(yPoints)
+ shellCmd+= " --zpoints " + str(zPoints)
+ shellCmd+= " --depth " + str(depth)
+ shellCmd+= " --partition_x " + str(xParts)
+ shellCmd+= " --partition_y " + str(xParts)
+ shellCmd+= " --partition_z " + str(xParts)
+ shellCmd+= " --in " + inputMesh
+ if platform.system()=="Windows" :
+ self.SALOME_TMP_DIR = os.getenv("SALOME_TMP_DIR")
+ else:
+ self.SALOME_TMP_DIR = os.path.join(self.qleTmpDir.text(), time.strftime("%Y-%m-%d-%H-%M-%S"))
+ pathlib.Path(self.SALOME_TMP_DIR).mkdir(parents=True, exist_ok=True)
+ self.outputMesh= os.path.join(self.SALOME_TMP_DIR, inputMesh.split('/').pop().replace('.xyz','.mesh'))
+ shellCmd+= " --out " + self.outputMesh
+ print("INFO: ", shellCmd)
+ myMonitorView=TopIIVolMeshMonitor(self, shellCmd)
+
+ def OnqcbDistributedClicked(self):
+ state = self.qcbDistributed.isChecked()
+ self.qlbXParts.setVisible(state)
+ self.qlbYParts.setVisible(state)
+ self.qlbZParts.setVisible(state)
+ self.qsbXParts.setVisible(state)
+ self.qsbYParts.setVisible(state)
+ self.qsbZParts.setVisible(state)
+
+ def OnQpbCloseClicked(self):
+ self.close()
+
+ def saveOutputMesh(self):
+ if not self.qcbDisplayMesh.isChecked():
+ return True
+ import salome
+ import SMESH, SALOMEDS
+ from salome.smesh import smeshBuilder
+ smesh = smeshBuilder.New()
+ self.outputMesh.split('/')
+ for mesh in pathlib.Path(self.SALOME_TMP_DIR).glob('*.mesh'):
+ (outputMesh, status) = smesh.CreateMeshesFromGMF(os.path.join(self.SALOME_TMP_DIR, mesh))
+ if salome.sg.hasDesktop():
+ salome.sg.updateObjBrowser()
+ return True
+
+__instance = None
+
+def getInstance():
+ """
+ This function returns a singleton instance of the plugin dialog.
+ It is mandatory in order to call show without a parent ...
+ """
+ global __instance
+ if __instance is None:
+ __instance = TopIIVolMeshPluginDialog()
+ return __instance
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TopIIVolMeshMainFrame</class>
+ <widget class="QWidget" name="TopIIVolMeshMainFrame">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>780</width>
+ <height>411</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Tetra Mesh from cloud of xyz points mesh generator</string>
+ </property>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>761</width>
+ <height>101</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property name="title">
+ <string>Input Mesh</string>
+ </property>
+ <widget class="QPushButton" name="qpbMeshFile">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>50</y>
+ <width>151</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>DEM input file</string>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>18</width>
+ <height>18</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="qleMeshFile">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>50</y>
+ <width>531</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QGroupBox" name="gbOptions">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>120</y>
+ <width>761</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Options</string>
+ </property>
+ <widget class="QSpinBox" name="qsbXPoints">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlXpoints">
+ <property name="geometry">
+ <rect>
+ <x>80</x>
+ <y>30</y>
+ <width>201</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of points in X direction</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbYPoints">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>70</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbZPoints">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>110</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlYpoints">
+ <property name="geometry">
+ <rect>
+ <x>80</x>
+ <y>70</y>
+ <width>211</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of points in Y direction</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlZpoints">
+ <property name="geometry">
+ <rect>
+ <x>80</x>
+ <y>110</y>
+ <width>211</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of points in Z direction</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbDepth">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>150</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>-999999999</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlDepth">
+ <property name="geometry">
+ <rect>
+ <x>80</x>
+ <y>150</y>
+ <width>201</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Depth in Z direction</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" name="qcbDistributed">
+ <property name="geometry">
+ <rect>
+ <x>630</x>
+ <y>30</y>
+ <width>91</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlbNbProcs">
+ <property name="geometry">
+ <rect>
+ <x>370</x>
+ <y>30</y>
+ <width>151</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of processors</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlDistributed">
+ <property name="geometry">
+ <rect>
+ <x>660</x>
+ <y>30</y>
+ <width>101</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Distributed</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlbXParts">
+ <property name="geometry">
+ <rect>
+ <x>370</x>
+ <y>70</y>
+ <width>261</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of partitions in X direction</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlbYParts">
+ <property name="geometry">
+ <rect>
+ <x>370</x>
+ <y>110</y>
+ <width>251</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of partitions in Y direction</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlbZParts">
+ <property name="geometry">
+ <rect>
+ <x>370</x>
+ <y>150</y>
+ <width>251</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Number of partitions in Z direction</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbNBprocs">
+ <property name="geometry">
+ <rect>
+ <x>300</x>
+ <y>30</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbXParts">
+ <property name="geometry">
+ <rect>
+ <x>300</x>
+ <y>70</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbYParts">
+ <property name="geometry">
+ <rect>
+ <x>300</x>
+ <y>110</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" name="qsbZParts">
+ <property name="geometry">
+ <rect>
+ <x>300</x>
+ <y>150</y>
+ <width>62</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="qleTmpDir">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>200</y>
+ <width>611</width>
+ <height>23</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlTmpDir">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>180</y>
+ <width>391</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Workspace</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" name="qcbDisplayMesh">
+ <property name="geometry">
+ <rect>
+ <x>630</x>
+ <y>70</y>
+ <width>91</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="qlDisplayMesh">
+ <property name="geometry">
+ <rect>
+ <x>660</x>
+ <y>70</y>
+ <width>101</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Display mesh</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QWidget" name="layoutWidget">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>370</y>
+ <width>761</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="qpbCompute">
+ <property name="text">
+ <string>Compute</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="qpbClose">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="qpbHelp">
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2020 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
+# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
+
+def TopIIVolMeshLct(context):
+ # get context study, salomeGui
+ study = context.study
+ sg = context.sg
+
+ import os
+ import subprocess
+ import tempfile
+ from qtsalome import QFileDialog, QMessageBox
+
+ import TopIIVolMeshPluginDialog
+ window = TopIIVolMeshPluginDialog.getDialog()
+ window.show()
--- /dev/null
+# Copyright (C) 2012-2021 CEA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SALOME_CONFIGURE_FILE(conf.py.in conf.py)
+
+SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html -d doctrees ${CMAKE_CURRENT_SOURCE_DIR} docutils)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}" CONTEXT TopIIVolMeshPlug_DOC)
+ADD_CUSTOM_TARGET(html_docs_TopIIVolMeshPlug COMMAND ${_cmd})
+
+INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target html_docs_TopIIVolMeshPlug)")
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docutils/ DESTINATION ${SALOME_INSTALL_DOC}/gui/SMESH/TopIIVolMesh)
+
+SET(make_clean_files docutils doctrees)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
--- /dev/null
+Introduction
+============
+
+**topIIvol** meshing tool provides sequential/parallel tools for creating volumetric tetrahedral meshes from a given topology (point-cloud `*.xyz`).
+
+Running topIIvol Plug-in
+========================
+
+**topIIVolMesh** plug-in can be invoked via SMESH Plugin item in Mesh menu bar
+
+.. image:: images/callTopIIVolMesh.png
+ :align: center
+
+
+**topIIVolMesh** Options
+========================
+
+
+Sequential mode
+---------------
+If the number of processors is set to 1, **topIIvol_Mesher** sequential tool is called for creating volumetric tetrahedral meshes from a given topology. The volumetric mesh can be displayed in SALOME by ticking the "Display mesh" check-box.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the z direction;
+- Depth of the mesh needed;
+- temporary directory for calculation.
+
+Parallel mode
+---------------
+If the number of processors is greater than one, **topIIvol_ParMesher** parallel computing tool is called for creating volumetric tetrahedral meshes from a given topology. The volumetric mesh can be displayed in SALOME by ticking the "Display mesh" check-box.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the z direction;
+- Depth of the mesh needed;
+- Number of MPI ranks
+- temporary directory for calculation.
+
+
+Distributed mode
+-----------------
+If the check-box **Distributed** is ticked, **topIIvol_DistMesher** computing tool is called for creating embarassingly parallel distributed meshes from a given topology.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the z direction;
+- Number of partitions in X direction;
+- Number of partitions in Y direction;
+- Number of partitions in Z direction;
+- Depth of the mesh needed;
+- Number of MPI ranks
+- temporary directory for calculation.
+
--- /dev/null
+# -*- coding: utf-8 -*-
+#
+# TopIIVolMesh PlugIn documentation build configuration file
+#
+
+import sys, os
+import sphinx
+
+# If your extensions are in another directory, add it here. If the directory
+# is relative to the documentation root, use os.path.abspath to make it
+# absolute, like shown here.
+#sys.path.append(os.path.abspath('some/directory'))
+
+# General configuration
+# ---------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc']
+try:
+ import sphinx_rtd_theme
+ extensions += ['sphinx_rtd_theme']
+ use_rtd_theme = True
+except:
+ use_rtd_theme = False
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['.templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General substitutions.
+project = 'topIIvol Plug-in'
+copyright = '2007-2021 CEA'
+
+# The default replacements for |version| and |release|, also used in various
+# other places throughout the built documents.
+#
+# The short X.Y version.
+version = '@SALOMESMESH_VERSION@'
+# The full version, including alpha/beta/rc tags.
+release = '@SALOMESMESH_VERSION@'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directories, that shouldn't be searched
+# for source files.
+#exclude_dirs = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# Options for HTML output
+# -----------------------
+
+# The theme to use for HTML and HTML Help pages. Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+if use_rtd_theme:
+ html_theme = 'sphinx_rtd_theme'
+else:
+ html_theme = 'default' if sphinx.version_info[:2] < (1,3) else 'classic'
+
+themes_options = {}
+themes_options['classic'] = {
+ 'body_max_width':'none',
+ 'body_min_width':0,
+}
+html_theme_options = themes_options.get(html_theme, {})
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (within the static path) to place at the top of
+# the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+#html_static_path = ['.static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+#html_copy_source = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'TopIIVolMeshPlug-in doc'
+
+
+# Options for LaTeX output
+# ------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, document class [howto/manual]).
+latex_documents = [
+ ('index', 'TopIIVolMeshPlugIn.tex', 'TopIIVolMesh PlugIn Documentation',
+ 'CEA', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
--- /dev/null
+.. TopIIVolMesh documentation master file, created by sphinx-quickstart.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+topIIvol plugin documentation
+=====================================
+
+This documentation covers the usage of **top-ii-vol** as plug-in in SALOME that can be used within the SALOME
+Mesh module.
+
+TopIIVolMesh plug-in uses CEA **top-ii-Vol** meshing tool,which provides sequential/parallel tools for creating volumetric tetrahedral meshes from a given topology.
+This plug-in offers only the most common functionalities of the tool.
+
+Contents:
+
+.. toctree::
+ :maxdepth: 2
+
+ TopIIVolMesh.rst
+
+
+
#print 'probleme zcracks'
salome_pluginsmanager.logger.info('ERROR: Zcrack plug-in is unavailable: {}'.format(e))
pass
+
+# Topological to volumic mesh plugin
+try:
+ from TopIIVolMeshPlugin import TopIIVolMeshLct
+ salome_pluginsmanager.AddFunction('Run Topological Volumic mesher',
+ 'run topological volumic mesher',
+ TopIIVolMeshLct)
+except Exception as e:
+ #print 'probleme zcracks'
+ salome_pluginsmanager.logger.info('ERROR: TopIIVolMesh plug-in is unavailable: {}'.format(e))
+ pass