Added flag for computation internal shapes (manifold topology). In the SALOME/TRIPOLI module this piece of the functionality is not needed. It produces incorrect shapes and/or crashes.

This commit is contained in:
mpv 2011-02-08 14:17:24 +00:00
parent 335b22d949
commit ad52e520d5
5 changed files with 56 additions and 34 deletions

View File

@ -52,8 +52,13 @@ is
WarningStatus (me) WarningStatus (me)
returns Integer from Standard; returns Integer from Standard;
ComputeInternalShapes(me : in out; theFlag : Boolean from Standard)
---Purpose: Allows to omit of creation of internal shapes (manifold topology).
-- Needed for the SALOME/TRIPOLI module.
fields fields
myErrorStatus : Integer from Standard is protected; myErrorStatus : Integer from Standard is protected;
myWarningStatus : Integer from Standard is protected; myWarningStatus : Integer from Standard is protected;
myComputeInternalShapes : Boolean from Standard is protected;
end Algo; end Algo;

View File

@ -34,7 +34,8 @@
GEOMAlgo_Algo::GEOMAlgo_Algo() GEOMAlgo_Algo::GEOMAlgo_Algo()
: :
myErrorStatus(1), myErrorStatus(1),
myWarningStatus(0) myWarningStatus(0),
myComputeInternalShapes(Standard_True)
{} {}
//======================================================================= //=======================================================================
// function: ~ // function: ~
@ -78,3 +79,12 @@
// myErrorStatus // myErrorStatus
// //
// 1 - object is just initialized // 1 - object is just initialized
//=======================================================================
//function : ComputeInternalShapes
//purpose :
//=======================================================================
void GEOMAlgo_Algo::ComputeInternalShapes(const Standard_Boolean theFlag)
{
myComputeInternalShapes = theFlag;
}

View File

@ -64,6 +64,7 @@ Standard_EXPORT Standard_Integer ErrorStatus() const;
Standard_EXPORT Standard_Integer WarningStatus() const; Standard_EXPORT Standard_Integer WarningStatus() const;
Standard_EXPORT void ComputeInternalShapes(const Standard_Boolean theFlag);
@ -88,6 +89,7 @@ Standard_EXPORT virtual void CheckResult() ;
// //
Standard_Integer myErrorStatus; Standard_Integer myErrorStatus;
Standard_Integer myWarningStatus; Standard_Integer myWarningStatus;
Standard_Boolean myComputeInternalShapes;
private: private:

View File

@ -159,10 +159,12 @@ static
if (myErrorStatus) { if (myErrorStatus) {
return; return;
} }
if (myComputeInternalShapes) {
PerformInternalShapes(); PerformInternalShapes();
if (myErrorStatus) { if (myErrorStatus) {
return; return;
} }
}
} }
//======================================================================= //=======================================================================
//function :PerformShapesToAvoid //function :PerformShapesToAvoid
@ -445,6 +447,7 @@ static
aEFMap.Clear(); aEFMap.Clear();
AddedFacesMap.Clear(); AddedFacesMap.Clear();
// //
if (myComputeInternalShapes) {
aItM.Initialize(myShapesToAvoid); aItM.Initialize(myShapesToAvoid);
for (; aItM.More(); aItM.Next()) { for (; aItM.More(); aItM.Next()) {
const TopoDS_Shape& aFF=aItM.Key(); const TopoDS_Shape& aFF=aItM.Key();
@ -482,6 +485,7 @@ static
} }
myLoopsInternal.Append(aShell); myLoopsInternal.Append(aShell);
} }
}
} }
//======================================================================= //=======================================================================
//function : PerformAreas //function : PerformAreas

View File

@ -456,6 +456,7 @@ void GEOMAlgo_Builder::BuildDraftSolid (const TopoDS_Shape& theSolid,
// //
// 1. Build solids for interferred source solids // 1. Build solids for interferred source solids
aSB.SetContext(aCtx); aSB.SetContext(aCtx);
aSB.ComputeInternalShapes(myComputeInternalShapes);
aNbS=myDraftSolids.Extent(); aNbS=myDraftSolids.Extent();
for (i=1; i<=aNbS; ++i) { for (i=1; i<=aNbS; ++i) {
const TopoDS_Shape& aS =myDraftSolids.FindKey(i); const TopoDS_Shape& aS =myDraftSolids.FindKey(i);