X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FNMTTools%2FNMTTools_DEProcessor.cxx;h=2c2148030130f055c23281fbba0bd317951f4180;hb=38eb185f80a6139ef10207066358b3de3ae1263b;hp=277e9e03a94a808bcfc7a8fdcd0891f166bd5733;hpb=a62a321c849518376e3aa4d24a0b902a24167c64;p=modules%2Fgeom.git diff --git a/src/NMTTools/NMTTools_DEProcessor.cxx b/src/NMTTools/NMTTools_DEProcessor.cxx index 277e9e03a..2c2148030 100644 --- a/src/NMTTools/NMTTools_DEProcessor.cxx +++ b/src/NMTTools/NMTTools_DEProcessor.cxx @@ -15,9 +15,9 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File: BOPTools_DEProcessor.cxx +// File: NMTTools_DEProcessor.cxx // Created: Wed Sep 12 12:10:52 2001 // Author: Peter KURNEV // @@ -31,10 +31,13 @@ #include #include -#include +#include + +#include #include #include +#include #include #include @@ -74,22 +77,18 @@ #include #include #include -#include +#include +#include #include #include #include +#include -//#include #include -// -#include -#include - - //======================================================================= -// function: NMTTools_DEProcessor::NMTTools_DEProcessor +// function: // purpose: //======================================================================= NMTTools_DEProcessor::NMTTools_DEProcessor(NMTTools_PaveFiller& aPaveFiller) @@ -114,15 +113,17 @@ void NMTTools_DEProcessor::Do() { Standard_Integer aNbE; + // myIsDone=Standard_False; - + // FindDegeneratedEdges(); + // aNbE=myDEMap.Extent(); - if (!aNbE) { - myIsDone=Standard_True; + myIsDone=!myIsDone; return; } + // DoPaves(); } //======================================================================= @@ -132,27 +133,25 @@ void NMTTools_DEProcessor::FindDegeneratedEdges() { Standard_Integer i, aNb, nV, nF, nVx, ip, iRankE; + TopoDS_Vertex aV; TopTools_IndexedDataMapOfShapeListOfShape aMEF; // aNb=myDS->NumberOfShapesOfTheObject(); - // - for (i=1; i<=aNb; i++) { - const TopoDS_Shape& aF=myDS->Shape(i); + for (i=1; i<=aNb; ++i) { + const TopoDS_Shape aF=myDS->Shape(i); if (aF.ShapeType()==TopAbs_FACE) { TopExp::MapShapesAndAncestors (aF, TopAbs_EDGE, TopAbs_FACE, aMEF); } } // - for (i=1; i<=aNb; i++) { - const TopoDS_Shape& aS=myDS->Shape(i); + for (i=1; i<=aNb; ++i) { + const TopoDS_Shape aS=myDS->Shape(i); if (aS.ShapeType()==TopAbs_EDGE) { const TopoDS_Edge& aE=TopoDS::Edge(aS); if (BRep_Tool::Degenerated(aE)) { iRankE=myDS->Rank(i); - - TopoDS_Vertex aV=TopExp::FirstVertex(aE); - + aV=TopExp::FirstVertex(aE); nVx=myDS->ShapeIndex(aV, iRankE); // nV=nVx; @@ -185,14 +184,16 @@ void NMTTools_DEProcessor::DoPaves() { - Standard_Integer i, aNbE, nED, nVD, nFD=0; + Standard_Integer i, aNbE, nED, nVD, aNbLPB, nFD; // + nFD=0; aNbE=myDEMap.Extent(); - for (i=1; i<=aNbE; i++) { + for (i=1; i<=aNbE; ++i) { nED=myDEMap.FindKey(i); - + // const BOPTools_DEInfo& aDEInfo=myDEMap(i); nVD=aDEInfo.Vertex(); + // // Fill PaveSet for the edge nED const TColStd_ListOfInteger& nLF=aDEInfo.Faces(); TColStd_ListIteratorOfListOfInteger anIt(nLF); @@ -201,6 +202,12 @@ BOPTools_ListOfPaveBlock aLPB; FindPaveBlocks(nED, nVD, nFD, aLPB); + // + aNbLPB=aLPB.Extent(); + if (!aNbLPB) { + continue; + } + // FillPaveSet (nED, nVD, nFD, aLPB); } // @@ -224,7 +231,7 @@ BOPTools_ListIteratorOfListOfPaveBlock anIt; Standard_Integer i, aNb, nF2, nV; // - BOPTools_CArray1OfSSInterference& aFFs=(myFiller->InterfPool())->SSInterferences(); + BOPTools_CArray1OfSSInterference& aFFs=(myFiller->IP())->SSInterferences(); // aNb=aFFs.Extent(); for (i=1; i<=aNb; ++i) { @@ -258,24 +265,24 @@ // // Section Parts Standard_Integer j, aNbCurves; + // BOPTools_SequenceOfCurves& aSC=aFF.Curves(); aNbCurves=aSC.Length(); - - for (j=1; j<=aNbCurves; j++) { + for (j=1; j<=aNbCurves; ++j) { const BOPTools_Curve& aBC=aSC(j); const BOPTools_ListOfPaveBlock& aLPBSe=aBC.NewPaveBlocks(); - + // anIt.Initialize(aLPBSe); for (; anIt.More(); anIt.Next()) { const BOPTools_PaveBlock& aPBSe=anIt.Value(); - + // const BOPTools_Pave& aPv1=aPBSe.Pave1(); nV=aPv1.Index(); if (nV==nVD) { aLPBOut.Append(aPBSe); continue; } - + // const BOPTools_Pave& aPv2=aPBSe.Pave2(); nV=aPv2.Index(); if (nV==nVD) { @@ -297,23 +304,26 @@ { Standard_Boolean bIsDone, bXDir, bRejectFlag; Standard_Integer nE, aNbPoints, j; - Standard_Real aTD1, aTD2, aT1, aT2, aTolInter, aX, aDT; + Standard_Real aTD1, aTD2, aT1, aT2, aTolInter, aX, aDT, aXx; + gp_Pnt2d aP2d1, aP2d2, aP2D; + gp_Lin2d aLDE; // aDT=Precision::PConfusion(); // - BOPTools_PaveSet& aPaveSet= (myFiller->ChangePavePool()).ChangeValue(myDS->RefEdge(nED)); + BOPTools_PaveSet& aPaveSet= + (myFiller->ChangePavePool()).ChangeValue(myDS->RefEdge(nED)); // // Clear aPaveSet, aSplitEdges aPaveSet.ChangeSet().Clear(); // - const TopoDS_Edge& aDE=TopoDS::Edge(myDS->Shape(nED)); - const TopoDS_Face& aDF=TopoDS::Face(myDS->Shape(nFD)); + const TopoDS_Edge aDE=TopoDS::Edge(myDS->Shape(nED)); + const TopoDS_Face aDF=TopoDS::Face(myDS->Shape(nFD)); // // 2D Curve of degenerated edge on the face aDF - Handle(Geom2d_Curve) aC2DDE=BRep_Tool::CurveOnSurface(aDE, aDF, aTD1, aTD2); + Handle(Geom2d_Curve) aC2DDE1=BRep_Tool::CurveOnSurface(aDE, aDF, aTD1, aTD2); + Handle(Geom2d_TrimmedCurve)aC2DDE=new Geom2d_TrimmedCurve(aC2DDE1, aTD1, aTD2); // - // Choose direction for Degenerated Edge - gp_Pnt2d aP2d1, aP2d2; + // Choose direction for degenerated edge aC2DDE->D0(aTD1, aP2d1); aC2DDE->D0(aTD2, aP2d2); @@ -333,15 +343,13 @@ for (; anIt.More(); anIt.Next()) { const BOPTools_PaveBlock& aPB=anIt.Value(); nE=aPB.Edge(); - const TopoDS_Edge& aE=TopoDS::Edge(myDS->Shape(nE)); + const TopoDS_Edge aE=TopoDS::Edge(myDS->Shape(nE)); Handle(Geom2d_Curve) aC2D=BRep_Tool::CurveOnSurface(aE, aDF, aT1, aT2); // // Intersection - aTolInter=0.001; - Geom2dAdaptor_Curve aGAC1, aGAC2; - + // aGAC1.Load(aC2DDE, aTD1, aTD2); Handle(Geom2d_Line) aL2D= Handle(Geom2d_Line)::DownCast(aC2D); if (!aL2D.IsNull()) { @@ -350,17 +358,36 @@ else { aGAC2.Load(aC2D, aT1, aT2); } - + // + aTolInter=0.001; Geom2dInt_GInter aGInter(aGAC1, aGAC2, aTolInter, aTolInter); - bIsDone=aGInter.IsDone(); if(bIsDone) { aNbPoints=aGInter.NbPoints(); if (aNbPoints) { for (j=1; j<=aNbPoints; ++j) { - gp_Pnt2d aP2D=aGInter.Point(j).Value(); + aP2D=aGInter.Point(j).Value(); + Handle(Geom2d_Line) aCLDE; // - aX=(bXDir) ? aP2D.X(): aP2D.Y(); + //modified by NIZNHY-PKV Thu Mar 20 17:37:32 2008f + Handle(Geom2d_TrimmedCurve) aCLDET1= + Handle(Geom2d_TrimmedCurve)::DownCast(aC2DDE1); + if (aCLDET1.IsNull()) { + aCLDE=Handle(Geom2d_Line)::DownCast(aC2DDE1); + } + else { + Handle(Geom2d_Curve) aBasisCurve=aCLDET1->BasisCurve(); + aCLDE=Handle(Geom2d_Line)::DownCast(aBasisCurve); + } + //aCLDE=Handle(Geom2d_Line)::DownCast(aC2DDE1); + //modified by NIZNHY-PKV Thu Mar 20 17:37:37 2008t + + if (aCLDE.IsNull()) { + continue; + } + + aLDE=aCLDE->Lin2d(); + aX=ElCLib::Parameter(aLDE, aP2D); // if (fabs (aX-aTD1) < aDT || fabs (aX-aTD2) < aDT) { continue; @@ -374,7 +401,7 @@ BOPTools_ListIteratorOfListOfPave aPaveIt(aListOfPave); for (; aPaveIt.More(); aPaveIt.Next()) { const BOPTools_Pave& aPavex=aPaveIt.Value(); - Standard_Real aXx=aPavex.Param(); + aXx=aPavex.Param(); if (fabs (aX-aXx) < aDT) { bRejectFlag=Standard_True; break; @@ -397,8 +424,10 @@ //======================================================================= void NMTTools_DEProcessor::FillSplitEdgesPool (const Standard_Integer nED) { - BOPTools_SplitShapesPool& aSplitShapesPool=myFiller->ChangeSplitShapesPool(); - BOPTools_ListOfPaveBlock& aSplitEdges=aSplitShapesPool.ChangeValue(myDS->RefEdge(nED)); + BOPTools_SplitShapesPool& aSplitShapesPool= + myFiller->ChangeSplitShapesPool(); + BOPTools_ListOfPaveBlock& aSplitEdges= + aSplitShapesPool.ChangeValue(myDS->RefEdge(nED)); // aSplitEdges.Clear(); // @@ -427,8 +456,8 @@ TopoDS_Edge aE, aESplit; TopoDS_Vertex aV1, aV2; - const TopoDS_Edge& aDE=TopoDS::Edge(myDS->Shape(nED)); - const TopoDS_Face& aDF=TopoDS::Face(myDS->Shape(nFD)); + const TopoDS_Edge aDE=TopoDS::Edge(myDS->Shape(nED)); + const TopoDS_Face aDF=TopoDS::Face(myDS->Shape(nFD)); BOPTools_ListIteratorOfListOfPaveBlock aPBIt(aSplitEdges); @@ -495,17 +524,4 @@ BB.UpdateEdge(E, aTol); aNewEdge=E; } -/* -//======================================================================= -// function: NMTTools_DEProcessor::NMTTools_DEProcessor -// purpose: -//======================================================================= - NMTTools_DEProcessor::NMTTools_DEProcessor(NMTTools_PDSFiller& pDSFiller) -: - myIsDone(Standard_False) -{ - myDSFiller=pDSFiller; - myFiller=(NMTTools_PaveFiller*) &(myDSFiller->PaveFiller()); - myDS=myFiller->DS(); -} -*/ +