X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FStdMeshers%2FStdMeshers_Import_1D.cxx;h=a69977dbe40c57c2054df1f7ca400c7fb13559f9;hb=8166d3be38e2fc62f01ebac953c312a28b2ac59d;hp=c24c20aac3bd377ae835e24978b6010285d9e9ef;hpb=4031dc980843986775a48d3f9eae8642be249887;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_Import_1D.cxx b/src/StdMeshers/StdMeshers_Import_1D.cxx index c24c20aac..a69977dbe 100644 --- a/src/StdMeshers/StdMeshers_Import_1D.cxx +++ b/src/StdMeshers/StdMeshers_Import_1D.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 @@ -70,47 +70,6 @@ StdMeshers_Import_1D::StdMeshers_Import_1D(int hypId, int studyId, SMESH_Gen * g _compatibleHypothesis.push_back("ImportSource1D"); } -//============================================================================= -/*! - * Check presence of a hypothesis - */ -//============================================================================= - -bool StdMeshers_Import_1D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - _sourceHyp = 0; - - const list &hyps = GetUsedHypothesis(aMesh, aShape); - if ( hyps.size() == 0 ) - { - aStatus = SMESH_Hypothesis::HYP_MISSING; - return false; // can't work with no hypothesis - } - - if ( hyps.size() > 1 ) - { - aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST; - return false; - } - - const SMESHDS_Hypothesis *theHyp = hyps.front(); - - string hypName = theHyp->GetName(); - - if (hypName == _compatibleHypothesis.front()) - { - _sourceHyp = (StdMeshers_ImportSource1D *)theHyp; - aStatus = SMESH_Hypothesis::HYP_OK; - return true; - } - - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; - return true; -} - //================================================================================ namespace // INTERNAL STUFF //================================================================================ @@ -227,6 +186,8 @@ namespace // INTERNAL STUFF switch ( sm->GetSubShape().ShapeType() ) { case TopAbs_EDGE: + if ( SMESH_Algo::isDegenerated( TopoDS::Edge( sm->GetSubShape() ))) + continue; case TopAbs_FACE: _subM.insert( sm ); if ( !sm->IsEmpty() ) @@ -344,7 +305,7 @@ namespace // INTERNAL STUFF bool rmGroups = (d->_copyGroupSubM.erase( sm ) && d->_copyGroupSubM.empty()) || rmMesh; if ( rmMesh ) d->removeImportedMesh( sm->GetFather()->GetMeshDS() ); - if ( rmGroups && data ) + if ( rmGroups && data && data->myType == SRC_HYP ) d->removeGroups( sm, data->_srcHyp ); } } @@ -381,7 +342,7 @@ namespace // INTERNAL STUFF // remove imported mesh and groups d->removeImportedMesh( sm->GetFather()->GetMeshDS() ); - if ( data ) + if ( data && data->myType == SRC_HYP ) d->removeGroups( sm, data->_srcHyp ); // clear the rest submeshes @@ -393,7 +354,7 @@ namespace // INTERNAL STUFF { SMESH_subMesh* subM = *sub; _ListenerData* hypData = (_ListenerData*) subM->GetEventListenerData( get() ); - if ( hypData ) + if ( hypData && hypData->myType == SRC_HYP ) d->removeGroups( sm, hypData->_srcHyp ); subM->ComputeStateEngine( SMESH_subMesh::CLEAN ); @@ -406,7 +367,7 @@ namespace // INTERNAL STUFF if ( sm->GetSubShape().ShapeType() == TopAbs_FACE ) sm->ComputeSubMeshStateEngine( SMESH_subMesh::CLEAN ); } - if ( data ) + if ( data && data->myType == SRC_HYP ) d->trackHypParams( sm, data->_srcHyp ); d->_n2n.clear(); d->_e2e.clear(); @@ -567,7 +528,8 @@ namespace // INTERNAL STUFF aBuilder.MakeCompound( comp ); shapeForSrcMesh = comp; for ( int iSub = 0; iSub < nbSubShapes; ++iSub ) - aBuilder.Add( comp, pseudoSubShapes( subIndex+iSub )); + if ( subIndex+iSub <= pseudoSubShapes.Extent() ) + aBuilder.Add( comp, pseudoSubShapes( subIndex+iSub )); TopExp_Explorer vExp( tgtMeshDS->ShapeToMesh(), TopAbs_VERTEX ); aBuilder.Add( comp, vExp.Current() ); } @@ -630,6 +592,48 @@ namespace // INTERNAL STUFF } // namespace +//============================================================================= +/*! + * Check presence of a hypothesis + */ +//============================================================================= + +bool StdMeshers_Import_1D::CheckHypothesis + (SMESH_Mesh& aMesh, + const TopoDS_Shape& aShape, + SMESH_Hypothesis::Hypothesis_Status& aStatus) +{ + _sourceHyp = 0; + + const list &hyps = GetUsedHypothesis(aMesh, aShape); + if ( hyps.size() == 0 ) + { + aStatus = SMESH_Hypothesis::HYP_MISSING; + return false; // can't work with no hypothesis + } + + if ( hyps.size() > 1 ) + { + aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST; + return false; + } + + const SMESHDS_Hypothesis *theHyp = hyps.front(); + + string hypName = theHyp->GetName(); + + if (hypName == _compatibleHypothesis.front()) + { + _sourceHyp = (StdMeshers_ImportSource1D *)theHyp; + aStatus = _sourceHyp->GetGroups().empty() ? HYP_BAD_PARAMETER : HYP_OK; + if ( aStatus == HYP_BAD_PARAMETER ) + _Listener::waitHypModification( aMesh.GetSubMesh( aShape )); + return aStatus == HYP_OK; + } + + aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; + return false; +} //============================================================================= /*!