-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
*/
class _SrinkShapeListener : SMESH_subMeshEventListener
{
- _SrinkShapeListener(): SMESH_subMeshEventListener(/*isDeletable=*/false) {}
+ _SrinkShapeListener()
+ : SMESH_subMeshEventListener(/*isDeletable=*/false,
+ "StdMeshers_ViscousLayers::_SrinkShapeListener") {}
static SMESH_subMeshEventListener* Get() { static _SrinkShapeListener l; return &l; }
public:
virtual void ProcessEvent(const int event,
*/
class _ViscousListener : SMESH_subMeshEventListener
{
- _ViscousListener(): SMESH_subMeshEventListener(/*isDeletable=*/false) {}
+ _ViscousListener():
+ SMESH_subMeshEventListener(/*isDeletable=*/false,
+ "StdMeshers_ViscousLayers::_ViscousListener") {}
static SMESH_subMeshEventListener* Get() { static _ViscousListener l; return &l; }
public:
virtual void ProcessEvent(const int event,
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; }
virtual vtkIdType GetVtkType() const { return -1; }
virtual SMDSAbs_EntityType GetEntityType() const { return SMDSEntity_Last; }
- virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const
+ virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_TRIANGLE; }
+virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const
{ return SMDS_ElemIteratorPtr( new SMDS_NodeVectorElemIterator( _nn.begin(), _nn.end()));}
};
//--------------------------------------------------------------------------------
gp_Vec2d vec1( center, uv1 );
double uLast = vec0.Angle( vec1 ); // -PI - +PI
double uMidl = vec0.Angle( vecM );
- if ( uLast < 0 ) uLast += 2*PI; // 0.0 - 2*PI
- if ( uMidl < 0 ) uMidl += 2*PI;
+ if ( uLast < 0 ) uLast += 2.*M_PI; // 0.0 - 2*PI
+ if ( uMidl < 0 ) uMidl += 2.*M_PI;
const bool sense = ( uMidl < uLast );
const double radius = 0.5 * ( vec0.Magnitude() + vec1.Magnitude() );
}
SMESH_MesherHelper helper( *_mesh );
+ helper.ToFixNodeParameters( true );
// EDGE's to shrink
map< int, _Shrinker1D > e2shrMap;
F = e2f->second.Oriented( TopAbs_FORWARD );
reverse = ( helper.GetSubShapeOri( F, E ) == TopAbs_REVERSED );
if ( helper.GetSubShapeOri( data._solid, F ) == TopAbs_REVERSED )
+ reverse = !reverse, F.Reverse();
+ if ( SMESH_Algo::IsReversedSubMesh( TopoDS::Face(F), getMeshDS() ))
reverse = !reverse;
}
else
vector< const SMDS_MeshNode*>& nn1 = ledges[j-dj1]->_nodes;
vector< const SMDS_MeshNode*>& nn2 = ledges[j-dj2]->_nodes;
if ( isOnFace )
- for ( unsigned z = 1; z < nn1.size(); ++z )
+ for ( size_t z = 1; z < nn1.size(); ++z )
sm->AddElement( getMeshDS()->AddFace( nn1[z-1], nn2[z-1], nn2[z], nn1[z] ));
else
- for ( unsigned z = 1; z < nn1.size(); ++z )
+ for ( size_t z = 1; z < nn1.size(); ++z )
sm->AddElement( new SMDS_FaceOfNodes( nn1[z-1], nn2[z-1], nn2[z], nn1[z]));
}
+
+ // Make edges
+ for ( int isFirst = 0; isFirst < 2; ++isFirst )
+ {
+ _LayerEdge* edge = isFirst ? ledges.front() : ledges.back();
+ if ( !edge->_sWOL.IsNull() && edge->_sWOL.ShapeType() == TopAbs_EDGE )
+ {
+ vector< const SMDS_MeshNode*>& nn = edge->_nodes;
+ if ( nn[1]->GetInverseElementIterator( SMDSAbs_Edge )->more() )
+ continue;
+ helper.SetSubShape( edge->_sWOL );
+ helper.SetElementsOnShape( true );
+ for ( size_t z = 1; z < nn.size(); ++z )
+ helper.AddEdge( nn[z-1], nn[z] );
+ }
+ }
}
}