+// Modified to Add new methods Thu Sep 14 14:35:18 2006
+// Contribution of Samtech www.samcef.com BEGIN
+//===========================================================================
+//function : FillMap
+//purpose :
+//===========================================================================
+ void NMTDS_ShapesDataStructure::FillMap
+ (const TopoDS_Shape& aS,
+ BooleanOperations_IndexedDataMapOfShapeAncestorsSuccessors& aMSA,
+ BooleanOperations_IndexedDataMapOfShapeAncestorsSuccessors& aMS) const
+{
+ Standard_Integer iX, i, j, aIndex, aNbSc, aNbS;
+ BooleanOperations_AncestorsSeqAndSuccessorsSeq aAS;
+ //
+ aMSA.Add(aS, aAS);
+ aMS.Add(aS, aAS);
+ FillSubshapes(aS, aMSA, aMS);
+ //
+ aNbS=aMS.Extent();
+ for(i=1; i<=aNbS; ++i) {
+ TColStd_MapOfInteger aMFence;
+ //
+ const TopoDS_Shape& aSX=aMS.FindKey(i);
+ iX=aMSA.FindIndex(aSX);
+ const BooleanOperations_AncestorsSeqAndSuccessorsSeq& aAS1=aMSA(iX);
+ //
+ aNbSc=aAS1.NumberOfSuccessors();
+ for(j=1; j<=aNbSc; ++j) {
+ aIndex=aAS1.GetSuccessor(j);
+ if(aMFence.Add(aIndex)) {
+ BooleanOperations_AncestorsSeqAndSuccessorsSeq& aAS2=aMSA.ChangeFromIndex(aIndex);
+ aAS2.SetNewAncestor(iX);
+ }
+ }
+ }
+}
+//===========================================================================
+//function : FillSubshapes
+//purpose :
+//===========================================================================
+ void NMTDS_ShapesDataStructure::FillSubshapes
+ (const TopoDS_Shape& aS,
+ BooleanOperations_IndexedDataMapOfShapeAncestorsSuccessors& aMSA,
+ BooleanOperations_IndexedDataMapOfShapeAncestorsSuccessors& aMS) const
+{
+ Standard_Boolean bIsNewSubShape;
+ Standard_Integer aIndexSubShape, aIndex;
+ BooleanOperations_AncestorsSeqAndSuccessorsSeq aASx;
+ //
+ aIndex=aMSA.FindIndex(aS);
+ BooleanOperations_AncestorsSeqAndSuccessorsSeq& aAS=aMSA.ChangeFromIndex(aIndex);
+ //
+ TopoDS_Iterator anIt(aS, Standard_True);
+ for(; anIt.More(); anIt.Next()) {
+ const TopoDS_Shape& aSubShape = anIt.Value();
+ bIsNewSubShape = Standard_False;
+ if(!aMSA.Contains(aSubShape)) {
+ bIsNewSubShape=!bIsNewSubShape;
+ aIndexSubShape=aMSA.Add(aSubShape, aASx);
+ aMS.Add(aSubShape, aASx);
+ }
+ else {
+ aIndexSubShape=aMSA.FindIndex(aSubShape);
+ }
+ aAS.SetNewSuccessor(aIndexSubShape);
+ aAS.SetNewOrientation(aSubShape.Orientation());
+ //
+ if(bIsNewSubShape && (aSubShape.ShapeType() != TopAbs_VERTEX)) {
+ FillSubshapes(aSubShape, aMSA, aMS);
+ }
+ }
+}
+// Contribution of Samtech www.samcef.com END