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)
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
myErrorStatus : Integer from Standard is protected;
myWarningStatus : Integer from Standard is protected;
myComputeInternalShapes : Boolean from Standard is protected;
end Algo;

View File

@ -34,7 +34,8 @@
GEOMAlgo_Algo::GEOMAlgo_Algo()
:
myErrorStatus(1),
myWarningStatus(0)
myWarningStatus(0),
myComputeInternalShapes(Standard_True)
{}
//=======================================================================
// function: ~
@ -78,3 +79,12 @@
// myErrorStatus
//
// 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 void ComputeInternalShapes(const Standard_Boolean theFlag);
@ -88,6 +89,7 @@ Standard_EXPORT virtual void CheckResult() ;
//
Standard_Integer myErrorStatus;
Standard_Integer myWarningStatus;
Standard_Boolean myComputeInternalShapes;
private:

View File

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

View File

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