Mantis issue 0021129: EDF 1541 GEOM: Problem with GetInPlace.

This commit is contained in:
jfa 2011-06-16 09:30:35 +00:00
parent 82dd601449
commit 10e60380a9
2 changed files with 161 additions and 154 deletions

View File

@ -316,7 +316,10 @@ void GEOMAlgo_GetInPlace::Intersect()
// //
const TopoDS_Shape& aS1=aMS1(i); const TopoDS_Shape& aS1=aMS1(i);
BRepBndLib::Add(aS1, aBox1); BRepBndLib::Add(aS1, aBox1);
aBox1.SetGap(myTolerance); //modified by NIZNHY-PKV Fri Jun 10 08:20:03 2011f
//aBox1.SetGap(myTolerance);
aBox1.Enlarge(myTolerance);
//modified by NIZNHY-PKV Fri Jun 10 08:20:06 2011t
// //
aTreeFiller.Add(i, aBox1); aTreeFiller.Add(i, aBox1);
} }
@ -330,7 +333,10 @@ void GEOMAlgo_GetInPlace::Intersect()
// //
const TopoDS_Shape& aS2=aMS2(j); const TopoDS_Shape& aS2=aMS2(j);
BRepBndLib::Add(aS2, aBox2); BRepBndLib::Add(aS2, aBox2);
aBox2.SetGap(myTolerance); //modified by NIZNHY-PKV Fri Jun 10 08:20:23 2011f
//aBox2.SetGap(myTolerance);
aBox2.Enlarge(myTolerance);
//modified by NIZNHY-PKV Fri Jun 10 08:20:25 2011t
// //
aSelector.Clear(); aSelector.Clear();
aSelector.SetBox(aBox2); aSelector.SetBox(aBox2);
@ -395,7 +401,7 @@ void GEOMAlgo_GetInPlace::PerformVV()
//======================================================================= //=======================================================================
void GEOMAlgo_GetInPlace::FillEdgesOn() void GEOMAlgo_GetInPlace::FillEdgesOn()
{ {
Standard_Integer i, aNbE, aNbSOn; Standard_Integer i, aNbE;
TopoDS_Iterator aIt; TopoDS_Iterator aIt;
TopTools_IndexedMapOfShape aME; TopTools_IndexedMapOfShape aME;
TopTools_MapIteratorOfMapOfShape aItMS; TopTools_MapIteratorOfMapOfShape aItMS;
@ -413,7 +419,7 @@ void GEOMAlgo_GetInPlace::FillEdgesOn()
const TopoDS_Shape& aV1=aIt.Value(); const TopoDS_Shape& aV1=aIt.Value();
if (myShapesOn.IsBound(aV1)) { if (myShapesOn.IsBound(aV1)) {
const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aV1); const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aV1);
aNbSOn=aMSOn.Extent(); //aNbSOn=aMSOn.Extent();
aItMS.Initialize(aMSOn); aItMS.Initialize(aMSOn);
for (; aItMS.More(); aItMS.Next()) { for (; aItMS.More(); aItMS.Next()) {
const TopoDS_Shape& aV2=aItMS.Key(); const TopoDS_Shape& aV2=aItMS.Key();
@ -563,7 +569,7 @@ void GEOMAlgo_GetInPlace::PerformVF()
//======================================================================= //=======================================================================
void GEOMAlgo_GetInPlace::FillFacesOn() void GEOMAlgo_GetInPlace::FillFacesOn()
{ {
Standard_Integer i, j, aNbF, aNbE, aNbSOn; Standard_Integer i, j, aNbF, aNbE;
TopoDS_Iterator aIt; TopoDS_Iterator aIt;
TopTools_IndexedMapOfShape aMF, aME; TopTools_IndexedMapOfShape aMF, aME;
TopTools_MapIteratorOfMapOfShape aItMS; TopTools_MapIteratorOfMapOfShape aItMS;
@ -609,7 +615,6 @@ void GEOMAlgo_GetInPlace::FillFacesOn()
void GEOMAlgo_GetInPlace::PerformEF() void GEOMAlgo_GetInPlace::PerformEF()
{ {
Standard_Boolean bFound, bHasOnF, bHasInF; Standard_Boolean bFound, bHasOnF, bHasInF;
Standard_Integer i, aNbE;
TopoDS_Iterator aIt; TopoDS_Iterator aIt;
TopTools_MapOfShape aMSX; TopTools_MapOfShape aMSX;
// //
@ -715,7 +720,7 @@ void GEOMAlgo_GetInPlace::PerformFF()
//======================================================================= //=======================================================================
void GEOMAlgo_GetInPlace::FillSolidsOn() void GEOMAlgo_GetInPlace::FillSolidsOn()
{ {
Standard_Integer i, j, aNbS, aNbF, aNbSOn; Standard_Integer i, j, aNbS, aNbF;
TopTools_IndexedMapOfShape aMS, aMF; TopTools_IndexedMapOfShape aMS, aMF;
TopTools_MapIteratorOfMapOfShape aItMS; TopTools_MapIteratorOfMapOfShape aItMS;
// //
@ -757,8 +762,7 @@ void GEOMAlgo_GetInPlace::FillSolidsOn()
//======================================================================= //=======================================================================
void GEOMAlgo_GetInPlace::PerformZF() void GEOMAlgo_GetInPlace::PerformZF()
{ {
Standard_Boolean bFound, bHasOnF, bHasInF; Standard_Boolean bFound, bHasOnF;
Standard_Integer i, aNbE;
TopTools_MapOfShape aMSX; TopTools_MapOfShape aMSX;
// //
myErrorStatus=0; myErrorStatus=0;
@ -1118,7 +1122,7 @@ void GEOMAlgo_GetInPlace::FillShapesOn(const TopoDS_Shape& aS1,
void MapBRepShapes(const TopoDS_Shape& aS, void MapBRepShapes(const TopoDS_Shape& aS,
TopTools_IndexedMapOfShape& aM) TopTools_IndexedMapOfShape& aM)
{ {
Standard_Boolean bHasBRep, bDegenerated; Standard_Boolean bDegenerated;
TopAbs_ShapeEnum aType; TopAbs_ShapeEnum aType;
TopoDS_Iterator aIt; TopoDS_Iterator aIt;
// //

View File

@ -3858,10 +3858,13 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
return NULL; return NULL;
} }
if (!aGIP.IsFound()) { // aGIP.IsFound() returns true only when the whole theShapeWhat
SetErrorCode(NOT_FOUND_ANY); // is found (as one shape or several parts). But we are also interested
return NULL; // in the partial result, that is why this check is commented.
} //if (!aGIP.IsFound()) {
// SetErrorCode(NOT_FOUND_ANY);
// return NULL;
//}
const TopTools_DataMapOfShapeListOfShape& aDMSLS = aGIP.Images(); const TopTools_DataMapOfShapeListOfShape& aDMSLS = aGIP.Images();
if (!aDMSLS.IsBound(aWhat)) { if (!aDMSLS.IsBound(aWhat)) {