#include "SMDS_Mesh0DElement.hxx"
#include "SMDS_MeshFace.hxx"
#include "SMDS_MeshVolume.hxx"
-#include "SMDS_PolyhedralVolumeOfNodes.hxx"
#include "SMDS_SetIterator.hxx"
#include "SMDS_VolumeTool.hxx"
#include "SMESHDS_Group.hxx"
SMDSAbs_ElementType myPreviewType; // type to show
//!< Constructor
TPreviewMesh(SMDSAbs_ElementType previewElements = SMDSAbs_All) {
- _isShapeToMesh = (_id =_studyId = 0);
+ _isShapeToMesh = (_id = 0);
_myMeshDS = new SMESHDS_Mesh( _id, true );
myPreviewType = previewElements;
}
SMESHDS_Mesh* aMeshDS;
std::unique_ptr< SMESH_MeshPartDS > aMeshPartDS;
if ( hasBadElems ) {
- aMeshPartDS.reset( new SMESH_MeshPartDS( getEditor().GetError()->myBadElements ));
+ const list<const SMDS_MeshElement*>& badElems =
+ static_cast<SMESH_BadInputElements*>( getEditor().GetError().get() )->myBadElements;
+ aMeshPartDS.reset( new SMESH_MeshPartDS( badElems ));
aMeshDS = aMeshPartDS.get();
}
else {
errOut->code = -( errIn->myName < 0 ? errIn->myName + 1: errIn->myName ); // -1 -> 0
errOut->comment = errIn->myComment.c_str();
errOut->subShapeID = -1;
- errOut->hasBadMesh = !errIn->myBadElements.empty();
+ errOut->hasBadMesh = errIn->HasBadElems();
}
else
{
SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::Offset( SMESH::SMESH_IDSource_ptr theObject,
CORBA::Double theValue,
CORBA::Boolean theCopyGroups,
+ CORBA::Boolean theCopyElements,
const char* theMeshName,
SMESH::ListOfGroups_out theGroups)
throw (SALOME::SALOME_Exception)
TPreviewMesh * tmpMesh = getPreviewMesh();
tgtMesh = tmpMesh;
tmpMesh->Copy( elements, copyElements );
+ elements.swap( copyElements );
theCopyGroups = false;
+ theCopyElements = false;
}
else
{
SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh_var );
tgtMesh = & mesh_i->GetImpl();
}
- groupIds = getEditor().Offset( elements, theValue, tgtMesh, theCopyGroups, !myIsPreviewMode );
+ groupIds = getEditor().Offset( elements, theValue, tgtMesh,
+ theCopyGroups, theCopyElements, !myIsPreviewMode );
tgtMesh->GetMeshDS()->Modified();
}
if ( myIsPreviewMode )
{
- getPreviewMesh()->Remove( SMESHUtils::elemSetIterator( copyElements ));
+ //getPreviewMesh()->Remove( SMESHUtils::elemSetIterator( copyElements ));
}
else
{
theGroups = theCopyGroups ? getGroups( groupIds.get() ) : new SMESH::ListOfGroups;
+ if ( *theMeshName && mesh_var->NbFaces() == 0 )
+ {
+ // new mesh empty, remove it
+ SMESH_Gen_i* smesh = SMESH_Gen_i::GetSMESHGen();
+ SALOMEDS::Study_var study = smesh->GetCurrentStudy();
+ SALOMEDS::StudyBuilder_var builder = study->NewBuilder();
+ SALOMEDS::SObject_wrap meshSO = smesh->ObjectToSObject( study, mesh_var );
+ builder->RemoveObjectWithChildren( meshSO );
+ THROW_SALOME_CORBA_EXCEPTION("Offset failed", SALOME::INTERNAL_ERROR);
+ }
+
// result of Offset() is a tuple (mesh, groups)
if ( mesh_var->_is_nil() ) pyDump << myMesh_i->_this() << ", ";
else pyDump << mesh_var << ", ";
- pyDump << theGroups << " = "
- << this << ".Offset( "
+ pyDump << theGroups << " = " << this << ".Offset( "
+ << theObject << ", "
<< theValue << ", "
<< theCopyGroups << ", "
+ << theCopyElements << ", "
<< "'" << theMeshName<< "')";
}
{
SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
SMESH::SMESH_Mesh_var mesh = gen->CreateEmptyMesh();
- SALOMEDS::Study_var study = gen->GetCurrentStudy();
- SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( study, mesh );
+ SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( mesh );
gen->SetName( meshSO, theMeshName, "Mesh" );
gen->SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
// group of boundary elements
SMESH_Group* smesh_group = 0;
SMDSAbs_ElementType elemType = (dim == SMESH::BND_2DFROM3D) ? SMDSAbs_Volume : SMDSAbs_Face;
- if ( strlen(groupName) )
+ if ( strlen( groupName ))
{
SMESH::ElementType groupType = SMESH::ElementType( int(elemType)-1 );
group_var = mesh_i->CreateGroup( groupType, groupName );