SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh* theMesh)
{
_myMesh = theMesh;
-};
+}
//=============================================================================
/*!
CORBA::Boolean
SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor anEditor( _myMesh );
list< int > IdList;
#endif
// Remove Elements
return anEditor.Remove( IdList, false );
-};
+}
//=============================================================================
/*!
CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor anEditor( _myMesh );
list< int > IdList;
for (int i = 0; i < IDsOfNodes.length(); i++)
#endif
return anEditor.Remove( IdList, true );
-};
+}
//=============================================================================
/*!
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
+CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbNodes = IDsOfNodes.length();
+ SMDS_MeshElement* elem = 0;
if (NbNodes == 2)
{
CORBA::Long index1 = IDsOfNodes[0];
CORBA::Long index2 = IDsOfNodes[1];
- GetMeshDS()->AddEdge(GetMeshDS()->FindNode(index1), GetMeshDS()->FindNode(index2));
+ elem = GetMeshDS()->AddEdge(GetMeshDS()->FindNode(index1), GetMeshDS()->FindNode(index2));
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddEdge([ "
+ TPythonDump() << "edge = " << this << ".AddEdge([ "
<< index1 << ", " << index2 <<" ])";
}
if (NbNodes == 3) {
CORBA::Long n1 = IDsOfNodes[0];
CORBA::Long n2 = IDsOfNodes[1];
CORBA::Long n12 = IDsOfNodes[2];
- GetMeshDS()->AddEdge(GetMeshDS()->FindNode(n1),
- GetMeshDS()->FindNode(n2),
- GetMeshDS()->FindNode(n12));
+ elem = GetMeshDS()->AddEdge(GetMeshDS()->FindNode(n1),
+ GetMeshDS()->FindNode(n2),
+ GetMeshDS()->FindNode(n12));
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddEdge([ "
+ TPythonDump() << "edgeID = " << this << ".AddEdge([ "
<<n1<<", "<<n2<<", "<<n12<<" ])";
}
- return true;
+
+ if(elem)
+ return elem->GetID();
+
+ return 0;
}
//=============================================================================
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddNode(CORBA::Double x,
- CORBA::Double y, CORBA::Double z)
+CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
+ CORBA::Double y, CORBA::Double z)
{
- GetMeshDS()->AddNode(x, y, z);
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ const SMDS_MeshNode* N = GetMeshDS()->AddNode(x, y, z);
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddNode( "
+ TPythonDump() << "nodeID = " << this << ".AddNode( "
<< x << ", " << y << ", " << z << " )";
- return true;
+ return N->GetID();
}
//=============================================================================
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
+CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbNodes = IDsOfNodes.length();
if (NbNodes < 3)
{
for (int i = 0; i < NbNodes; i++)
nodes[i] = GetMeshDS()->FindNode(IDsOfNodes[i]);
- if (NbNodes == 3)
- {
- GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2]);
+ SMDS_MeshElement* elem = 0;
+ if (NbNodes == 3) {
+ elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2]);
}
- else if (NbNodes == 4)
- {
- GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3]);
+ else if (NbNodes == 4) {
+ elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3]);
}
- else if (NbNodes == 6)
- {
- GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
- nodes[4], nodes[5]);
+ else if (NbNodes == 6) {
+ elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
+ nodes[4], nodes[5]);
}
- else if (NbNodes == 8)
- {
- GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
- nodes[4], nodes[5], nodes[6], nodes[7]);
+ else if (NbNodes == 8) {
+ elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
+ nodes[4], nodes[5], nodes[6], nodes[7]);
}
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddFace( " << IDsOfNodes << " )";
-#ifdef _DEBUG_
- TPythonDump() << "print 'AddFace: ', isDone";
-#endif
+ TPythonDump() << "faceID = " << this << ".AddFace( " << IDsOfNodes << " )";
- return true;
-};
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
//=============================================================================
/*!
* AddPolygonalFace
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddPolygonalFace
+CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace
(const SMESH::long_array & IDsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbNodes = IDsOfNodes.length();
std::vector<const SMDS_MeshNode*> nodes (NbNodes);
for (int i = 0; i < NbNodes; i++)
nodes[i] = GetMeshDS()->FindNode(IDsOfNodes[i]);
- GetMeshDS()->AddPolygonalFace(nodes);
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolygonalFace(nodes);
// Update Python script
- TPythonDump() <<"isDone = "<<this<<".AddPolygonalFace( "<<IDsOfNodes<<" )";
+ TPythonDump() <<"faceID = "<<this<<".AddPolygonalFace( "<<IDsOfNodes<<" )";
#ifdef _DEBUG_
- TPythonDump() << "print 'AddPolygonalFace: ', isDone";
+ TPythonDump() << "print 'AddPolygonalFace: ', faceID";
#endif
- return true;
-};
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
//=============================================================================
/*!
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
+CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbNodes = IDsOfNodes.length();
vector< const SMDS_MeshNode*> n(NbNodes);
for(int i=0;i<NbNodes;i++)
n[15],n[16],n[17],n[18],n[19]);
break;
}
+
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddVolume( " << IDsOfNodes << " )";
+ TPythonDump() << "volID = " << this << ".AddVolume( " << IDsOfNodes << " )";
#ifdef _DEBUG_
- TPythonDump() << "print 'AddVolume: ', isDone";
+ TPythonDump() << "print 'AddVolume: ', volID";
#endif
- return elem;
-};
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
//=============================================================================
/*!
* AddPolyhedralVolume
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddPolyhedralVolume
+CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume
(const SMESH::long_array & IDsOfNodes,
const SMESH::long_array & Quantities)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbNodes = IDsOfNodes.length();
std::vector<const SMDS_MeshNode*> n (NbNodes);
for (int i = 0; i < NbNodes; i++)
for (int j = 0; j < NbFaces; j++)
q[j] = Quantities[j];
- GetMeshDS()->AddPolyhedralVolume(n, q);
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(n, q);
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddPolyhedralVolume( "
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolume( "
<< IDsOfNodes << ", " << Quantities << " )";
#ifdef _DEBUG_
- TPythonDump() << "print 'AddPolyhedralVolume: ', isDone";
+ TPythonDump() << "print 'AddPolyhedralVolume: ', volID";
#endif
- return true;
-};
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
//=============================================================================
/*!
* AddPolyhedralVolumeByFaces
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
+CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
(const SMESH::long_array & IdsOfFaces)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
int NbFaces = IdsOfFaces.length();
std::vector<const SMDS_MeshNode*> poly_nodes;
std::vector<int> quantities (NbFaces);
}
}
- GetMeshDS()->AddPolyhedralVolume(poly_nodes, quantities);
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(poly_nodes, quantities);
// Update Python script
- TPythonDump() << "isDone = " << this << ".AddPolyhedralVolumeByFaces( "
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolumeByFaces( "
<< IdsOfFaces << " )";
#ifdef _DEBUG_
- TPythonDump() << "print 'AddPolyhedralVolume: ', isDone";
+ TPythonDump() << "print 'AddPolyhedralVolume: ', volID";
#endif
- return true;
-};
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
//=============================================================================
/*!
CORBA::Double y,
CORBA::Double z)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
const SMDS_MeshNode * node = GetMeshDS()->FindNode( NodeID );
if ( !node )
return false;
CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
CORBA::Long NodeID2)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
if ( !n1 || !n2 )
CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
CORBA::Long NodeID2)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
if ( !n1 || !n2 )
<< NodeID1 << ", " << NodeID2 << " )";
::SMESH_MeshEditor aMeshEditor( _myMesh );
- return aMeshEditor.DeleteDiag ( n1, n2 );
+
+ bool stat = aMeshEditor.DeleteDiag ( n1, n2 );
+
+ UpdateLastResult(aMeshEditor);
+
+ return stat;
}
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor anEditor( _myMesh );
for (int i = 0; i < IDsOfElements.length(); i++)
{
CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
CORBA::Boolean isDone = Reorient(anElementsId);
return isDone;
}
+
+//=======================================================================
+//function : ToMap
+//purpose : auxilary function for conversion long_array to std::map<>
+// which is used in some methods
+//=======================================================================
+static void ToMap(const SMESH::long_array & IDs,
+ const SMESHDS_Mesh* aMesh,
+ std::map<int,const SMDS_MeshElement*>& aMap)
+{
+ for (int i=0; i<IDs.length(); i++) {
+ CORBA::Long ind = IDs[i];
+ std::map<int,const SMDS_MeshElement*>::iterator It = aMap.find(ind);
+ if(It==aMap.end()) {
+ const SMDS_MeshElement * elem = aMesh->FindElement(ind);
+ aMap.insert( make_pair(ind,elem) );
+ }
+ }
+}
+
+
//=============================================================================
/*!
*
SMESH::NumericalFunctor_ptr Criterion,
CORBA::Double MaxAngle)
{
- set<const SMDS_MeshElement*> faces;
- for (int i = 0; i < IDsOfElements.length(); i++)
- {
- CORBA::Long index = IDsOfElements[i];
- const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Face)
- faces.insert( elem );
- }
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ SMESHDS_Mesh* aMesh = GetMeshDS();
+ map<int,const SMDS_MeshElement*> faces;
+ ToMap(IDsOfElements, aMesh, faces);
+
SMESH::NumericalFunctor_i* aNumericalFunctor =
dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
SMESH::Controls::NumericalFunctorPtr aCrit;
#endif
::SMESH_MeshEditor anEditor( _myMesh );
- return anEditor.TriToQuad( faces, aCrit, MaxAngle );
+
+ bool stat = anEditor.TriToQuad( faces, aCrit, MaxAngle );
+
+ UpdateLastResult(anEditor);
+
+ return stat;
}
+
//=============================================================================
/*!
*
SMESH::NumericalFunctor_ptr Criterion,
CORBA::Double MaxAngle)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
CORBA::Boolean isDone = TriToQuad(anElementsId, Criterion, MaxAngle);
return isDone;
}
+
//=============================================================================
/*!
*
CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfElements,
SMESH::NumericalFunctor_ptr Criterion)
{
- set<const SMDS_MeshElement*> faces;
- for (int i = 0; i < IDsOfElements.length(); i++)
- {
- CORBA::Long index = IDsOfElements[i];
- const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Face)
- faces.insert( elem );
- }
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ SMESHDS_Mesh* aMesh = GetMeshDS();
+ map<int,const SMDS_MeshElement*> faces;
+ ToMap(IDsOfElements, aMesh, faces);
+
SMESH::NumericalFunctor_i* aNumericalFunctor =
dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
SMESH::Controls::NumericalFunctorPtr aCrit;
#endif
::SMESH_MeshEditor anEditor( _myMesh );
- return anEditor.QuadToTri( faces, aCrit );
+ CORBA::Boolean stat = anEditor.QuadToTri( faces, aCrit );
+
+ UpdateLastResult(anEditor);
+
+ return stat;
}
+
//=============================================================================
/*!
*
CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr theObject,
SMESH::NumericalFunctor_ptr Criterion)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
CORBA::Boolean isDone = QuadToTri(anElementsId, Criterion);
return isDone;
}
+
//=============================================================================
/*!
*
CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements,
CORBA::Boolean Diag13)
{
- set<const SMDS_MeshElement*> faces;
- for (int i = 0; i < IDsOfElements.length(); i++)
- {
- CORBA::Long index = IDsOfElements[i];
- const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Face)
- faces.insert( elem );
- }
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ SMESHDS_Mesh* aMesh = GetMeshDS();
+ map<int,const SMDS_MeshElement*> faces;
+ ToMap(IDsOfElements, aMesh, faces);
// Update Python script
TPythonDump() << "isDone = " << this << ".SplitQuad( "
#endif
::SMESH_MeshEditor anEditor( _myMesh );
- return anEditor.QuadToTri( faces, Diag13 );
+ CORBA::Boolean stat = anEditor.QuadToTri( faces, Diag13 );
+
+ UpdateLastResult(anEditor);
+
+ return stat;
}
+
//=============================================================================
/*!
*
CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean Diag13)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
CORBA::Boolean isDone = SplitQuad(anElementsId, Diag13);
return isDone;
}
+
//=============================================================================
/*!
* BestSplit
return -1;
}
+
//=======================================================================
//function : Smooth
//purpose :
MaxAspectRatio, Method, false );
}
+
//=======================================================================
//function : SmoothParametric
//purpose :
MaxAspectRatio, Method, true );
}
+
//=======================================================================
//function : SmoothObject
//purpose :
MaxAspectRatio, Method, false);
}
+
//=======================================================================
//function : SmoothParametricObject
//purpose :
MaxAspectRatio, Method, true);
}
+
//=============================================================================
/*!
*
SMESH::SMESH_MeshEditor::Smooth_Method Method,
bool IsParametric)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < IDsOfElements.length(); i++)
- {
- CORBA::Long index = IDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Face)
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(IDsOfElements, aMesh, elements);
set<const SMDS_MeshNode*> fixedNodes;
- for (int i = 0; i < IDsOfFixedNodes.length(); i++)
- {
+ for (int i = 0; i < IDsOfFixedNodes.length(); i++) {
CORBA::Long index = IDsOfFixedNodes[i];
const SMDS_MeshNode * node = aMesh->FindNode(index);
if ( node )
anEditor.Smooth(elements, fixedNodes, method,
MaxNbOfIterations, MaxAspectRatio, IsParametric );
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "isDone = " << this << "."
<< (IsParametric ? "SmoothParametric( " : "Smooth( ")
return true;
}
+
//=============================================================================
/*!
*
SMESH::SMESH_MeshEditor::Smooth_Method Method,
bool IsParametric)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
CORBA::Boolean isDone = smooth (anElementsId, IDsOfFixedNodes, MaxNbOfIterations,
MaxAspectRatio, Method, IsParametric);
return isDone;
}
+
//=============================================================================
/*!
*
GetMeshDS()->Renumber( true );
}
+
//=============================================================================
/*!
*
GetMeshDS()->Renumber( false );
}
+
//=======================================================================
//function : RotationSweep
//purpose :
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
gp_Ax1 Ax1 (gp_Pnt( theAxis.x, theAxis.y, theAxis.z ),
gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz ));
anEditor.RotationSweep (elements, Ax1, theAngleInRadians,
theNbOfSteps, theTolerance);
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "axis = " << theAxis;
TPythonDump() << this << ".RotationSweep( "
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
RotationSweep(anElementsId, theAxis, theAngleInRadians, theNbOfSteps, theTolerance);
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
CASCatch_TRY {
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "stepVector = " << theStepVector;
TPythonDump() << this << ".ExtrusionSweep( "
<< theIDsOfElements << ", stepVector, " << theNbOfSteps << " )";
- }CASCatch_CATCH(Standard_Failure) {
+ }
+ CASCatch_CATCH(Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
INFOS( "SMESH_MeshEditor_i::ExtrusionSweep fails - "<< aFail->GetMessageString() );
}
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
ExtrusionSweep(anElementsId, theStepVector, theNbOfSteps);
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
SMESH::long_array_var allElementsId = theObject->GetIDs();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < allElementsId->length(); i++)
- {
- CORBA::Long index = allElementsId[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Edge )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(allElementsId, aMesh, elements);
+
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
TElemOfElemListMap aHystory;
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "stepVector = " << theStepVector;
TPythonDump() << this << ".ExtrusionSweepObject1D( "
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
SMESH::long_array_var allElementsId = theObject->GetIDs();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < allElementsId->length(); i++)
- {
- CORBA::Long index = allElementsId[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem && elem->GetType() == SMDSAbs_Face )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(allElementsId, aMesh, elements);
+
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
TElemOfElemListMap aHystory;
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "stepVector = " << theStepVector;
TPythonDump() << this << ".ExtrusionSweepObject2D( "
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
theExtrFlags, theSewTolerance);
+ UpdateLastResult(anEditor);
+
// Update Python script
TPythonDump() << "stepVector = " << theStepVector;
TPythonDump() << this << ".AdvancedExtrusion("
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
if ( thePathMesh->_is_nil() || thePathShape->_is_nil() )
if ( !nodeStart )
return SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE;
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
list<double> angles;
- for (int i = 0; i < theAngles.length(); i++)
- {
+ for (int i = 0; i < theAngles.length(); i++) {
angles.push_back( theAngles[i] );
}
<< theHasRefPoint << ", refPoint )";
::SMESH_MeshEditor anEditor( _myMesh );
- return convExtrError( anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
- theHasAngles, angles,
- theHasRefPoint, refPnt ) );
+ SMESH::SMESH_MeshEditor::Extrusion_Error error =
+ convExtrError( anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
+ theHasAngles, angles,
+ theHasRefPoint, refPnt ) );
+
+ UpdateLastResult(anEditor);
+
+ return error;
}
//=======================================================================
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
SMESH::SMESH_MeshEditor::Extrusion_Error error = ExtrusionAlongPath
(anElementsId, thePathMesh, thePathShape, theNodeStart,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.Transform (elements, aTrsf, theCopy);
+
+ if(theCopy) {
+ UpdateLastResult(anEditor);
+ }
}
+
//=======================================================================
//function : MirrorObject
//purpose :
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
Mirror(anElementsId, theAxis, theMirrorType, theCopy);
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
gp_Trsf aTrsf;
const SMESH::PointStruct * P = &theVector.PS;
aTrsf.SetTranslation( gp_Vec( P->x, P->y, P->z ));
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.Transform (elements, aTrsf, theCopy);
+ if(theCopy) {
+ UpdateLastResult(anEditor);
+ }
+
// Update Python script
TPythonDump() << "vector = " << theVector;
TPythonDump() << this << ".Translate( "
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
Translate(anElementsId, theVector, theCopy);
CORBA::Double theAngle,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
- set<const SMDS_MeshElement*> elements;
- for (int i = 0; i < theIDsOfElements.length(); i++)
- {
- CORBA::Long index = theIDsOfElements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- elements.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
+
gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.Transform (elements, aTrsf, theCopy);
+ if(theCopy) {
+ UpdateLastResult(anEditor);
+ }
+
// Update Python script
TPythonDump() << "axis = " << theAxis;
TPythonDump() << this << ".Rotate( "
CORBA::Double theAngle,
CORBA::Boolean theCopy)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESH::long_array_var anElementsId = theObject->GetIDs();
Rotate(anElementsId, theAxis, theAngle, theCopy);
void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double Tolerance,
SMESH::array_of_long_array_out GroupsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
::SMESH_MeshEditor anEditor( _myMesh );
set<const SMDS_MeshNode*> nodes; // no input nodes
GroupsOfNodes = new SMESH::array_of_long_array;
GroupsOfNodes->length( aListOfListOfNodes.size() );
::SMESH_MeshEditor::TListOfListOfNodes::iterator llIt = aListOfListOfNodes.begin();
- for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ )
- {
+ for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ ) {
list< const SMDS_MeshNode* >& aListOfNodes = *llIt;
list< const SMDS_MeshNode* >::iterator lIt = aListOfNodes.begin();;
SMESH::long_array& aGroup = GroupsOfNodes[ i ];
void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
TPythonDump aTPythonDump;
void SMESH_MeshEditor_i::MergeEqualElements()
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.MergeEqualElements();
CORBA::Boolean CreatePolygons,
CORBA::Boolean CreatePolyedrs)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 );
<< CreatePolyedrs<< " )";
::SMESH_MeshEditor anEditor( _myMesh );
- return convError( anEditor.SewFreeBorder (aBorderFirstNode,
- aBorderSecondNode,
- aBorderLastNode,
- aSide2FirstNode,
- aSide2SecondNode,
- aSide2ThirdNode,
- true,
- CreatePolygons,
- CreatePolyedrs) );
+ SMESH::SMESH_MeshEditor::Sew_Error error =
+ convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ aBorderSecondNode,
+ aBorderLastNode,
+ aSide2FirstNode,
+ aSide2SecondNode,
+ aSide2ThirdNode,
+ true,
+ CreatePolygons,
+ CreatePolyedrs) );
+
+ UpdateLastResult(anEditor);
+
+ return error;
}
+
//=======================================================================
//function : SewConformFreeBorders
//purpose :
CORBA::Long FirstNodeID2,
CORBA::Long SecondNodeID2)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 );
<< SecondNodeID2 << " )";
::SMESH_MeshEditor anEditor( _myMesh );
- return convError( anEditor.SewFreeBorder (aBorderFirstNode,
- aBorderSecondNode,
- aBorderLastNode,
- aSide2FirstNode,
- aSide2SecondNode,
- aSide2ThirdNode,
- true,
- false, false) );
+ SMESH::SMESH_MeshEditor::Sew_Error error =
+ convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ aBorderSecondNode,
+ aBorderLastNode,
+ aSide2FirstNode,
+ aSide2SecondNode,
+ aSide2ThirdNode,
+ true,
+ false, false) );
+
+ UpdateLastResult(anEditor);
+
+ return error;
}
+
//=======================================================================
//function : SewBorderToSide
//purpose :
CORBA::Boolean CreatePolygons,
CORBA::Boolean CreatePolyedrs)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeIDOnFreeBorder );
<< CreatePolyedrs << ") ";
::SMESH_MeshEditor anEditor( _myMesh );
- return convError( anEditor.SewFreeBorder (aBorderFirstNode,
- aBorderSecondNode,
- aBorderLastNode,
- aSide2FirstNode,
- aSide2SecondNode,
- aSide2ThirdNode,
- false,
- CreatePolygons,
- CreatePolyedrs) );
+ SMESH::SMESH_MeshEditor::Sew_Error error =
+ convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ aBorderSecondNode,
+ aBorderLastNode,
+ aSide2FirstNode,
+ aSide2SecondNode,
+ aSide2ThirdNode,
+ false,
+ CreatePolygons,
+ CreatePolyedrs) );
+
+ UpdateLastResult(anEditor);
+
+ return error;
}
+
//=======================================================================
//function : SewSideElements
//purpose :
CORBA::Long NodeID2OfSide1ToMerge,
CORBA::Long NodeID2OfSide2ToMerge)
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
SMESHDS_Mesh* aMesh = GetMeshDS();
const SMDS_MeshNode* aFirstNode1ToMerge = aMesh->FindNode( NodeID1OfSide1ToMerge );
!aSecondNode2ToMerge)
return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES;
- set<const SMDS_MeshElement*> aSide1Elems, aSide2Elems;
- for (int i = 0; i < IDsOfSide1Elements.length(); i++)
- {
- CORBA::Long index = IDsOfSide1Elements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- aSide1Elems.insert( elem );
- }
- for (int i = 0; i < IDsOfSide2Elements.length(); i++)
- {
- CORBA::Long index = IDsOfSide2Elements[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(index);
- if ( elem )
- aSide2Elems.insert( elem );
- }
+ map<int,const SMDS_MeshElement*> aSide1Elems, aSide2Elems;
+ ToMap(IDsOfSide1Elements, aMesh, aSide1Elems);
+ ToMap(IDsOfSide2Elements, aMesh, aSide2Elems);
+
// Update Python script
TPythonDump() << "error = " << this << ".SewSideElements( "
<< IDsOfSide1Elements << ", "
<< NodeID2OfSide2ToMerge << ")";
::SMESH_MeshEditor anEditor( _myMesh );
- return convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
- aFirstNode1ToMerge,
- aFirstNode2ToMerge,
- aSecondNode1ToMerge,
- aSecondNode2ToMerge));
+ SMESH::SMESH_MeshEditor::Sew_Error error =
+ convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
+ aFirstNode1ToMerge,
+ aFirstNode2ToMerge,
+ aSecondNode1ToMerge,
+ aSecondNode2ToMerge));
+
+ UpdateLastResult(anEditor);
+
+ return error;
}
+//================================================================================
+/*!
+ * \brief Set new nodes for given element
+ * \param ide - element id
+ * \param newIDs - new node ids
+ * \retval CORBA::Boolean - true if result is OK
+ */
+//================================================================================
+
+CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide,
+ const SMESH::long_array& newIDs)
+{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ const SMDS_MeshElement* elem = GetMeshDS()->FindElement(ide);
+ if(!elem) return false;
+
+ int nbn = newIDs.length();
+ int i=0;
+ const SMDS_MeshNode* aNodes [nbn];
+ int nbn1=-1;
+ for(; i<nbn; i++) {
+ const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(newIDs[i]);
+ if(aNode) {
+ nbn1++;
+ aNodes[nbn1] = aNode;
+ }
+ }
+ // Update Python script
+ TPythonDump() << "isDone = " << this << ".ChangeElemNodes( "
+ << ide << ", " << IDsOfElements << " )";
+#ifdef _DEBUG_
+ TPythonDump() << "print 'ChangeElemNodes: ', isDone";
+#endif
+
+ return GetMeshDS()->ChangeElementNodes( elem, aNodes, nbn1+1 );
+}
+
+//================================================================================
+/*!
+ * \brief Update myLastCreatedNodes and myLastCreatedElems
+ * \param anEditor - it contains last modification results
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::UpdateLastResult(::SMESH_MeshEditor& anEditor)
+{
+ // add new elements into myLastCreatedNodes
+ SMESH_SequenceOfElemPtr aSeq = anEditor.GetLastCreatedNodes();
+ SMESH::long_array_var aResult = new SMESH::long_array;
+ aResult->length(aSeq.Length());
+ int i=0;
+ for(; i<aSeq.Length(); i++) {
+ aResult[i] = aSeq.Value(i+1)->GetID();
+ }
+ myLastCreatedNodes = aResult._retn();
+ // add new elements into myLastCreatedElems
+ aSeq = anEditor.GetLastCreatedElems();
+ aResult = new SMESH::long_array;
+ aResult->length(aSeq.Length());
+ i=0;
+ for(; i<aSeq.Length(); i++) {
+ aResult[i] = aSeq.Value(i+1)->GetID();
+ }
+ myLastCreatedElems = aResult._retn();
+}
+
+//================================================================================
+/*!
+ * \brief Returns list of it's IDs of created nodes
+ * \retval SMESH::long_array* - list of node ID
+ */
+//================================================================================
+
+SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
+{
+ return myLastCreatedNodes;
+}
+
+//================================================================================
+/*!
+ * \brief Returns list of it's IDs of created elements
+ * \retval SMESH::long_array* - list of elements' ID
+ */
+//================================================================================
+
+SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
+{
+ return myLastCreatedElems;
+}
+
+
//=======================================================================
//function : ConvertToQuadratic
//purpose :
::SMESH_MeshEditor anEditor( _myMesh );
CORBA::Boolean isDone = anEditor.ConvertFromQuadratic();
// Update Python script
- TPythonDump() << this << ".ConvertFromQuadratic( )";
+ TPythonDump() << this << ".ConvertFromQuadratic()";
return isDone;
}