STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 9)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 1)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
SET(${PROJECT_NAME_UC}_VERSION
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
-SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
+SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
# Common CMake macros
# ===================
# scripts / static
SET(_bin_SCRIPTS
smesh_setenv.py
+ smesh_test.py
)
# --- rules ---
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2018 CEA/DEN, EDF R&D, OPEN CASCADE
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import unittest
+
+class TestMesh(unittest.TestCase):
+
+ def setUp(self):
+ import salome
+ salome.salome_init()
+
+ def processGuiEvents(self):
+ import salome
+ if salome.sg.hasDesktop():
+ salome.sg.updateObjBrowser();
+ import SalomePyQt
+ SalomePyQt.SalomePyQt().processEvents()
+
+ def test_mesh(self):
+ """Quick test for Mesh module"""
+
+ print()
+ print('Testing Mesh module')
+
+ # ==== Geometry part ====
+
+ from salome.geom import geomBuilder
+ geompy = geomBuilder.New()
+
+ # ---- create box
+ print('... Create box')
+ box = geompy.MakeBox(0., 0., 0., 100., 200., 300)
+ self.assertIsNotNone(box)
+ self.processGuiEvents()
+
+ # ==== Mesh part ====
+
+ import SMESH
+ from salome.smesh import smeshBuilder
+ smesh = smeshBuilder.New()
+ lib = 'StdMeshersEngine'
+ self.processGuiEvents()
+
+ # ---- create hypotheses
+ print('... Create hypotheses')
+
+ # **** create local length
+ print('...... Local Length')
+ local_length = smesh.CreateHypothesis('LocalLength', lib)
+ self.assertIsNotNone(local_length)
+ local_length.SetLength(100)
+ self.assertEqual(local_length.GetName(), 'LocalLength')
+ self.assertEqual(local_length.GetLength(), 100)
+ self.processGuiEvents()
+
+ # **** create number of segments
+ print('...... Number Of Segments')
+ nb_segments= smesh.CreateHypothesis('NumberOfSegments', lib)
+ self.assertIsNotNone(nb_segments)
+ nb_segments.SetNumberOfSegments(7)
+ self.assertEqual(nb_segments.GetName(), 'NumberOfSegments')
+ self.assertEqual(nb_segments.GetNumberOfSegments(), 7)
+ self.processGuiEvents()
+
+ # **** create max element area
+ print('...... Max Element Area')
+ max_area = smesh.CreateHypothesis('MaxElementArea', lib)
+ max_area.SetMaxElementArea(2500)
+ self.assertEqual(max_area.GetName(), 'MaxElementArea')
+ self.assertEqual(max_area.GetMaxElementArea(), 2500)
+ self.processGuiEvents()
+
+ # ---- create algorithms
+ print('... Create algorithms')
+
+ # **** create regular 1d
+ print('...... Regular 1D')
+ regular = smesh.CreateHypothesis('Regular_1D', lib)
+ listHyp = regular.GetCompatibleHypothesis()
+ self.assertEqual(regular.GetName(), 'Regular_1D')
+ self.processGuiEvents()
+
+ # **** create mefisto 2d
+ print('...... Mefisto 2D')
+ mefisto = smesh.CreateHypothesis( 'MEFISTO_2D', lib )
+ listHyp = mefisto.GetCompatibleHypothesis()
+ self.assertEqual(mefisto.GetName(), 'MEFISTO_2D')
+ self.processGuiEvents()
+
+ # ---- create mesh on box
+ print('... Create mesh on box')
+ mesh = smesh.CreateMesh(box)
+ self.assertEqual(mesh.AddHypothesis(box, regular)[0], SMESH.HYP_OK)
+ self.assertEqual(mesh.AddHypothesis(box, mefisto)[0], SMESH.HYP_OK)
+ self.assertEqual(mesh.AddHypothesis(box, nb_segments)[0], SMESH.HYP_OK)
+ self.assertEqual(mesh.AddHypothesis(box, max_area)[0], SMESH.HYP_OK)
+ self.processGuiEvents()
+
+ # ---- compute mesh
+ print('... Compute mesh')
+ self.assertEqual(smesh.Compute(mesh, box), True)
+ self.processGuiEvents()
+
+if __name__ == '__main__':
+ unittest.main()
myMainLayout->setColumnStretch( 0, 0 );
myMainLayout->setColumnStretch( 1, 5 );
- myMainLayout->setRowStretch ( 11, 5 );
- myMainLayout->setRowStretch ( 16, 5 );
- myMainLayout->setRowStretch ( 17, 1 );
+ myMainLayout->setRowStretch ( 12, 5 );
+ myMainLayout->setRowStretch ( 17, 5 );
+ myMainLayout->setRowStretch ( 18, 1 );
clearInternal();
}
myButtons[6]->setEnabled( true );
}
#ifdef DISABLE_PLOT2DVIEWER
- myMainLayout->setRowStretch(12,0);
for( int i=25; i<=27; i++)
myMainLayout->itemAt(i)->widget()->setVisible( false );
#endif
}
else {
- myMainLayout->setRowStretch(12,0);
for( int i=18; i<=27; i++)
myMainLayout->itemAt(i)->widget()->setVisible( false );
}
myButtons[9]->setEnabled( true );
}
#ifdef DISABLE_PLOT2DVIEWER
- myMainLayout->setRowStretch(17,0);
for( int i=35; i<=37; i++)
myMainLayout->itemAt(i)->widget()->setVisible( false );
#endif
}
else {
- myMainLayout->setRowStretch(17,0);
for( int i=28; i<=37; i++)
myMainLayout->itemAt(i)->widget()->setVisible( false );
}
*/
void SMESHGUI_CtrlInfo::clearInternal()
{
- for( int i=0; i<=35; i++)
+ for( int i=0; i<=37; i++)
myMainLayout->itemAt(i)->widget()->setVisible( true );
for( int i=0; i<=9; i++)
myButtons[i]->setEnabled( false );
myWidgets[0]->setText( QString() );
for ( int i = 1; i < myWidgets.count(); i++ )
myWidgets[i]->setText( "" );
- myMainLayout->setRowStretch(11,5);
- myMainLayout->setRowStretch(16,5);
}
void SMESHGUI_CtrlInfo::setTolerance( double theTolerance )
<source>TEXT_FILES_FILTER</source>
<translation>Fichiers TXT</translation>
</message>
+ <message>
+ <source>MED_VX_FILES_FILTER</source>
+ <translation>fichiers MED %1</translation>
+ </message>
<message>
<source>STL_FILES_FILTER</source>
<translation>Fichiers STL</translation>
<source>MIN_DIAG_ELEMENTS</source>
<translation>Diagonale minimum</translation>
</message>
+ <message>
+ <source>MIN_ELEM_EDGE</source>
+ <translation>Longueur arête Minimum</translation>
+ </message>
<message>
<source>ASPECTRATIO_3D_ELEMENTS</source>
<translation>Rapport de forme 3D</translation>
<source>LENGTH2D_EDGES</source>
<translation>Longueur 2D</translation>
</message>
+ <message>
+ <source>DEFLECTION2D_FACES</source>
+ <translation>Deflection 2D</translation>
+ </message>
<message>
<source>LENGTH_EDGES</source>
<translation>Longueur</translation>
</message>
<message>
<source>MAX_ELEMENT_LENGTH_3D</source>
- <translation>Diamètre d'éléments 3D</translation>
+ <translation>Diamètre Element 3D</translation>
+ </message>
+ <message>
+ <source>DEFLECTION_2D</source>
+ <translation>Deflection 2D</translation>
</message>
<message>
<source>MEN_ADD</source>
<source>MEN_LENGTH_2D</source>
<translation>Longueur 2D</translation>
</message>
+ <message>
+ <source>MEN_DEFLECTION_2D</source>
+ <translation>Deflection 2D</translation>
+ </message>
<message>
<source>MEN_MAP</source>
<translation>Projection de motif</translation>
</message>
<message>
<source>MEN_SCALE</source>
- <translation>Transformation d'échelle</translation>
+ <translation>Changement d'échelle</translation>
+ </message>
+ <message>
+ <source>MEN_OFFSET</source>
+ <translation>Offset</translation>
</message>
<message>
<source>MEN_DUPLICATE_NODES</source>
<source>SMESH_HYPOTHESES</source>
<translation>Hypothèses</translation>
</message>
+ <message>
+ <source>SMESH_HYPOTHESIS</source>
+ <translation>Hypothese</translation>
+ </message>
+ <message>
+ <source>SMESH_ALGORITHM</source>
+ <translation>Algorithme</translation>
+ </message>
<message>
<source>SMESH_HYP_1</source>
<translation>Il manque une hypothèse à l'algorithme</translation>
<source>STB_LENGTH_2D</source>
<translation>Longueur 2D</translation>
</message>
+ <message>
+ <source>STB_DEFLECTION_2D</source>
+ <translation>Deflection 2D</translation>
+ </message>
<message>
<source>STB_MAP</source>
<translation>Projection de motif</translation>
</message>
<message>
<source>STB_SCALE</source>
- <translation>Mise à l'échelle</translation>
+ <translation>Mise à l'échelle</translation>
+ </message>
+ <message>
+ <source>STB_OFFSET</source>
+ <translation>Décalage</translation>
</message>
<message>
<source>STB_DUPLICATE_NODES</source>
<source>TOP_LENGTH_2D</source>
<translation>Longueur 2D</translation>
</message>
+ <message>
+ <source>TOP_DEFLECTION_2D</source>
+ <translation>Deflection 2D</translation>
+ </message>
<message>
<source>TOP_MAP</source>
<translation>Projection de motif</translation>
</message>
<message>
<source>TOP_SCALE</source>
- <translation>Mise à l'échelle</translation>
+ <translation>Mise à l'échelle</translation>
+ </message>
+ <message>
+ <source>TOP_OFFSET</source>
+ <translation>Offset</translation>
</message>
<message>
<source>TOP_DUPLICATE_NODES</source>
<translation>Exporter les champs</translation>
</message>
</context>
+<context>
+ <name>SMESHGUI_OffsetDlg</name>
+ <message>
+ <source>SMESH_OFFSET_TITLE</source>
+ <translation>Offset</translation>
+ </message>
+ <message>
+ <source>SMESH_OFFSET</source>
+ <translation>Offset</translation>
+ </message>
+ <message>
+ <source>OFFSET_VALUE</source>
+ <translation>Offset Value</translation>
+ </message>
+</context>
<context>
<name>SMESHGUI_AddMeshElementDlg</name>
<message>
<source>LENGTH2D</source>
<translation>Longueur 2D</translation>
</message>
+ <message>
+ <source>DEFLECTION2D</source>
+ <translation>Deflection 2D</translation>
+ </message>
<message>
<source>LESS_THAN</source>
<translation>Inférieur à ...</translation>
</message>
<message>
<source>ON_ALL_BOUNDARIES</source>
- <translation>Sur toutes les frontières</translation>
+ <translation>sur toutes les frontières</translation>
+ </message>
+ <message>
+ <source>GENERATE_GROUPS</source>
+ <translation>Génerer</translation>
</message>
</context>
<context>
</message>
<message>
<source>NEW_NAME</source>
- <translation>Nom du nouveau maillage</translation>
+ <translation>New Mesh Name</translation>
+ </message>
+ <message>
+ <source>NEW_GEOM</source>
+ <translation>New Geometry</translation>
+ </message>
+ <message>
+ <source>REUSE_HYPOTHESES</source>
+ <translation>Reuse Hypotheses</translation>
+ </message>
+ <message>
+ <source>COPY_ELEMENTS</source>
+ <translation>Copy Mesh Elements</translation>
+ </message>
+ <message>
+ <source>OPERATION_FAILED</source>
+ <translation>Not all mesh sub-objects have been copied</translation>
+ </message>
+ <message>
+ <source>SUBSHAPES_NOT_FOUND_MSG</source>
+ <translation>
+Some sub-shapes not found in the new geometry. They are listed
+below along with dependent mesh objects that are marked with
+with red in the Object Browser.</translation>
</message>
</context>
<context>
StdMeshersBuilder.py
)
# --- rules ---
-SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_SCRIPT_PYTHON} DEF_PERMS)
+SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_PYTHON} DEF_PERMS)
SALOME_INSTALL_SCRIPTS("${smesh_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/smesh DEF_PERMS)
SALOME_INSTALL_SCRIPTS("${StdMeshers_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/StdMeshers DEF_PERMS)
SALOME_INSTALL_SCRIPTS(SMESH_shared_modules.py ${SALOME_INSTALL_PYTHON}/shared_modules DEF_PERMS)
def getResumeData(self, separator="\n"):
text=""
if self.RB_Fix1.isChecked():
- CheckOrFix="fix1pass"
+ CheckOrFix="mode_fix"
else:
- if self.RB_Fix2.isChecked():
- CheckOrFix="fix2pass"
- else:
- CheckOrFix="check"
+ CheckOrFix="mode_check"
text+="CheckOrFix="+CheckOrFix+separator
text+="PreserveTopology="+str(self.CB_PreserveTopology.isChecked())+separator
text+="FillHoles="+str(self.CB_FillHoles.isChecked())+separator
tit,value=lig.split("=")
if tit=="CheckOrFix":
self.RB_Fix1.setChecked(False)
- self.RB_Fix2.setChecked(False)
self.RB_Check.setChecked(False)
- if value=="fix1pass": self.RB_Fix1.setChecked(True)
- if value=="fix2pass": self.RB_Fix2.setChecked(True)
- if value=="check": self.RB_Check.setChecked(True)
+ if value=="mode_fix": self.RB_Fix1.setChecked(True)
+ if value=="mode_check": self.RB_Check.setChecked(True)
if tit=="PreserveTopology": self.CB_PreserveTopology.setChecked(value=="True")
if tit=="FillHoles": self.CB_FillHoles.setChecked(value=="True")
if tit=="MinHoleSize": self.SP_MinHoleSize.setProperty("text", value)
self.fichierOut=deb[0] + "_fix.mesh"
self.commande+=" --out "+self.fichierOut
if self.RB_Fix1.isChecked():
- self.commande+=" --fix1pass"
+ self.commande+=" --mode fix"
else:
- if self.RB_Fix2.isChecked():
- self.commande+=" --fix2pass"
- else:
- self.commande+=" --check"
+ self.commande+=" --mode check"
if self.CB_PreserveTopology.isChecked():
self.commande+=" --topology respect"
else:
def clean(self):
self.RB_Check.setChecked(False)
- self.RB_Fix1.setChecked(False)
- self.RB_Fix2.setChecked(True)
+ self.RB_Fix1.setChecked(True)
self.CB_PreserveTopology.setChecked(False)
self.CB_FillHoles.setChecked(False)
self.CB_RemeshPlanes.setChecked(False)
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
- <item>
+ <item>
<spacer name="horizontalSpacer_xx">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</size>
</property>
</spacer>
- </item>
+ </item>
<item>
<widget class="QPushButton" name="PB_OK">
<property name="text">
<property name="text">
<string>Save</string>
</property>
- <property name="iconSize">
- <size>
- <width>18</width>
- <height>18</height>
- </size>
- </property>
+ <property name="iconSize">
+ <size>
+ <width>18</width>
+ <height>18</height>
+ </size>
+ </property>
</widget>
</item>
<item>
<property name="text">
<string>Load</string>
</property>
- <property name="iconSize">
- <size>
- <width>18</width>
- <height>18</height>
- </size>
- </property>
+ <property name="iconSize">
+ <size>
+ <width>18</width>
+ <height>18</height>
+ </size>
+ </property>
</widget>
</item>
<item>
</property>
</widget>
</item>
- <item>
+ <item>
<spacer name="horizontalSpacer_xx">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</size>
</property>
</spacer>
- </item>
+ </item>
</layout>
</item>
<item row="1" column="0">
<property name="title">
<string>Options</string>
</property>
-
- <layout class="QHBoxLayout" name="RBLayoutopt">
-
- <item>
- <spacer name="horizontalSpacer_xx">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>30</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
-
- <item>
- <layout class="QVBoxLayout" name="RBLayout1">
- <item>
- <widget class="QRadioButton" name="RB_Check">
- <property name="toolTip">
- <string>Performs checks only (no fixing).
+ <layout class="QHBoxLayout" name="RBLayoutopt">
+ <item>
+ <spacer name="horizontalSpacer_xx">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="RBLayout1">
+ <item>
+ <widget class="QRadioButton" name="RB_Check">
+ <property name="toolTip">
+ <string>Performs checks only (no fixing).
Writes diagnostics into the output file.
Default is to fix with two passes.</string>
- </property>
- <property name="text">
- <string>Only checking</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="RB_Fix1">
- <property name="toolTip">
- <string>Analyses and fixes mesh with only the first stage of the cleaning procedure.
-Does not write diagnostics into the output file.
-Default is to fix with two passes.</string>
- </property>
- <property name="text">
- <string>Fix problems with one pass</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="RB_Fix2">
- <property name="toolTip">
- <string>Analyses and fixes mesh with the two stage cleaning procedure.
+ </property>
+ <property name="text">
+ <string>Only checking</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RB_Fix1">
+ <property name="toolTip">
+ <string>Analyses and fixes mesh with only the first stage of the cleaning procedure.
Does not write diagnostics into the output file.
Default is to fix with two passes.</string>
- </property>
- <property name="text">
- <string>Fix problems with two passes</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
-
- <item>
- <widget class="QCheckBox" name="CB_PreserveTopology">
- <property name="toolTip">
- <string>Disables fixing operations which induce topology modifications.
+ </property>
+ <property name="text">
+ <string>Fix problems</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="CB_PreserveTopology">
+ <property name="toolTip">
+ <string>Disables fixing operations which induce topology modifications.
Default is enable topology modifications.
(argument --topology)</string>
- </property>
- <property name="text">
- <string>Preserve topology</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="CB_FillHoles">
- <property name="toolTip">
- <string>Default is not to fill holes.
+ </property>
+ <property name="text">
+ <string>Preserve topology</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="CB_FillHoles">
+ <property name="toolTip">
+ <string>Default is not to fill holes.
if set: see 'surface size threshold of holes' in 'Advanced remeshing options'.</string>
- </property>
- <property name="text">
- <string>Fill holes</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
-
- <widget class="QCheckBox" name="CB_RemeshPlanes">
- <property name="toolTip">
- <string>Inserts vertices on planes to improve mesh quality .
+ </property>
+ <property name="text">
+ <string>Fill holes</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="CB_RemeshPlanes">
+ <property name="toolTip">
+ <string>Inserts vertices on planes to improve mesh quality .
May be useful for poor quality triangulations (eg .STL or .DXF triangulations).
Default is not to mesh planes.</string>
- </property>
- <property name="text">
- <string>Remesh planes</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
+ </property>
+ <property name="text">
+ <string>Remesh planes</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
</widget>
- </item>
-
+ </item>
</layout>
-
- </item>
-
- </layout>
-
+ </item>
+ </layout>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<property name="title">
<string>You can control</string>
</property>
-#1
<widget class="QLineEdit" name="SP_MinHoleSize">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="geometry">
<rect>
<x>20</x>
<height>25</height>
</rect>
</property>
- <property name="enabled">
- <bool>false</bool>
- </property>
</widget>
<widget class="QLabel" name="LA_minHoleSize">
<property name="geometry">
<string>Surface size threshold of holes to fill (--min_hole_size)</string>
</property>
</widget>
-#2
<widget class="QLineEdit" name="SP_ToleranceDisplacement">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="geometry">
<rect>
<x>20</x>
<height>25</height>
</rect>
</property>
- <property name="enabled">
- <bool>false</bool>
- </property>
</widget>
<widget class="QLabel" name="LA_toleranceDisplacement">
<property name="geometry">
(--tolerance_displacement)</string>
</property>
</widget>
-
- <widget class="QCheckBox" name="CB_ComputedToleranceDisplacement">
+ <widget class="QCheckBox" name="CB_ComputedToleranceDisplacement">
<property name="geometry">
<rect>
<x>650</x>
<height>30</height>
</rect>
</property>
- <property name="toolTip">
- <string>If set default value is computed from model.</string>
- </property>
- <property name="text">
- <string>Computed</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
-
-#3
+ <property name="toolTip">
+ <string>If set default value is computed from model.</string>
+ </property>
+ <property name="text">
+ <string>Computed</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
<widget class="QLineEdit" name="SP_ResolutionLength">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="geometry">
<rect>
<x>20</x>
<height>25</height>
</rect>
</property>
- <property name="enabled">
- <bool>false</bool>
- </property>
</widget>
<widget class="QLabel" name="LA_resolutionLength">
<property name="geometry">
<string>Distance threshold for two points distinct (--resolution_length)</string>
</property>
</widget>
- <widget class="QCheckBox" name="CB_ComputedResolutionLength">
+ <widget class="QCheckBox" name="CB_ComputedResolutionLength">
<property name="geometry">
<rect>
<x>650</x>
<height>30</height>
</rect>
</property>
- <property name="toolTip">
- <string>If set default value is computed from model.</string>
- </property>
- <property name="text">
- <string>Computed</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
-#4
+ <property name="toolTip">
+ <string>If set default value is computed from model.</string>
+ </property>
+ <property name="text">
+ <string>Computed</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
<widget class="QDoubleSpinBox" name="SP_FoldingAngle">
<property name="geometry">
<rect>
<height>25</height>
</rect>
</property>
- <property name="maximum">
- <double>90</double>
- </property>
<property name="minimum">
- <double>0</double>
+ <double>0.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>90.000000000000000</double>
</property>
<property name="singleStep">
- <double>1</double>
+ <double>1.000000000000000</double>
</property>
<property name="value">
- <double>15</double>
+ <double>15.000000000000000</double>
</property>
</widget>
<widget class="QLabel" name="LA_foldingAngle">
<string>Angle threshold for two connected triangles overlapping (--folding_angle)</string>
</property>
</widget>
-#5
<widget class="QLineEdit" name="SP_OverlapDistance">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="geometry">
<rect>
<x>20</x>
<height>25</height>
</rect>
</property>
- <property name="enabled">
- <bool>false</bool>
- </property>
</widget>
<widget class="QLabel" name="LA_overlapDistance">
<property name="geometry">
(--overlap_distance)</string>
</property>
</widget>
- <widget class="QCheckBox" name="CB_ComputedOverlapDistance">
+ <widget class="QCheckBox" name="CB_ComputedOverlapDistance">
<property name="geometry">
<rect>
<x>650</x>
<height>30</height>
</rect>
</property>
- <property name="toolTip">
- <string>If set default value is computed from model.</string>
- </property>
- <property name="text">
- <string>Computed</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
-#6
+ <property name="toolTip">
+ <string>If set default value is computed from model.</string>
+ </property>
+ <property name="text">
+ <string>Computed</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
<widget class="QDoubleSpinBox" name="SP_OverlapAngle">
<property name="geometry">
<rect>
<height>25</height>
</rect>
</property>
- <property name="maximum">
- <double>90</double>
- </property>
<property name="minimum">
- <double>0</double>
+ <double>0.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>90.000000000000000</double>
</property>
<property name="singleStep">
- <double>1</double>
+ <double>1.000000000000000</double>
</property>
<property name="value">
- <double>15</double>
+ <double>15.000000000000000</double>
</property>
</widget>
<widget class="QLabel" name="LA_overlapAngle">
<property name="title">
<string>MGCleaner Generic Options</string>
</property>
-
- <widget class="QSpinBox" name="SP_Verbosity">
+ <widget class="QSpinBox" name="SP_Verbosity">
<property name="geometry">
<rect>
<x>20</x>
<height>25</height>
</rect>
</property>
- <property name="maximum">
- <number>10</number>
- </property>
- <property name="value">
- <number>3</number>
- </property>
- </widget>
-
- <widget class="QLabel" name="label">
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>130</x>
From 0 (no detail) to 10 (very detailed).
Default is 3.</string>
</property>
- <property name="text">
- <string>Verbosity level</string>
- </property>
- </widget>
-
-
+ <property name="text">
+ <string>Verbosity level</string>
+ </property>
+ </widget>
</widget>
<widget class="QGroupBox" name="groupBox_6">
<property name="geometry">
</rect>
</property>
</widget>
-
- <widget class="QPushButton" name="PB_Save">
+ <widget class="QPushButton" name="PB_Save">
<property name="geometry">
<rect>
<x>20</x>
<height>31</height>
</rect>
</property>
- <property name="text">
- <string>Save</string>
- </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
<property name="iconSize">
<size>
<width>18</width>
<height>18</height>
</size>
</property>
- </widget>
-
- <widget class="QPushButton" name="PB_Load">
+ </widget>
+ <widget class="QPushButton" name="PB_Load">
<property name="geometry">
<rect>
<x>120</x>
<height>31</height>
</rect>
</property>
- <property name="text">
- <string>Load</string>
- </property>
+ <property name="text">
+ <string>Load</string>
+ </property>
<property name="iconSize">
<size>
<width>18</width>
<height>18</height>
</size>
</property>
- </widget>
-
+ </widget>
</widget>
</widget>
</widget>
infile = fd.selectedFiles()[0]
self.ui.le_origMeshFile.setText(infile)
insplit = os.path.splitext(str(infile).encode())
- outfile = insplit[0] + '_cut' + insplit[1]
+ outfile = insplit[0] + '_cut'.encode() + insplit[1]
self.ui.le_cutMeshFile.setText(outfile)
pass
self.commande+= " -O G" # This option has not been updated to the new option style yet
deb=os.path.splitext(self.fichierIn)
- self.fichierOut=deb[0] + "_output.mesh"
+ self.fichierOut=deb[0].decode() + "_output.mesh"
tolerance=self.SP_toStr(self.SP_Tolerance)
if not self.RB_Absolute.isChecked():
if self.SP_Memory.value() != 0 : self.commande+=" --max_memory %d" %self.SP_Memory.value()
if self.SP_Verbosity.value() != 3 : self.commande+=" --verbose %d" %self.SP_Verbosity.value()
- self.commande+=" --in " + self.fichierIn
+ self.commande+=" --in " + self.fichierIn.decode()
self.commande+=" --out " + self.fichierOut
print(self.commande)
# -----------------------------------------------------------------------------
# --- prolongation d'un wire par deux segments tangents
-def prolongeWire(aWire, extrem, norms, long):
+def prolongeWire(aWire, extrem, norms, lg):
"""
"""
logging.info("start")
uneSeuleEdge = True
edgesBout = []
for i, v1 in enumerate(extrem):
- exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-int, int)]
+ exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-lg, lg)]
dists = [(geompy.MinDistance(v, aWire), i , v) for i, v in enumerate(exts)]
dists.sort()
v2 = dists[-1][-1]