// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//
//
#include "SMESH_Gen_i.hxx"
#include "SMESH_Filter_i.hxx"
+#include "SMESH_PythonDump.hxx"
+#include "CASCatch.hxx"
#include "utilities.h"
list<const SMDS_MeshElement*> > TElemOfElemListMap;
using namespace std;
-
-//=======================================================================
-//function : addAxis
-//purpose :
-//=======================================================================
-
-static TCollection_AsciiString& addAxis(TCollection_AsciiString& theStr,
- const SMESH::AxisStruct & theAxis)
-{
- theStr += "SMESH.AxisStruct( ";
- theStr += TCollection_AsciiString( theAxis.x ) + ", ";
- theStr += TCollection_AsciiString( theAxis.y ) + ", ";
- theStr += TCollection_AsciiString( theAxis.z ) + ", ";
- theStr += TCollection_AsciiString( theAxis.vx ) + ", ";
- theStr += TCollection_AsciiString( theAxis.vy ) + ", ";
- theStr += TCollection_AsciiString( theAxis.vz ) + " )";
- return theStr;
-}
+using SMESH::TPythonDump;
//=============================================================================
/*!
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;
IdList.push_back( IDsOfElements[i] );
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.RemoveElements(");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".RemoveElements( " << IDsOfElements << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"RemoveElements: \", isDone" );
+ TPythonDump() << "print 'RemoveElements: ', isDone";
#endif
// Remove Elements
return anEditor.Remove( IdList, false );
-};
+}
//=============================================================================
/*!
*/
//=============================================================================
-CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::
- long_array & IDsOfNodes)
+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++)
IdList.push_back( IDsOfNodes[i] );
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.RemoveNodes(");
- SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".RemoveNodes( " << IDsOfNodes << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"RemoveNodes: \", isDone" );
+ TPythonDump() << "print 'RemoveNodes: ', isDone";
#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
- TCollection_AsciiString str ("isDone = mesh_editor.AddEdge([");
- str += TCollection_AsciiString((int) index1) + ", ";
- str += TCollection_AsciiString((int) index2) + " ])";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "edge = " << this << ".AddEdge([ "
+ << index1 << ", " << index2 <<" ])";
}
- return true;
+ if (NbNodes == 3) {
+ CORBA::Long n1 = IDsOfNodes[0];
+ CORBA::Long n2 = IDsOfNodes[1];
+ CORBA::Long n12 = IDsOfNodes[2];
+ elem = GetMeshDS()->AddEdge(GetMeshDS()->FindNode(n1),
+ GetMeshDS()->FindNode(n2),
+ GetMeshDS()->FindNode(n12));
+ // Update Python script
+ TPythonDump() << "edgeID = " << this << ".AddEdge([ "
+ <<n1<<", "<<n2<<", "<<n12<<" ])";
+ }
+
+ 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
- TCollection_AsciiString str ("isDone = mesh_editor.AddNode(");
- str += TCollection_AsciiString( x ) + ", ";
- str += TCollection_AsciiString( y ) + ", ";
- str += TCollection_AsciiString( z ) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ 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
- {
- GetMeshDS()->AddPolygonalFace(nodes);
+ else if (NbNodes == 6) {
+ elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
+ nodes[4], nodes[5]);
+ }
+ 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
- TCollection_AsciiString str ("isDone = mesh_editor.AddFace(");
- SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "faceID = " << this << ".AddFace( " << IDsOfNodes << " )";
+
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
+
+//=============================================================================
+/*!
+ * 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]);
+
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolygonalFace(nodes);
+
+ // Update Python script
+ TPythonDump() <<"faceID = "<<this<<".AddPolygonalFace( "<<IDsOfNodes<<" )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"AddFace: \", 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[i]=GetMeshDS()->FindNode(IDsOfNodes[i]);
+ SMDS_MeshElement* elem = 0;
switch(NbNodes)
{
- case 4:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3]); break;
- case 5:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4]); break;
- case 6:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5]); break;
- case 8:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7]); break;
+ case 4 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3]); break;
+ case 5 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4]); break;
+ case 6 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5]); break;
+ case 8 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7]); break;
+ case 10:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],
+ n[6],n[7],n[8],n[9]);
+ break;
+ case 13:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],
+ n[7],n[8],n[9],n[10],n[11],n[12]);
+ break;
+ case 15:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],
+ n[9],n[10],n[11],n[12],n[13],n[14]);
+ break;
+ case 20:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],
+ n[8],n[9],n[10],n[11],n[12],n[13],n[14],
+ n[15],n[16],n[17],n[18],n[19]);
+ break;
}
+
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.AddVolume(");
- SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "volID = " << this << ".AddVolume( " << IDsOfNodes << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"AddVolume: \", isDone" );
+ TPythonDump() << "print 'AddVolume: ', volID";
#endif
- return true;
-};
+ 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
- TCollection_AsciiString str ("isDone = mesh_editor.AddPolyhedralVolume(");
- SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ", ";
- SMESH_Gen_i::AddArray( str, Quantities ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolume( "
+ << IDsOfNodes << ", " << Quantities << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "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
- TCollection_AsciiString str ("isDone = mesh_editor.AddPolyhedralVolumeByFaces(");
- SMESH_Gen_i::AddArray( str, IdsOfFaces ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolumeByFaces( "
+ << IdsOfFaces << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "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;
GetMeshDS()->MoveNode(node, x, y, z);
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.MoveNode(");
- str += TCollection_AsciiString((Standard_Integer) NodeID) + ", ";
- str += TCollection_AsciiString((Standard_Real) x) + ", ";
- str += TCollection_AsciiString((Standard_Real) y) + ", ";
- str += TCollection_AsciiString((Standard_Real) z) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".MoveNode( "
+ << NodeID << ", " << x << ", " << y << ", " << z << " )";
return true;
}
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 )
return false;
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.InverseDiag(");
- str += TCollection_AsciiString((Standard_Integer) NodeID1) + ", ";
- str += TCollection_AsciiString((Standard_Integer) NodeID2) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".InverseDiag( "
+ << NodeID1 << ", " << NodeID2 << " )";
::SMESH_MeshEditor aMeshEditor( _myMesh );
return aMeshEditor.InverseDiag ( 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 )
return false;
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.DeleteDiag(");
- str += TCollection_AsciiString((Standard_Integer) NodeID1) + ", ";
- str += TCollection_AsciiString((Standard_Integer) NodeID2) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".DeleteDiag( "
+ << 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++)
{
anEditor.Reorient( elem );
}
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.Reorient(");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".Reorient( " << IDsOfElements << " )";
return true;
}
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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.ReorientObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".ReorientObject( " << theObject << " )";
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,
+ const SMDSAbs_ElementType aType = SMDSAbs_All )
+{
+ 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);
+ if ( elem && ( aType == SMDSAbs_All || elem->GetType() == aType ))
+ aMap.insert( make_pair( elem->GetID(), 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, SMDSAbs_Face);
+
SMESH::NumericalFunctor_i* aNumericalFunctor =
dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
SMESH::Controls::NumericalFunctorPtr aCrit;
aCrit = aNumericalFunctor->GetNumericalFunctor();
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.TriToQuad(");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", None, ";
- str += TCollection_AsciiString((Standard_Real) MaxAngle) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".TriToQuad( "
+ << IDsOfElements << ", " << aNumericalFunctor << ", " << MaxAngle << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"TriToQuad: \", isDone" );
+ TPythonDump() << "print 'TriToQuad: ', isDone";
#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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
#endif
+ SMESH::NumericalFunctor_i* aNumericalFunctor =
+ SMESH::DownCast<SMESH::NumericalFunctor_i*>( Criterion );
+
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.TriToQuadObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", None, ";
- str += TCollection_AsciiString((Standard_Real) MaxAngle) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".TriToQuadObject("
+ << theObject << ", " << aNumericalFunctor << ", " << MaxAngle << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"TriToQuadObject: \", isDone" );
+ TPythonDump() << "print 'TriToQuadObject: ', isDone";
#endif
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, SMDSAbs_Face);
+
SMESH::NumericalFunctor_i* aNumericalFunctor =
dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
SMESH::Controls::NumericalFunctorPtr aCrit;
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.QuadToTri(");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", None )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".QuadToTri( " << IDsOfElements << ", " << aNumericalFunctor << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"QuadToTri: \", isDone" );
+ TPythonDump() << "print 'QuadToTri: ', isDone";
#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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
#endif
+ SMESH::NumericalFunctor_i* aNumericalFunctor =
+ SMESH::DownCast<SMESH::NumericalFunctor_i*>( Criterion );
+
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.QuadToTriObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", None )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".QuadToTriObject( " << theObject << ", " << aNumericalFunctor << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"QuadToTriObject: \", isDone" );
+ TPythonDump() << "print 'QuadToTriObject: ', isDone";
#endif
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, SMDSAbs_Face);
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.SplitQuad(");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", ";
- str += TCollection_AsciiString( Diag13 ) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".SplitQuad( "
+ << IDsOfElements << ", " << Diag13 << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"SplitQuad: \", isDone" );
+ TPythonDump() << "print 'SplitQuad: ', isDone";
#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);
#endif
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.SplitQuadObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", ";
- str += TCollection_AsciiString( Diag13 ) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".SplitQuadObject( "
+ << theObject << ", " << Diag13 << " )";
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"SplitQuadObject: \", isDone" );
+ TPythonDump() << "print 'SplitQuadObject: ', isDone";
#endif
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, SMDSAbs_Face);
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
- TCollection_AsciiString str ("isDone = mesh_editor.");
- str += (char*) (IsParametric ? "SmoothParametric( " : "Smooth( ");
- SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", ";
- SMESH_Gen_i::AddArray( str, IDsOfFixedNodes ) += ", ";
- str += (Standard_Integer) MaxNbOfIterations;
- str += ", ";
- str += (Standard_Real) MaxAspectRatio;
- if ( method == ::SMESH_MeshEditor::CENTROIDAL )
- str += ", SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH, ";
- else
- str += ", SMESH.SMESH_MeshEditor.LAPLACIAN_SMOOTH, ";
- str += IsParametric;
- str += " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << "."
+ << (IsParametric ? "SmoothParametric( " : "Smooth( ")
+ << IDsOfElements << ", " << IDsOfFixedNodes << ", "
+ << MaxNbOfIterations << ", " << MaxAspectRatio << ", "
+ << "SMESH.SMESH_MeshEditor."
+ << ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH ?
+ "CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"Smooth: \", isDone" );
+ TPythonDump() << "print 'Smooth: ', isDone";
#endif
return true;
}
+
//=============================================================================
/*!
*
//=============================================================================
CORBA::Boolean
- SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObject,
- const SMESH::long_array & IDsOfFixedNodes,
- CORBA::Long MaxNbOfIterations,
- CORBA::Double MaxAspectRatio,
- SMESH::SMESH_MeshEditor::Smooth_Method Method,
- bool IsParametric)
+SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObject,
+ const SMESH::long_array & IDsOfFixedNodes,
+ CORBA::Long MaxNbOfIterations,
+ CORBA::Double MaxAspectRatio,
+ 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);
#endif
// Update Python script
- TCollection_AsciiString str ("isDone = mesh_editor.");
- str += (char*) (IsParametric ? "SmoothParametricObject( " : "SmoothObject( ");
- SMESH_Gen_i::AddObject( str, theObject ) += ", ";
- SMESH_Gen_i::AddArray( str, IDsOfFixedNodes ) += ", ";
- str += (Standard_Integer) MaxNbOfIterations;
- str += ", ";
- str += (Standard_Real) MaxAspectRatio;
- if ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH )
- str += ", SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH, ";
- else
- str += ", SMESH.SMESH_MeshEditor.LAPLACIAN_SMOOTH, ";
- str += IsParametric;
- str += " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << "."
+ << (IsParametric ? "SmoothParametricObject( " : "SmoothObject( ")
+ << theObject << ", " << IDsOfFixedNodes << ", "
+ << MaxNbOfIterations << ", " << MaxAspectRatio << ", "
+ << "SMESH.SMESH_MeshEditor."
+ << ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH ?
+ "CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
#ifdef _DEBUG_
- SMESH_Gen_i::AddToCurrentPyScript( "print \"SmoothObject: \", isDone" );
+ TPythonDump() << "print 'SmoothObject: ', isDone";
#endif
return isDone;
}
+
//=============================================================================
/*!
*
void SMESH_MeshEditor_i::RenumberNodes()
{
// Update Python script
- SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.RenumberNodes()" );
+ TPythonDump() << this << ".RenumberNodes()";
GetMeshDS()->Renumber( true );
}
+
//=============================================================================
/*!
*
void SMESH_MeshEditor_i::RenumberElements()
{
// Update Python script
- SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.RenumberElements()" );
+ TPythonDump() << this << ".RenumberElements()";
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
- TCollection_AsciiString str = "axis = ";
- addAxis( str, theAxis );
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = "mesh_editor.RotationSweep(";
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", axis, ";
- str += TCollection_AsciiString( theAngleInRadians ) + ", ";
- str += TCollection_AsciiString( (int)theNbOfSteps ) + ", ";
- str += TCollection_AsciiString( theTolerance ) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "axis = " << theAxis;
+ TPythonDump() << this << ".RotationSweep( "
+ << theIDsOfElements
+ << ", axis, "
+ << theAngleInRadians << ", "
+ << theNbOfSteps << ", "
+ << theTolerance << " )";
}
//=======================================================================
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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("mesh_editor.RotationSweepObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", axis, ";
- str += TCollection_AsciiString( theAngleInRadians ) + ", ";
- str += TCollection_AsciiString( (int)theNbOfSteps ) + ", ";
- str += TCollection_AsciiString( theTolerance ) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << this << ".RotationSweepObject( "
+ << theObject
+ << ", axis, "
+ << theAngleInRadians << ", "
+ << theNbOfSteps << ", "
+ << theTolerance << " )";
}
//=======================================================================
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
{
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
- 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 );
- }
- const SMESH::PointStruct * P = &theStepVector.PS;
- gp_Vec stepVec( P->x, P->y, P->z );
+ CASCatch_TRY {
+ SMESHDS_Mesh* aMesh = GetMeshDS();
+
+ map<int,const SMDS_MeshElement*> elements;
+ ToMap(theIDsOfElements, aMesh, elements);
- ::SMESH_MeshEditor anEditor( _myMesh );
- //anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps);
- TElemOfElemListMap aHystory;
- anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+ const SMESH::PointStruct * P = &theStepVector.PS;
+ gp_Vec stepVec( P->x, P->y, P->z );
+
+ TElemOfElemListMap aHystory;
+ ::SMESH_MeshEditor anEditor( _myMesh );
+ anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
- // Update Python script
- TCollection_AsciiString str = "stepVector = SMESH.DirStruct( SMESH.PointStruct ( ";
- str += (TCollection_AsciiString) stepVec.X() + ", ";
- str += (TCollection_AsciiString) stepVec.Y() + ", ";
- str += (TCollection_AsciiString) stepVec.Z() + " ))";
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = ("mesh_editor.ExtrusionSweep(");
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", stepVector, ";
- str += TCollection_AsciiString((int)theNbOfSteps) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ UpdateLastResult(anEditor);
+
+ // Update Python script
+ TPythonDump() << "stepVector = " << theStepVector;
+ TPythonDump() << this << ".ExtrusionSweep( "
+ << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )";
+
+ }
+ 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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("mesh_editor.ExtrusionSweepObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", stepVector, ";
- str += TCollection_AsciiString((int)theNbOfSteps) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << this << ".ExtrusionSweepObject( "
+ << theObject << ", stepVector, " << 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 );
//anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps);
TElemOfElemListMap aHystory;
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+
+ UpdateLastResult(anEditor);
+
+ // Update Python script
+ TPythonDump() << "stepVector = " << theStepVector;
+ TPythonDump() << this << ".ExtrusionSweepObject1D( "
+ << theObject << ", stepVector, " << 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_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 );
//anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps);
TElemOfElemListMap aHystory;
anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+
+ UpdateLastResult(anEditor);
+
+ // Update Python script
+ TPythonDump() << "stepVector = " << theStepVector;
+ TPythonDump() << this << ".ExtrusionSweepObject2D( "
+ << theObject << ", stepVector, " << theNbOfSteps << " )";
}
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
- TCollection_AsciiString str = "stepVector = SMESH.DirStruct( SMESH.PointStruct ( ";
- str += (TCollection_AsciiString) stepVec.X() + ", ";
- str += (TCollection_AsciiString) stepVec.Y() + ", ";
- str += (TCollection_AsciiString) stepVec.Z() + " ))";
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = ("mesh_editor.AdvancedExtrusion(");
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", stepVector, ";
- str += TCollection_AsciiString((int)theNbOfSteps) + ",";
- str += TCollection_AsciiString((int)theExtrFlags) + ", ";
- str += TCollection_AsciiString((double)theSewTolerance) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "stepVector = " << theStepVector;
+ TPythonDump() << this << ".AdvancedExtrusion("
+ << theIDsOfElements
+ << ", stepVector, "
+ << theNbOfSteps << ","
+ << theExtrFlags << ", "
+ << theSewTolerance << " )";
}
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() )
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( thePathShape );
SMESH_subMesh* aSubMesh = aMeshImp->GetImpl().GetSubMesh( aShape );
- if ( !aSubMesh )
+ if ( !aSubMesh || !aSubMesh->GetSubMeshDS())
return SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE;
SMDS_MeshNode* nodeStart = (SMDS_MeshNode*)aMeshImp->GetImpl().GetMeshDS()->FindNode(theNodeStart);
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] );
}
gp_Pnt refPnt( theRefPoint.x, theRefPoint.y, theRefPoint.z );
// Update Python script
- TCollection_AsciiString str = "refPoint = SMESH.PointStruct( ";
- str += (TCollection_AsciiString) refPnt.X() + ", ";
- str += (TCollection_AsciiString) refPnt.Y() + ", ";
- str += (TCollection_AsciiString) refPnt.Z() + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = ("error = mesh_editor.ExtrusionAlongPath(");
- SMESH_Gen_i::AddArray ( str, theIDsOfElements ) += ", ";
- SMESH_Gen_i::AddObject( str, thePathMesh ) += ", ";
- SMESH_Gen_i::AddObject( str, thePathShape ) += ", ";
- str += TCollection_AsciiString( (int)theNodeStart ) + ", ";
- str += TCollection_AsciiString( (int)theHasAngles ) + ", ";
- SMESH_Gen_i::AddArray ( str, theAngles ) += ", ";
- str += (TCollection_AsciiString) theHasRefPoint + ", refPoint )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "refPoint = SMESH.PointStruct( "
+ << refPnt.X() << ", "
+ << refPnt.Y() << ", "
+ << refPnt.Z() << " )";
+ TPythonDump() << "error = " << this << ".ExtrusionAlongPath( "
+ << theIDsOfElements << ", "
+ << thePathMesh << ", "
+ << thePathShape << ", "
+ << theNodeStart << ", "
+ << theHasAngles << ", "
+ << theAngles << ", "
+ << 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;
}
//=======================================================================
//=======================================================================
SMESH::SMESH_MeshEditor::Extrusion_Error
- SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObject,
- SMESH::SMESH_Mesh_ptr thePathMesh,
- GEOM::GEOM_Object_ptr thePathShape,
- CORBA::Long theNodeStart,
- CORBA::Boolean theHasAngles,
- const SMESH::double_array & theAngles,
- CORBA::Boolean theHasRefPoint,
- const SMESH::PointStruct & theRefPoint)
+SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObject,
+ SMESH::SMESH_Mesh_ptr thePathMesh,
+ GEOM::GEOM_Object_ptr thePathShape,
+ CORBA::Long theNodeStart,
+ CORBA::Boolean theHasAngles,
+ const SMESH::double_array & theAngles,
+ 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,
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("error = mesh_editor.ExtrusionAlongPathObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", ";
- SMESH_Gen_i::AddObject( str, thePathMesh ) += ", ";
- SMESH_Gen_i::AddObject( str, thePathShape ) += ", ";
- str += TCollection_AsciiString( (int)theNodeStart ) + ", ";
- str += TCollection_AsciiString( theHasAngles ) + ", ";
- SMESH_Gen_i::AddArray ( str, theAngles ) += ", ";
- str += TCollection_AsciiString( theHasRefPoint ) + ", refPoint )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( "
+ << theObject << ", "
+ << thePathMesh << ", "
+ << thePathShape << ", "
+ << theNodeStart << ", "
+ << theHasAngles << ", "
+ << theAngles << ", "
+ << theHasRefPoint << ", refPoint )";
return error;
}
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 );
gp_Trsf aTrsf;
- TCollection_AsciiString typeStr, copyStr( theCopy );
+ TCollection_AsciiString typeStr;
switch ( theMirrorType ) {
case SMESH::SMESH_MeshEditor::POINT:
aTrsf.SetMirror( P );
}
// Update Python script
- TCollection_AsciiString str ("mesh_editor.Mirror(");
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", ";
- addAxis( str, theAxis ) += ", ";
- str += typeStr + ", ";
- str += copyStr + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << this << ".Mirror( "
+ << theIDsOfElements << ", "
+ << theAxis << ", "
+ << typeStr << ", "
+ << theCopy << " )";
::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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString typeStr, copyStr( theCopy );
+ TCollection_AsciiString typeStr;
switch ( theMirrorType ) {
case SMESH::SMESH_MeshEditor::POINT:
typeStr = "SMESH.SMESH_MeshEditor.POINT";
default:
typeStr = "SMESH.SMESH_MeshEditor.PLANE";
}
-
- TCollection_AsciiString str ("mesh_editor.MirrorObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", ";
- addAxis( str, theAxis ) += ", ";
- str += typeStr + ", " + copyStr + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "axis = " << theAxis;
+ TPythonDump() << this << ".MirrorObject( "
+ << theObject << ", "
+ << "axis, "
+ << typeStr << ", "
+ << 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
- TCollection_AsciiString str = "vector = SMESH.DirStruct( SMESH.PointStruct ( ";
- str += (TCollection_AsciiString) P->x + ", ";
- str += (TCollection_AsciiString) P->y + ", ";
- str += (TCollection_AsciiString) P->z + " ))";
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = ("mesh_editor.Translate(");
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", vector, ";
- str += (TCollection_AsciiString) theCopy + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "vector = " << theVector;
+ TPythonDump() << this << ".Translate( "
+ << theIDsOfElements
+ << ", vector, "
+ << theCopy << " )";
}
//=======================================================================
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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("mesh_editor.TranslateObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", vector, ";
- str += TCollection_AsciiString( theCopy ) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << this << ".TranslateObject( "
+ << theObject
+ << ", vector, "
+ << 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
- TCollection_AsciiString str ("axis = ");
- addAxis( str, theAxis );
- SMESH_Gen_i::AddToCurrentPyScript( str );
- str = ("mesh_editor.Rotate(");
- SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", axis, ";
- str += (TCollection_AsciiString) theAngle + ", ";
- str += (TCollection_AsciiString) theCopy + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "axis = " << theAxis;
+ TPythonDump() << this << ".Rotate( "
+ << theIDsOfElements
+ << ", axis, "
+ << theAngle << ", "
+ << theCopy << " )";
}
//=======================================================================
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);
aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
// Update Python script
- TCollection_AsciiString str ("mesh_editor.RotateObject(");
- SMESH_Gen_i::AddObject( str, theObject ) += ", axis, ";
- str += TCollection_AsciiString( theAngle ) + ", ";
- str += TCollection_AsciiString( theCopy ) + " )";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << this << ".RotateObject( "
+ << theObject
+ << ", axis, "
+ << 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 ];
for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ )
aGroup[ j ] = (*lIt)->GetID();
}
+ // Update Python script
+ TPythonDump() << "coincident_nodes = " << this << ".FindCoincidentNodes( "
+ << Tolerance << " )";
}
//=======================================================================
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();
- TCollection_AsciiString str( "mesh_editor.MergeNodes([" );
+ TPythonDump aTPythonDump;
+ aTPythonDump << this << ".MergeNodes([";
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
for (int i = 0; i < GroupsOfNodes.length(); i++)
{
if ( aListOfNodes.size() < 2 )
aListOfListOfNodes.pop_back();
- if ( i > 0 )
- str += ",";
- SMESH_Gen_i::AddArray( str, aNodeGroup );
+ if ( i > 0 ) aTPythonDump << ", ";
+ aTPythonDump << aNodeGroup;
}
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.MergeNodes( aListOfListOfNodes );
// Update Python script
- SMESH_Gen_i::AddToCurrentPyScript( str + "])" );
+ aTPythonDump << "])";
}
//=======================================================================
void SMESH_MeshEditor_i::MergeEqualElements()
{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
::SMESH_MeshEditor anEditor( _myMesh );
anEditor.MergeEqualElements();
// Update Python script
- SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.MergeEqualElements()" );
+ TPythonDump() << this << ".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 );
return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
// Update Python script
- TCollection_AsciiString str ("error = mesh_editor.SewFreeBorders( ");
- str += TCollection_AsciiString( (int) FirstNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) SecondNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) LastNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) FirstNodeID2 ) + ", ";
- str += TCollection_AsciiString( (int) SecondNodeID2 ) + ", ";
- str += TCollection_AsciiString( (int) LastNodeID2 ) + ", ";
- str += TCollection_AsciiString( CreatePolygons ) + ", ";
- str += TCollection_AsciiString( CreatePolyedrs ) + ") ";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "error = " << this << ".SewFreeBorders( "
+ << FirstNodeID1 << ", "
+ << SecondNodeID1 << ", "
+ << LastNodeID1 << ", "
+ << FirstNodeID2 << ", "
+ << SecondNodeID2 << ", "
+ << LastNodeID2 << ", "
+ << CreatePolygons<< ", "
+ << 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 :
//=======================================================================
SMESH::SMESH_MeshEditor::Sew_Error
- SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
- CORBA::Long SecondNodeID1,
- CORBA::Long LastNodeID1,
- CORBA::Long FirstNodeID2,
- CORBA::Long SecondNodeID2)
+SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
+ CORBA::Long SecondNodeID1,
+ CORBA::Long LastNodeID1,
+ 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 );
return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
// Update Python script
- TCollection_AsciiString str ("error = mesh_editor.SewConformFreeBorders( ");
- str += TCollection_AsciiString( (int) FirstNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) SecondNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) LastNodeID1 ) + ", ";
- str += TCollection_AsciiString( (int) FirstNodeID2 ) + ", ";
- str += TCollection_AsciiString( (int) SecondNodeID2 ) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "error = " << this << ".SewConformFreeBorders( "
+ << FirstNodeID1 << ", "
+ << SecondNodeID1 << ", "
+ << LastNodeID1 << ", "
+ << FirstNodeID2 << ", "
+ << 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 :
//=======================================================================
SMESH::SMESH_MeshEditor::Sew_Error
- SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
- CORBA::Long SecondNodeIDOnFreeBorder,
- CORBA::Long LastNodeIDOnFreeBorder,
- CORBA::Long FirstNodeIDOnSide,
- CORBA::Long LastNodeIDOnSide,
- CORBA::Boolean CreatePolygons,
- CORBA::Boolean CreatePolyedrs)
+SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
+ CORBA::Long SecondNodeIDOnFreeBorder,
+ CORBA::Long LastNodeIDOnFreeBorder,
+ CORBA::Long FirstNodeIDOnSide,
+ CORBA::Long LastNodeIDOnSide,
+ 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 );
return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE_NODES;
// Update Python script
- TCollection_AsciiString str ("error = mesh_editor.SewBorderToSide( ");
- str += TCollection_AsciiString( (int) FirstNodeIDOnFreeBorder ) + ", ";
- str += TCollection_AsciiString( (int) SecondNodeIDOnFreeBorder ) + ", ";
- str += TCollection_AsciiString( (int) LastNodeIDOnFreeBorder ) + ", ";
- str += TCollection_AsciiString( (int) FirstNodeIDOnSide ) + ", ";
- str += TCollection_AsciiString( (int) LastNodeIDOnSide ) + ", ";
- str += TCollection_AsciiString( CreatePolygons ) + ", ";
- str += TCollection_AsciiString( CreatePolyedrs ) + ") ";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "error = " << this << ".SewBorderToSide( "
+ << FirstNodeIDOnFreeBorder << ", "
+ << SecondNodeIDOnFreeBorder << ", "
+ << LastNodeIDOnFreeBorder << ", "
+ << FirstNodeIDOnSide << ", "
+ << LastNodeIDOnSide << ", "
+ << CreatePolygons << ", "
+ << 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 :
//=======================================================================
SMESH::SMESH_MeshEditor::Sew_Error
- SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
- const SMESH::long_array& IDsOfSide2Elements,
- CORBA::Long NodeID1OfSide1ToMerge,
- CORBA::Long NodeID1OfSide2ToMerge,
- CORBA::Long NodeID2OfSide1ToMerge,
- CORBA::Long NodeID2OfSide2ToMerge)
+SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
+ const SMESH::long_array& IDsOfSide2Elements,
+ CORBA::Long NodeID1OfSide1ToMerge,
+ CORBA::Long NodeID1OfSide2ToMerge,
+ 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 << ", "
+ << IDsOfSide2Elements << ", "
+ << NodeID1OfSide1ToMerge << ", "
+ << NodeID1OfSide2ToMerge << ", "
+ << NodeID2OfSide1ToMerge << ", "
+ << NodeID2OfSide2ToMerge << ")";
+
+ ::SMESH_MeshEditor anEditor( _myMesh );
+ 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
- TCollection_AsciiString str ("error = mesh_editor.SewSideElements( ");
- SMESH_Gen_i::AddArray( str, IDsOfSide1Elements ) += ", ";
- SMESH_Gen_i::AddArray( str, IDsOfSide2Elements ) += ", ";
- str += TCollection_AsciiString( (int) NodeID1OfSide1ToMerge ) + ", ";
- str += TCollection_AsciiString( (int) NodeID1OfSide2ToMerge ) + ", ";
- str += TCollection_AsciiString( (int) NodeID2OfSide1ToMerge ) + ", ";
- str += TCollection_AsciiString( (int) NodeID2OfSide2ToMerge ) + ")";
- SMESH_Gen_i::AddToCurrentPyScript( str );
+ TPythonDump() << "isDone = " << this << ".ChangeElemNodes( "
+ << ide << ", " << newIDs << " )";
+#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 :
+//=======================================================================
+
+void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
+{
+ ::SMESH_MeshEditor anEditor( _myMesh );
+ anEditor.ConvertToQuadratic(theForce3d);
+ // Update Python script
+ TPythonDump() << this << ".ConvertToQuadratic( "
+ << theForce3d << " )";
+}
+
+//=======================================================================
+//function : ConvertFromQuadratic
+//purpose :
+//=======================================================================
+
+CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
+{
::SMESH_MeshEditor anEditor( _myMesh );
- return convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
- aFirstNode1ToMerge,
- aFirstNode2ToMerge,
- aSecondNode1ToMerge,
- aSecondNode2ToMerge));
+ CORBA::Boolean isDone = anEditor.ConvertFromQuadratic();
+ // Update Python script
+ TPythonDump() << this << ".ConvertFromQuadratic()";
+ return isDone;
}