X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_ProjectionSource2D.cxx;h=38017bf693333e0feff1d6233d840d61b81304d9;hb=1303d07964eaeb54cd4248635fe2e3feeaa35011;hp=84cdc782b4f9c5e42a0313326d712c53a4dafa55;hpb=2c607013a23bd4e7ba07e72e0c04dee2c1209cff;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx index 84cdc782b..38017bf69 100644 --- a/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx +++ b/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx @@ -1,4 +1,4 @@ -// 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 @@ -28,6 +28,8 @@ #include "StdMeshers_ProjectionSource2D.hxx" #include "SMESH_Mesh.hxx" +#include "SMESH_MesherHelper.hxx" +#include "StdMeshers_ProjectionUtils.hxx" #include "utilities.h" @@ -103,17 +105,27 @@ void StdMeshers_ProjectionSource2D::SetVertexAssociation(const TopoDS_Shape& sou throw ( SALOME_Exception ) { if ( sourceVertex1.IsNull() != targetVertex1.IsNull() || - sourceVertex2.IsNull() != targetVertex2.IsNull() || - sourceVertex1.IsNull() != targetVertex2.IsNull() ) - throw SALOME_Exception(LOCALIZED("Two or none pairs of vertices must be provided")); + sourceVertex2.IsNull() != targetVertex2.IsNull() ) + throw SALOME_Exception(LOCALIZED("Vertices must be provided in couples")); - if ( !sourceVertex1.IsNull() ) { + if ( sourceVertex1.IsNull() != sourceVertex2.IsNull() ) + { + // possibly there is only 1 vertex in the face + if ( !_sourceFace.IsNull() && + SMESH_MesherHelper::Count( _sourceFace, TopAbs_VERTEX, /*ignoreSame=*/true) != 1 ) + throw SALOME_Exception(LOCALIZED("Two or none pairs of vertices must be provided")); + } + + if ( !sourceVertex1.IsNull() ) if ( sourceVertex1.ShapeType() != TopAbs_VERTEX || - sourceVertex2.ShapeType() != TopAbs_VERTEX || - targetVertex1.ShapeType() != TopAbs_VERTEX || + targetVertex1.ShapeType() != TopAbs_VERTEX ) + throw SALOME_Exception(LOCALIZED("Wrong shape type")); + + if ( !sourceVertex2.IsNull() ) + if ( sourceVertex2.ShapeType() != TopAbs_VERTEX || targetVertex2.ShapeType() != TopAbs_VERTEX ) throw SALOME_Exception(LOCALIZED("Wrong shape type")); - } + if ( !_sourceVertex1.IsSame( sourceVertex1 ) || !_sourceVertex2.IsSame( sourceVertex2 ) ||