From: jfa Date: Thu, 17 Jun 2010 07:19:16 +0000 (+0000) Subject: Mantis issue 0020853: EDF 1394 GEOM: Partition fails between 2 faces. A patch by... X-Git-Tag: translate_resources_09Jul10~14 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=22b9c99081495ff0b7c053b9b7e779b105a73044;p=modules%2Fgeom.git Mantis issue 0020853: EDF 1394 GEOM: Partition fails between 2 faces. A patch by PKV. --- diff --git a/src/NMTTools/NMTTools_PaveFiller_4.cxx b/src/NMTTools/NMTTools_PaveFiller_4.cxx index e23ee2202..b6dc1b485 100644 --- a/src/NMTTools/NMTTools_PaveFiller_4.cxx +++ b/src/NMTTools/NMTTools_PaveFiller_4.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -19,14 +19,12 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// File: NMTTools_PaveFiller_4.cxx +// Created: Mon Dec 8 17:08:58 2003 +// Author: Peter KURNEV -// File: NMTTools_PaveFiller_4.cxx -// Created: Mon Dec 8 17:08:58 2003 -// Author: Peter KURNEV -// -// #include -// + #include #include @@ -99,7 +97,6 @@ #include #include - #include #include #include @@ -108,25 +105,25 @@ #include #include - static void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI, TopTools_DataMapOfShapeListOfShape& myImages, TopTools_DataMapOfShapeShape& myOrigins); static - void MakeNewVertex(const TopTools_ListOfShape& aLV, + void MakeNewVertex(const TopTools_ListOfShape& aLV, TopoDS_Vertex& aNewVertex); - -static +static void VertexParameters(const IntTools_CommonPrt& aCPart, - Standard_Real& aT1, + Standard_Real& aT1, Standard_Real& aT2); + static Standard_Boolean IsOnPave(const Standard_Real& aT1, const IntTools_Range& aRange, const Standard_Real& aTolerance); + static void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB); @@ -135,15 +132,16 @@ static const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, BOPTools_IMapOfPaveBlock& aProcessedBlocks, BOPTools_IMapOfPaveBlock& aChain); + static void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, NMTTools_ListOfCommonBlock& aLCB); //======================================================================= // function: PerformEE -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::PerformEE() +void NMTTools_PaveFiller::PerformEE() { myIsDone=Standard_False; // @@ -153,7 +151,7 @@ static Standard_Integer aNbLPB1, aNbLPB2; Standard_Real aTolE1, aTolE2, aDeflection=0.01; BOPTools_ListIteratorOfListOfPaveBlock anIt1, anIt2; - TopoDS_Edge aEWhat, aEWith; + TopoDS_Edge aEWhat, aEWith; TopoDS_Vertex aNewVertex; BooleanOperations_IndexedDataMapOfShapeInteger aMapVI; BOPTools_IDMapOfPaveBlockIMapOfPaveBlock aMapCB; @@ -177,8 +175,8 @@ static // continue; //} // - nE1=n1; - nE2=n2; + nE1=n1; + nE2=n2; // if(bJustAdd) { //myIntrPool->AddInterference (nE1, nE2, BooleanOperations_EdgeEdge, anIndexIn); @@ -187,7 +185,6 @@ static // const TopoDS_Edge aE1=TopoDS::Edge(myDS->Shape(nE1));//mpv const TopoDS_Edge aE2=TopoDS::Edge(myDS->Shape(nE2));//mpv - // if (BRep_Tool::Degenerated(aE1) || BRep_Tool::Degenerated(aE2)){ continue; @@ -199,12 +196,12 @@ static BOPTools_ListOfPaveBlock& aLPB1=mySplitShapesPool(myDS->RefEdge(nE1)); BOPTools_ListOfPaveBlock& aLPB2=mySplitShapesPool(myDS->RefEdge(nE2)); // - // Modified Thu Sep 14 14:35:18 2006 + // Modified Thu Sep 14 14:35:18 2006 // Contribution of Samtech www.samcef.com BEGIN aNbLPB1=aLPB1.Extent(); aNbLPB2=aLPB2.Extent(); - - //if (aE1.IsSame(aE2) && aNbLPB1==1 && aNbLPB2==1) { + // + //if (aE1.IsSame(aE2) && aNbLPB1==1 && aNbLPB2==1) { // continue; //} // Contribution of Samtech www.samcef.com END @@ -219,14 +216,14 @@ static for (anIt2.Initialize(aLPB2); anIt2.More(); anIt2.Next()) { BOPTools_PaveBlock& aPB2=anIt2.Value(); const IntTools_ShrunkRange& aShrunkRange2=aPB2.ShrunkRange(); - + // const IntTools_Range& aSR2=aShrunkRange2.ShrunkRange(); const Bnd_Box& aBB2=aShrunkRange2.BndBox(); // if (aBB1.IsOut (aBB2)) { continue; } - // + // // EE IntTools_EdgeEdge aEE; aEE.SetEdge1 (aE1); @@ -244,7 +241,7 @@ static // aEE.SetRange1(anewSR1); aEE.SetRange2(anewSR2); - + // aEE.Perform(); // anIndexIn=0; @@ -279,11 +276,14 @@ static IntTools_Range aR1, aR2; // VertexParameters(aCPart, aT1, aT2); - // + // //decide to keep the pave or not aR1 = (aEE.Order()) ? anewSR2 : anewSR1; aR2 = (aEE.Order()) ? anewSR1 : anewSR2; // + //modified by NIZNHY-PKV Mon Jun 07 11:01:40 2010f + aTol=0.8*aTol; + //modified by NIZNHY-PKV Mon Jun 07 11:01:43 2010t bIsOnPave1=IsOnPave(aT1, aR1, aTol); bIsOnPave2=IsOnPave(aT2, aR2, aTol); // @@ -353,7 +353,7 @@ static aMapVI.Add(aNewVertex, anIndexIn); } break; - + case TopAbs_EDGE: { Standard_Integer aNbComPrt2; Standard_Boolean aCoinsideFlag; @@ -369,25 +369,25 @@ static // Fill aMapCB if (aMapCB.Contains(aPB1)) { BOPTools_IMapOfPaveBlock& aMapPB=aMapCB.ChangeFromKey(aPB1); - aMapPB.Add(aPB1); - aMapPB.Add(aPB2); + aMapPB.Add(aPB1); + aMapPB.Add(aPB2); } else { BOPTools_IMapOfPaveBlock aMapPB; - aMapPB.Add(aPB1); - aMapPB.Add(aPB2); + aMapPB.Add(aPB1); + aMapPB.Add(aPB2); aMapCB.Add(aPB1, aMapPB); } // if (aMapCB.Contains(aPB2)) { BOPTools_IMapOfPaveBlock& aMapPB=aMapCB.ChangeFromKey(aPB2); - aMapPB.Add(aPB1); - aMapPB.Add(aPB2); + aMapPB.Add(aPB1); + aMapPB.Add(aPB2); } else { BOPTools_IMapOfPaveBlock aMapPB; - aMapPB.Add(aPB1); - aMapPB.Add(aPB2); + aMapPB.Add(aPB1); + aMapPB.Add(aPB2); aMapCB.Add(aPB2, aMapPB); } // qqf @@ -399,18 +399,13 @@ static break; default: break; - } // switch (aType) - } // for (i=1; i<=aNbCPrts; i++) + } // switch (aType) + } // for (i=1; i<=aNbCPrts; i++) }// if (aEE.IsDone()) - } // for (; anIt2.More(); anIt2.Next()) - } // for (; anIt1.More(); anIt1.Next()) - }// for (; myDSIt.More(); myDSIt.Next()) - // - //modified by NIZNHY-PKV Thu Mar 19 14:13:34 2009f + } // for (; anIt2.More(); anIt2.Next()) + } // for (; anIt1.More(); anIt1.Next()) + }// for (; myDSIt.More(); myDSIt.Next()) // - //EENewVertices (aMapVI); - //EECommonBlocks(aMapCB); - { NMTTools_ListOfCommonBlock aLCB; // @@ -420,18 +415,17 @@ static TreatPaveBlocks(aLCB); ReplaceCommonBlocks(aLCB); } - //modified by NIZNHY-PKV Thu Mar 19 14:13:42 2009t // PerformVF1(); // myIsDone=Standard_True; } -//modified by NIZNHY-PKV Thu Mar 19 14:13:52 2009f + //======================================================================= // function:TreatPaveBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::TreatPaveBlocks (NMTTools_ListOfCommonBlock& theLCB) +void NMTTools_PaveFiller::TreatPaveBlocks (NMTTools_ListOfCommonBlock& theLCB) { Standard_Boolean bFound; Standard_Integer nE, nV, nVp, iFlag; @@ -506,27 +500,28 @@ static }//for (; anItLPB.More(); anItLPB.Next()) { } } -//modified by NIZNHY-PKV Thu Mar 19 14:14:13 2009t + //======================================================================= // function:EECommonBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB) +void NMTTools_PaveFiller::EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB) { NMTTools_ListOfCommonBlock aLCB; // FindChains(aMapCB, aLCB); ReplaceCommonBlocks(aLCB); } + //======================================================================= // function:EENewVertices -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::EENewVertices (const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) +void NMTTools_PaveFiller::EENewVertices (const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) { Standard_Integer aNb, aNbVSD, nVnew, nIEE, nE[2], j, iFlag; Standard_Real aT; - TopoDS_Edge aE; + TopoDS_Edge aE; TopTools_DataMapOfShapeListOfShape myImages; TopTools_DataMapOfShapeShape myOrigins; TopTools_DataMapIteratorOfDataMapOfShapeListOfShape aItIm; @@ -538,11 +533,11 @@ static BOPTools_CArray1OfEEInterference& aEEs=myIP->EEInterferences(); // aNb=aMapVI.Extent(); - if (!aNb) { // no new vertices, no new problems + if (!aNb) { // no new vertices, no new problems return; } // - // 0. + // 0. if (aNb==1) { TopoDS_Vertex aV1=TopoDS::Vertex(aMapVI.FindKey(1)); EENewVertices(aV1, aMapVI); @@ -600,11 +595,11 @@ static // completely rewritten //======================================================================= //function : TreatNewVertices -//purpose : +//purpose : //======================================================================= void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI, - TopTools_DataMapOfShapeListOfShape& myImages, - TopTools_DataMapOfShapeShape& myOrigins) + TopTools_DataMapOfShapeListOfShape& myImages, + TopTools_DataMapOfShapeShape& myOrigins) { Standard_Integer j, i, aNbV, aNbVSD; Standard_Real aTol; @@ -636,13 +631,13 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap Bnd_Box aBox; // aTol=BRep_Tool::Tolerance(TopoDS::Vertex(aV)); - aBox.SetGap(aTol); + aBox.SetGap(aTol); BRepBndLib::Add(aV, aBox); // aTreeFiller.Add(i, aBox); // aMIS.Add(i, aV); - aMSB.Add(aV, aBox); + aMSB.Add(aV, aBox); } // aTreeFiller.Fill(); @@ -678,7 +673,7 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap // aNbVSD=aBBTree.Select(aSelector); if (!aNbVSD) { - continue; // it must not be + continue; // it must not be } // const TColStd_ListOfInteger& aLI=aSelector.Indices(); @@ -775,12 +770,12 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap } } } -// + //======================================================================= //function : MakeNewVertex -//purpose : +//purpose : //======================================================================= -void MakeNewVertex(const TopTools_ListOfShape& aLV, +void MakeNewVertex(const TopTools_ListOfShape& aLV, TopoDS_Vertex& aNewVertex) { Standard_Integer aNbV; @@ -822,16 +817,17 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, // aBB.MakeVertex (aNewVertex, aPGC, aDmax); } + //======================================================================= // function:EENewVertices -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::EENewVertices (const TopoDS_Vertex& aNewVertex, - const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) +void NMTTools_PaveFiller::EENewVertices (const TopoDS_Vertex& aNewVertex, + const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) { Standard_Integer i, aNewShape, nE1, nE2; Standard_Real aT1, aT2; - BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq; + BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq; BOPTools_Pave aPave; // BOPTools_CArray1OfEEInterference& aEEs=myIP->EEInterferences(); @@ -864,11 +860,12 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, BOPTools_PaveSet& aPaveSet2=myPavePoolNew(myDS->RefEdge(nE2)); aPaveSet2.Append(aPave); } + //======================================================================= // function: RefinePavePool -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::RefinePavePool() +void NMTTools_PaveFiller::RefinePavePool() { Standard_Integer i, aNbNew; @@ -897,19 +894,20 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } } + //======================================================================= // function: PreparePaveBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::PreparePaveBlocks(const TopAbs_ShapeEnum aType1, - const TopAbs_ShapeEnum aType2) +void NMTTools_PaveFiller::PreparePaveBlocks(const TopAbs_ShapeEnum aType1, + const TopAbs_ShapeEnum aType2) { myIsDone=Standard_False; // Standard_Boolean bOk1, bOk2, bOk3, bFlag; Standard_Integer i, aNb, nE[2], n1, n2, aNbSplits; TColStd_MapOfInteger aMap; - + // bOk1= (aType1==TopAbs_VERTEX) && (aType2==TopAbs_EDGE) ; bOk2= (aType1==TopAbs_EDGE) && (aType2==TopAbs_EDGE) ; bOk3= (aType1==TopAbs_EDGE) && (aType2==TopAbs_FACE) ; @@ -923,10 +921,10 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, for (; myDSIt->More(); myDSIt->Next()) { myDSIt->Current(n1, n2, bFlag); // - nE[0]=n1; - nE[1]=n2; + nE[0]=n1; + nE[1]=n2; if (myDS->GetShapeType(n1)!=TopAbs_EDGE) { - nE[0]=n2; + nE[0]=n2; nE[1]=n1; } // @@ -934,7 +932,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, BOPTools_ListOfPaveBlock& aLPB=mySplitShapesPool(myDS->RefEdge(nE[i])); aNbSplits=aLPB.Extent(); if (!aNbSplits) { - if (aMap.Add(nE[i])) { + if (aMap.Add(nE[i])) { PreparePaveBlocks(nE[i]); if (!myIsDone) { return; @@ -942,14 +940,15 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } } - }// for (; myDSIt.More(); myDSIt.Next()) + }// for (; myDSIt.More(); myDSIt.Next()) myIsDone=Standard_True; } + //======================================================================= // function: PreparePaveBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::PreparePaveBlocks(const Standard_Integer nE) +void NMTTools_PaveFiller::PreparePaveBlocks(const Standard_Integer nE) { myIsDone=Standard_False; // @@ -959,7 +958,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, TopoDS_Vertex aV1, aV2; // BOPTools_ListOfPaveBlock& aLPB=mySplitShapesPool(myDS->RefEdge(nE)); - // Edge + // Edge aE=TopoDS::Edge(myDS->Shape(nE)); if (BRep_Tool::Degenerated(aE)) { myIsDone=Standard_True; @@ -967,7 +966,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } // BOPTools_PaveSet& aPS=myPavePool(myDS->RefEdge(nE)); - + // BOPTools_PaveBlockIterator aPBIt(nE, aPS); for (; aPBIt.More(); aPBIt.Next()) { BOPTools_PaveBlock& aPB=aPBIt.Value(); @@ -988,7 +987,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, sprintf (buf, "Can not obtain ShrunkRange for Edge %d\n", nE); BOPTColStd_Dump::PrintMessage(buf); sprintf (buf, "Can not obtain ShrunkRange for Edge %d", nE); - throw + throw BOPTColStd_Failure(buf) ; } // @@ -1005,16 +1004,17 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, // aPB.SetShrunkRange(aSR); aLPB.Append(aPB); - } //for (; aPBIt.More(); aPBIt.Next()) + } //for (; aPBIt.More(); aPBIt.Next()) myIsDone=Standard_True; } + //======================================================================= // function: CorrectShrunkRanges -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::CorrectShrunkRanges(const Standard_Integer aSide, - const BOPTools_Pave& aPave, - IntTools_ShrunkRange& aShrunkRange) +void NMTTools_PaveFiller::CorrectShrunkRanges(const Standard_Integer aSide, + const BOPTools_Pave& aPave, + IntTools_ShrunkRange& aShrunkRange) { BooleanOperations_KindOfInterference aType; Standard_Integer anIndexInterf ; @@ -1039,7 +1039,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, const IntTools_Range& aSR=aShrunkRange.ShrunkRange(); const TopoDS_Edge& aE=aShrunkRange.Edge(); - + IntTools_Range aNewRange; IntTools_Range aCPRange; @@ -1079,13 +1079,13 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } } + //======================================================================= // function: IsBlocksCoinside -// purpose: +// purpose: //======================================================================= - Standard_Boolean - NMTTools_PaveFiller::IsBlocksCoinside(const BOPTools_PaveBlock& aPB1, - const BOPTools_PaveBlock& aPB2) const +Standard_Boolean NMTTools_PaveFiller::IsBlocksCoinside(const BOPTools_PaveBlock& aPB1, + const BOPTools_PaveBlock& aPB2) const { Standard_Boolean bRetFlag=Standard_True; Standard_Real aTolV11, aTolV12, aTolV21, aTolV22; @@ -1101,7 +1101,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, aTolV12=BRep_Tool::Tolerance(aV12); aTolV21=BRep_Tool::Tolerance(aV21); aTolV22=BRep_Tool::Tolerance(aV22); - + aP11=BRep_Tool::Pnt(aV11); aP12=BRep_Tool::Pnt(aV12); aP21=BRep_Tool::Pnt(aV21); @@ -1128,20 +1128,22 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } return !bRetFlag; } + //======================================================================= // function: ReplaceCommonBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) +void NMTTools_PaveFiller::ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) { RemoveCommonBlocks(aLCB); SplitCommonBlocks(aLCB); } + //======================================================================= // function: SplitCommonBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) +void NMTTools_PaveFiller::SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) { Standard_Integer nE; NMTTools_ListOfCommonBlock aLCBx; @@ -1171,10 +1173,10 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } } - // Modified to provide the order of edges - // in common block where the edge with max + // Modified to provide the order of edges + // in common block where the edge with max // tolerance value will be the first - // Thu Sep 14 14:35:18 2006 + // Thu Sep 14 14:35:18 2006 // Contribution of Samtech www.samcef.com BEGIN Standard_Integer i, iMax, aNb, aNbCB, nSp; Standard_Real aTolSp, aTolMax; @@ -1231,11 +1233,12 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, }//for (nE=1; nE<=aNb; ++nE) { // Contribution of Samtech www.samcef.com END } + //======================================================================= // function: RemoveCommonBlocks -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) +void NMTTools_PaveFiller::RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) { Standard_Integer nE; NMTTools_ListOfCommonBlock aLCBx; @@ -1247,7 +1250,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, const NMTTools_CommonBlock& aCB=anItCB.Value(); const BOPTools_ListOfPaveBlock& aLPB=aCB.PaveBlocks(); // - // Remove aCB from each edge + // Remove aCB from each edge anItLPB.Initialize(aLPB); for (; anItLPB.More(); anItLPB.Next()) { const BOPTools_PaveBlock& aPB=anItLPB.Value(); @@ -1265,24 +1268,24 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } } + //======================================================================= // function: SplitCommonBlock -// purpose: +// purpose: //======================================================================= - void NMTTools_PaveFiller::SplitCommonBlock(const NMTTools_CommonBlock& aCB, - NMTTools_ListOfCommonBlock& aLCBx) +void NMTTools_PaveFiller::SplitCommonBlock(const NMTTools_CommonBlock& aCB, + NMTTools_ListOfCommonBlock& aLCBx) { - Standard_Integer i, j, k, nE, aNbE, aNbSPBx, aNbPB; + Standard_Integer i, j,nE, aNbE, aNbSPBx, aNbPB, k; BOPTools_SequenceOfPaveBlock aSPBx; BOPTools_ListIteratorOfListOfPaveBlock anItLPB; BOPTools_ListIteratorOfListOfPave anIt; - - BOPTools_PaveBlockIterator anPBIt; + BOPTools_PaveBlockIterator anPBIt; // const BOPTools_ListOfPaveBlock& aLPB=aCB.PaveBlocks(); aNbE=aLPB.Extent(); // - // 1. Whether we realy need to split the common block ? + // 1. Checking: Whether we realy need to split the common block ? anItLPB.Initialize(aLPB); for (; anItLPB.More(); anItLPB.Next()) { const BOPTools_PaveBlock& aPB=anItLPB.Value(); @@ -1346,12 +1349,43 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } } // - // 3. Do new common blocks + // 3. Do new common blocks // const TColStd_ListOfInteger& aLF=aCB.Faces(); aNbSPBx=aSPBx.Length(); aNbPB=aNbSPBx/aNbE; // + //modified by NIZNHY-PKV Fri Jun 04 14:07:37 2010f + // + Standard_Integer k1, k2, n11, n12, n21, n22; + // + for (i=1; i<=aNbPB; ++i) { + NMTTools_CommonBlock aCBx; + // + aCBx.AddFaces(aLF); + // + const BOPTools_PaveBlock& aPB1=aSPBx(i); + n11=aPB1.Pave1().Index(); + n12=aPB1.Pave2().Index(); + // + aCBx.AddPaveBlock(aPB1); + // + for (j=2; j<=aNbE; ++j) { + k1=(j-1)*aNbPB+1; + k2=k1+aNbPB-1; + for(k=k1; k<=k2; ++k) { + const BOPTools_PaveBlock& aPB2=aSPBx(k); + n21=aPB2.Pave1().Index(); + n22=aPB2.Pave2().Index(); + if ((n21==n11 && n22==n12) || (n21==n12 && n22==n11)) { + aCBx.AddPaveBlock(aPB2); + break; + } + } + } + aLCBx.Append(aCBx); + } + /* for (i=1; i<=aNbPB; ++i) { NMTTools_CommonBlock aCBx; // @@ -1364,14 +1398,16 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV, } aLCBx.Append(aCBx); } + */ + //modified by NIZNHY-PKV Fri Jun 04 14:07:42 2010t } //======================================================================= // function: VertexParameters -// purpose: +// purpose: //======================================================================= void VertexParameters(const IntTools_CommonPrt& aCPart, - Standard_Real& aT1, + Standard_Real& aT1, Standard_Real& aT2) { const IntTools_Range& aR1=aCPart.Range1(); @@ -1391,9 +1427,10 @@ void VertexParameters(const IntTools_CommonPrt& aCPart, aT2 = aCPart.VertexParameter2(); } } + //======================================================================= // function: KeepPave -// purpose: +// purpose: //======================================================================= Standard_Boolean IsOnPave(const Standard_Real& aT1, const IntTools_Range& aRange, @@ -1409,7 +1446,7 @@ Standard_Boolean IsOnPave(const Standard_Real& aT1, //======================================================================= // function:FindChains -// purpose: +// purpose: //======================================================================= void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, NMTTools_ListOfCommonBlock& aLCB) @@ -1445,9 +1482,10 @@ void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, aChain.Clear(); } } + //======================================================================= // function:ProcessBlock -// purpose: +// purpose: //======================================================================= void ProcessBlock(const BOPTools_PaveBlock& aPB, const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, @@ -1469,13 +1507,14 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB, ProcessBlock(aPBx, aMapCB, aProcessedBlocks, aChain); } } + // Modified to provide VS interference between // vertex as result of EE and a Face of argument -// Thu Sep 14 14:35:18 2006 +// Thu Sep 14 14:35:18 2006 // Contribution of Samtech www.samcef.com BEGIN //======================================================================= -// function: PerformVF1 -// purpose: +// function: PerformVF1 +// purpose: //======================================================================= void NMTTools_PaveFiller::PerformVF1() { @@ -1511,7 +1550,7 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB, const TopoDS_Shape& aSnew=myDS->Shape(nNewShape); if (aSnew.ShapeType()!=TopAbs_VERTEX) { continue; - } + } // const TopoDS_Vertex& aVnew=TopoDS::Vertex(aSnew); // @@ -1540,5 +1579,5 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB, } } } -} +} // Contribution of Samtech www.samcef.com END