static set<const SMDS_MeshElement*> * getFinitElements(const SMDS_MeshElement * element)
{
int numberOfSets=element->NbNodes();
- auto_ptr<set<const SMDS_MeshElement*> > pInitSet
- (new set<const SMDS_MeshElement*>[numberOfSets]);
- set<const SMDS_MeshElement*> *initSet = &(*pInitSet);
+ set<const SMDS_MeshElement*> *initSet = new set<const SMDS_MeshElement*>[numberOfSets];
SMDS_ElemIteratorPtr itNodes=element->nodesIterator();
i++;
}
-
- return intersectionOfSets(initSet, numberOfSets);
+ set<const SMDS_MeshElement*> *retSet=intersectionOfSets(initSet, numberOfSets);
+ delete [] initSet;
+ return retSet;
}
///////////////////////////////////////////////////////////////////////////////
}
}
// set element on a shape
- if ( elem && onMeshElements )
+ if ( elem && onMeshElements ) // applied to mesh elements
{
int elemIndex = iElem / nbElems;
- if ( shapeIDs[ elemIndex ] > 0 )
- aMeshDS->SetMeshElementOnShape( elem, shapeIDs[ elemIndex ] );
+ int shapeID = shapeIDs[ elemIndex ];
+ if ( shapeID > 0 ) {
+ aMeshDS->SetMeshElementOnShape( elem, shapeID );
+ // set nodes on a shape
+ TopoDS_Shape S = aMeshDS->IndexToShape( shapeID );
+ if ( S.ShapeType() == TopAbs_SOLID ) {
+ TopoDS_Iterator shellIt( S );
+ if ( shellIt.More() )
+ shapeID = aMeshDS->ShapeToIndex( shellIt.Value() );
+ }
+ SMDS_ElemIteratorPtr noIt = elem->nodesIterator();
+ while ( noIt->more() ) {
+ SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>
+ ( static_cast<const SMDS_MeshNode*>( noIt->next() ));
+ if ( !node->GetPosition() || !node->GetPosition()->GetShapeId() ) {
+ if ( S.ShapeType() == TopAbs_FACE )
+ aMeshDS->SetNodeOnFace( node, shapeID );
+ else
+ aMeshDS->SetNodeInVolume( node, shapeID );
+ }
+ }
+ }
// add elem in groups
list< SMESHDS_Group* >::iterator g = groups[ elemIndex ].begin();
for ( ; g != groups[ elemIndex ].end(); ++g )
(*g)->SMDSGroup().Add( elem );
}
- if ( elem && !myShape.IsNull() )
+ if ( elem && !myShape.IsNull() ) // applied to shape
aMeshDS->SetMeshElementOnShape( elem, myShape );
}
}
elemIDs.push_back( myElements[ i ]->GetID() );
}
- // remove refined elements and their nodes
+ // remove refined elements
editor.Remove( elemIDs, false );
}
thePoints.push_back( & (*pVecIt).myXYZ.XYZ() );
}
else { // applied to mesh elements
+ const gp_XYZ * definedXYZ = & myPoints[ myKeyPointIDs.front() ].myXYZ.XYZ();
vector<gp_XYZ>::const_iterator xyz = myXYZ.begin();
for ( ; xyz != myXYZ.end(); ++xyz )
- thePoints.push_back( & (*xyz) );
+ if ( !isDefined( *xyz ))
+ thePoints.push_back( definedXYZ );
+ else
+ thePoints.push_back( & (*xyz) );
}
return !thePoints.empty();
}
//purpose :
//=======================================================================
-SMESH::array_of_long_array* SMESH_Pattern_i::GetElementPoints()
+SMESH::array_of_long_array* SMESH_Pattern_i::GetElementPoints(CORBA::Boolean applied)
{
SMESH::array_of_long_array_var arrayOfArray = new SMESH::array_of_long_array;
- const list< list< int > >& listOfIdList = myPattern.GetElementPointIDs();
+ const list< list< int > >& listOfIdList = myPattern.GetElementPointIDs(applied);
arrayOfArray->length( listOfIdList.size() );
list< list< int > >::const_iterator llIt = listOfIdList.begin();
for ( int i = 0 ; llIt != listOfIdList.end(); llIt++, i++ )