diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2d069f66..ef42ec11a 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -31,11 +31,11 @@ ENDIF(WIN32)
STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 8)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 3)
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 1)
+SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
# Common CMake macros
# ===================
diff --git a/doc/salome/gui/SMESH/input/skew.doc b/doc/salome/gui/SMESH/input/skew.doc
index 036c70d83..01f3c5fea 100644
--- a/doc/salome/gui/SMESH/input/skew.doc
+++ b/doc/salome/gui/SMESH/input/skew.doc
@@ -3,8 +3,8 @@
\page skew_page Skew
\n \b Skew mesh quality criterion reflects the angle between the lines
-that join opposite sides of a quadrangle element or the greatesr angle
-between three medians in triangle elements. This mesh quality
+that join opposite sides of a quadrangle element or the greatest angle
+between a median and a midline in a triangle element. This mesh quality
criterion can be applied to elements composed of 4 and 3 nodes
(quadrangles and triangles).
diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt
index da52e0783..d2801c905 100755
--- a/resources/CMakeLists.txt
+++ b/resources/CMakeLists.txt
@@ -226,6 +226,8 @@ SET(SMESH_RESOURCES_FILES
mesh_extmeth_surf_offset_smooth.png
mesh_extmeth_face_offset.png
mesh_quality.png
+ mesh_show.png
+ mesh_hide.png
)
INSTALL(FILES ${SMESH_RESOURCES_FILES} DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
diff --git a/resources/mesh_hide.png b/resources/mesh_hide.png
new file mode 100644
index 000000000..31c505d82
Binary files /dev/null and b/resources/mesh_hide.png differ
diff --git a/resources/mesh_show.png b/resources/mesh_show.png
new file mode 100644
index 000000000..61ebe4703
Binary files /dev/null and b/resources/mesh_show.png differ
diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx
index f9a89fed7..bd5654c89 100644
--- a/src/SMESH/SMESH_Gen.cxx
+++ b/src/SMESH/SMESH_Gen.cxx
@@ -73,6 +73,19 @@ SMESH_Gen::SMESH_Gen()
//vtkDebugLeaks::SetExitError(0);
}
+namespace
+{
+ // a structure used to nullify SMESH_Gen field of SMESH_Hypothesis,
+ // which is needed for SMESH_Hypothesis not deleted before ~SMESH_Gen()
+ struct _Hyp : public SMESH_Hypothesis
+ {
+ void NullifyGen()
+ {
+ _gen = 0;
+ }
+ };
+}
+
//=============================================================================
/*!
* Destructor
@@ -84,9 +97,16 @@ SMESH_Gen::~SMESH_Gen()
std::map < int, StudyContextStruct * >::iterator i_sc = _mapStudyContext.begin();
for ( ; i_sc != _mapStudyContext.end(); ++i_sc )
{
- delete i_sc->second->myDocument;
- delete i_sc->second;
- }
+ StudyContextStruct* context = i_sc->second;
+ std::map < int, SMESH_Hypothesis * >::iterator i_hyp = context->mapHypothesis.begin();
+ for ( ; i_hyp != context->mapHypothesis.end(); ++i_hyp )
+ {
+ if ( _Hyp* h = static_cast< _Hyp*>( i_hyp->second ))
+ h->NullifyGen();
+ }
+ delete context->myDocument;
+ delete context;
+ }
}
//=============================================================================
diff --git a/src/SMESH/SMESH_Hypothesis.cxx b/src/SMESH/SMESH_Hypothesis.cxx
index 2d1e10c16..c4107fb38 100644
--- a/src/SMESH/SMESH_Hypothesis.cxx
+++ b/src/SMESH/SMESH_Hypothesis.cxx
@@ -25,20 +25,18 @@
// Author : Paul RASCLE, EDF
// Module : SMESH
//
-#include "SMESH_Hypothesis.hxx"
+
+#include "SMESH_Gen.hxx"
#include "SMESHDS_Mesh.hxx"
-#include "SMESH_Gen.hxx"
+#include "SMESH_Hypothesis.hxx"
#include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh.hxx"
-
-#include "utilities.h"
using namespace std;
//=============================================================================
/*!
- *
+ *
*/
//=============================================================================
@@ -63,8 +61,11 @@ SMESH_Hypothesis::SMESH_Hypothesis(int hypId,
SMESH_Hypothesis::~SMESH_Hypothesis()
{
- StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
- myStudyContext->mapHypothesis[_hypId] = 0;
+ if ( _gen )
+ {
+ StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
+ myStudyContext->mapHypothesis[_hypId] = 0;
+ }
}
//=============================================================================
@@ -77,20 +78,20 @@ int SMESH_Hypothesis::GetDim() const
{
int dim = 0;
switch (_type)
- {
- case ALGO_1D: dim = 1; break;
- case ALGO_2D: dim = 2; break;
- case ALGO_3D: dim = 3; break;
- case ALGO_0D: dim = 0; break;
- case PARAM_ALGO:
- dim = ( _param_algo_dim < 0 ) ? -_param_algo_dim : _param_algo_dim; break;
- }
+ {
+ case ALGO_1D: dim = 1; break;
+ case ALGO_2D: dim = 2; break;
+ case ALGO_3D: dim = 3; break;
+ case ALGO_0D: dim = 0; break;
+ case PARAM_ALGO:
+ dim = ( _param_algo_dim < 0 ) ? -_param_algo_dim : _param_algo_dim; break;
+ }
return dim;
}
//=============================================================================
/*!
- *
+ *
*/
//=============================================================================
diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx
index 0f08808d0..526b6c650 100644
--- a/src/SMESHGUI/SMESHGUI.cxx
+++ b/src/SMESHGUI/SMESHGUI.cxx
@@ -4020,8 +4020,8 @@ void SMESHGUI::initialize( CAM_Application* app )
createSMESHAction( SMESHOp::OpPropertiesArea, "MEASURE_AREA", "ICON_MEASURE_AREA" );
createSMESHAction( SMESHOp::OpPropertiesVolume, "MEASURE_VOLUME", "ICON_MEASURE_VOLUME" );
- createSMESHAction( SMESHOp::OpHide, "HIDE" );
- createSMESHAction( SMESHOp::OpShow, "SHOW" );
+ createSMESHAction( SMESHOp::OpHide, "HIDE", "ICON_HIDE" );
+ createSMESHAction( SMESHOp::OpShow, "SHOW", "ICON_SHOW" );
createSMESHAction( SMESHOp::OpShowOnly, "DISPLAY_ONLY" );
createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" );
diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts
index fde04d78c..9531e409f 100644
--- a/src/SMESHGUI/SMESH_images.ts
+++ b/src/SMESHGUI/SMESH_images.ts
@@ -631,5 +631,13 @@
mesh_bounding_box.png
+
+
+ mesh_show.png
+
+
+
+ mesh_hide.png
+
diff --git a/src/SMESHUtils/SMESH_TypeDefs.hxx b/src/SMESHUtils/SMESH_TypeDefs.hxx
index 77c095cc1..c9be990f6 100644
--- a/src/SMESHUtils/SMESH_TypeDefs.hxx
+++ b/src/SMESHUtils/SMESH_TypeDefs.hxx
@@ -169,6 +169,7 @@ struct SMESH_TNodeXYZ : public gp_XYZ
double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); }
bool operator==(const SMESH_TNodeXYZ& other) const { return _node == other._node; }
};
+typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
//--------------------------------------------------
/*!
diff --git a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
index f356bd9ba..231dd33b5 100644
--- a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
+++ b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
@@ -610,6 +610,148 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
return "";
}
+/*!
+ \brief Gets window with specified identifier
+ \internal
+ \param id window identifier
+ \return pointer on the window
+*/
+
+SUIT_ViewWindow* getWnd( const int id )
+{
+ SUIT_ViewWindow* resWnd = 0;
+ SUIT_Session* aSession = SUIT_Session::session();
+ SUIT_Application* anApplication = aSession->activeApplication();
+ SalomeApp_Application* app = dynamic_cast(anApplication);
+ if ( app ) {
+ ViewManagerList vmlist = app->viewManagers();
+ foreach( SUIT_ViewManager* vm, vmlist ) {
+ QVector vwlist = vm->getViews();
+ foreach ( SUIT_ViewWindow* vw, vwlist ) {
+ if ( id == vw->getId() ) {
+ resWnd = vw;
+ break;
+ }
+ }
+ }
+ }
+ return resWnd;
+}
+
+class TGetActorAspect: public SALOME_Event
+{
+public:
+ typedef actorAspect TResult;
+ TResult myResult;
+ const char* _entry;
+ int _wid;
+ TGetActorAspect( const char* Mesh_Entry, int viewId )
+ {
+ _entry = Mesh_Entry;
+ _wid = viewId;
+ }
+ virtual void Execute()
+ {
+ SMESH_Actor* anActor;
+ if (_wid)
+ {
+ SUIT_ViewWindow* w = getWnd(_wid);
+ anActor = SMESH::FindActorByEntry( w, _entry );
+ }
+ else
+ anActor = SMESH::FindActorByEntry( _entry );
+ if ( !anActor )
+ {
+ MESSAGE("GetActorAspect: no actor corresponding to: " << _entry);
+ return;
+ }
+ anActor->GetSufaceColor(myResult.surfaceColor.r,
+ myResult.surfaceColor.g,
+ myResult.surfaceColor.b,
+ myResult.surfaceColor.delta);
+ anActor->GetVolumeColor(myResult.volumeColor.r,
+ myResult.volumeColor.g,
+ myResult.volumeColor.b,
+ myResult.volumeColor.delta);
+ anActor->GetEdgeColor(myResult.edgeColor.r,
+ myResult.edgeColor.g,
+ myResult.edgeColor.b);
+ anActor->GetNodeColor(myResult.nodeColor.r,
+ myResult.nodeColor.g,
+ myResult.nodeColor.b);
+ myResult.opacity= anActor->GetOpacity();
+ MESSAGE("opacity: " << myResult.opacity);
+ }
+};
+
+actorAspect SMESH_Swig::GetActorAspect( const char* Mesh_Entry, int viewId )
+{
+ return ProcessEvent(new TGetActorAspect( Mesh_Entry, viewId));
+}
+
+void SMESH_Swig::SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+{
+ class TSetActorAspect: public SALOME_Event
+ {
+ public:
+ const char* _entry;
+ actorAspect _actorPres;
+ int _wid;
+ TSetActorAspect(const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+ {
+ _entry = Mesh_Entry;
+ _actorPres = actorPres;
+ _wid = viewId;
+ }
+ virtual void Execute()
+ {
+ SMESH_Actor* anActor;
+ if (_wid)
+ {
+ SUIT_ViewWindow* w = getWnd(_wid);
+ anActor = SMESH::FindActorByEntry( w, _entry );
+ }
+ else
+ anActor = SMESH::FindActorByEntry( _entry );
+ if ( !anActor )
+ {
+ MESSAGE("SetActorAspect: no actor corresponding to: " << _entry);
+ return;
+ }
+ anActor->SetSufaceColor(_actorPres.surfaceColor.r,
+ _actorPres.surfaceColor.g,
+ _actorPres.surfaceColor.b,
+ _actorPres.surfaceColor.delta);
+ anActor->SetVolumeColor(_actorPres.volumeColor.r,
+ _actorPres.volumeColor.g,
+ _actorPres.volumeColor.b,
+ _actorPres.volumeColor.delta);
+ anActor->SetEdgeColor(_actorPres.edgeColor.r,
+ _actorPres.edgeColor.g,
+ _actorPres.edgeColor.b);
+ anActor->SetNodeColor(_actorPres.nodeColor.r,
+ _actorPres.nodeColor.g,
+ _actorPres.nodeColor.b);
+ anActor->SetOpacity(_actorPres.opacity);
+ if (_wid)
+ {
+ SUIT_ViewWindow* w = getWnd(_wid);
+ w->repaint();
+ }
+ else
+ {
+ SUIT_Session* aSession = SUIT_Session::session();
+ SUIT_Application* anApplication = aSession->activeApplication();
+ SalomeApp_Application* anApp = dynamic_cast(anApplication);
+ SUIT_ViewManager* vman = anApp->getViewManager(VTKViewer_Viewer::Type(),true);
+ vman->getActiveView()->repaint();
+ }
+ }
+ };
+
+ ProcessVoidEvent(new TSetActorAspect(actorPres, Mesh_Entry, viewId));
+}
+
void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
{
// SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
diff --git a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
index c6c948fcf..86682ff5b 100644
--- a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
+++ b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
@@ -58,6 +58,37 @@ enum
Ball = BallSelection
};
+typedef struct
+{
+ double r, g, b;
+ int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+ int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+ surfaceColorStruct surfaceColor;
+ volumeColorStruct volumeColor;
+ edgeColorStruct edgeColor;
+ nodeColorStruct nodeColor;
+ double opacity;
+};
+
class SMESH_SWIG_EXPORT SMESH_Swig
{
public:
@@ -94,6 +125,9 @@ public:
*/
void SetMeshIcon( const char*, const bool, const bool );
+ actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+ void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
+
// --------------------- for the test purposes -----------------------
int getSelectionMode();
void select( const char *id, std::vector ids, bool append = false );
diff --git a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
index 73c08a5f1..ac732d467 100644
--- a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
+++ b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
@@ -68,6 +68,37 @@ enum
Ball
};
+typedef struct
+{
+ double r, g, b;
+ int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+ int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+ double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+ surfaceColorStruct surfaceColor;
+ volumeColorStruct volumeColor;
+ edgeColorStruct edgeColor;
+ nodeColorStruct nodeColor;
+ double opacity;
+};
+
class SMESH_Swig
{
public:
@@ -97,6 +128,9 @@ class SMESH_Swig
void CreateAndDisplayActor( const char* Mesh_Entry );
void EraseActor( const char* Mesh_Entry, const bool allViewers = false );
+ actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+ void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
+
// --------------------- for the test purposes -----------------------
int getSelectionMode();
void select( const char *id, std::vector ids, bool append = false );
diff --git a/src/Tools/ZCracksPlug/__init__.py b/src/Tools/ZCracksPlug/__init__.py
index b06743239..967dc97cf 100644
--- a/src/Tools/ZCracksPlug/__init__.py
+++ b/src/Tools/ZCracksPlug/__init__.py
@@ -2,15 +2,20 @@ import sys, os, shutil, pickle, tempfile
from Zcracks import main, genereCrack, Zset
from Zcracks import utilityFunctions as uF
+os.environ['QT_QPA_PLATFORM_PLUGIN_PATH']=os.path.join(os.environ['QTDIR'],'plugins','platforms')
+
+if 'MESHGEMSHOME' in os.environ:
+ meshgemsdir=os.environ['MESHGEMSHOME']
+ if len(meshgemsdir) > 0:
+ meshgems=meshgemsdir.split(os.sep)[-1]
+ uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
+
#commande="/bin/bash -c ""source $HOME/zebulon/Z8.6.6_NEW/do_config_bash"""
#os.system(commande)
def IHM():
- try:
- from PyQt5.QtWidgets import QApplication
- except:
- from PyQt4.QtGui import QApplication
+ from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
myapp = main.ShipHolderApplication()
@@ -31,8 +36,7 @@ def SCRIPT(dataFile=None, data=None, dim=3, names=None):
print(data)
- tmpdir=tempfile.mkdtemp()
- uF.removeFromSessionPath('LD_LIBRARY_PATH', 'Meshgems-2111')
+ tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
if names==None: names={'saneGeoName':'salome_sane', 'crackGeoName':'salome_crack', 'crackedGeoName':'salome_cracked'}
diff --git a/src/Tools/ZCracksPlug/casTests/launchCas.py b/src/Tools/ZCracksPlug/casTests/launchCas.py
index 3522ee67e..592305cce 100644
--- a/src/Tools/ZCracksPlug/casTests/launchCas.py
+++ b/src/Tools/ZCracksPlug/casTests/launchCas.py
@@ -18,13 +18,13 @@ import string
#tmpdir = "/local00/home/B27118/projets/Zcracks/Zcracks/casTests/tmpdir"
#if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
-tmpdir=tempfile.mktemp(prefix='tmpZcracks')
+tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
print("tmpdir=", tmpdir)
-meshgemsdir=os.environ('MESHGEMSHOME')
-if len(meshgemsdir) > 0:
- meshgems=string.split(meshgemsdir,os.sep)[-1]
- uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
+#meshgemsdir=os.environ('MESHGEMSHOME')
+#if len(meshgemsdir) > 0:
+ #meshgems=string.split(meshgemsdir,os.sep)[-1]
+ #uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
def LAUNCH(listCas=[]):
if not isinstance(listCas, list): listCas=[listCas]
@@ -194,7 +194,7 @@ def LAUNCH(listCas=[]):
OK=[]
NOOK=[]
- for s in list(synthese.keys()):
+ for s in synthese:
if synthese[s]:
OK.append(s)
else:
diff --git a/src/Tools/ZCracksPlug/main.py b/src/Tools/ZCracksPlug/main.py
index 347c7c0ad..fb75c82e1 100644
--- a/src/Tools/ZCracksPlug/main.py
+++ b/src/Tools/ZCracksPlug/main.py
@@ -1,13 +1,9 @@
import sys, pickle, tempfile, shutil
from os import path, getpid, environ, remove, system
-try:
- from PyQt5.QtCore import *
- from PyQt5.QtGui import *
- from PyQt5.QtWidgets import *
-except:
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5.QtWidgets import *
from . import utilityFunctions as uF
from . import genereCrack, Zset, output, zcracks_ui
@@ -21,8 +17,6 @@ from .zcracks_ui import Ui_Zui
# ---------------------
-uF.removeFromSessionPath('LD_LIBRARY_PATH', 'Meshgems-2111')
-
def stringToFloat(string, typ=float):
if str(string).replace(' ','')=='':
out=[]
@@ -78,25 +72,6 @@ class ShipHolderApplication(QGroupBox):
self.verbose=1
- #self.connect(self.ui.CBQuad, SIGNAL("toggled(bool)"),self.pressQuad)
- #self.connect(self.ui.btReset, SIGNAL("clicked()"),self.pressReset)
- #self.connect(self.ui.btCancel, SIGNAL("clicked()"),self.pressCancel)
- #self.connect(self.ui.btApply, SIGNAL("clicked()"),self.pressApply)
- #self.connect(self.ui.btApplyClose, SIGNAL("clicked()"),self.pressApplyClose)
- #self.connect(self.ui.btLoad, SIGNAL("clicked()"),self.pressCharger)
- #self.connect(self.ui.btSave, SIGNAL("clicked()"),self.pressSauver)
- #self.connect(self.ui.btLoadCracked, SIGNAL("clicked()"),self.pressLoadCracked)
- #self.connect(self.ui.btLoadSane, SIGNAL("clicked()"),self.pressLoadSane)
-
- #self.connect(self.ui.btGrVol, SIGNAL("clicked()"),self.pressLoadGroupVOL)
- #self.connect(self.ui.btGrFace, SIGNAL("clicked()"),self.pressLoadGroupFACE)
- #self.connect(self.ui.btGrEdge, SIGNAL("clicked()"),self.pressLoadGroupEDGE)
- #self.connect(self.ui.btGrNode, SIGNAL("clicked()"),self.pressLoadGroupNODE)
- #self.connect(self.ui.btGrAll, SIGNAL("clicked()"),self.pressLoadGroupALL)
- #self.connect(self.ui.btVisu, SIGNAL("clicked()"),self.pressVisu)
-
- #self.connect(self.ui.CBAdvanced, SIGNAL("toggled(bool)"),self.pressAdvanced)
-
self.ui.CBQuad.toggled.connect(self.pressQuad)
self.ui.btReset.clicked.connect(self.pressReset)
self.ui.btCancel.clicked.connect(self.pressCancel)
@@ -144,9 +119,9 @@ class ShipHolderApplication(QGroupBox):
def pressQuad(self):
if self.ui.CBQuad.isChecked():
self.ui.CBBarsoum.setEnabled(True)
- self.ui.valGradation.setText(QString('2.3'))
+ self.ui.valGradation.setText('2.3')
else:
- self.ui.valGradation.setText(QString('1.3'))
+ self.ui.valGradation.setText('1.3')
self.ui.CBBarsoum.setChecked(False)
self.ui.CBBarsoum.setEnabled(False)
@@ -162,10 +137,10 @@ class ShipHolderApplication(QGroupBox):
tab=onglet.findChildren(QTableWidget)[0]
for irow in range(tab.rowCount()):
if tab.item(irow,0) != None:
- tab.item(irow,0).setText(QString(''))
- self.ui.valGradation.setText(QString('1.3'))
- self.ui.valLayers.setText(QString('5'))
- self.ui.valIterations.setText(QString('2'))
+ tab.item(irow,0).setText('')
+ self.ui.valGradation.setText('1.3')
+ self.ui.valLayers.setText('6')
+ self.ui.valIterations.setText('2')
self.ui.CBIs2D.setChecked(False)
self.ui.CBRefine.setChecked(False)
@@ -257,7 +232,7 @@ class ShipHolderApplication(QGroupBox):
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
filedef = addExtension(str(filedef), 'med')
- self.ui.valCrackedName.setText(QString(filedef))
+ self.ui.valCrackedName.setText(filedef)
def pressLoadSane(self):
@@ -268,7 +243,7 @@ class ShipHolderApplication(QGroupBox):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
- self.ui.valSaneName.setText(QString(filedef))
+ self.ui.valSaneName.setText(filedef)
def pressCharger(self):
@@ -287,23 +262,15 @@ class ShipHolderApplication(QGroupBox):
for cont, obj in enumerate(self.lineEditObjects):
if self.lineEditTypes[cont] in [float, int]:
- obj.setText(QString(self.data['TXT'+self.lineEditNames[cont]]))
+ obj.setText(self.data['TXT'+self.lineEditNames[cont]])
else:
- obj.setText(QString(self.data[self.lineEditNames[cont]]))
+ obj.setText(self.data[self.lineEditNames[cont]])
self.ui.CBQuad.setChecked(True if 'quad' in list(self.data.keys()) and self.data['quad'] else False)
self.ui.CBBarsoum.setChecked(True if 'barsoum' in list(self.data.keys()) and self.data['barsoum'] else False)
self.ui.CBIs2D.setChecked(True if 'is2D' in list(self.data.keys()) and self.data['is2D'] else False)
self.ui.CBRefine.setChecked(True if 'refine' in list(self.data.keys()) and self.data['refine'] else False)
-
-
-
-
- #if self.data['quad']: self.ui.CBQuad.setChecked(True)
- #if self.data['barsoum']: self.ui.CBBarsoum.setChecked(True)
- #if self.data['is2D']: self.ui.CBIs2D.setChecked(True)
- #if self.data['refine']: self.ui.CBRefine.setChecked(True)
self.setTableParameters()
@@ -451,7 +418,7 @@ class ShipHolderApplication(QGroupBox):
if tab.item(irow,0) == None:
item = QTableWidgetItem()
tab.setItem(irow, 0, item)
- tab.item(irow,0).setText(QString(self.data['TXTcrack'][str(self.ui.tabWidget.tabText(iongl))][str(label)]))
+ tab.item(irow,0).setText(self.data['TXTcrack'][str(self.ui.tabWidget.tabText(iongl))][str(label)])
if str(self.ui.tabWidget.tabText(iongl)) == self.data['TXTcrack']['actif']:
self.ui.tabWidget.setCurrentWidget(onglet)
@@ -475,19 +442,19 @@ class ShipHolderApplication(QGroupBox):
for group in objetSain.GetGroups():
if (self.GroupToLoad in ['VOL','ALL']) and (group.GetType()==SMESH.VOLUME):
- groupsVOL+=group.GetName().replace(' ','')+" "
+ groupsVOL+=self.cleanGroupName(group)
nGr+=1
if (self.GroupToLoad in ['FACE','ALL']) and (group.GetType()==SMESH.FACE):
- groupsFAC+=group.GetName().replace(' ','')+" "
+ groupsFAC+=self.cleanGroupName(group)
nGr+=1
if (self.GroupToLoad in ['EDGE','ALL']) and (group.GetType()==SMESH.EDGE):
- groupsEDG+=group.GetName().replace(' ','')+" "
+ groupsEDG+=self.cleanGroupName(group)
nGr+=1
if (self.GroupToLoad in ['NODE','ALL']) and (group.GetType()==SMESH.NODE):
- groupsNOD+=group.GetName().replace(' ','')+" "
+ groupsNOD+=self.cleanGroupName(group)
nGr+=1
if groupsVOL!='': self.ui.valGrVol.setText(groupsVOL)
@@ -503,6 +470,24 @@ class ShipHolderApplication(QGroupBox):
remove(f)
except:
pass
+
+ def cleanGroupName(self, group):
+ name=group.GetName()
+ while name.endswith(' '): name=name[:-1]
+ if ' ' in name:
+ message('A','%s group has a space in its name --> ignored' %name)
+ return('')
+ else:
+ return(name+" ")
+
+ def checkNamesSpaces(self, names):
+ if type(names) is str: names=[names]
+ ok=True
+ for n in names:
+ if ' ' in n:
+ message('E','%s has a space in its name, please remove it' %n, goOn=True)
+ ok=False
+ return(ok)
# ---------------------------------
diff --git a/src/Tools/ZCracksPlug/output.py b/src/Tools/ZCracksPlug/output.py
index 8a316b0dd..00b31f59f 100644
--- a/src/Tools/ZCracksPlug/output.py
+++ b/src/Tools/ZCracksPlug/output.py
@@ -22,9 +22,9 @@ class output():
pass
f = open(self.tmpFile,'w')
f.write('\n ------------------------------\n')
- f.write(' | BIENVENU DANS L\'INTERFACE |\n')
+ f.write(' | BIENVENUE DANS L\'INTERFACE |\n')
f.write(' | ZCRACKS DE SALOME |\n')
- f.write(' | VERSION ALPHA |\n')
+ f.write(' | VERSION BETA |\n')
f.write(' ------------------------------\n\n')
f.close()
diff --git a/src/Tools/ZCracksPlug/utilityFunctions.py b/src/Tools/ZCracksPlug/utilityFunctions.py
index 34e46f857..997f02f7c 100644
--- a/src/Tools/ZCracksPlug/utilityFunctions.py
+++ b/src/Tools/ZCracksPlug/utilityFunctions.py
@@ -178,7 +178,13 @@ def extendElsets(meshFile, outFile=None):
smesh = smeshBuilder.New(theStudy)
([mesh], status) = smesh.CreateMeshesFromMED(meshFile)
-
+
+ if mesh.NbVolumes()>0:
+ case2D=False
+ mesh.Reorient2DBy3D( [ mesh ], mesh, 1 )
+ else:
+ case2D=True
+
mesh=cleanGroups(mesh)
# Node color status
@@ -339,91 +345,6 @@ def getMaxAspectRatio(tmpdir):
return(float(maxAR))
-#def extendElsets(meshFile):
- #if not path.isfile(meshFile):
- #message('E','Mesh med file is not valid')
- #return(-1)
-
- #import SMESH, salome
- ##salome.salome_init()
- #theStudy = salome.myStudy
- #from salome.smesh import smeshBuilder
- #smesh = smeshBuilder.New(theStudy)
-
- #([mesh], status) = smesh.CreateMeshesFromMED(meshFile)
-
- ## Node color status
- #nodeList=mesh.GetNodesId()
- #colorList=[0]*len(nodeList)
-
- ## Init using SIDE0 SIDE1
- #for group in mesh.GetGroups():
- #if group.GetType()==SMESH.FACE :
- #color=0
- #if group.GetName()[0:4]=='SIDE0' :
- #color=1
- #elif group.GetName()[0:4]=='SIDE1' :
- #color=2
- #else : continue
- ## Get faces
- #faces=group.GetIDs()
- ## Set faces nodes to given color
- #for face_id in faces :
- #for face_node_id in mesh.GetElemNodes(face_id) :
- #colorList[face_node_id-1]=color
-
- ## Propagates color using elem connectivity
- ## Always propagates max color
- #volElemList=mesh.GetElementsByType(SMESH.VOLUME)
- #ifChanged=True
- #while ifChanged :
- #ifChanged=False
- #minColor=100
- #maxColor=0
- #for elemId in volElemList:
- #for elemNodeId in mesh.GetElemNodes(elemId) :
- #nodeColor=colorList[elemNodeId-1]
- #if nodeColormaxColor : maxColor=nodeColor
- #if minColor!=maxColor :
- #ifChanged = True
- #for elemNodeId in mesh.GetElemNodes(elemId) :
- #colorList[elemNodeId-1]=maxColor
-
- #velem0 = []
- #velem1 = []
- #for elemId in volElemList:
- #elemNodesId=mesh.GetElemNodes(elemId)
- #elemColor=colorList[elemNodesId[0]-1]
- #if(elemColor==1) : velem0.append(elemId)
- #if(elemColor==2) : velem1.append(elemId)
-
- #mesh.MakeGroupByIds('SIDE_co',SMESH.VOLUME,velem0)
- #mesh.MakeGroupByIds('SIDE_ext',SMESH.VOLUME,velem1)
-
- #surfElemList=mesh.GetElementsByType(SMESH.FACE)
- #selem0 = []
- #selem1 = []
- #nbelem0=0
- #nbelem1=0
-
- #for elemId in surfElemList:
- #elemNodesId=mesh.GetElemNodes(elemId)
- #elemColor=colorList[elemNodesId[0]-1]
- #if(elemColor==1) : selem0.append(elemId)
- #if(elemColor==2) : selem1.append(elemId)
-
- #mesh.MakeGroupByIds('SIDE_co',SMESH.FACE,selem0)
- #mesh.MakeGroupByIds('SIDE_ext',SMESH.FACE,selem1)
-
- #maxAR=0.
- #for elem in volElemList:
- #maxAR=max(mesh.GetAspectRatio(elem),maxAR)
- #for elem in surfElemList:
- #maxAR=max(mesh.GetAspectRatio(elem),maxAR)
-
- #mesh.ExportMED(meshFile, 0, SMESH.MED_V2_2, 1, None ,1)
- #return(maxAR)
def removeFromSessionPath(envVar, patern):
diff --git a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
index e1cd4e7d2..10b5b94c8 100644
--- a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
+++ b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
@@ -146,11 +146,12 @@ bool SPADDERPluginTester_i::testsmesh(CORBA::Long studyId)
//
extern "C"
{
- PortableServer::ObjectId * SPADDERPluginTesterEngine_factory( CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- PortableServer::ObjectId * contId,
- const char *instanceName,
- const char *interfaceName)
+ SPADDERPLUGINTESTERENGINE_EXPORT PortableServer::ObjectId *
+ SPADDERPluginTesterEngine_factory( CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ PortableServer::ObjectId * contId,
+ const char *instanceName,
+ const char *interfaceName)
{
MESSAGE("PortableServer::ObjectId * SPADDERPluginTesterEngine_factory()");
SPADDERPluginTester_i * myEngine = new SPADDERPluginTester_i(orb, poa, contId, instanceName, interfaceName);
diff --git a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
index 36c7637fc..9a2193d55 100644
--- a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
+++ b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
@@ -22,13 +22,23 @@
#ifndef _SPADDER_PLUGINTESTER_HXX_
#define _SPADDER_PLUGINTESTER_HXX_
+#ifdef WIN32
+ #if defined SPADDERPLUGINTESTERENGINE_EXPORTS || defined SPADDERPluginTesterEngine_EXPORTS
+ #define SPADDERPLUGINTESTERENGINE_EXPORT __declspec( dllexport )
+ #else
+ #define SPADDERPLUGINTESTERENGINE_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SPADDERPLUGINTESTERENGINE_EXPORT
+#endif
+
// include the stubs generating from SPADDERPluginTest.idl
#include
#include CORBA_SERVER_HEADER(SPADDERPluginTest)
#include
#include "SALOME_Component_i.hxx"
-class SPADDERPluginTester_i:
+class SPADDERPLUGINTESTERENGINE_EXPORT SPADDERPluginTester_i:
public virtual POA_SPADDERPluginTest::SPADDERPluginTester,
public Engines_Component_i
{
diff --git a/src/Tools/padder/spadderpy/gui/inputdialog.py b/src/Tools/padder/spadderpy/gui/inputdialog.py
index a5e08488c..6620020b7 100644
--- a/src/Tools/padder/spadderpy/gui/inputdialog.py
+++ b/src/Tools/padder/spadderpy/gui/inputdialog.py
@@ -38,6 +38,14 @@ from salome.smesh.spadder.gui.inputdata import InputData
DEBUG_MODE=True
GROUPNAME_MAXLENGTH=8
+INPUTDATA_KEY_FILES="meshfiles"
+INPUTDATA_KEY_PARAM="parameters"
+
+PARAM_KEY_NBITER = "NbIteration"
+PARAM_KEY_RMAXRMIN = "RmaxRmin"
+PARAM_NBITER_DEFAULT_VALUE = 10
+PARAM_RMAXRMIN_DEFAULT_VALUE = 3
+
class InputDialog(GenericDialog):
TBL_HEADER_LABEL=["Input Mesh", "Output group name"]
@@ -116,7 +124,8 @@ class InputDialog(GenericDialog):
# name item.
# Setup default values for numerical parameters
- self.__ui.txtParamNbIter.setValue(3)
+ self.__ui.txtParamNbIter.setValue(PARAM_NBITER_DEFAULT_VALUE)
+ self.__ui.txtParamRmaxRmin.setValue(PARAM_RMAXRMIN_DEFAULT_VALUE)
# Note that PADDER does not support group name longer than 8
# characters. We apply then this limit in the gui field.
@@ -138,7 +147,7 @@ class InputDialog(GenericDialog):
self.__ui.txtSmeshObject.setEnabled(False)
self.__ui.btnAddInput.setEnabled(False)
self.__selectedMesh = None
- self.__dictInputData = {}
+ self.__dictInputFiles = {}
self.__nbConcreteMesh = 0
self.__nbSteelbarMesh = 0
@@ -231,7 +240,7 @@ class InputDialog(GenericDialog):
"""
# if the entry already exists, we remove it to replace by a
# new one
- if meshName in self.__dictInputData:
+ if meshName in self.__dictInputFiles:
self.__delInputFromMap(meshName)
inputData = InputData()
@@ -240,7 +249,7 @@ class InputDialog(GenericDialog):
inputData.meshType = meshType
inputData.groupName = groupName
# The key of the map is the mesh name
- self.__dictInputData[meshName] = inputData
+ self.__dictInputFiles[meshName] = inputData
if inputData.meshType == InputData.MESHTYPES.CONCRETE:
self.__nbConcreteMesh += 1
else:
@@ -272,7 +281,7 @@ class InputDialog(GenericDialog):
This function removes the specified entry from the internal
map (for data management purpose)
"""
- inputData = self.__dictInputData.pop(meshName)
+ inputData = self.__dictInputFiles.pop(meshName)
if inputData.meshType == InputData.MESHTYPES.CONCRETE:
self.__nbConcreteMesh -= 1
else:
@@ -283,33 +292,51 @@ class InputDialog(GenericDialog):
print("nb steelbar mesh ",self.__nbSteelbarMesh)
- def setData(self, listInputData=[]):
+ def setData(self, dictInputData={}):
"""
This function fills the dialog widgets with values provided by
the specified data list.
"""
self.clear()
- for inputData in listInputData:
+ if INPUTDATA_KEY_FILES in dictInputData:
+ listInputData = dictInputData["meshfiles"]
+ for inputData in listInputData:
- meshName = inputData.meshName
- meshObject = inputData.meshObject
- meshType = inputData.meshType
- groupName = inputData.groupName
+ meshName = inputData.meshName
+ meshObject = inputData.meshObject
+ meshType = inputData.meshType
+ groupName = inputData.groupName
- self.__addInputInGui(meshName, meshObject, meshType, groupName)
- self.__addInputInMap(meshName, meshObject, meshType, groupName)
+ self.__addInputInGui(meshName, meshObject, meshType, groupName)
+ self.__addInputInMap(meshName, meshObject, meshType, groupName)
- if not DEBUG_MODE:
- self.onSelectSmeshObject()
+ if not DEBUG_MODE:
+ self.onSelectSmeshObject()
+
+ if INPUTDATA_KEY_PARAM in dictInputData:
+ dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+ if PARAM_KEY_NBITER in dictInputParameters:
+ self.__ui.txtParamNbIter.setValue(dictInputParameters[PARAM_KEY_NBITER])
+ if PARAM_KEY_RMAXRMIN in dictInputParameters:
+ self.__ui.txtParamRminRmax.setValue(dictInputParameters[PARAM_KEY_RMAXRMIN])
def getData(self):
"""
This function returns a list of InputData that corresponds to
the data in the dialog widgets of the current dialog.
"""
+ # Get the list of mesh files
# Note that the values() function returns a copy of the list
# of values.
- return list(self.__dictInputData.values())
+ dictInputData={}
+ dictInputData[INPUTDATA_KEY_FILES] = self.__dictInputFiles.values()
+
+ # Get the list of additionnal parameters
+ dictInputParameters = {}
+ dictInputParameters[PARAM_KEY_NBITER] = self.__ui.txtParamNbIter.value()
+ dictInputParameters[PARAM_KEY_RMAXRMIN] = self.__ui.txtParamRmaxRmin.value()
+ dictInputData[INPUTDATA_KEY_PARAM] = dictInputParameters
+ return dictInputData
def checkData(self):
"""
@@ -328,7 +355,6 @@ class InputDialog(GenericDialog):
return True
- #def setParameters(self,
# ==============================================================================
# Basic use case
diff --git a/src/Tools/padder/spadderpy/gui/inputframe.ui b/src/Tools/padder/spadderpy/gui/inputframe.ui
index b1ba72d96..a8882f44c 100644
--- a/src/Tools/padder/spadderpy/gui/inputframe.ui
+++ b/src/Tools/padder/spadderpy/gui/inputframe.ui
@@ -111,7 +111,7 @@
-
- Béton
+ Beton
@@ -213,9 +213,9 @@
-
-
+
- Rmin / Rmax
+ Rmax / Rmin
@@ -227,7 +227,7 @@
-
-
+
diff --git a/src/Tools/padder/spadderpy/gui/plugindialog.py b/src/Tools/padder/spadderpy/gui/plugindialog.py
index c3f30e55b..ba00df765 100644
--- a/src/Tools/padder/spadderpy/gui/plugindialog.py
+++ b/src/Tools/padder/spadderpy/gui/plugindialog.py
@@ -23,7 +23,8 @@
from qtsalome import QDialog, QIcon, Qt
from salome.smesh.spadder.gui.plugindialog_ui import Ui_PluginDialog
-from salome.smesh.spadder.gui.inputdialog import InputDialog
+from salome.smesh.spadder.gui.inputdialog import InputDialog, INPUTDATA_KEY_FILES, INPUTDATA_KEY_PARAM
+from salome.smesh.spadder.gui.inputdialog import PARAM_KEY_NBITER, PARAM_KEY_RMAXRMIN
from salome.smesh.spadder.gui.inputdata import InputData
# __GBO__: uncomment this line and comment the previous one to use the
# demo input dialog instead of the real one.
@@ -218,6 +219,7 @@ class PluginDialog(QDialog):
This function clears the log area and the states of the buttons
"""
self.__listInputData = []
+ self.__dictInputParameters = {}
self.__ui.txtLog.clear()
self.__setGuiState(["CAN_SELECT"])
self.__isRunning = False
@@ -241,7 +243,10 @@ class PluginDialog(QDialog):
windows to process the validation event (see the slot
onProcessInput which is connected to this event).
'''
- self.__inputDialog.setData(self.__listInputData)
+ dictInputData = {}
+ dictInputData[INPUTDATA_KEY_FILES] = self.__listInputData
+ dictInputData[INPUTDATA_KEY_PARAM] = self.__dictInputParameters
+ self.__inputDialog.setData(dictInputData)
self.__inputDialog.open()
def onProcessInput(self):
@@ -252,7 +257,10 @@ class PluginDialog(QDialog):
"""
# The processing simply consists in requesting the input data
# from the dialog window.
- self.__listInputData = self.__inputDialog.getData()
+ dictInputData = self.__inputDialog.getData()
+ self.__listInputData = dictInputData[INPUTDATA_KEY_FILES]
+ self.__dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+
self.__ui.lblStatusBar.setText("Input data OK")
self.__log("INF: Press \"Compute\" to start the job")
self.__setGuiState(["CAN_SELECT", "CAN_COMPUTE"])
@@ -283,8 +291,16 @@ class PluginDialog(QDialog):
group_name = inputData.groupName)
meshJobFileList.append(parameter)
+ # And to create a list of the additional parameters.
+ # WARN: the CORBA interface requires string values.
+ meshJobParameterList=[]
+ for inputParameterKey in self.__dictInputParameters:
+ value = self.__dictInputParameters[inputParameterKey]
+ parameter = MESHJOB.MeshJobParameter(name=inputParameterKey,value=str(value))
+ meshJobParameterList.append(parameter)
+
jobManager = self.__getJobManager()
- self.__jobid = jobManager.initialize(meshJobFileList, self.__configId)
+ self.__jobid = jobManager.initialize(meshJobFileList, meshJobParameterList, self.__configId)
if self.__jobid < 0:
self.__log("ERR: the job can't be initialized")
self.__log("ERR: %s"%jobManager.getLastErrorMessage())
diff --git a/src/Tools/padder/unittests/usecase_meshJobManager.py b/src/Tools/padder/unittests/usecase_meshJobManager.py
index 393840239..4fe3da6d9 100644
--- a/src/Tools/padder/unittests/usecase_meshJobManager.py
+++ b/src/Tools/padder/unittests/usecase_meshJobManager.py
@@ -83,7 +83,7 @@ PADDERTESTDIR = getPadderTestDir(defaultConfig)
# padder.cfg).
#
def test00_parameters():
- """Test using a concrete mesh and a single steelbar mesh"""
+ """Test using a concrete mesh and a single steelbar mesh"""
file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med")
file_steelbar=os.path.join(spadder.getTestDataDir(),"ferraill.med")
@@ -109,7 +109,7 @@ def test01_parameters():
file_type=MESHJOB.MED_CONCRETE,
group_name="concrete")
meshJobFileList.append(param)
-
+
medfile = os.path.join(datadir,"ferraill.med")
param = MESHJOB.MeshJobFile(file_name=medfile,
file_type=MESHJOB.MED_STEELBAR,
@@ -121,7 +121,7 @@ def test01_parameters():
file_type=MESHJOB.MED_STEELBAR,
group_name="ferrtran")
meshJobFileList.append(param)
-
+
return meshJobFileList
def test02_parameters():
@@ -161,7 +161,7 @@ def test03_parameters():
meshJobFileList = test03_parameters()
meshJobParameterList = []
-param = MESHJOB.MeshJobParameter(name="RminRmax",value="1.5")
+param = MESHJOB.MeshJobParameter(name="RmaxRmin",value="1.5")
meshJobParameterList.append(param)
param = MESHJOB.MeshJobParameter(name="NbIteration",value="3")
meshJobParameterList.append(param)
@@ -174,7 +174,7 @@ if jobid<0:
msg = component.getLastErrorMessage()
print("ERR: %s"%msg)
sys.exit(1)
-
+
created = False
nbiter = 0
while not created:
@@ -217,11 +217,11 @@ while not ended:
ended=True
time.sleep(0.5)
nbiter+=1
-
+
if state not in end_states:
print("ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state))
msg = component.getLastErrorMessage()
- print("ERR: %s"%msg)
+ print("ERR: %s"%msg)
else:
print("OK: jobid = "+str(jobid)+" ended with state="+str(state))
meshJobResults = component.finalize(jobid)