-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "SMESH_MeshEditor_i.hxx"
+#include "SMDS_EdgePosition.hxx"
+#include "SMDS_ElemIterator.hxx"
+#include "SMDS_FacePosition.hxx"
+#include "SMDS_IteratorOnIterators.hxx"
#include "SMDS_LinearEdge.hxx"
#include "SMDS_Mesh0DElement.hxx"
#include "SMDS_MeshFace.hxx"
#include "SMDS_MeshVolume.hxx"
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
#include "SMDS_SetIterator.hxx"
+#include "SMDS_VolumeTool.hxx"
#include "SMESHDS_Group.hxx"
+#include "SMESHDS_GroupOnGeom.hxx"
#include "SMESH_ControlsDef.hxx"
#include "SMESH_Filter_i.hxx"
#include "SMESH_Gen_i.hxx"
+#include "SMESH_Group.hxx"
#include "SMESH_Group_i.hxx"
+#include "SMESH_MeshPartDS.hxx"
+#include "SMESH_MesherHelper.hxx"
#include "SMESH_PythonDump.hxx"
#include "SMESH_subMeshEventListener.hxx"
#include "SMESH_subMesh_i.hxx"
-#include "utilities.h"
-#include "Utils_ExceptHandlers.hxx"
-#include "Utils_CorbaException.hxx"
+#include <utilities.h>
+#include <Utils_ExceptHandlers.hxx>
+#include <Utils_CorbaException.hxx>
+#include <SALOMEDS_wrap.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRep_Tool.hxx>
#include <sstream>
#include <limits>
+#include "SMESH_TryCatch.hxx" // include after OCCT headers!
+
#define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
using namespace std;
using SMESH::TPythonDump;
+using SMESH::TVar;
-namespace {
+namespace MeshEditor_I {
//=============================================================================
/*!
SMDSAbs_ElementType myPreviewType; // type to show
//!< Constructor
TPreviewMesh(SMDSAbs_ElementType previewElements = SMDSAbs_All) {
- _isShapeToMesh = (_id =_studyId =_idDoc = 0);
+ _isShapeToMesh = (_id =_studyId = 0);
_myMeshDS = new SMESHDS_Mesh( _id, true );
myPreviewType = previewElements;
}
//!< Destructor
- virtual ~TPreviewMesh() { delete _myMeshDS; }
+ virtual ~TPreviewMesh() { delete _myMeshDS; _myMeshDS = 0; }
//!< Copy a set of elements
void Copy(const TIDSortedElemSet & theElements,
TIDSortedElemSet& theCopyElements,
if ( type == theAvoidType ||
( theSelectType != SMDSAbs_All && type != theSelectType ))
continue;
-
- if ( const SMDS_MeshElement* anElemCopy = Copy( anElem ))
+ const SMDS_MeshElement* anElemCopy;
+ if ( type == SMDSAbs_Node)
+ anElemCopy = Copy( cast2Node(anElem) );
+ else
+ anElemCopy = Copy( anElem );
+ if ( anElemCopy )
theCopyElements.insert( theCopyElements.end(), anElemCopy );
}
}
SMESH_Mesh* myMesh;
string myMeshPartIOR;
//!< Constructor
- TSearchersDeleter(): SMESH_subMeshEventListener( false ), // won't be deleted by submesh
+ TSearchersDeleter(): SMESH_subMeshEventListener( false, // won't be deleted by submesh
+ "SMESH_MeshEditor_i::TSearchersDeleter"),
myMesh(0) {}
//!< Delete theNodeSearcher
static void Delete()
const SMDS_MeshElement * elem =
(aType == SMDSAbs_Node ? aMesh->FindNode(ind) : aMesh->FindElement(ind));
if ( elem && ( aType == SMDSAbs_All || elem->GetType() == aType ))
- aMap.insert( elem );
+ aMap.insert( aMap.end(), elem );
}
}
//================================================================================
else
{
arrayToSet( anIDs, theMeshDS, theElemSet, theType);
+ return bool(anIDs->length()) == bool(theElemSet.size());
}
return true;
}
}
}
}
-}
+
+ //================================================================================
+ /*!
+ * \brief Return a string used to detect change of mesh part on which theElementSearcher
+ * is going to be used
+ */
+ //================================================================================
+
+ string getPartIOR( SMESH::SMESH_IDSource_ptr theMeshPart, SMESH::ElementType type)
+ {
+ string partIOR = SMESH_Gen_i::GetORB()->object_to_string( theMeshPart );
+ if ( SMESH_Group_i* group_i = SMESH::DownCast<SMESH_Group_i*>( theMeshPart ))
+ // take into account passible group modification
+ partIOR += SMESH_Comment( ((SMESHDS_Group*)group_i->GetGroupDS())->SMDSGroup().Tic() );
+ partIOR += SMESH_Comment( type );
+ return partIOR;
+ }
+
+} // namespace MeshEditor_I
+
+using namespace MeshEditor_I;
//=============================================================================
/*!
*/
//=============================================================================
-SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh_i* theMesh, bool isPreview)
+SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh_i* theMesh, bool isPreview):
+ myMesh_i( theMesh ),
+ myMesh( &theMesh->GetImpl() ),
+ myEditor( myMesh ),
+ myIsPreviewMode ( isPreview ),
+ myPreviewMesh( 0 ),
+ myPreviewEditor( 0 )
{
- myMesh_i = theMesh;
- myMesh = & theMesh->GetImpl();
- myPreviewMode = isPreview;
}
//================================================================================
SMESH_MeshEditor_i::~SMESH_MeshEditor_i()
{
+ deleteAuxIDSources();
+ delete myPreviewMesh; myPreviewMesh = 0;
+ delete myPreviewEditor; myPreviewEditor = 0;
}
//================================================================================
void SMESH_MeshEditor_i::initData(bool deleteSearchers)
{
- if ( myPreviewMode ) {
- myPreviewData = new SMESH::MeshPreviewStruct();
+ if ( myIsPreviewMode ) {
+ if ( myPreviewMesh ) myPreviewMesh->Clear();
}
else {
- myLastCreatedElems = new SMESH::long_array();
- myLastCreatedNodes = new SMESH::long_array();
if ( deleteSearchers )
TSearchersDeleter::Delete();
}
+ getEditor().GetError().reset();
+ getEditor().CrearLastCreated();
+}
+//================================================================================
+/*!
+ * \brief Return either myEditor or myPreviewEditor depending on myIsPreviewMode.
+ * WARNING: in preview mode call getPreviewMesh() before getEditor()!
+ */
+//================================================================================
+
+::SMESH_MeshEditor& SMESH_MeshEditor_i::getEditor()
+{
+ if ( myIsPreviewMode && !myPreviewEditor ) {
+ if ( !myPreviewMesh ) getPreviewMesh();
+ myPreviewEditor = new ::SMESH_MeshEditor( myPreviewMesh );
+ }
+ return myIsPreviewMode ? *myPreviewEditor : myEditor;
+}
+
+//================================================================================
+/*!
+ * \brief Initialize and return myPreviewMesh
+ * \param previewElements - type of elements to show in preview
+ *
+ * WARNING: call it once par a method!
+ */
+//================================================================================
+
+TPreviewMesh * SMESH_MeshEditor_i::getPreviewMesh(SMDSAbs_ElementType previewElements)
+{
+ if ( !myPreviewMesh || myPreviewMesh->myPreviewType != previewElements )
+ {
+ delete myPreviewEditor;
+ myPreviewEditor = 0;
+ delete myPreviewMesh;
+ myPreviewMesh = new TPreviewMesh( previewElements );
+ }
+ myPreviewMesh->Clear();
+ return myPreviewMesh;
+}
+
+//================================================================================
+/*!
+ * \brief Now does nothing
+ */
+//================================================================================
+
+// void SMESH_MeshEditor_i::storeResult(::SMESH_MeshEditor& )
+// {
+// }
+
+//================================================================================
+/*!
+ * Return data of mesh edition preview
+ */
+//================================================================================
+
+SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
+{
+ const bool hasBadElems = ( getEditor().GetError() && getEditor().GetError()->HasBadElems() );
+
+ if ( myIsPreviewMode || hasBadElems ) { // --- MeshPreviewStruct filling ---
+
+ list<int> aNodesConnectivity;
+ typedef map<int, int> TNodesMap;
+ TNodesMap nodesMap;
+
+ SMESHDS_Mesh* aMeshDS;
+ std::auto_ptr< SMESH_MeshPartDS > aMeshPartDS;
+ if ( hasBadElems ) {
+ aMeshPartDS.reset( new SMESH_MeshPartDS( getEditor().GetError()->myBadElements ));
+ aMeshDS = aMeshPartDS.get();
+ }
+ else {
+ aMeshDS = getEditor().GetMeshDS();
+ }
+ myPreviewData = new SMESH::MeshPreviewStruct();
+ myPreviewData->nodesXYZ.length(aMeshDS->NbNodes());
+
+
+ SMDSAbs_ElementType previewType = SMDSAbs_All;
+ if ( !hasBadElems )
+ if (TPreviewMesh * aPreviewMesh = dynamic_cast< TPreviewMesh* >( getEditor().GetMesh() )) {
+ previewType = aPreviewMesh->myPreviewType;
+ switch ( previewType ) {
+ case SMDSAbs_Edge : break;
+ case SMDSAbs_Face : break;
+ case SMDSAbs_Volume: break;
+ default:;
+ if ( aMeshDS->GetMeshInfo().NbElements() == 0 ) previewType = SMDSAbs_Node;
+ }
+ }
+
+ myPreviewData->elementTypes.length( aMeshDS->GetMeshInfo().NbElements( previewType ));
+ int i = 0, j = 0;
+ SMDS_ElemIteratorPtr itMeshElems = aMeshDS->elementsIterator(previewType);
+
+ while ( itMeshElems->more() ) {
+ const SMDS_MeshElement* aMeshElem = itMeshElems->next();
+ SMDS_ElemIteratorPtr itElemNodes = aMeshElem->nodesIterator();
+ while ( itElemNodes->more() ) {
+ const SMDS_MeshNode* aMeshNode =
+ static_cast<const SMDS_MeshNode*>( itElemNodes->next() );
+ int aNodeID = aMeshNode->GetID();
+ TNodesMap::iterator anIter = nodesMap.find(aNodeID);
+ if ( anIter == nodesMap.end() ) {
+ // filling the nodes coordinates
+ myPreviewData->nodesXYZ[j].x = aMeshNode->X();
+ myPreviewData->nodesXYZ[j].y = aMeshNode->Y();
+ myPreviewData->nodesXYZ[j].z = aMeshNode->Z();
+ anIter = nodesMap.insert( make_pair(aNodeID, j) ).first;
+ j++;
+ }
+ aNodesConnectivity.push_back(anIter->second);
+ }
+
+ // filling the elements types
+ SMDSAbs_ElementType aType = aMeshElem->GetType();
+ bool isPoly = aMeshElem->IsPoly();
+
+ myPreviewData->elementTypes[i].SMDS_ElementType = (SMESH::ElementType) aType;
+ myPreviewData->elementTypes[i].isPoly = isPoly;
+ myPreviewData->elementTypes[i].nbNodesInElement = aMeshElem->NbNodes();
+ i++;
+
+ }
+ myPreviewData->nodesXYZ.length( j );
+
+ // filling the elements connectivities
+ list<int>::iterator aConnIter = aNodesConnectivity.begin();
+ myPreviewData->elementConnectivities.length(aNodesConnectivity.size());
+ for( int i = 0; aConnIter != aNodesConnectivity.end(); aConnIter++, i++ )
+ myPreviewData->elementConnectivities[i] = *aConnIter;
+ }
+
+ return myPreviewData._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()
+{
+ SMESH::long_array_var myLastCreatedNodes = new SMESH::long_array();
+ const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedNodes();
+ myLastCreatedNodes->length( aSeq.Length() );
+ for (int i = 1; i <= aSeq.Length(); i++)
+ myLastCreatedNodes[i-1] = aSeq.Value(i)->GetID();
+ return myLastCreatedNodes._retn();
+}
+
+//================================================================================
+/*!
+ * \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()
+{
+ SMESH::long_array_var myLastCreatedElems = new SMESH::long_array();
+ const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedElems();
+ myLastCreatedElems->length( aSeq.Length() );
+ for ( int i = 1; i <= aSeq.Length(); i++ )
+ myLastCreatedElems[i-1] = aSeq.Value(i)->GetID();
+ return myLastCreatedElems._retn();
+}
+
+//=======================================================================
+/*
+ * Returns description of an error/warning occured during the last operation
+ */
+//=======================================================================
+
+SMESH::ComputeError* SMESH_MeshEditor_i::GetLastError()
+{
+ SMESH::ComputeError_var errOut = new SMESH::ComputeError;
+ SMESH_ComputeErrorPtr& errIn = getEditor().GetError();
+ if ( errIn && !errIn->IsOK() )
+ {
+ errOut->code = -( errIn->myName < 0 ? errIn->myName + 1: errIn->myName ); // -1 -> 0
+ errOut->comment = errIn->myComment.c_str();
+ errOut->subShapeID = -1;
+ errOut->hasBadMesh = !errIn->myBadElements.empty();
+ }
+ else
+ {
+ errOut->code = 0;
+ errOut->subShapeID = -1;
+ errOut->hasBadMesh = false;
+ }
+ return errOut._retn();
}
//=======================================================================
//purpose : Wrap a sequence of ids in a SMESH_IDSource
//=======================================================================
-struct _IDSource : public POA_SMESH::SMESH_IDSource
+struct SMESH_MeshEditor_i::_IDSource : public POA_SMESH::SMESH_IDSource
{
SMESH::long_array _ids;
SMESH::ElementType _type;
SMESH::long_array* GetIDs() { return new SMESH::long_array( _ids ); }
SMESH::long_array* GetMeshInfo() { return 0; }
SMESH::SMESH_Mesh_ptr GetMesh() { return SMESH::SMESH_Mesh::_duplicate( _mesh ); }
+ bool IsMeshInfoCorrect() { return true; }
SMESH::array_of_ElementType* GetTypes()
{
SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
- types->length( 1 );
- types[0] = _type;
+ if ( _ids.length() > 0 ) {
+ types->length( 1 );
+ types[0] = _type;
+ }
return types._retn();
}
};
SMESH::SMESH_IDSource_ptr SMESH_MeshEditor_i::MakeIDSource(const SMESH::long_array& ids,
SMESH::ElementType type)
{
- _IDSource* anIDSource = new _IDSource;
- anIDSource->_ids = ids;
- anIDSource->_type = type;
- anIDSource->_mesh = myMesh_i->_this();
- SMESH::SMESH_IDSource_var anIDSourceVar = anIDSource->_this();
+ if ( myAuxIDSources.size() > 10 )
+ deleteAuxIDSources();
+
+ _IDSource* idSrc = new _IDSource;
+ idSrc->_mesh = myMesh_i->_this();
+ idSrc->_ids = ids;
+ idSrc->_type = type;
+ myAuxIDSources.push_back( idSrc );
+
+ SMESH::SMESH_IDSource_var anIDSourceVar = idSrc->_this();
return anIDSourceVar._retn();
}
+bool SMESH_MeshEditor_i::IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSource )
+{
+ return SMESH::DownCast<SMESH_MeshEditor_i::_IDSource*>( idSource );
+}
+
+void SMESH_MeshEditor_i::deleteAuxIDSources()
+{
+ std::list< _IDSource* >::iterator idSrcIt = myAuxIDSources.begin();
+ for ( ; idSrcIt != myAuxIDSources.end(); ++idSrcIt )
+ delete *idSrcIt;
+ myAuxIDSources.clear();
+}
+
//=============================================================================
/*!
*
{
initData();
- ::SMESH_MeshEditor anEditor( myMesh );
list< int > IdList;
for (int i = 0; i < IDsOfElements.length(); i++)
TPythonDump() << "isDone = " << this << ".RemoveElements( " << IDsOfElements << " )";
// Remove Elements
- bool ret = anEditor.Remove( IdList, false );
+ bool ret = getEditor().Remove( IdList, false );
myMesh->GetMeshDS()->Modified();
if ( IDsOfElements.length() )
myMesh->SetIsModified( true ); // issue 0020693
{
initData();
- ::SMESH_MeshEditor anEditor( myMesh );
list< int > IdList;
for (int i = 0; i < IDsOfNodes.length(); i++)
IdList.push_back( IDsOfNodes[i] );
// Update Python script
TPythonDump() << "isDone = " << this << ".RemoveNodes( " << IDsOfNodes << " )";
- bool ret = anEditor.Remove( IdList, true );
+ bool ret = getEditor().Remove( IdList, true );
myMesh->GetMeshDS()->Modified();
if ( IDsOfNodes.length() )
myMesh->SetIsModified( true ); // issue 0020693
{
initData();
- ::SMESH_MeshEditor anEditor( myMesh );
// Update Python script
TPythonDump() << "nbRemoved = " << this << ".RemoveOrphanNodes()";
// Create filter to find all orphan nodes
SMESH::Controls::Filter::TIdSequence seq;
SMESH::Controls::PredicatePtr predicate( new SMESH::Controls::FreeNodes() );
- SMESH::Controls::Filter::GetElementsId( GetMeshDS(), predicate, seq );
+ SMESH::Controls::Filter::GetElementsId( getMeshDS(), predicate, seq );
// remove orphan nodes (if there are any)
list< int > IdList;
for ( int i = 0; i < seq.size(); i++ )
IdList.push_back( seq[i] );
- bool ret = anEditor.Remove( IdList, true );
+ int nbNodesBefore = myMesh->NbNodes();
+ getEditor().Remove( IdList, true );
myMesh->GetMeshDS()->Modified();
if ( IdList.size() )
myMesh->SetIsModified( true );
+ int nbNodesAfter = myMesh->NbNodes();
- return ret;
+ return nbNodesBefore - nbNodesAfter;
}
//=============================================================================
/*!
- *
+ * Add a new node.
*/
//=============================================================================
{
initData();
- const SMDS_MeshNode* N = GetMeshDS()->AddNode(x, y, z);
+ const SMDS_MeshNode* N = getMeshDS()->AddNode(x, y, z);
// Update Python script
TPythonDump() << "nodeID = " << this << ".AddNode( "
- << x << ", " << y << ", " << z << " )";
+ << TVar( x ) << ", " << TVar( y ) << ", " << TVar( z )<< " )";
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true ); // issue 0020693
//=============================================================================
/*!
- *
+ * Create 0D element on the given node.
*/
//=============================================================================
+
CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long IDOfNode)
{
initData();
- const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(IDOfNode);
- SMDS_MeshElement* elem = GetMeshDS()->Add0DElement(aNode);
+ const SMDS_MeshNode* aNode = getMeshDS()->FindNode(IDOfNode);
+ SMDS_MeshElement* elem = getMeshDS()->Add0DElement(aNode);
// Update Python script
TPythonDump() << "elem0d = " << this << ".Add0DElement( " << IDOfNode <<" )";
//=============================================================================
/*!
- *
+ * Create a ball element on the given node.
+ */
+//=============================================================================
+
+CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diameter)
+ throw (SALOME::SALOME_Exception)
+{
+ initData();
+
+ if ( diameter < std::numeric_limits<double>::min() )
+ THROW_SALOME_CORBA_EXCEPTION("Invalid diameter", SALOME::BAD_PARAM);
+
+ SMESH_TRY;
+
+ const SMDS_MeshNode* aNode = getMeshDS()->FindNode(IDOfNode);
+ SMDS_MeshElement* elem = getMeshDS()->AddBall(aNode, diameter);
+
+ // Update Python script
+ TPythonDump() << "ballElem = "
+ << this << ".AddBall( " << IDOfNode << ", " << diameter <<" )";
+
+ myMesh->GetMeshDS()->Modified();
+ myMesh->SetIsModified( true ); // issue 0020693
+
+ if (elem)
+ return elem->GetID();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+
+ return 0;
+}
+
+//=============================================================================
+/*!
+ * Create an edge, either linear and quadratic (this is determed
+ * by number of given nodes, two or three)
*/
//=============================================================================
{
CORBA::Long index1 = IDsOfNodes[0];
CORBA::Long index2 = IDsOfNodes[1];
- elem = GetMeshDS()->AddEdge(GetMeshDS()->FindNode(index1), GetMeshDS()->FindNode(index2));
+ elem = getMeshDS()->AddEdge( getMeshDS()->FindNode(index1),
+ getMeshDS()->FindNode(index2));
// Update Python script
TPythonDump() << "edge = " << this << ".AddEdge([ "
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));
+ elem = getMeshDS()->AddEdge( getMeshDS()->FindNode(n1),
+ getMeshDS()->FindNode(n2),
+ getMeshDS()->FindNode(n12));
// Update Python script
TPythonDump() << "edgeID = " << this << ".AddEdge([ "
<<n1<<", "<<n2<<", "<<n12<<" ])";
std::vector<const SMDS_MeshNode*> nodes (NbNodes);
for (int i = 0; i < NbNodes; i++)
- nodes[i] = GetMeshDS()->FindNode(IDsOfNodes[i]);
+ nodes[i] = getMeshDS()->FindNode(IDsOfNodes[i]);
SMDS_MeshElement* elem = 0;
if (NbNodes == 3) {
- elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2]);
+ elem = getMeshDS()->AddFace(nodes[0], nodes[1], nodes[2]);
}
else if (NbNodes == 4) {
- elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3]);
+ elem = getMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3]);
}
else if (NbNodes == 6) {
- elem = GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
+ 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],
+ elem = getMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
nodes[4], nodes[5], nodes[6], nodes[7]);
}
+ else if (NbNodes == 9) {
+ elem = getMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
+ nodes[4], nodes[5], nodes[6], nodes[7], nodes[8] );
+ }
else if (NbNodes > 2) {
- elem = GetMeshDS()->AddPolygonalFace(nodes);
+ elem = getMeshDS()->AddPolygonalFace(nodes);
}
// Update Python script
int NbNodes = IDsOfNodes.length();
std::vector<const SMDS_MeshNode*> nodes (NbNodes);
for (int i = 0; i < NbNodes; i++)
- nodes[i] = GetMeshDS()->FindNode(IDsOfNodes[i]);
+ nodes[i] = getMeshDS()->FindNode(IDsOfNodes[i]);
- const SMDS_MeshElement* elem = GetMeshDS()->AddPolygonalFace(nodes);
+ const SMDS_MeshElement* elem = getMeshDS()->AddPolygonalFace(nodes);
// Update Python script
TPythonDump() <<"faceID = "<<this<<".AddPolygonalFace( "<<IDsOfNodes<<" )";
//=============================================================================
/*!
- *
+ * Create volume, either linear and quadratic (this is determed
+ * by number of given nodes)
*/
//=============================================================================
int NbNodes = IDsOfNodes.length();
vector< const SMDS_MeshNode*> n(NbNodes);
for(int i=0;i<NbNodes;i++)
- n[i]=GetMeshDS()->FindNode(IDsOfNodes[i]);
+ n[i]= getMeshDS()->FindNode(IDsOfNodes[i]);
SMDS_MeshElement* elem = 0;
switch(NbNodes)
{
- 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],
+ 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],
+ case 12: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]);
+ 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],
+ 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],
+ 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;
+ case 27: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],
+ n[20],n[21],n[22],n[23],n[24],n[25],n[26]);
+ break;
}
// Update Python script
std::vector<const SMDS_MeshNode*> n (NbNodes);
for (int i = 0; i < NbNodes; i++)
{
- const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(IDsOfNodes[i]);
+ const SMDS_MeshNode* aNode = getMeshDS()->FindNode(IDsOfNodes[i]);
if (!aNode) return 0;
n[i] = aNode;
}
for (int j = 0; j < NbFaces; j++)
q[j] = Quantities[j];
- const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(n, q);
+ const SMDS_MeshElement* elem = getMeshDS()->AddPolyhedralVolume(n, q);
// Update Python script
TPythonDump() << "volID = " << this << ".AddPolyhedralVolume( "
* AddPolyhedralVolumeByFaces
*/
//=============================================================================
+
CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces (const SMESH::long_array & IdsOfFaces)
{
initData();
std::vector<int> quantities (NbFaces);
for (int i = 0; i < NbFaces; i++) {
- const SMDS_MeshElement* aFace = GetMeshDS()->FindElement(IdsOfFaces[i]);
+ const SMDS_MeshElement* aFace = getMeshDS()->FindElement(IdsOfFaces[i]);
quantities[i] = aFace->NbNodes();
SMDS_ElemIteratorPtr It = aFace->nodesIterator();
}
}
- const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(poly_nodes, quantities);
+ const SMDS_MeshElement* elem = getMeshDS()->AddPolyhedralVolume(poly_nodes, quantities);
// Update Python script
TPythonDump() << "volID = " << this << ".AddPolyhedralVolumeByFaces( "
return elem ? ( myMesh->SetIsModified( true ), elem->GetID()) : 0;
}
+//=============================================================================
+//
+// \brief Create 0D elements on all nodes of the given object except those
+// nodes on which a 0D element already exists.
+// \param theObject object on whose nodes 0D elements will be created.
+// \param theGroupName optional name of a group to add 0D elements created
+// and/or found on nodes of \a theObject.
+// \return an object (a new group or a temporary SMESH_IDSource) holding
+// ids of new and/or found 0D elements.
+//
+//=============================================================================
+
+SMESH::SMESH_IDSource_ptr
+SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObject,
+ const char* theGroupName)
+ throw (SALOME::SALOME_Exception)
+{
+ initData();
+
+ SMESH::SMESH_IDSource_var result;
+ TPythonDump pyDump;
+
+ SMESH_TRY;
+
+ TIDSortedElemSet elements, elems0D;
+ if ( idSourceToSet( theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ getEditor().Create0DElementsOnAllNodes( elements, elems0D );
+
+ SMESH::long_array_var newElems = new SMESH::long_array;
+ newElems->length( elems0D.size() );
+ TIDSortedElemSet::iterator eIt = elems0D.begin();
+ for ( size_t i = 0; i < elems0D.size(); ++i, ++eIt )
+ newElems[ i ] = (*eIt)->GetID();
+
+ SMESH::SMESH_GroupBase_var groupToFill;
+ if ( theGroupName && strlen( theGroupName ))
+ {
+ // Get existing group named theGroupName
+ SMESH::ListOfGroups_var groups = myMesh_i->GetGroups();
+ for (int i = 0, nbGroups = groups->length(); i < nbGroups; i++ ) {
+ SMESH::SMESH_GroupBase_var group = groups[i];
+ if ( !group->_is_nil() ) {
+ CORBA::String_var name = group->GetName();
+ if ( strcmp( name.in(), theGroupName ) == 0 && group->GetType() == SMESH::ELEM0D ) {
+ groupToFill = group;
+ break;
+ }
+ }
+ }
+ if ( groupToFill->_is_nil() )
+ groupToFill = myMesh_i->CreateGroup( SMESH::ELEM0D, theGroupName );
+ else if ( !SMESH::DownCast< SMESH_Group_i* > ( groupToFill ))
+ groupToFill = myMesh_i->ConvertToStandalone( groupToFill );
+ }
+
+ if ( SMESH_Group_i* group_i = SMESH::DownCast< SMESH_Group_i* > ( groupToFill ))
+ {
+ group_i->Add( newElems );
+ result = SMESH::SMESH_IDSource::_narrow( groupToFill );
+ pyDump << groupToFill;
+ }
+ else
+ {
+ result = MakeIDSource( newElems, SMESH::ELEM0D );
+ pyDump << "elem0DIDs";
+ }
+
+ pyDump << " = " << this << ".Create0DElementsOnAllNodes( "
+ << theObject << ", '" << theGroupName << "' )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+
+ return result._retn();
+}
+
//=============================================================================
/*!
* \brief Bind a node to a vertex
{
Unexpect aCatch(SALOME_SalomeException);
- SMESHDS_Mesh * mesh = GetMeshDS();
+ SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
if ( !node )
THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
{
Unexpect aCatch(SALOME_SalomeException);
- SMESHDS_Mesh * mesh = GetMeshDS();
+ SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
if ( !node )
THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
{
Unexpect aCatch(SALOME_SalomeException);
- SMESHDS_Mesh * mesh = GetMeshDS();
+ SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
if ( !node )
THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
{
Unexpect aCatch(SALOME_SalomeException);
- SMESHDS_Mesh * mesh = GetMeshDS();
+ SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
if ( !node )
THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
{
Unexpect aCatch(SALOME_SalomeException);
- SMESHDS_Mesh * mesh = GetMeshDS();
+ SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshElement* elem = const_cast<SMDS_MeshElement*>(mesh->FindElement(ElementID));
if ( !elem )
THROW_SALOME_CORBA_EXCEPTION("Invalid ElementID", SALOME::BAD_PARAM);
{
initData();
- const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
- const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
+ const SMDS_MeshNode * n1 = getMeshDS()->FindNode( NodeID1 );
+ const SMDS_MeshNode * n2 = getMeshDS()->FindNode( NodeID2 );
if ( !n1 || !n2 )
return false;
<< NodeID1 << ", " << NodeID2 << " )";
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- int ret = aMeshEditor.InverseDiag ( n1, n2 );
+ int ret = getEditor().InverseDiag ( n1, n2 );
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
return ret;
{
initData();
- const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
- const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
+ const SMDS_MeshNode * n1 = getMeshDS()->FindNode( NodeID1 );
+ const SMDS_MeshNode * n2 = getMeshDS()->FindNode( NodeID2 );
if ( !n1 || !n2 )
return false;
TPythonDump() << "isDone = " << this << ".DeleteDiag( "
<< NodeID1 << ", " << NodeID2 << " )";
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- bool stat = aMeshEditor.DeleteDiag ( n1, n2 );
+ bool stat = getEditor().DeleteDiag ( n1, n2 );
myMesh->GetMeshDS()->Modified();
if ( stat )
myMesh->SetIsModified( true ); // issue 0020693
- storeResult(aMeshEditor);
return stat;
}
{
initData();
- ::SMESH_MeshEditor anEditor( myMesh );
for (int i = 0; i < IDsOfElements.length(); i++)
{
CORBA::Long index = IDsOfElements[i];
- const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index);
+ const SMDS_MeshElement * elem = getMeshDS()->FindElement(index);
if ( elem )
- anEditor.Reorient( elem );
+ getEditor().Reorient( elem );
}
// Update Python script
TPythonDump() << "isDone = " << this << ".Reorient( " << IDsOfElements << " )";
return isDone;
}
+//=======================================================================
+//function : Reorient2D
+//purpose : Reorient faces contained in \a the2Dgroup.
+// the2Dgroup - the mesh or its part to reorient
+// theDirection - desired direction of normal of \a theFace
+// theFace - ID of face whose orientation is checked.
+// It can be < 1 then \a thePoint is used to find a face.
+// thePoint - is used to find a face if \a theFace < 1.
+// return number of reoriented elements.
+//=======================================================================
+
+CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
+ const SMESH::DirStruct& theDirection,
+ CORBA::Long theFace,
+ const SMESH::PointStruct& thePoint)
+ throw (SALOME::SALOME_Exception)
+{
+ Unexpect aCatch(SALOME_SalomeException);
+
+ initData(/*deleteSearchers=*/false);
+
+ TIDSortedElemSet elements;
+ if ( !idSourceToSet( the2Dgroup, getMeshDS(), elements, SMDSAbs_Face, /*emptyIfIsMesh=*/1))
+ THROW_SALOME_CORBA_EXCEPTION("No faces in given group", SALOME::BAD_PARAM);
+
+
+ const SMDS_MeshElement* face = 0;
+ if ( theFace > 0 )
+ {
+ face = getMeshDS()->FindElement( theFace );
+ if ( !face )
+ THROW_SALOME_CORBA_EXCEPTION("Inexistent face given", SALOME::BAD_PARAM);
+ if ( face->GetType() != SMDSAbs_Face )
+ THROW_SALOME_CORBA_EXCEPTION("Wrong element type", SALOME::BAD_PARAM);
+ }
+ else
+ {
+ // create theElementSearcher if needed
+ theSearchersDeleter.Set( myMesh, getPartIOR( the2Dgroup, SMESH::FACE ));
+ if ( !theElementSearcher )
+ {
+ if ( elements.empty() ) // search in the whole mesh
+ {
+ if ( myMesh->NbFaces() == 0 )
+ THROW_SALOME_CORBA_EXCEPTION("No faces in the mesh", SALOME::BAD_PARAM);
+
+ theElementSearcher = myEditor.GetElementSearcher();
+ }
+ else
+ {
+ typedef SMDS_SetIterator<const SMDS_MeshElement*, TIDSortedElemSet::const_iterator > TIter;
+ SMDS_ElemIteratorPtr elemsIt( new TIter( elements.begin(), elements.end() ));
+
+ theElementSearcher = myEditor.GetElementSearcher(elemsIt);
+ }
+ }
+ // find a face
+ gp_Pnt p( thePoint.x, thePoint.y, thePoint.z );
+ face = theElementSearcher->FindClosestTo( p, SMDSAbs_Face );
+
+ if ( !face )
+ THROW_SALOME_CORBA_EXCEPTION("No face found by point", SALOME::INTERNAL_ERROR );
+ if ( !elements.empty() && !elements.count( face ))
+ THROW_SALOME_CORBA_EXCEPTION("Found face is not in the group", SALOME::BAD_PARAM );
+ }
+
+ const SMESH::PointStruct * P = &theDirection.PS;
+ gp_Vec dirVec( P->x, P->y, P->z );
+ if ( dirVec.Magnitude() < std::numeric_limits< double >::min() )
+ THROW_SALOME_CORBA_EXCEPTION("Zero size vector", SALOME::BAD_PARAM);
+
+ int nbReori = getEditor().Reorient2D( elements, dirVec, face );
+
+ if ( nbReori ) {
+ myMesh->SetIsModified( true );
+ myMesh->GetMeshDS()->Modified();
+ }
+ TPythonDump() << this << ".Reorient2D( "
+ << the2Dgroup << ", "
+ << theDirection << ", "
+ << theFace << ", "
+ << thePoint << " )";
+
+ return nbReori;
+}
+
//=============================================================================
/*!
*
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
TIDSortedElemSet faces;
arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
SMESH::Controls::NumericalFunctorPtr aCrit;
if ( !aNumericalFunctor )
- aCrit.reset( new SMESH::Controls::AspectRatio() );
+ aCrit.reset( new SMESH::Controls::MaxElementLength2D() );
else
aCrit = aNumericalFunctor->GetNumericalFunctor();
// Update Python script
TPythonDump() << "isDone = " << this << ".TriToQuad( "
- << IDsOfElements << ", " << aNumericalFunctor << ", " << MaxAngle << " )";
+ << IDsOfElements << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
- ::SMESH_MeshEditor anEditor( myMesh );
- bool stat = anEditor.TriToQuad( faces, aCrit, MaxAngle );
+ bool stat = getEditor().TriToQuad( faces, aCrit, MaxAngle );
myMesh->GetMeshDS()->Modified();
if ( stat )
myMesh->SetIsModified( true ); // issue 0020693
- storeResult(anEditor);
return stat;
}
// Update Python script
aTPythonDump << "isDone = " << this << ".TriToQuadObject("
- << theObject << ", " << aNumericalFunctor << ", " << MaxAngle << " )";
+ << theObject << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
return isDone;
}
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
TIDSortedElemSet faces;
arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
// Update Python script
TPythonDump() << "isDone = " << this << ".QuadToTri( " << IDsOfElements << ", " << aNumericalFunctor << " )";
- ::SMESH_MeshEditor anEditor( myMesh );
- CORBA::Boolean stat = anEditor.QuadToTri( faces, aCrit );
+ CORBA::Boolean stat = getEditor().QuadToTri( faces, aCrit );
myMesh->GetMeshDS()->Modified();
if ( stat )
myMesh->SetIsModified( true ); // issue 0020693
- storeResult(anEditor);
return stat;
}
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
TIDSortedElemSet faces;
arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
TPythonDump() << "isDone = " << this << ".SplitQuad( "
<< IDsOfElements << ", " << Diag13 << " )";
- ::SMESH_MeshEditor anEditor( myMesh );
- CORBA::Boolean stat = anEditor.QuadToTri( faces, Diag13 );
+ CORBA::Boolean stat = getEditor().QuadToTri( faces, Diag13 );
myMesh->GetMeshDS()->Modified();
if ( stat )
myMesh->SetIsModified( true ); // issue 0020693
- storeResult(anEditor);
return stat;
}
{
initData();
- const SMDS_MeshElement* quad = GetMeshDS()->FindElement(IDOfQuad);
+ const SMDS_MeshElement* quad = getMeshDS()->FindElement(IDOfQuad);
if (quad && quad->GetType() == SMDSAbs_Face && quad->NbNodes() == 4)
{
SMESH::NumericalFunctor_i* aNumericalFunctor =
else
aCrit.reset(new SMESH::Controls::AspectRatio());
- ::SMESH_MeshEditor anEditor (myMesh);
- return anEditor.BestSplit(quad, aCrit);
+ return getEditor().BestSplit(quad, aCrit);
}
return -1;
}
SMESH::long_array_var anElementsId = elems->GetIDs();
TIDSortedElemSet elemSet;
- arrayToSet( anElementsId, GetMeshDS(), elemSet, SMDSAbs_Volume );
+ arrayToSet( anElementsId, getMeshDS(), elemSet, SMDSAbs_Volume );
- ::SMESH_MeshEditor anEditor (myMesh);
- anEditor.SplitVolumesIntoTetra( elemSet, int( methodFlags ));
+ getEditor().SplitVolumesIntoTetra( elemSet, int( methodFlags ));
myMesh->GetMeshDS()->Modified();
- storeResult(anEditor);
// if ( myLastCreatedElems.length() ) - it does not influence Compute()
// myMesh->SetIsModified( true ); // issue 0020693
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
TIDSortedElemSet elements;
arrayToSet(IDsOfElements, aMesh, elements, SMDSAbs_Face);
if ( Method != SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH )
method = ::SMESH_MeshEditor::CENTROIDAL;
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.Smooth(elements, fixedNodes, method,
+ getEditor().Smooth(elements, fixedNodes, method,
MaxNbOfIterations, MaxAspectRatio, IsParametric );
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true ); // issue 0020693
- storeResult(anEditor);
// Update Python script
TPythonDump() << "isDone = " << this << "."
<< (IsParametric ? "SmoothParametric( " : "Smooth( ")
<< IDsOfElements << ", " << IDsOfFixedNodes << ", "
- << MaxNbOfIterations << ", " << MaxAspectRatio << ", "
+ << TVar( MaxNbOfIterations ) << ", " << TVar( MaxAspectRatio ) << ", "
<< "SMESH.SMESH_MeshEditor."
<< ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH ?
"CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
aTPythonDump << "isDone = " << this << "."
<< (IsParametric ? "SmoothParametricObject( " : "SmoothObject( ")
<< theObject << ", " << IDsOfFixedNodes << ", "
- << MaxNbOfIterations << ", " << MaxAspectRatio << ", "
+ << TVar( MaxNbOfIterations ) << ", " << TVar( MaxAspectRatio ) << ", "
<< "SMESH.SMESH_MeshEditor."
<< ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH ?
"CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
// Update Python script
TPythonDump() << this << ".RenumberNodes()";
- GetMeshDS()->Renumber( true );
+ getMeshDS()->Renumber( true );
}
// Update Python script
TPythonDump() << this << ".RenumberElements()";
- GetMeshDS()->Renumber( false );
+ getMeshDS()->Renumber( false );
}
//=======================================================================
initData();
TIDSortedElemSet inElements, copyElements;
- arrayToSet(theIDsOfElements, GetMeshDS(), inElements, theElementType);
+ arrayToSet(theIDsOfElements, getMeshDS(), inElements, theElementType);
TIDSortedElemSet* workElements = & inElements;
- TPreviewMesh tmpMesh( SMDSAbs_Face );
- SMESH_Mesh* mesh = 0;
bool makeWalls=true;
- if ( myPreviewMode )
+ if ( myIsPreviewMode )
{
SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
- tmpMesh.Copy( inElements, copyElements, select, avoid );
- mesh = &tmpMesh;
+ getPreviewMesh( SMDSAbs_Face )->Copy( inElements, copyElements, select, avoid );
workElements = & copyElements;
//makeWalls = false;
}
- else
- {
- mesh = myMesh;
- }
gp_Ax1 Ax1 (gp_Pnt( theAxis.x, theAxis.y, theAxis.z ),
gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz ));
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.RotationSweep (*workElements, Ax1, theAngleInRadians,
- theNbOfSteps, theTolerance, theMakeGroups, makeWalls);
- storeResult(anEditor);
+ getEditor().RotationSweep (*workElements, Ax1, theAngleInRadians,
+ theNbOfSteps, theTolerance, theMakeGroups, makeWalls);
myMesh->GetMeshDS()->Modified();
// myMesh->SetIsModified( true ); -- it does not influence Compute()
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweep( "
- << theIDsOfElements << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theIDsOfElements << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
rotationSweep(theIDsOfElements,
theAxis,
theNbOfSteps,
theTolerance,
true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepMakeGroups( "
- << theIDsOfElements << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theIDsOfElements << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
return aGroups;
}
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject( "
<< theObject << ", "
<< theAxis << ", "
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject1D( "
- << theObject << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
SMESH::long_array_var anElementsId = theObject->GetIDs();
rotationSweep(anElementsId,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject2D( "
- << theObject << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
SMESH::long_array_var anElementsId = theObject->GetIDs();
rotationSweep(anElementsId,
theNbOfSteps,
theTolerance,
true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObjectMakeGroups( "
<< theObject << ", "
theTolerance,
true,
SMDSAbs_Edge);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObject1DMakeGroups( "
- << theObject << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
return aGroups;
}
theTolerance,
true,
SMDSAbs_Face);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObject2DMakeGroups( "
- << theObject << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theNbOfSteps << ", "
- << theTolerance << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << TVar( theNbOfSteps ) << ", "
+ << TVar( theTolerance ) << " )";
}
return aGroups;
}
OCC_CATCH_SIGNALS;
#endif
TIDSortedElemSet elements, copyElements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements, theElementType);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements, theElementType);
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
TIDSortedElemSet* workElements = & elements;
- TPreviewMesh tmpMesh( SMDSAbs_Face );
- SMESH_Mesh* mesh = myMesh;
-
- if ( myPreviewMode ) {
+
+ SMDSAbs_ElementType aType = SMDSAbs_Face;
+ if (theElementType == SMDSAbs_Node)
+ {
+ aType = SMDSAbs_Edge;
+ }
+ if ( myIsPreviewMode ) {
SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
- tmpMesh.Copy( elements, copyElements, select, avoid );
- mesh = &tmpMesh;
+ getPreviewMesh( aType )->Copy( elements, copyElements, select, avoid );
workElements = & copyElements;
theMakeGroups = false;
}
TElemOfElemListMap aHystory;
- ::SMESH_MeshEditor anEditor( mesh );
- ::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.ExtrusionSweep (*workElements, stepVec, theNbOfSteps, aHystory, theMakeGroups);
+ ::SMESH_MeshEditor::PGroupIDs groupIds =
+ getEditor().ExtrusionSweep (*workElements, stepVec, theNbOfSteps, aHystory, theMakeGroups);
myMesh->GetMeshDS()->Modified();
- storeResult(anEditor);
return theMakeGroups ? getGroups(groupIds.get()) : 0;
CORBA::Long theNbOfSteps)
{
extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, false );
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << this << ".ExtrusionSweep( "
- << theIDsOfElements << ", " << theStepVector <<", " << theNbOfSteps << " )";
+ << theIDsOfElements << ", " << theStepVector <<", " << TVar(theNbOfSteps) << " )";
}
}
+//=======================================================================
+//function : ExtrusionSweep0D
+//purpose :
+//=======================================================================
+
+void SMESH_MeshEditor_i::ExtrusionSweep0D(const SMESH::long_array & theIDsOfElements,
+ const SMESH::DirStruct & theStepVector,
+ CORBA::Long theNbOfSteps)
+{
+ extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, false, SMDSAbs_Node );
+ if (!myIsPreviewMode) {
+ TPythonDump() << this << ".ExtrusionSweep0D( "
+ << theIDsOfElements << ", " << theStepVector <<", " << TVar(theNbOfSteps)<< " )";
+ }
+}
//=======================================================================
//function : ExtrusionSweepObject
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false );
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << this << ".ExtrusionSweepObject( "
<< theObject << ", " << theStepVector << ", " << theNbOfSteps << " )";
}
}
+//=======================================================================
+//function : ExtrusionSweepObject0D
+//purpose :
+//=======================================================================
+
+void SMESH_MeshEditor_i::ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObject,
+ const SMESH::DirStruct & theStepVector,
+ CORBA::Long theNbOfSteps)
+{
+ SMESH::long_array_var anElementsId = theObject->GetIDs();
+ extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Node );
+ if ( !myIsPreviewMode ) {
+ TPythonDump() << this << ".ExtrusionSweepObject0D( "
+ << theObject << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
+ }
+}
+
//=======================================================================
//function : ExtrusionSweepObject1D
//purpose :
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Edge );
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".ExtrusionSweepObject1D( "
- << theObject << ", " << theStepVector << ", " << theNbOfSteps << " )";
+ << theObject << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
}
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Face );
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".ExtrusionSweepObject2D( "
- << theObject << ", " << theStepVector << ", " << theNbOfSteps << " )";
+ << theObject << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
}
SMESH::ListOfGroups* aGroups = extrusionSweep(theIDsOfElements, theStepVector, theNbOfSteps, true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepMakeGroups( " << theIDsOfElements
- << ", " << theStepVector <<", " << theNbOfSteps << " )";
+ << ", " << theStepVector <<", " << TVar( theNbOfSteps ) << " )";
+ }
+ return aGroups;
+}
+
+//=======================================================================
+//function : ExtrusionSweepMakeGroups0D
+//purpose :
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepMakeGroups0D(const SMESH::long_array& theIDsOfElements,
+ const SMESH::DirStruct& theStepVector,
+ CORBA::Long theNbOfSteps)
+{
+ TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
+
+ SMESH::ListOfGroups* aGroups = extrusionSweep(theIDsOfElements, theStepVector, theNbOfSteps, true,SMDSAbs_Node);
+
+ if (!myIsPreviewMode) {
+ DumpGroupsList(aPythonDump, aGroups);
+ aPythonDump << this << ".ExtrusionSweepMakeGroups0D( " << theIDsOfElements
+ << ", " << theStepVector <<", " << TVar( theNbOfSteps ) << " )";
}
return aGroups;
}
SMESH::long_array_var anElementsId = theObject->GetIDs();
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector, theNbOfSteps, true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObjectMakeGroups( " << theObject
<< ", " << theStepVector << ", " << theNbOfSteps << " )";
return aGroups;
}
+//=======================================================================
+//function : ExtrusionSweepObject0DMakeGroups
+//purpose :
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+ const SMESH::DirStruct& theStepVector,
+ CORBA::Long theNbOfSteps)
+{
+ TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
+
+ SMESH::long_array_var anElementsId = theObject->GetIDs();
+ SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
+ theNbOfSteps, true, SMDSAbs_Node);
+ if (!myIsPreviewMode) {
+ DumpGroupsList(aPythonDump, aGroups);
+ aPythonDump << this << ".ExtrusionSweepObject0DMakeGroups( " << theObject
+ << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
+ }
+ return aGroups;
+}
+
//=======================================================================
//function : ExtrusionSweepObject1DMakeGroups
//purpose :
SMESH::long_array_var anElementsId = theObject->GetIDs();
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
theNbOfSteps, true, SMDSAbs_Edge);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObject1DMakeGroups( " << theObject
- << ", " << theStepVector << ", " << theNbOfSteps << " )";
+ << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
return aGroups;
}
SMESH::long_array_var anElementsId = theObject->GetIDs();
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
theNbOfSteps, true, SMDSAbs_Face);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObject2DMakeGroups( " << theObject
- << ", " << theStepVector << ", " << theNbOfSteps << " )";
+ << ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
return aGroups;
}
initData();
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
const SMESH::PointStruct * P = &theStepVector.PS;
gp_Vec stepVec( P->x, P->y, P->z );
- ::SMESH_MeshEditor anEditor( myMesh );
TElemOfElemListMap aHystory;
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
- theMakeGroups, theExtrFlags, theSewTolerance);
- storeResult(anEditor);
+ getEditor().ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
+ theMakeGroups, theExtrFlags, theSewTolerance);
return theMakeGroups ? getGroups(groupIds.get()) : 0;
}
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << "stepVector = " << theStepVector;
TPythonDump() << this << ".AdvancedExtrusion("
<< theIDsOfElements
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance)
{
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << "stepVector = " << theStepVector;
}
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
theSewTolerance,
true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".AdvancedExtrusionMakeGroups("
<< theIDsOfElements
}
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements, theElementType);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements, theElementType);
list<double> angles;
for (int i = 0; i < theAngles.length(); i++) {
int nbOldGroups = myMesh->NbGroup();
- ::SMESH_MeshEditor anEditor( myMesh );
::SMESH_MeshEditor::Extrusion_Error error =
- anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
+ getEditor().ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
theHasAngles, angles, false,
theHasRefPoint, refPnt, theMakeGroups );
myMesh->GetMeshDS()->Modified();
- storeResult(anEditor);
theError = convExtrError( error );
if ( theMakeGroups ) {
}
TIDSortedElemSet elements, copyElements;
- arrayToSet(IDsOfElements, GetMeshDS(), elements, ElementType);
+ arrayToSet(IDsOfElements, getMeshDS(), elements, ElementType);
TIDSortedElemSet* workElements = &elements;
- TPreviewMesh tmpMesh( SMDSAbs_Face );
- SMESH_Mesh* mesh = myMesh;
- if ( myPreviewMode )
+ if ( myIsPreviewMode )
{
SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
- tmpMesh.Copy( elements, copyElements, select, avoid );
- mesh = &tmpMesh;
+ getPreviewMesh( SMDSAbs_Face )->Copy( elements, copyElements, select, avoid );
workElements = & copyElements;
MakeGroups = false;
}
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::Extrusion_Error error;
if ( SMESH_Mesh_i* aMeshImp = SMESH::DownCast<SMESH_Mesh_i*>( Path ))
Error = SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE;
return EmptyGr;
}
- error = anEditor.ExtrusionAlongTrack( *workElements, &(aMeshImp->GetImpl()), aNodeStart,
- HasAngles, angles, LinearVariation,
- HasRefPoint, refPnt, MakeGroups );
+ error = getEditor().ExtrusionAlongTrack( *workElements, &(aMeshImp->GetImpl()), aNodeStart,
+ HasAngles, angles, LinearVariation,
+ HasRefPoint, refPnt, MakeGroups );
myMesh->GetMeshDS()->Modified();
}
else if ( SMESH_subMesh_i* aSubMeshImp = SMESH::DownCast<SMESH_subMesh_i*>( Path ))
}
SMESH_subMesh* aSubMesh =
aMeshImp->GetImpl().GetSubMeshContaining(aSubMeshImp->GetId());
- error = anEditor.ExtrusionAlongTrack( *workElements, aSubMesh, aNodeStart,
- HasAngles, angles, LinearVariation,
- HasRefPoint, refPnt, MakeGroups );
+ error = getEditor().ExtrusionAlongTrack( *workElements, aSubMesh, aNodeStart,
+ HasAngles, angles, LinearVariation,
+ HasRefPoint, refPnt, MakeGroups );
myMesh->GetMeshDS()->Modified();
}
else if ( SMESH::DownCast<SMESH_Group_i*>( Path ))
return EmptyGr;
}
- storeResult(anEditor);
Error = convExtrError( error );
if ( MakeGroups ) {
const SMESH::PointStruct & theRefPoint)
{
MESSAGE("ExtrusionAlongPath");
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPath( "
<< theIDsOfElements << ", "
<< thePathMesh << ", "
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( "
<< theObject << ", "
<< thePathMesh << ", "
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject1D( "
<< theObject << ", "
<< thePathMesh << ", "
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject2D( "
<< theObject << ", "
<< thePathMesh << ", "
theRefPoint,
true,
Error);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << aGroups << ", error)";
true,
Error);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << aGroups << ", error)";
Error,
SMDSAbs_Edge);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << aGroups << ", error)";
Error,
SMDSAbs_Face);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << aGroups << ", error)";
(SMDSAbs_ElementType)ElemType,
Error);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << *aGroups << ", error)";
aPythonDump << "error";
aPythonDump << " = " << this << ".ExtrusionAlongPathObjX( "
- << Object << ", "
- << Path << ", "
- << NodeStart << ", "
- << HasAngles << ", "
- << Angles << ", "
+ << Object << ", "
+ << Path << ", "
+ << NodeStart << ", "
+ << HasAngles << ", "
+ << TVar( Angles ) << ", "
<< LinearVariation << ", "
- << HasRefPoint << ", "
+ << HasRefPoint << ", "
<< "SMESH.PointStruct( "
- << ( HasRefPoint ? RefPoint.x : 0 ) << ", "
- << ( HasRefPoint ? RefPoint.y : 0 ) << ", "
- << ( HasRefPoint ? RefPoint.z : 0 ) << " ), "
+ << TVar( HasRefPoint ? RefPoint.x : 0 ) << ", "
+ << TVar( HasRefPoint ? RefPoint.y : 0 ) << ", "
+ << TVar( HasRefPoint ? RefPoint.z : 0 ) << " ), "
<< MakeGroups << ", "
<< ElemType << " )";
}
(SMDSAbs_ElementType)ElemType,
Error);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
bool isDumpGroups = aGroups && aGroups->length() > 0;
if (isDumpGroups)
aPythonDump << "(" << *aGroups << ", error)";
aPythonDump <<"error";
aPythonDump << " = " << this << ".ExtrusionAlongPathX( "
- << IDsOfElements << ", "
- << Path << ", "
- << NodeStart << ", "
- << HasAngles << ", "
- << Angles << ", "
+ << IDsOfElements << ", "
+ << Path << ", "
+ << NodeStart << ", "
+ << HasAngles << ", "
+ << TVar( Angles ) << ", "
<< LinearVariation << ", "
- << HasRefPoint << ", "
+ << HasRefPoint << ", "
<< "SMESH.PointStruct( "
- << ( HasRefPoint ? RefPoint.x : 0 ) << ", "
- << ( HasRefPoint ? RefPoint.y : 0 ) << ", "
- << ( HasRefPoint ? RefPoint.z : 0 ) << " ), "
+ << TVar( HasRefPoint ? RefPoint.x : 0 ) << ", "
+ << TVar( HasRefPoint ? RefPoint.y : 0 ) << ", "
+ << TVar( HasRefPoint ? RefPoint.z : 0 ) << " ), "
<< MakeGroups << ", "
<< ElemType << " )";
}
}
TIDSortedElemSet copyElements;
- TPreviewMesh tmpMesh;
TIDSortedElemSet* workElements = & theElements;
- SMESH_Mesh* mesh = myMesh;
- if ( myPreviewMode )
+ if ( myIsPreviewMode )
{
- tmpMesh.Copy( theElements, copyElements);
+ TPreviewMesh * tmpMesh = getPreviewMesh();
+ tmpMesh->Copy( theElements, copyElements);
if ( !theCopy && !theTargetMesh )
{
TIDSortedElemSet elemsAround, elemsAroundCopy;
- getElementsAround( theElements, GetMeshDS(), elemsAround );
- tmpMesh.Copy( elemsAround, elemsAroundCopy);
+ getElementsAround( theElements, getMeshDS(), elemsAround );
+ tmpMesh->Copy( elemsAround, elemsAroundCopy);
}
- mesh = &tmpMesh;
workElements = & copyElements;
theMakeGroups = false;
}
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
+ getEditor().Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
- if(theCopy || myPreviewMode)
- storeResult(anEditor);
- else
+ if ( theCopy && !myIsPreviewMode)
{
- myMesh->SetIsModified( true );
- myMesh->GetMeshDS()->Modified();
+ if ( theTargetMesh )
+ {
+ theTargetMesh->GetMeshDS()->Modified();
+ }
+ else
+ {
+ myMesh->GetMeshDS()->Modified();
+ myMesh->SetIsModified( true );
+ }
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
}
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".Mirror( "
- << theIDsOfElements << ", "
- << theAxis << ", "
+ << theIDsOfElements << ", "
+ << theAxis << ", "
<< mirrorTypeName(theMirrorType) << ", "
- << theCopy << " )";
+ << theCopy << " )";
}
if ( theIDsOfElements.length() > 0 )
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
mirror(elements, theAxis, theMirrorType, theCopy, false);
}
}
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".MirrorObject( "
- << theObject << ", "
- << theAxis << ", "
+ << theObject << ", "
+ << theAxis << ", "
<< mirrorTypeName(theMirrorType) << ", "
- << theCopy << " )";
+ << theCopy << " )";
}
TIDSortedElemSet elements;
- bool emptyIfIsMesh = myPreviewMode ? false : true;
+ bool emptyIfIsMesh = myIsPreviewMode ? false : true;
- if (idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
+ if (idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
mirror(elements, theAxis, theMirrorType, theCopy, false);
}
if ( theIDsOfElements.length() > 0 )
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
aGroups = mirror(elements, theMirror, theMirrorType, true, true);
}
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".MirrorMakeGroups( "
- << theIDsOfElements << ", "
- << theMirror << ", "
+ << theIDsOfElements << ", "
+ << theMirror << ", "
<< mirrorTypeName(theMirrorType) << " )";
}
return aGroups;
SMESH::ListOfGroups * aGroups = 0;
TIDSortedElemSet elements;
- if ( idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ if ( idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
aGroups = mirror(elements, theMirror, theMirrorType, true, true);
- if (!myPreviewMode)
+ if (!myIsPreviewMode)
{
DumpGroupsList(aPythonDump,aGroups);
aPythonDump << this << ".MirrorObjectMakeGroups( "
- << theObject << ", "
- << theMirror << ", "
+ << theObject << ", "
+ << theMirror << ", "
<< mirrorTypeName(theMirrorType) << " )";
}
return aGroups;
if (mesh_i && theIDsOfElements.length() > 0 )
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
mirror(elements, theMirror, theMirrorType,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
pydump << mesh << " = " << this << ".MirrorMakeMesh( "
- << theIDsOfElements << ", "
- << theMirror << ", "
+ << theIDsOfElements << ", "
+ << theMirror << ", "
<< mirrorTypeName(theMirrorType) << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
}
//dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh );
TIDSortedElemSet elements;
if ( mesh_i &&
- idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
{
mirror(elements, theMirror, theMirrorType,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
pydump << mesh << " = " << this << ".MirrorObjectMakeMesh( "
- << theObject << ", "
- << theMirror << ", "
+ << theObject << ", "
+ << theMirror << ", "
<< mirrorTypeName(theMirrorType) << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
}
//dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
TIDSortedElemSet copyElements;
TIDSortedElemSet* workElements = &theElements;
- TPreviewMesh tmpMesh;
- SMESH_Mesh* mesh = myMesh;
- if ( myPreviewMode )
+ if ( myIsPreviewMode )
{
- tmpMesh.Copy( theElements, copyElements);
+ TPreviewMesh * tmpMesh = getPreviewMesh();
+ tmpMesh->Copy( theElements, copyElements);
if ( !theCopy && !theTargetMesh )
{
TIDSortedElemSet elemsAround, elemsAroundCopy;
- getElementsAround( theElements, GetMeshDS(), elemsAround );
- tmpMesh.Copy( elemsAround, elemsAroundCopy);
+ getElementsAround( theElements, getMeshDS(), elemsAround );
+ tmpMesh->Copy( elemsAround, elemsAroundCopy);
}
- mesh = &tmpMesh;
workElements = & copyElements;
theMakeGroups = false;
}
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
+ getEditor().Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
- if(theCopy || myPreviewMode)
- storeResult(anEditor);
- else
+ if ( theCopy && !myIsPreviewMode )
{
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ if ( theTargetMesh )
+ {
+ theTargetMesh->GetMeshDS()->Modified();
+ }
+ else
+ {
+ myMesh->GetMeshDS()->Modified();
+ myMesh->SetIsModified( true );
+ }
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
{
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << this << ".Translate( "
<< theIDsOfElements << ", "
- << theVector << ", "
- << theCopy << " )";
+ << theVector << ", "
+ << theCopy << " )";
}
if (theIDsOfElements.length()) {
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
translate(elements, theVector, theCopy, false);
}
}
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
{
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << this << ".TranslateObject( "
<< theObject << ", "
<< theVector << ", "
- << theCopy << " )";
+ << theCopy << " )";
}
TIDSortedElemSet elements;
- bool emptyIfIsMesh = myPreviewMode ? false : true;
+ bool emptyIfIsMesh = myIsPreviewMode ? false : true;
- if (idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
+ if (idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
translate(elements, theVector, theCopy, false);
}
SMESH::ListOfGroups * aGroups = 0;
if (theIDsOfElements.length()) {
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
aGroups = translate(elements,theVector,true,true);
}
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".TranslateMakeGroups( "
<< theIDsOfElements << ", "
- << theVector << " )";
+ << theVector << " )";
}
return aGroups;
}
SMESH::ListOfGroups * aGroups = 0;
TIDSortedElemSet elements;
- if (idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ if (idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
aGroups = translate(elements, theVector, true, true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".TranslateObjectMakeGroups( "
<< theObject << ", "
if ( mesh_i && theIDsOfElements.length() )
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
translate(elements, theVector, false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
pydump << mesh << " = " << this << ".TranslateMakeMesh( "
<< theIDsOfElements << ", "
- << theVector << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theVector << ", "
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
}
//dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
TIDSortedElemSet elements;
if ( mesh_i &&
- idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
{
translate(elements, theVector,false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
pydump << mesh << " = " << this << ".TranslateObjectMakeMesh( "
- << theObject << ", "
- << theVector << ", "
+ << theObject << ", "
+ << theVector << ", "
<< theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theMeshName << "' )";
}
}
// dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
TIDSortedElemSet copyElements;
TIDSortedElemSet* workElements = &theElements;
- TPreviewMesh tmpMesh;
- SMESH_Mesh* mesh = myMesh;
-
- if ( myPreviewMode ) {
- tmpMesh.Copy( theElements, copyElements );
+ if ( myIsPreviewMode ) {
+ TPreviewMesh * tmpMesh = getPreviewMesh();
+ tmpMesh->Copy( theElements, copyElements );
if ( !theCopy && !theTargetMesh )
{
TIDSortedElemSet elemsAround, elemsAroundCopy;
- getElementsAround( theElements, GetMeshDS(), elemsAround );
- tmpMesh.Copy( elemsAround, elemsAroundCopy);
+ getElementsAround( theElements, getMeshDS(), elemsAround );
+ tmpMesh->Copy( elemsAround, elemsAroundCopy);
}
- mesh = &tmpMesh;
workElements = ©Elements;
theMakeGroups = false;
}
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
+ getEditor().Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
- if(theCopy || myPreviewMode)
- storeResult(anEditor);
- else
+ if ( theCopy && !myIsPreviewMode)
{
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ if ( theTargetMesh )
+ {
+ theTargetMesh->GetMeshDS()->Modified();
+ }
+ else
+ {
+ myMesh->GetMeshDS()->Modified();
+ myMesh->SetIsModified( true );
+ }
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
CORBA::Double theAngle,
CORBA::Boolean theCopy)
{
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
TPythonDump() << this << ".Rotate( "
<< theIDsOfElements << ", "
- << theAxis << ", "
- << theAngle << ", "
- << theCopy << " )";
+ << theAxis << ", "
+ << TVar( theAngle ) << ", "
+ << theCopy << " )";
}
if (theIDsOfElements.length() > 0)
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
rotate(elements,theAxis,theAngle,theCopy,false);
}
}
CORBA::Double theAngle,
CORBA::Boolean theCopy)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotateObject( "
- << theObject << ", "
- << theAxis << ", "
- << theAngle << ", "
- << theCopy << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngle ) << ", "
+ << theCopy << " )";
}
TIDSortedElemSet elements;
- bool emptyIfIsMesh = myPreviewMode ? false : true;
- if (idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
+ bool emptyIfIsMesh = myIsPreviewMode ? false : true;
+ if (idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
rotate(elements,theAxis,theAngle,theCopy,false);
}
if (theIDsOfElements.length() > 0)
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
aGroups = rotate(elements,theAxis,theAngle,true,true);
}
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotateMakeGroups( "
<< theIDsOfElements << ", "
- << theAxis << ", "
- << theAngle << " )";
+ << theAxis << ", "
+ << TVar( theAngle ) << " )";
}
return aGroups;
}
SMESH::ListOfGroups * aGroups = 0;
TIDSortedElemSet elements;
- if (idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ if (idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
aGroups = rotate(elements, theAxis, theAngle, true, true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotateObjectMakeGroups( "
- << theObject << ", "
- << theAxis << ", "
- << theAngle << " )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngle ) << " )";
}
return aGroups;
}
if ( mesh_i && theIDsOfElements.length() > 0 )
{
TIDSortedElemSet elements;
- arrayToSet(theIDsOfElements, GetMeshDS(), elements);
+ arrayToSet(theIDsOfElements, getMeshDS(), elements);
rotate(elements, theAxis, theAngleInRadians,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
pydump << mesh << " = " << this << ".RotateMakeMesh( "
- << theIDsOfElements << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theIDsOfElements << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
}
// dump "GetGroups"
- if (!myPreviewMode && mesh_i && theIDsOfElements.length() > 0 )
+ if (!myIsPreviewMode && mesh_i && theIDsOfElements.length() > 0 )
mesh_i->GetGroups();
return mesh._retn();
TIDSortedElemSet elements;
if (mesh_i &&
- idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
+ idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
{
rotate(elements, theAxis, theAngleInRadians,
false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
pydump << mesh << " = " << this << ".RotateObjectMakeMesh( "
- << theObject << ", "
- << theAxis << ", "
- << theAngleInRadians << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theObject << ", "
+ << theAxis << ", "
+ << TVar( theAngleInRadians ) << ", "
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
}
// dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
theCopy = false;
TIDSortedElemSet elements;
- bool emptyIfIsMesh = myPreviewMode ? false : true;
- if ( !idSourceToSet(theObject, GetMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
+ bool emptyIfIsMesh = myIsPreviewMode ? false : true;
+ if ( !idSourceToSet(theObject, getMeshDS(), elements, SMDSAbs_All, emptyIfIsMesh))
return 0;
double S[3] = {
0, 0, S[2], thePoint.z * (1-S[2]), tol, tol);
TIDSortedElemSet copyElements;
- TPreviewMesh tmpMesh;
TIDSortedElemSet* workElements = &elements;
- SMESH_Mesh* mesh = myMesh;
-
- if ( myPreviewMode )
+ if ( myIsPreviewMode )
{
- tmpMesh.Copy( elements, copyElements);
+ TPreviewMesh * tmpMesh = getPreviewMesh();
+ tmpMesh->Copy( elements, copyElements);
if ( !theCopy && !theTargetMesh )
{
TIDSortedElemSet elemsAround, elemsAroundCopy;
- getElementsAround( elements, GetMeshDS(), elemsAround );
- tmpMesh.Copy( elemsAround, elemsAroundCopy);
+ getElementsAround( elements, getMeshDS(), elemsAround );
+ tmpMesh->Copy( elemsAround, elemsAroundCopy);
}
- mesh = &tmpMesh;
workElements = & copyElements;
theMakeGroups = false;
}
- ::SMESH_MeshEditor anEditor( mesh );
::SMESH_MeshEditor::PGroupIDs groupIds =
- anEditor.Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
+ getEditor().Transform (*workElements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
- if(theCopy || myPreviewMode )
- storeResult(anEditor);
- else
+ if ( theCopy && !myIsPreviewMode )
{
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ if ( theTargetMesh )
+ {
+ theTargetMesh->GetMeshDS()->Modified();
+ }
+ else
+ {
+ myMesh->GetMeshDS()->Modified();
+ myMesh->SetIsModified( true );
+ }
}
+
return theMakeGroups ? getGroups(groupIds.get()) : 0;
}
const SMESH::double_array& theScaleFact,
CORBA::Boolean theCopy)
{
- if ( !myPreviewMode ) {
+ if ( !myIsPreviewMode ) {
TPythonDump() << this << ".Scale( "
- << theObject << ", "
- << "SMESH.PointStruct( " << thePoint.x << ", "
- << thePoint.y << ", " << thePoint.z << " ) ,"
- << theScaleFact << ", "
- << theCopy << " )";
+ << theObject << ", "
+ << thePoint << ", "
+ << TVar( theScaleFact ) << ", "
+ << theCopy << " )";
}
scale(theObject, thePoint, theScaleFact, theCopy, false);
}
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
SMESH::ListOfGroups * aGroups = scale(theObject, thePoint, theScaleFact, true, true);
- if (!myPreviewMode) {
+ if (!myIsPreviewMode) {
DumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".Scale("
- << theObject << ","
- << "SMESH.PointStruct(" <<thePoint.x << ","
- << thePoint.y << "," << thePoint.z << "),"
- << theScaleFact << ",True,True)";
+ << theObject << ","
+ << thePoint << ","
+ << TVar( theScaleFact ) << ",True,True)";
}
return aGroups;
}
scale(theObject, thePoint, theScaleFact,false, theCopyGroups, & mesh_i->GetImpl());
mesh_i->CreateGroupServants();
}
- if ( !myPreviewMode )
+ if ( !myIsPreviewMode )
pydump << mesh << " = " << this << ".ScaleMakeMesh( "
- << theObject << ", "
- << "SMESH.PointStruct( " << thePoint.x << ", "
- << thePoint.y << ", " << thePoint.z << " ) ,"
- << theScaleFact << ", "
- << theCopyGroups << ", '"
- << theMeshName << "' )";
+ << theObject << ", "
+ << thePoint << ", "
+ << TVar( theScaleFact ) << ", "
+ << theCopyGroups << ", '"
+ << theMeshName << "' )";
}
// dump "GetGroups"
- if (!myPreviewMode && mesh_i)
+ if (!myIsPreviewMode && mesh_i)
mesh_i->GetGroups();
return mesh._retn();
initData();
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
- ::SMESH_MeshEditor anEditor( myMesh );
TIDSortedNodeSet nodes; // no input nodes
- anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
+ getEditor().FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
GroupsOfNodes = new SMESH::array_of_long_array;
GroupsOfNodes->length( aListOfListOfNodes.size() );
initData();
TIDSortedNodeSet nodes;
- idSourceToNodeSet( theObject, GetMeshDS(), nodes );
+ idSourceToNodeSet( theObject, getMeshDS(), nodes );
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
- ::SMESH_MeshEditor anEditor( myMesh );
if(!nodes.empty())
- anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
+ getEditor().FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
GroupsOfNodes = new SMESH::array_of_long_array;
GroupsOfNodes->length( aListOfListOfNodes.size() );
initData();
TIDSortedNodeSet nodes;
- idSourceToNodeSet( theObject, GetMeshDS(), nodes );
+ idSourceToNodeSet( theObject, getMeshDS(), nodes );
for ( int i = 0; i < theExceptSubMeshOrGroups.length(); ++i )
{
TIDSortedNodeSet exceptNodes;
- idSourceToNodeSet( theExceptSubMeshOrGroups[i], GetMeshDS(), exceptNodes );
+ idSourceToNodeSet( theExceptSubMeshOrGroups[i], getMeshDS(), exceptNodes );
TIDSortedNodeSet::iterator avoidNode = exceptNodes.begin();
for ( ; avoidNode != exceptNodes.end(); ++avoidNode)
nodes.erase( *avoidNode );
}
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
- ::SMESH_MeshEditor anEditor( myMesh );
if(!nodes.empty())
- anEditor.FindCoincidentNodes( nodes, theTolerance, aListOfListOfNodes );
+ getEditor().FindCoincidentNodes( nodes, theTolerance, aListOfListOfNodes );
theGroupsOfNodes = new SMESH::array_of_long_array;
theGroupsOfNodes->length( aListOfListOfNodes.size() );
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
TPythonDump aTPythonDump;
aTPythonDump << this << ".MergeNodes([";
if ( i > 0 ) aTPythonDump << ", ";
aTPythonDump << aNodeGroup;
}
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.MergeNodes( aListOfListOfNodes );
+ getEditor().MergeNodes( aListOfListOfNodes );
aTPythonDump << "])";
myMesh->GetMeshDS()->Modified();
SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow(theObject);
if ( !(!group->_is_nil() && group->GetType() == SMESH::NODE) )
{
- typedef list<int> TListOfIDs;
- set<const SMDS_MeshElement*> elems;
- SMESH::long_array_var aElementsId = theObject->GetIDs();
- SMESHDS_Mesh* aMesh = GetMeshDS();
-
- for(int i = 0; i < aElementsId->length(); i++) {
- CORBA::Long anID = aElementsId[i];
- const SMDS_MeshElement * elem = aMesh->FindElement(anID);
- if (elem) {
- elems.insert(elem);
- }
- }
+ TIDSortedElemSet elems;
+ idSourceToSet( theObject, getMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true);
::SMESH_MeshEditor::TListOfListOfElementsID aListOfListOfElementsID;
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.FindEqualElements( elems, aListOfListOfElementsID );
+ getEditor().FindEqualElements( elems, aListOfListOfElementsID );
GroupsOfElementsID = new SMESH::array_of_long_array;
GroupsOfElementsID->length( aListOfListOfElementsID.size() );
- ::SMESH_MeshEditor::TListOfListOfElementsID::iterator arraysIt = aListOfListOfElementsID.begin();
- for (CORBA::Long j = 0; arraysIt != aListOfListOfElementsID.end(); ++arraysIt, ++j) {
+ ::SMESH_MeshEditor::TListOfListOfElementsID::iterator arraysIt =
+ aListOfListOfElementsID.begin();
+ for (CORBA::Long j = 0; arraysIt != aListOfListOfElementsID.end(); ++arraysIt, ++j)
+ {
SMESH::long_array& aGroup = (*GroupsOfElementsID)[ j ];
- TListOfIDs& listOfIDs = *arraysIt;
+ list<int>& listOfIDs = *arraysIt;
aGroup.length( listOfIDs.size() );
- TListOfIDs::iterator idIt = listOfIDs.begin();
- for (int k = 0; idIt != listOfIDs.end(); ++idIt, ++k ) {
+ list<int>::iterator idIt = listOfIDs.begin();
+ for (int k = 0; idIt != listOfIDs.end(); ++idIt, ++k )
aGroup[ k ] = *idIt;
- }
}
TPythonDump() << "equal_elements = " << this << ".FindEqualElements( "
aTPythonDump << anElemsIDGroup;
}
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.MergeElements(aListOfListOfElementsID);
+ getEditor().MergeElements(aListOfListOfElementsID);
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
{
initData();
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.MergeEqualElements();
+ getEditor().MergeEqualElements();
+
+ myMesh->GetMeshDS()->Modified();
TPythonDump() << this << ".MergeEqualElements()";
}
{
initData(/*deleteSearchers=*/false);
- const SMDS_MeshNode * node = GetMeshDS()->FindNode( NodeID );
+ const SMDS_MeshNode * node = getMeshDS()->FindNode( NodeID );
if ( !node )
return false;
if ( theNodeSearcher )
theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
- if ( myPreviewMode ) // make preview data
+ if ( myIsPreviewMode ) // make preview data
{
// in a preview mesh, make edges linked to a node
- TPreviewMesh tmpMesh;
+ TPreviewMesh& tmpMesh = *getPreviewMesh();
TIDSortedElemSet linkedNodes;
::SMESH_MeshEditor::GetLinkedNodes( node, linkedNodes );
TIDSortedElemSet::iterator nIt = linkedNodes.begin();
if ( nodeCpy1 )
tmpMesh.GetMeshDS()->MoveNode(nodeCpy1, x, y, z);
// fill preview data
- ::SMESH_MeshEditor anEditor( & tmpMesh );
- storeResult( anEditor );
}
else if ( theNodeSearcher ) // move node and update theNodeSearcher data accordingly
theNodeSearcher->MoveNode(node, gp_Pnt( x,y,z ));
else
- GetMeshDS()->MoveNode(node, x, y, z);
+ getMeshDS()->MoveNode(node, x, y, z);
- if ( !myPreviewMode )
+ if ( !myIsPreviewMode )
{
// Update Python script
TPythonDump() << "isDone = " << this << ".MoveNode( "
- << NodeID << ", " << x << ", " << y << ", " << z << " )";
+ << NodeID << ", " << TVar(x) << ", " << TVar(y) << ", " << TVar(z) << " )";
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
}
theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
if ( !theNodeSearcher ) {
- ::SMESH_MeshEditor anEditor( myMesh );
- theNodeSearcher = anEditor.GetNodeSearcher();
+ theNodeSearcher = myEditor.GetNodeSearcher();
}
gp_Pnt p( x,y,z );
if ( const SMDS_MeshNode* node = theNodeSearcher->FindClosestTo( p ))
theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
int nodeID = theNodeID;
- const SMDS_MeshNode* node = GetMeshDS()->FindNode( nodeID );
+ const SMDS_MeshNode* node = getMeshDS()->FindNode( nodeID );
if ( !node ) // preview moving node
{
if ( !theNodeSearcher ) {
- ::SMESH_MeshEditor anEditor( myMesh );
- theNodeSearcher = anEditor.GetNodeSearcher();
+ theNodeSearcher = myEditor.GetNodeSearcher();
}
gp_Pnt p( x,y,z );
node = theNodeSearcher->FindClosestTo( p );
}
if ( node ) {
nodeID = node->GetID();
- if ( myPreviewMode ) // make preview data
+ if ( myIsPreviewMode ) // make preview data
{
// in a preview mesh, make edges linked to a node
- TPreviewMesh tmpMesh;
+ TPreviewMesh tmpMesh = *getPreviewMesh();
TIDSortedElemSet linkedNodes;
::SMESH_MeshEditor::GetLinkedNodes( node, linkedNodes );
TIDSortedElemSet::iterator nIt = linkedNodes.begin();
if ( node )
tmpMesh.GetMeshDS()->MoveNode(node, x, y, z);
// fill preview data
- ::SMESH_MeshEditor anEditor( & tmpMesh );
- storeResult( anEditor );
}
else if ( theNodeSearcher ) // move node and update theNodeSearcher data accordingly
{
}
else
{
- GetMeshDS()->MoveNode(node, x, y, z);
+ getMeshDS()->MoveNode(node, x, y, z);
}
}
- if ( !myPreviewMode )
+ if ( !myIsPreviewMode )
{
TPythonDump() << "nodeID = " << this
<< ".MoveClosestNodeToPoint( "<< x << ", " << y << ", " << z
theSearchersDeleter.Set( myMesh );
if ( !theElementSearcher ) {
- ::SMESH_MeshEditor anEditor( myMesh );
- theElementSearcher = anEditor.GetElementSearcher();
+ theElementSearcher = myEditor.GetElementSearcher();
}
theElementSearcher->FindElementsByPoint( gp_Pnt( x,y,z ),
SMDSAbs_ElementType( type ),
for ( int i = 0; i < foundElems.size(); ++i )
res[i] = foundElems[i]->GetID();
- if ( !myPreviewMode ) // call from tui
+ if ( !myIsPreviewMode ) // call from tui
TPythonDump() << "res = " << this << ".FindElementsByPoint( "
<< x << ", "
<< y << ", "
SMESH::array_of_ElementType_var types = elementIDs->GetTypes();
if ( types->length() == 1 && // a part contains only nodes or 0D elements
- ( types[0] == SMESH::NODE || types[0] == SMESH::ELEM0D ) &&
+ ( types[0] == SMESH::NODE || types[0] == SMESH::ELEM0D || types[0] == SMESH::BALL) &&
type != types[0] ) // but search of elements of dim > 0
return res._retn();
if ( SMESH::DownCast<SMESH_Mesh_i*>( elementIDs )) // elementIDs is the whole mesh
return FindElementsByPoint( x,y,z, type );
- string partIOR = SMESH_Gen_i::GetORB()->object_to_string( elementIDs );
- if ( SMESH_Group_i* group_i = SMESH::DownCast<SMESH_Group_i*>( elementIDs ))
- // take into account passible group modification
- partIOR += SMESH_Comment( ((SMESHDS_Group*)group_i->GetGroupDS())->SMDSGroup().Tic() );
- partIOR += SMESH_Comment( type );
-
TIDSortedElemSet elements; // elems should live until FindElementsByPoint() finishes
- theSearchersDeleter.Set( myMesh, partIOR );
+ theSearchersDeleter.Set( myMesh, getPartIOR( elementIDs, type ));
if ( !theElementSearcher )
{
// create a searcher from elementIDs
typedef SMDS_SetIterator<const SMDS_MeshElement*, TIDSortedElemSet::const_iterator > TIter;
SMDS_ElemIteratorPtr elemsIt( new TIter( elements.begin(), elements.end() ));
- ::SMESH_MeshEditor anEditor( myMesh );
- theElementSearcher = anEditor.GetElementSearcher(elemsIt);
+ theElementSearcher = myEditor.GetElementSearcher(elemsIt);
}
vector< const SMDS_MeshElement* > foundElems;
for ( int i = 0; i < foundElems.size(); ++i )
res[i] = foundElems[i]->GetID();
- if ( !myPreviewMode ) // call from tui
+ if ( !myIsPreviewMode ) // call from tui
TPythonDump() << "res = " << this << ".FindAmongElementsByPoint( "
<< elementIDs << ", "
<< x << ", "
{
theSearchersDeleter.Set( myMesh );
if ( !theElementSearcher ) {
- ::SMESH_MeshEditor anEditor( myMesh );
- theElementSearcher = anEditor.GetElementSearcher();
+ theElementSearcher = myEditor.GetElementSearcher();
}
return CORBA::Short( theElementSearcher->GetPointState( gp_Pnt( x,y,z )));
}
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 );
const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeID1 );
<< CreatePolygons<< ", "
<< CreatePolyedrs<< " )";
- ::SMESH_MeshEditor anEditor( myMesh );
SMESH::SMESH_MeshEditor::Sew_Error error =
- convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ convError( getEditor().SewFreeBorder (aBorderFirstNode,
aBorderSecondNode,
aBorderLastNode,
aSide2FirstNode,
CreatePolygons,
CreatePolyedrs) );
- storeResult(anEditor);
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 );
const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeID1 );
<< FirstNodeID2 << ", "
<< SecondNodeID2 << " )";
- ::SMESH_MeshEditor anEditor( myMesh );
SMESH::SMESH_MeshEditor::Sew_Error error =
- convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ convError( getEditor().SewFreeBorder (aBorderFirstNode,
aBorderSecondNode,
aBorderLastNode,
aSide2FirstNode,
true,
false, false) );
- storeResult(anEditor);
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeIDOnFreeBorder );
const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeIDOnFreeBorder );
<< CreatePolygons << ", "
<< CreatePolyedrs << ") ";
- ::SMESH_MeshEditor anEditor( myMesh );
SMESH::SMESH_MeshEditor::Sew_Error error =
- convError( anEditor.SewFreeBorder (aBorderFirstNode,
+ convError( getEditor().SewFreeBorder (aBorderFirstNode,
aBorderSecondNode,
aBorderLastNode,
aSide2FirstNode,
CreatePolygons,
CreatePolyedrs) );
- storeResult(anEditor);
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
{
initData();
- SMESHDS_Mesh* aMesh = GetMeshDS();
+ SMESHDS_Mesh* aMesh = getMeshDS();
const SMDS_MeshNode* aFirstNode1ToMerge = aMesh->FindNode( NodeID1OfSide1ToMerge );
const SMDS_MeshNode* aFirstNode2ToMerge = aMesh->FindNode( NodeID1OfSide2ToMerge );
<< NodeID2OfSide1ToMerge << ", "
<< NodeID2OfSide2ToMerge << ")";
- ::SMESH_MeshEditor anEditor( myMesh );
SMESH::SMESH_MeshEditor::Sew_Error error =
- convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
+ convError( getEditor().SewSideElements (aSide1Elems, aSide2Elems,
aFirstNode1ToMerge,
aFirstNode2ToMerge,
aSecondNode1ToMerge,
aSecondNode2ToMerge));
- storeResult(anEditor);
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
{
initData();
- const SMDS_MeshElement* elem = GetMeshDS()->FindElement(ide);
+ const SMDS_MeshElement* elem = getMeshDS()->FindElement(ide);
if(!elem) return false;
int nbn = newIDs.length();
vector<const SMDS_MeshNode*> aNodes(nbn);
int nbn1=-1;
for(; i<nbn; i++) {
- const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(newIDs[i]);
+ const SMDS_MeshNode* aNode = getMeshDS()->FindNode(newIDs[i]);
if(aNode) {
nbn1++;
aNodes[nbn1] = aNode;
<< ide << ", " << newIDs << " )";
MESSAGE("ChangeElementNodes");
- bool res = GetMeshDS()->ChangeElementNodes( elem, & aNodes[0], nbn1+1 );
+ bool res = getMeshDS()->ChangeElementNodes( elem, & aNodes[0], nbn1+1 );
myMesh->GetMeshDS()->Modified();
if ( res )
return res;
}
-//================================================================================
-/*!
- * \brief Update myLastCreated* or myPreviewData
- * \param anEditor - it contains last modification results
- */
-//================================================================================
-
-void SMESH_MeshEditor_i::storeResult(::SMESH_MeshEditor& anEditor)
-{
- if ( myPreviewMode ) { // --- MeshPreviewStruct filling ---
-
- list<int> aNodesConnectivity;
- typedef map<int, int> TNodesMap;
- TNodesMap nodesMap;
-
- TPreviewMesh * aPreviewMesh = dynamic_cast< TPreviewMesh* >( anEditor.GetMesh() );
- SMDSAbs_ElementType previewType = aPreviewMesh->myPreviewType;
-
- SMESHDS_Mesh* aMeshDS = anEditor.GetMeshDS();
- int nbEdges = aMeshDS->NbEdges();
- int nbFaces = aMeshDS->NbFaces();
- int nbVolum = aMeshDS->NbVolumes();
- switch ( previewType ) {
- case SMDSAbs_Edge : nbFaces = nbVolum = 0; break;
- case SMDSAbs_Face : nbEdges = nbVolum = 0; break;
- case SMDSAbs_Volume: nbEdges = nbFaces = 0; break;
- default:;
- }
- myPreviewData->nodesXYZ.length(aMeshDS->NbNodes());
- myPreviewData->elementTypes.length(nbEdges + nbFaces + nbVolum);
- int i = 0, j = 0;
- SMDS_ElemIteratorPtr itMeshElems = aMeshDS->elementsIterator();
-
- while ( itMeshElems->more() ) {
- const SMDS_MeshElement* aMeshElem = itMeshElems->next();
- if ( previewType != SMDSAbs_All && aMeshElem->GetType() != previewType )
- continue;
-
- SMDS_ElemIteratorPtr itElemNodes = aMeshElem->nodesIterator();
- while ( itElemNodes->more() ) {
- const SMDS_MeshNode* aMeshNode =
- static_cast<const SMDS_MeshNode*>( itElemNodes->next() );
- int aNodeID = aMeshNode->GetID();
- TNodesMap::iterator anIter = nodesMap.find(aNodeID);
- if ( anIter == nodesMap.end() ) {
- // filling the nodes coordinates
- myPreviewData->nodesXYZ[j].x = aMeshNode->X();
- myPreviewData->nodesXYZ[j].y = aMeshNode->Y();
- myPreviewData->nodesXYZ[j].z = aMeshNode->Z();
- anIter = nodesMap.insert( make_pair(aNodeID, j) ).first;
- j++;
- }
- aNodesConnectivity.push_back(anIter->second);
- }
-
- // filling the elements types
- SMDSAbs_ElementType aType;
- bool isPoly;
- /*if (aMeshElem->GetType() == SMDSAbs_Volume) {
- aType = SMDSAbs_Node;
- isPoly = false;
- }
- else*/ {
- aType = aMeshElem->GetType();
- isPoly = aMeshElem->IsPoly();
- }
-
- myPreviewData->elementTypes[i].SMDS_ElementType = (SMESH::ElementType) aType;
- myPreviewData->elementTypes[i].isPoly = isPoly;
- myPreviewData->elementTypes[i].nbNodesInElement = aMeshElem->NbNodes();
- i++;
-
- }
- myPreviewData->nodesXYZ.length( j );
-
- // filling the elements connectivities
- list<int>::iterator aConnIter = aNodesConnectivity.begin();
- myPreviewData->elementConnectivities.length(aNodesConnectivity.size());
- for( int i = 0; aConnIter != aNodesConnectivity.end(); aConnIter++, i++ )
- myPreviewData->elementConnectivities[i] = *aConnIter;
-
- return;
- }
-
- {
- // append new nodes into myLastCreatedNodes
- const SMESH_SequenceOfElemPtr& aSeq = anEditor.GetLastCreatedNodes();
- int j = myLastCreatedNodes->length();
- int newLen = j + aSeq.Length();
- myLastCreatedNodes->length( newLen );
- for(int i=0; j<newLen; i++,j++)
- myLastCreatedNodes[j] = aSeq.Value(i+1)->GetID();
- }
- {
- // append new elements into myLastCreatedElems
- const SMESH_SequenceOfElemPtr& aSeq = anEditor.GetLastCreatedElems();
- int j = myLastCreatedElems->length();
- int newLen = j + aSeq.Length();
- myLastCreatedElems->length( newLen );
- for(int i=0; j<newLen; i++,j++)
- myLastCreatedElems[j] = aSeq.Value(i+1)->GetID();
- }
-}
-
-//================================================================================
-/*!
- * Return data of mesh edition preview
- */
-//================================================================================
-
-SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
-{
- return myPreviewData._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._retn();
-}
-
-//================================================================================
-/*!
- * \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._retn();
-}
-
//=======================================================================
//function : ConvertToQuadratic
//purpose :
void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
{
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.ConvertToQuadratic(theForce3d);
+ getEditor().ConvertToQuadratic(theForce3d);
TPythonDump() << this << ".ConvertToQuadratic( " << theForce3d << " )";
myMesh->GetMeshDS()->Modified();
myMesh->SetIsModified( true );
CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
{
- ::SMESH_MeshEditor anEditor( myMesh );
- CORBA::Boolean isDone = anEditor.ConvertFromQuadratic();
+ CORBA::Boolean isDone = getEditor().ConvertFromQuadratic();
TPythonDump() << this << ".ConvertFromQuadratic()";
myMesh->GetMeshDS()->Modified();
if ( isDone )
Unexpect aCatch(SALOME_SalomeException);
TPythonDump pyDump;
TIDSortedElemSet elems;
- if ( idSourceToSet( theObject, GetMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
+ if ( idSourceToSet( theObject, getMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
{
if ( elems.empty() )
{
}
else
{
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.ConvertToQuadratic(theForce3d, elems);
+ getEditor().ConvertToQuadratic(theForce3d, elems);
}
}
myMesh->GetMeshDS()->Modified();
Unexpect aCatch(SALOME_SalomeException);
TPythonDump pyDump;
TIDSortedElemSet elems;
- if ( idSourceToSet( theObject, GetMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
+ if ( idSourceToSet( theObject, getMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
{
if ( elems.empty() )
{
}
else
{
- ::SMESH_MeshEditor anEditor( myMesh );
- anEditor.ConvertFromQuadratic(elems);
+ getEditor().ConvertFromQuadratic(elems);
}
}
myMesh->GetMeshDS()->Modified();
SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::makeMesh(const char* theMeshName)
{
- SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
- SMESH::SMESH_Mesh_var mesh = gen->CreateEmptyMesh();
- SALOMEDS::Study_var study = gen->GetCurrentStudy();
- SALOMEDS::SObject_var meshSO = gen->ObjectToSObject( study, mesh );
+ SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
+ SMESH::SMESH_Mesh_var mesh = gen->CreateEmptyMesh();
+ SALOMEDS::Study_var study = gen->GetCurrentStudy();
+ SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( study, mesh );
gen->SetName( meshSO, theMeshName, "Mesh" );
gen->SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
if (CORBA::is_nil(aGroup))
continue;
- groupNames.insert(aGroup->GetName());
+ CORBA::String_var name = aGroup->GetName();
+ groupNames.insert( name.in() );
}
// Find new name
string name = thePrefix;
int index = 0;
- while (!groupNames.insert(name).second) {
- if (index == 0) {
- name += "_1";
- }
- else {
- TCollection_AsciiString nbStr(index+1);
- name.resize( name.rfind('_')+1 );
- name += nbStr.ToCString();
- }
- ++index;
- }
+ while (!groupNames.insert(name).second)
+ name = SMESH_Comment( thePrefix ) << "_" << index;
return name;
}
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
list< int > aListOfNodes;
int i, n;
for ( i = 0, n = theNodes.length(); i < n; i++ )
for ( i = 0, n = theModifiedElems.length(); i < n; i++ )
aListOfElems.push_back( theModifiedElems[ i ] );
- bool aResult = aMeshEditor.DoubleNodes( aListOfNodes, aListOfElems );
+ bool aResult = getEditor().DoubleNodes( aListOfNodes, aListOfElems );
myMesh->GetMeshDS()->Modified();
- storeResult( aMeshEditor) ;
if ( aResult )
myMesh->SetIsModified( true );
* \return a new group with newly created nodes
* \sa DoubleNodeGroup()
*/
-SMESH::SMESH_Group_ptr SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
- SMESH::SMESH_GroupBase_ptr theModifiedElems )
+SMESH::SMESH_Group_ptr
+SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
+ SMESH::SMESH_GroupBase_ptr theModifiedElems )
{
- if ( CORBA::is_nil( theNodes ) && theNodes->GetType() != SMESH::NODE )
- return false;
-
SMESH::SMESH_Group_var aNewGroup;
+ if ( CORBA::is_nil( theNodes ) && theNodes->GetType() != SMESH::NODE )
+ return aNewGroup._retn();
+
// Duplicate nodes
SMESH::long_array_var aNodes = theNodes->GetListOfID();
SMESH::long_array_var aModifiedElems;
TPythonDump pyDump; // suppress dump by the next line
bool aResult = DoubleNodes( aNodes, aModifiedElems );
-
if ( aResult )
{
// Create group with newly created nodes
string aNewName = generateGroupName(anUnindexedName + "_double");
aNewGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
aNewGroup->Add(anIds);
+ pyDump << aNewGroup << " = ";
}
}
- pyDump << "createdNodes = " << this << ".DoubleNodeGroupNew( " << theNodes << ", "
- << theModifiedElems << " )";
+ pyDump << this << ".DoubleNodeGroupNew( " << theNodes << ", "
+ << theModifiedElems << " )";
return aNewGroup._retn();
}
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
std::list< int > aNodes;
int i, n, j, m;
}
}
- bool aResult = aMeshEditor.DoubleNodes( aNodes, anElems );
+ bool aResult = getEditor().DoubleNodes( aNodes, anElems );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
*/
//================================================================================
-SMESH::SMESH_Group_ptr SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
- const SMESH::ListOfGroups& theModifiedElems )
+SMESH::SMESH_Group_ptr
+SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
+ const SMESH::ListOfGroups& theModifiedElems )
{
SMESH::SMESH_Group_var aNewGroup;
string aNewName = generateGroupName(anUnindexedName + "_double");
aNewGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
aNewGroup->Add(anIds);
+ pyDump << aNewGroup << " = ";
}
}
- pyDump << "createdNodes = " << this << ".DoubleNodeGroupsNew( " << theNodes << ", "
- << theModifiedElems << " )";
+ pyDump << this << ".DoubleNodeGroupsNew( " << theNodes << ", "
+ << theModifiedElems << " )";
return aNewGroup._retn();
}
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
arrayToSet(theElems, aMeshDS, anElems, SMDSAbs_All);
arrayToSet(theNodesNot, aMeshDS, aNodes, SMDSAbs_Node);
arrayToSet(theAffectedElems, aMeshDS, anAffected, SMDSAbs_All);
- bool aResult = aMeshEditor.DoubleNodes( anElems, aNodes, anAffected );
+ bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes;
arrayToSet(theElems, aMeshDS, anElems, SMDSAbs_All);
arrayToSet(theNodesNot, aMeshDS, aNodes, SMDSAbs_Node);
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
- bool aResult = aMeshEditor.DoubleNodesInRegion( anElems, aNodes, aShape );
+ bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
idSourceToSet( theElems, aMeshDS, anElems, SMDSAbs_All );
idSourceToSet( theNodesNot, aMeshDS, aNodes, SMDSAbs_Node );
idSourceToSet( theAffectedElems, aMeshDS, anAffected, SMDSAbs_All );
- bool aResult = aMeshEditor.DoubleNodes( anElems, aNodes, anAffected );
+ bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
* \return a new group with newly created elements
* \sa DoubleNodeElemGroup()
*/
-SMESH::SMESH_Group_ptr SMESH_MeshEditor_i::DoubleNodeElemGroupNew(SMESH::SMESH_GroupBase_ptr theElems,
- SMESH::SMESH_GroupBase_ptr theNodesNot,
- SMESH::SMESH_GroupBase_ptr theAffectedElems)
+SMESH::SMESH_Group_ptr
+SMESH_MeshEditor_i::DoubleNodeElemGroupNew(SMESH::SMESH_GroupBase_ptr theElems,
+ SMESH::SMESH_GroupBase_ptr theNodesNot,
+ SMESH::SMESH_GroupBase_ptr theAffectedElems)
{
- if ( CORBA::is_nil( theElems ) && theElems->GetType() == SMESH::NODE )
- return false;
+ TPythonDump pyDump;
+ SMESH::ListOfGroups_var twoGroups = DoubleNodeElemGroup2New( theElems,
+ theNodesNot,
+ theAffectedElems,
+ true, false );
+ SMESH::SMESH_GroupBase_var baseGroup = twoGroups[0].in();
+ SMESH::SMESH_Group_var elemGroup = SMESH::SMESH_Group::_narrow( baseGroup );
- SMESH::SMESH_Group_var aNewGroup;
+ pyDump << elemGroup << " = " << this << ".DoubleNodeElemGroupNew( "
+ << theElems << ", "
+ << theNodesNot << ", "
+ << theAffectedElems << " )";
+
+ return elemGroup._retn();
+}
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
+ SMESH::SMESH_GroupBase_ptr theNodesNot,
+ SMESH::SMESH_GroupBase_ptr theAffectedElems,
+ CORBA::Boolean theElemGroupNeeded,
+ CORBA::Boolean theNodeGroupNeeded)
+{
+ SMESH::SMESH_Group_var aNewElemGroup, aNewNodeGroup;
+ SMESH::ListOfGroups_var aTwoGroups = new SMESH::ListOfGroups();
+ aTwoGroups->length( 2 );
+
+ if ( CORBA::is_nil( theElems ) && theElems->GetType() == SMESH::NODE )
+ return aTwoGroups._retn();
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
idSourceToSet( theElems, aMeshDS, anElems, SMDSAbs_All );
idSourceToSet( theNodesNot, aMeshDS, aNodes, SMDSAbs_Node );
idSourceToSet( theAffectedElems, aMeshDS, anAffected, SMDSAbs_All );
- bool aResult = aMeshEditor.DoubleNodes( anElems, aNodes, anAffected );
+ bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
+
+ myMesh->GetMeshDS()->Modified();
- storeResult( aMeshEditor) ;
+ TPythonDump pyDump;
- if ( aResult ) {
+ if ( aResult )
+ {
myMesh->SetIsModified( true );
// Create group with newly created elements
- SMESH::long_array_var anIds = GetLastCreatedElems();
- if (anIds->length() > 0) {
+ CORBA::String_var elemGroupName = theElems->GetName();
+ string aNewName = generateGroupName( string(elemGroupName.in()) + "_double");
+ if ( !getEditor().GetLastCreatedElems().IsEmpty() && theElemGroupNeeded )
+ {
+ SMESH::long_array_var anIds = GetLastCreatedElems();
SMESH::ElementType aGroupType = myMesh_i->GetElementType(anIds[0], true);
- string anUnindexedName (theElems->GetName());
- string aNewName = generateGroupName(anUnindexedName + "_double");
- aNewGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
- aNewGroup->Add(anIds);
+ aNewElemGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
+ aNewElemGroup->Add(anIds);
+ }
+ if ( !getEditor().GetLastCreatedNodes().IsEmpty() && theNodeGroupNeeded )
+ {
+ SMESH::long_array_var anIds = GetLastCreatedNodes();
+ aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
+ aNewNodeGroup->Add(anIds);
}
}
// Update Python script
- TPythonDump() << "createdElems = " << this << ".DoubleNodeElemGroupNew( " << theElems << ", "
- << theNodesNot << ", " << theAffectedElems << " )";
- return aNewGroup._retn();
+
+ pyDump << "[ ";
+ if ( aNewElemGroup->_is_nil() ) pyDump << "nothing, ";
+ else pyDump << aNewElemGroup << ", ";
+ if ( aNewNodeGroup->_is_nil() ) pyDump << "nothing ] = ";
+ else pyDump << aNewNodeGroup << " ] = ";
+
+ pyDump << this << ".DoubleNodeElemGroup2New( " << theElems << ", "
+ << theNodesNot << ", "
+ << theAffectedElems << ", "
+ << theElemGroupNeeded << ", "
+ << theNodeGroupNeeded <<" )";
+
+ aTwoGroups[0] = aNewElemGroup._retn();
+ aTwoGroups[1] = aNewNodeGroup._retn();
+ return aTwoGroups._retn();
}
//================================================================================
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
idSourceToSet( theElems, aMeshDS, anElems, SMDSAbs_All );
idSourceToSet( theNodesNot, aMeshDS, aNodes, SMDSAbs_Node );
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
- bool aResult = aMeshEditor.DoubleNodesInRegion( anElems, aNodes, aShape );
+ bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
listOfGroupToSet(theElems, aMeshDS, anElems, false );
listOfGroupToSet(theNodesNot, aMeshDS, aNodes, true );
listOfGroupToSet(theAffectedElems, aMeshDS, anAffected, false );
- bool aResult = aMeshEditor.DoubleNodes( anElems, aNodes, anAffected );
+ bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
*/
//================================================================================
-SMESH::SMESH_Group_ptr SMESH_MeshEditor_i::DoubleNodeElemGroupsNew(const SMESH::ListOfGroups& theElems,
- const SMESH::ListOfGroups& theNodesNot,
- const SMESH::ListOfGroups& theAffectedElems)
+SMESH::SMESH_Group_ptr
+SMESH_MeshEditor_i::DoubleNodeElemGroupsNew(const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ const SMESH::ListOfGroups& theAffectedElems)
{
- SMESH::SMESH_Group_var aNewGroup;
+ TPythonDump pyDump;
+ SMESH::ListOfGroups_var twoGroups = DoubleNodeElemGroups2New( theElems,
+ theNodesNot,
+ theAffectedElems,
+ true, false );
+ SMESH::SMESH_GroupBase_var baseGroup = twoGroups[0].in();
+ SMESH::SMESH_Group_var elemGroup = SMESH::SMESH_Group::_narrow( baseGroup );
+
+ pyDump << elemGroup << " = " << this << ".DoubleNodeElemGroupsNew( "
+ << theElems << ", "
+ << theNodesNot << ", "
+ << theAffectedElems << " )";
+
+ return elemGroup._retn();
+}
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ const SMESH::ListOfGroups& theAffectedElems,
+ CORBA::Boolean theElemGroupNeeded,
+ CORBA::Boolean theNodeGroupNeeded)
+{
+ SMESH::SMESH_Group_var aNewElemGroup, aNewNodeGroup;
+ SMESH::ListOfGroups_var aTwoGroups = new SMESH::ListOfGroups();
+ aTwoGroups->length( 2 );
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
listOfGroupToSet(theElems, aMeshDS, anElems, false );
listOfGroupToSet(theNodesNot, aMeshDS, aNodes, true );
listOfGroupToSet(theAffectedElems, aMeshDS, anAffected, false );
- bool aResult = aMeshEditor.DoubleNodes( anElems, aNodes, anAffected );
+ bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
- if ( aResult ) {
+ TPythonDump pyDump;
+ if ( aResult )
+ {
myMesh->SetIsModified( true );
// Create group with newly created elements
- SMESH::long_array_var anIds = GetLastCreatedElems();
- if (anIds->length() > 0) {
+ CORBA::String_var elemGroupName = theElems[0]->GetName();
+ string aNewName = generateGroupName( string(elemGroupName.in()) + "_double");
+ if ( !getEditor().GetLastCreatedElems().IsEmpty() && theElemGroupNeeded )
+ {
+ SMESH::long_array_var anIds = GetLastCreatedElems();
SMESH::ElementType aGroupType = myMesh_i->GetElementType(anIds[0], true);
- string anUnindexedName (theElems[0]->GetName());
- string aNewName = generateGroupName(anUnindexedName + "_double");
- aNewGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
- aNewGroup->Add(anIds);
+ aNewElemGroup = myMesh_i->CreateGroup(aGroupType, aNewName.c_str());
+ aNewElemGroup->Add(anIds);
+ }
+ if ( !getEditor().GetLastCreatedNodes().IsEmpty() && theNodeGroupNeeded )
+ {
+ SMESH::long_array_var anIds = GetLastCreatedNodes();
+ aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
+ aNewNodeGroup->Add(anIds);
}
}
// Update Python script
- TPythonDump() << "createdElems = " << this << ".DoubleNodeElemGroupsNew( " << &theElems << ", "
- << &theNodesNot << ", " << &theAffectedElems << " )";
- return aNewGroup._retn();
+
+ pyDump << "[ ";
+ if ( aNewElemGroup->_is_nil() ) pyDump << "nothing, ";
+ else pyDump << aNewElemGroup << ", ";
+ if ( aNewNodeGroup->_is_nil() ) pyDump << "nothing ] = ";
+ else pyDump << aNewNodeGroup << " ] = ";
+
+ pyDump << this << ".DoubleNodeElemGroups2New( " << &theElems << ", "
+ << &theNodesNot << ", "
+ << &theAffectedElems << ", "
+ << theElemGroupNeeded << ", "
+ << theNodeGroupNeeded << " )";
+
+ aTwoGroups[0] = aNewElemGroup._retn();
+ aTwoGroups[1] = aNewNodeGroup._retn();
+ return aTwoGroups._retn();
}
//================================================================================
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes;
listOfGroupToSet(theElems, aMeshDS, anElems,false );
listOfGroupToSet(theNodesNot, aMeshDS, aNodes, true );
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
- bool aResult = aMeshEditor.DoubleNodesInRegion( anElems, aNodes, aShape );
+ bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
if ( aResult )
return aResult;
}
+//================================================================================
+/*!
+ \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
+ This method is the first step of DoubleNodeElemGroupsInRegion.
+ \param theElems - list of groups of elements (edges or faces) to be replicated
+ \param theNodesNot - list of groups of nodes not to replicated
+ \param theShape - shape to detect affected elements (element which geometric center
+ located on or inside shape).
+ The replicated nodes should be associated to affected elements.
+ \return groups of affected elements
+ \sa DoubleNodeElemGroupsInRegion()
+ */
+//================================================================================
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ GEOM::GEOM_Object_ptr theShape )
+{
+ MESSAGE("AffectedElemGroupsInRegion");
+ SMESH::ListOfGroups_var aListOfGroups = new SMESH::ListOfGroups();
+ bool isEdgeGroup = false;
+ bool isFaceGroup = false;
+ bool isVolumeGroup = false;
+ SMESH::SMESH_Group_var aNewEdgeGroup = myMesh_i->CreateGroup(SMESH::EDGE, "affectedEdges");
+ SMESH::SMESH_Group_var aNewFaceGroup = myMesh_i->CreateGroup(SMESH::FACE, "affectedFaces");
+ SMESH::SMESH_Group_var aNewVolumeGroup = myMesh_i->CreateGroup(SMESH::VOLUME, "affectedVolumes");
+
+ initData();
+
+ ::SMESH_MeshEditor aMeshEditor(myMesh);
+
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
+ TIDSortedElemSet anElems, aNodes;
+ listOfGroupToSet(theElems, aMeshDS, anElems, false);
+ listOfGroupToSet(theNodesNot, aMeshDS, aNodes, true);
+
+ TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape(theShape);
+ TIDSortedElemSet anAffected;
+ bool aResult = aMeshEditor.AffectedElemGroupsInRegion(anElems, aNodes, aShape, anAffected);
+
+
+ myMesh->GetMeshDS()->Modified();
+ TPythonDump pyDump;
+ if (aResult)
+ {
+ myMesh->SetIsModified(true);
+
+ int lg = anAffected.size();
+ MESSAGE("lg="<< lg);
+ SMESH::long_array_var volumeIds = new SMESH::long_array;
+ volumeIds->length(lg);
+ SMESH::long_array_var faceIds = new SMESH::long_array;
+ faceIds->length(lg);
+ SMESH::long_array_var edgeIds = new SMESH::long_array;
+ edgeIds->length(lg);
+ int ivol = 0;
+ int iface = 0;
+ int iedge = 0;
+
+ TIDSortedElemSet::const_iterator eIt = anAffected.begin();
+ for (; eIt != anAffected.end(); ++eIt)
+ {
+ const SMDS_MeshElement* anElem = *eIt;
+ if (!anElem)
+ continue;
+ int elemId = anElem->GetID();
+ if (myMesh->GetElementType(elemId, true) == SMDSAbs_Volume)
+ volumeIds[ivol++] = elemId;
+ else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Face)
+ faceIds[iface++] = elemId;
+ else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Edge)
+ edgeIds[iedge++] = elemId;
+ }
+ volumeIds->length(ivol);
+ faceIds->length(iface);
+ edgeIds->length(iedge);
+
+ aNewVolumeGroup->Add(volumeIds);
+ aNewFaceGroup->Add(faceIds);
+ aNewEdgeGroup->Add(edgeIds);
+ isVolumeGroup = (aNewVolumeGroup->Size() > 0);
+ isFaceGroup = (aNewFaceGroup->Size() > 0);
+ isEdgeGroup = (aNewEdgeGroup->Size() > 0);
+ }
+
+ int nbGroups = 0;
+ if (isEdgeGroup)
+ nbGroups++;
+ if (isFaceGroup)
+ nbGroups++;
+ if (isVolumeGroup)
+ nbGroups++;
+ aListOfGroups->length(nbGroups);
+
+ int i = 0;
+ if (isEdgeGroup)
+ aListOfGroups[i++] = aNewEdgeGroup._retn();
+ if (isFaceGroup)
+ aListOfGroups[i++] = aNewFaceGroup._retn();
+ if (isVolumeGroup)
+ aListOfGroups[i++] = aNewVolumeGroup._retn();
+
+ // Update Python script
+
+ pyDump << "[ ";
+ if (isEdgeGroup)
+ pyDump << aNewEdgeGroup << ", ";
+ if (isFaceGroup)
+ pyDump << aNewFaceGroup << ", ";
+ if (isVolumeGroup)
+ pyDump << aNewVolumeGroup << ", ";
+ pyDump << "] = ";
+ pyDump << this << ".AffectedElemGroupsInRegion( " << &theElems << ", " << &theNodesNot << ", " << theShape << " )";
+
+ return aListOfGroups._retn();
+}
+
//================================================================================
/*!
\brief Generated skin mesh (containing 2D cells) from 3D mesh
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- bool aResult = aMeshEditor.Make2DMeshFrom3D();
- storeResult( aMeshEditor) ;
+ bool aResult = getEditor().Make2DMeshFrom3D();
myMesh->GetMeshDS()->Modified();
TPythonDump() << "isDone = " << this << ".Make2DMeshFrom3D()";
return aResult;
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
CORBA::Boolean createJointElems )
+ throw (SALOME::SALOME_Exception)
{
- initData();
+ bool aResult = false;
- ::SMESH_MeshEditor aMeshEditor( myMesh );
+ SMESH_TRY;
+ initData();
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
vector<TIDSortedElemSet> domains;
domains.clear();
for ( int i = 0, n = theDomains.length(); i < n; i++ )
{
SMESH::SMESH_GroupBase_var aGrp = theDomains[ i ];
- if ( !CORBA::is_nil( aGrp ) && ( aGrp->GetType() != SMESH::NODE ) )
+ if ( !CORBA::is_nil( aGrp ) /*&& ( aGrp->GetType() != SMESH::NODE )*/ )
{
+// if ( aGrp->GetType() != SMESH::VOLUME )
+// THROW_SALOME_CORBA_EXCEPTION("Not a volume group", SALOME::BAD_PARAM);
TIDSortedElemSet domain;
domain.clear();
domains.push_back(domain);
}
}
- bool aResult = aMeshEditor.DoubleNodesOnGroupBoundaries( domains, createJointElems );
+ aResult = getEditor().DoubleNodesOnGroupBoundaries( domains, createJointElems );
// TODO publish the groups of flat elements in study
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodesOnGroupBoundaries( " << &theDomains
<< ", " << createJointElems << " )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+
return aResult;
}
{
initData();
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
vector<TIDSortedElemSet> faceGroups;
faceGroups.clear();
}
}
- bool aResult = aMeshEditor.CreateFlatElementsOnFacesGroups( faceGroups );
+ bool aResult = getEditor().CreateFlatElementsOnFacesGroups( faceGroups );
// TODO publish the groups of flat elements in study
- storeResult( aMeshEditor) ;
myMesh->GetMeshDS()->Modified();
// Update Python script
return aResult;
}
+/*!
+ * \brief identify all the elements around a geom shape, get the faces delimiting the hole
+ * Build groups of volume to remove, groups of faces to replace on the skin of the object,
+ * groups of faces to remove inside the object, (idem edges).
+ * Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
+ */
+void SMESH_MeshEditor_i::CreateHoleSkin(CORBA::Double radius,
+ GEOM::GEOM_Object_ptr theShape,
+ const char* groupName,
+ const SMESH::double_array& theNodesCoords,
+ SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception)
+{
+ SMESH_TRY;
+
+ initData();
+ std::vector<std::vector<int> > aListOfListOfNodes;
+ ::SMESH_MeshEditor aMeshEditor( myMesh );
+
+ theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
+ if ( !theNodeSearcher )
+ theNodeSearcher = aMeshEditor.GetNodeSearcher();
+
+ vector<double> nodesCoords;
+ for (int i = 0; i < theNodesCoords.length(); i++)
+ {
+ nodesCoords.push_back( theNodesCoords[i] );
+ }
+
+ TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
+ aMeshEditor.CreateHoleSkin(radius, aShape, theNodeSearcher, groupName,
+ nodesCoords, aListOfListOfNodes);
+
+ GroupsOfNodes = new SMESH::array_of_long_array;
+ GroupsOfNodes->length( aListOfListOfNodes.size() );
+ std::vector<std::vector<int> >::iterator llIt = aListOfListOfNodes.begin();
+ for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ )
+ {
+ vector<int>& aListOfNodes = *llIt;
+ vector<int>::iterator lIt = aListOfNodes.begin();;
+ SMESH::long_array& aGroup = (*GroupsOfNodes)[ i ];
+ aGroup.length( aListOfNodes.size() );
+ for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ )
+ aGroup[ j ] = (*lIt);
+ }
+ TPythonDump() << "lists_nodes = " << this << ".CreateHoleSkin( "
+ << radius << ", "
+ << theShape
+ << ", '" << groupName << "', "
+ << theNodesCoords << " )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+}
+
+
// issue 20749 ===================================================================
/*!
* \brief Creates missing boundary elements
if ( dim > SMESH::BND_1DFROM2D )
THROW_SALOME_CORBA_EXCEPTION("Invalid boundary dimension", SALOME::BAD_PARAM);
- SMESHDS_Mesh* aMeshDS = GetMeshDS();
+ SMESHDS_Mesh* aMeshDS = getMeshDS();
SMESH::SMESH_Mesh_var mesh_var;
SMESH::SMESH_Group_var group_var;
}
// do it
- ::SMESH_MeshEditor aMeshEditor( myMesh );
- aMeshEditor.MakeBoundaryMesh( elements,
+ getEditor().MakeBoundaryMesh( elements,
::SMESH_MeshEditor::Bnd_Dimension(dim),
smesh_group,
smesh_mesh,
toCopyElements,
toCopyExistingBondary);
- storeResult( aMeshEditor );
if ( smesh_mesh )
smesh_mesh->GetMeshDS()->Modified();
if ( dim > SMESH::BND_1DFROM2D )
THROW_SALOME_CORBA_EXCEPTION("Invalid boundary dimension", SALOME::BAD_PARAM);
- // check that groups belongs to to this mesh and is not this mesh
- const int nbGroups = groups.length();
- for ( int i = 0; i < nbGroups; ++i )
+ // separate groups belonging to this and other mesh
+ SMESH::ListOfIDSources_var groupsOfThisMesh = new SMESH::ListOfIDSources;
+ SMESH::ListOfIDSources_var groupsOfOtherMesh = new SMESH::ListOfIDSources;
+ groupsOfThisMesh->length( groups.length() );
+ groupsOfOtherMesh->length( groups.length() );
+ int nbGroups = 0, nbGroupsOfOtherMesh = 0;
+ for ( int i = 0; i < groups.length(); ++i )
{
SMESH::SMESH_Mesh_var m = groups[i]->GetMesh();
if ( myMesh_i != SMESH::DownCast<SMESH_Mesh_i*>( m ))
- THROW_SALOME_CORBA_EXCEPTION("group does not belong to this mesh", SALOME::BAD_PARAM);
+ groupsOfOtherMesh[ nbGroupsOfOtherMesh++ ] = groups[i];
+ else
+ groupsOfThisMesh[ nbGroups++ ] = groups[i];
if ( SMESH::DownCast<SMESH_Mesh_i*>( groups[i] ))
THROW_SALOME_CORBA_EXCEPTION("expect a group but recieve a mesh", SALOME::BAD_PARAM);
}
+ groupsOfThisMesh->length( nbGroups );
+ groupsOfOtherMesh->length( nbGroupsOfOtherMesh );
+ int nbAdded = 0;
TPythonDump pyDump;
- int nbAdded = 0;
+ if ( nbGroupsOfOtherMesh > 0 )
+ {
+ // process groups belonging to another mesh
+ SMESH::SMESH_Mesh_var otherMesh = groupsOfOtherMesh[0]->GetMesh();
+ SMESH::SMESH_MeshEditor_var editor = otherMesh->GetMeshEditor();
+ nbAdded += editor->MakeBoundaryElements( dim, groupName, meshName, toCopyAll,
+ groupsOfOtherMesh, mesh, group );
+ }
+
SMESH::SMESH_Mesh_var mesh_var;
SMESH::SMESH_Group_var group_var;
TIDSortedElemSet elements;
- if ( nbGroups > 0 )
+ if ( groups.length() > 0 )
{
for ( int i = 0; i < nbGroups; ++i )
{
elements.clear();
- if ( idSourceToSet( groups[i], srcMeshDS, elements, elemType,/*emptyIfIsMesh=*/false ))
+ if ( idSourceToSet( groupsOfThisMesh[i], srcMeshDS, elements, elemType,/*emptyIfIsMesh=*/0 ))
{
SMESH::Bnd_Dimension bdim =
( elemType == SMDSAbs_Volume ) ? SMESH::BND_2DFROM3D : SMESH::BND_1DFROM2D;
- ::SMESH_MeshEditor aMeshEditor( srcMesh );
- nbAdded += aMeshEditor.MakeBoundaryMesh( elements,
+ nbAdded += getEditor().MakeBoundaryMesh( elements,
::SMESH_MeshEditor::Bnd_Dimension(bdim),
smesh_group,
tgtMesh,
/*toCopyExistingBondary=*/srcMesh != tgtMesh,
/*toAddExistingBondary=*/true,
/*aroundElements=*/true);
- storeResult( aMeshEditor );
}
}
}
else
{
- ::SMESH_MeshEditor aMeshEditor( srcMesh );
- nbAdded += aMeshEditor.MakeBoundaryMesh( elements,
+ nbAdded += getEditor().MakeBoundaryMesh( elements,
::SMESH_MeshEditor::Bnd_Dimension(dim),
smesh_group,
tgtMesh,
/*toCopyElements=*/false,
/*toCopyExistingBondary=*/srcMesh != tgtMesh,
/*toAddExistingBondary=*/true);
- storeResult( aMeshEditor );
}
tgtMesh->GetMeshDS()->Modified();