X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Import_1D2D.cxx;h=c8b1a70c59eb01394404bbb31ce3b3bf3c8ce263;hb=b13aae09cfc72606a138e92f34550ec45b72512e;hp=5acc4bdc5e0336ae14f871a626687b07b9b33c0f;hpb=cc817cd04fe3ab2dc4ea3d303a792cf66e29a74b;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_Import_1D2D.cxx b/src/StdMeshers/StdMeshers_Import_1D2D.cxx index 5acc4bdc5..c8b1a70c5 100644 --- a/src/StdMeshers/StdMeshers_Import_1D2D.cxx +++ b/src/StdMeshers/StdMeshers_Import_1D2D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 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 @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -97,6 +97,7 @@ StdMeshers_Import_1D2D::StdMeshers_Import_1D2D(int hypId, int studyId, SMESH_Gen _compatibleHypothesis.push_back("ImportSource2D"); _requireDiscreteBoundary = false; + _supportSubmeshes = true; } //============================================================================= @@ -212,7 +213,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & existingNodes.insert( n ); } - // get EDGESs and their ids and get existing nodes on EDGEs + // get EDGEs and their ids and get existing nodes on EDGEs vector< TopoDS_Edge > edges; for ( exp.Init( theShape, TopAbs_EDGE ); exp.More(); exp.Next() ) { @@ -226,7 +227,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & typedef SMDS_StdIterator< const SMDS_MeshNode*, SMDS_NodeIteratorPtr > iterator; existingNodes.insert( iterator( eSM->GetNodes() ), iterator() ); } - } + } } // octree to find existing nodes SMESH_OctreeNode existingNodeOcTr( existingNodes ); @@ -280,7 +281,8 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & { // find a pre-existing node dist2foundNodes.clear(); - if ( existingNodeOcTr.NodesAround( SMESH_TNodeXYZ( *node ), dist2foundNodes, groupTol )) + existingNodeOcTr.NodesAround( SMESH_TNodeXYZ( *node ), dist2foundNodes, groupTol ); + if ( !dist2foundNodes.empty() ) (*n2nIt).second = dist2foundNodes.begin()->second; } if ( !n2nIt->second ) @@ -513,7 +515,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & int sId = editor.FindShape( edge ); nbEdges += subShapeIDs.count( sId ); } - if ( nbEdges < 2 ) + if ( nbEdges < 2 && !helper.IsRealSeam( s )) return false; // weird if ( nbEdges > 2 ) return error( COMPERR_BAD_INPUT_MESH, "Source elements overlap one another"); @@ -601,8 +603,8 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & for ( size_t iE = 0; iE < edges.size(); ++iE ) { SMESH_subMesh * sm = theMesh.GetSubMesh( edges[iE] ); - if ( SMESH_Algo::isDegenerated( edges[iE] )) - sm->SetIsAlwaysComputed( true ); + // if ( SMESH_Algo::isDegenerated( edges[iE] )) + // sm->SetIsAlwaysComputed( true ); sm->ComputeStateEngine(SMESH_subMesh::CHECK_COMPUTE_STATE); if ( sm->GetComputeState() != SMESH_subMesh::COMPUTE_OK ) return error(SMESH_Comment("Failed to create segments on the edge ")