// File: GEOMAlgo_SolidSolid.cxx // Created: Wed Jan 26 12:06:26 2005 // Author: Peter KURNEV // #include #include #include #include #include #include #include #include #include #include #include //======================================================================= //function : GEOMAlgo_SolidSolid //purpose : //======================================================================= GEOMAlgo_SolidSolid::GEOMAlgo_SolidSolid() : GEOMAlgo_ShellSolid() { } //======================================================================= //function : ~ //purpose : //======================================================================= GEOMAlgo_SolidSolid::~GEOMAlgo_SolidSolid() { } //======================================================================= // function: SetShape2 // purpose: //======================================================================= void GEOMAlgo_SolidSolid::SetShape2(const TopoDS_Shape& aS2) { myS2=aS2; } //======================================================================= // function: Shape2 // purpose: //======================================================================= const TopoDS_Shape& GEOMAlgo_SolidSolid::Shape2()const { return myS2; } //======================================================================= // function: Perform // purpose: //======================================================================= void GEOMAlgo_SolidSolid::Perform() { myErrorStatus=0; try { if (myDSFiller==NULL) { myErrorStatus=10; return; } if(!myDSFiller->IsDone()) { myErrorStatus=11; return; } // Standard_Boolean bIsNewFiller; // bIsNewFiller=myDSFiller->IsNewFiller(); if (bIsNewFiller) { Prepare(); myDSFiller->SetNewFiller(!bIsNewFiller); } // myRank=2; BuildResult(); } catch (Standard_Failure) { myErrorStatus=12; } } //================================================================================= // function: BuildResult // purpose: //================================================================================= void GEOMAlgo_SolidSolid::BuildResult() { myErrorStatus=0; // Standard_Integer i, j, aNbF, aNbS; Standard_Integer aNbFIN, aNbFOUT, aNbFON, aNbFINTR; TopAbs_State aState; TopTools_ListIteratorOfListOfShape aIt; TopTools_IndexedMapOfShape aMF, aMS; GEOMAlgo_IndexedDataMapOfShapeState aMFS; // // 1. classify the faces GEOMAlgo_ShellSolid::BuildResult(); // // 2. fill Shape-State map aIt.Initialize(myLSIN); for (; aIt.More(); aIt.Next()) { const TopoDS_Shape& aF=aIt.Value(); aMFS.Add(aF, TopAbs_IN); } aIt.Initialize(myLSOUT); for (; aIt.More(); aIt.Next()) { const TopoDS_Shape& aF=aIt.Value(); aMFS.Add(aF, TopAbs_OUT); } aIt.Initialize(myLSON); for (; aIt.More(); aIt.Next()) { const TopoDS_Shape& aF=aIt.Value(); aMFS.Add(aF, TopAbs_ON); } myLSIN.Clear(); myLSON.Clear(); myLSOUT.Clear(); // // 3. fill states for solids TopExp::MapShapes(myS2, TopAbs_SOLID, aMS); // aNbS=aMS.Extent(); for (i=1; i<=aNbS; ++i) { const TopoDS_Shape& aSolid=aMS(i); // aMF.Clear(); TopExp::MapShapes(aSolid, TopAbs_FACE, aMF); // aNbFIN=0; aNbFOUT=0; aNbFON=0; aNbFINTR=0; // aNbF=aMF.Extent(); for(j=1; j