From: vsr Date: Tue, 12 Feb 2013 06:27:15 +0000 (+0000) Subject: Porting to new BOP X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=c03ae2d3bc731686d5a656f7fb451d3747e68ecb;p=modules%2Fgeom.git Porting to new BOP --- diff --git a/src/GEOMAlgo/GEOMAlgo_AlgoTools_1.cxx b/src/GEOMAlgo/GEOMAlgo_AlgoTools_1.cxx index 4c11100e7..b52a2504c 100755 --- a/src/GEOMAlgo/GEOMAlgo_AlgoTools_1.cxx +++ b/src/GEOMAlgo/GEOMAlgo_AlgoTools_1.cxx @@ -1,4 +1,3 @@ - // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, @@ -20,579 +19,123 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : GEOMAlgo_AlgoTools_1.cxx +// File : GEOMAlgo_AlgoTools_2.cxx // Created : // Author : Peter KURNEV #include +#include +#include +#include +#include +#include #include -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include - -static - void CheckEdge (const TopoDS_Edge& E, - const Standard_Real aMaxTol); -static - void CorrectEdgeTolerance (const TopoDS_Edge& myShape, - const TopoDS_Face& S, - const Standard_Real aMaxTol); -static - Standard_Boolean Validate(const Adaptor3d_Curve& CRef, - const Adaptor3d_Curve& Other, - const Standard_Real Tol, - const Standard_Boolean SameParameter, - Standard_Real& aNewTolerance); -// static - void CorrectVertexTolerance(const TopoDS_Edge& aE); -// - -//======================================================================= -// Function : CorrectTolerances -// purpose : -//======================================================================= -void GEOMAlgo_AlgoTools::CorrectTolerances(const TopoDS_Shape& aShape, - const Standard_Real aMaxTol) -{ - GEOMAlgo_AlgoTools::CorrectPointOnCurve(aShape, aMaxTol); - GEOMAlgo_AlgoTools::CorrectCurveOnSurface(aShape, aMaxTol); -} - -//======================================================================= -// Function : CorrectPointOnCurve -// purpose : -//======================================================================= -void GEOMAlgo_AlgoTools::CorrectPointOnCurve(const TopoDS_Shape& S, - const Standard_Real aMaxTol) -{ - Standard_Integer i, aNb; - TopTools_IndexedMapOfShape Edges; - TopExp::MapShapes (S, TopAbs_EDGE, Edges); - aNb=Edges.Extent(); - for (i=1; i<=aNb; i++) { - const TopoDS_Edge& E= TopoDS::Edge(Edges(i)); - CheckEdge(E, aMaxTol); - } -} + void ProcessBlock(const TopoDS_Shape& aF, + const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, + TopTools_IndexedMapOfShape& aProcessed, + TopTools_IndexedMapOfShape& aChain); //======================================================================= -// Function : CorrectCurveOnSurface -// purpose : +// function: FindChains +// purpose : //======================================================================= -void GEOMAlgo_AlgoTools::CorrectCurveOnSurface(const TopoDS_Shape& S, - const Standard_Real aMaxTol) +void GEOMAlgo_AlgoTools::FindChains(const GEOMAlgo_ListOfCoupleOfShapes& aLCS, + GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMapChains) { - Standard_Integer i, aNbFaces, j, aNbEdges; - TopTools_IndexedMapOfShape Faces; - TopExp::MapShapes (S, TopAbs_FACE, Faces); - - aNbFaces=Faces.Extent(); - for (i=1; i<=aNbFaces; i++) { - const TopoDS_Face& F= TopoDS::Face(Faces(i)); - TopTools_IndexedMapOfShape Edges; - TopExp::MapShapes (F, TopAbs_EDGE, Edges); - aNbEdges=Edges.Extent(); - for (j=1; j<=aNbEdges; j++) { - const TopoDS_Edge& E= TopoDS::Edge(Edges(j)); - CorrectEdgeTolerance (E, F, aMaxTol); + GEOMAlgo_ListIteratorOfListOfCoupleOfShapes aItCS; + GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape aMCV; + // + aItCS.Initialize(aLCS); + for (; aItCS.More(); aItCS.Next()) { + const GEOMAlgo_CoupleOfShapes& aCS=aItCS.Value(); + // + const TopoDS_Shape& aF1=aCS.Shape1(); + const TopoDS_Shape& aF2=aCS.Shape2(); + // + // + if (aMCV.Contains(aF1)) { + TopTools_IndexedMapOfShape& aMV=aMCV.ChangeFromKey(aF1); + aMV.Add(aF1); + aMV.Add(aF2); } - } -} - -//======================================================================= -// Function : CorrectEdgeTolerance -// purpose : Correct tolerances for Edge -//======================================================================= -void CorrectEdgeTolerance (const TopoDS_Edge& myShape, - const TopoDS_Face& S, - const Standard_Real aMaxTol) -{ - // - // 1. Minimum of conditions to Perform - Handle (BRep_CurveRepresentation) myCref; - Handle (Adaptor3d_HCurve) myHCurve; - - myCref.Nullify(); - - Handle(BRep_TEdge)& TEx = *((Handle(BRep_TEdge)*)&myShape.TShape()); - BRep_ListIteratorOfListOfCurveRepresentation itcrx(TEx->Curves()); - Standard_Boolean Degenerated, SameParameterx, SameRangex; - - Standard_Integer unique = 0; - - Degenerated = TEx->Degenerated(); - SameParameterx = TEx->SameParameter(); - SameRangex = TEx->SameRange(); - - if (!SameRangex && SameParameterx) { - return; - } - - Handle(Geom_Curve) C3d; - while (itcrx.More()) { - const Handle(BRep_CurveRepresentation)& cr = itcrx.Value(); - if (cr->IsCurve3D()) { - unique++; - if (myCref.IsNull() && !cr->Curve3D().IsNull()) { - myCref = cr; - } + else { + TopTools_IndexedMapOfShape aMV; + aMV.Add(aF1); + aMV.Add(aF2); + aMCV.Add(aF1, aMV); } - itcrx.Next(); - } - - if (unique==0) { - return;//...No3DCurve - } - if (unique>1) { - return;//...Multiple3DCurve; - } - - if (myCref.IsNull() && !Degenerated) { - itcrx.Initialize(TEx->Curves()); - while (itcrx.More()) { - const Handle(BRep_CurveRepresentation)& cr = itcrx.Value(); - if (cr->IsCurveOnSurface()) { - myCref = cr; - break; - } - itcrx.Next(); + // + if (aMCV.Contains(aF2)) { + TopTools_IndexedMapOfShape& aMV=aMCV.ChangeFromKey(aF2); + aMV.Add(aF1); + aMV.Add(aF2); } - } - - else if (!myCref.IsNull() && Degenerated){ - return ;//...InvalidDegeneratedFlag; - } - - if (!myCref.IsNull()) { - const Handle(BRep_GCurve)& GCref = *((Handle(BRep_GCurve)*)&myCref); - Standard_Real First,Last; - GCref->Range(First,Last); - if (Last<=First) { - myCref.Nullify(); - return ;//InvalidRange; - } - else { - if (myCref->IsCurve3D()) { - Handle(Geom_Curve) C3dx = Handle(Geom_Curve)::DownCast - (myCref->Curve3D()->Transformed (myCref->Location().Transformation())); - GeomAdaptor_Curve GAC3d(C3dx, First, Last); - myHCurve = new GeomAdaptor_HCurve(GAC3d); - } - else { // curve on surface - Handle(Geom_Surface) Sref = myCref->Surface(); - Sref = Handle(Geom_Surface)::DownCast(Sref->Transformed(myCref->Location().Transformation())); - const Handle(Geom2d_Curve)& PCref = myCref->PCurve(); - Handle(GeomAdaptor_HSurface) GAHSref = new GeomAdaptor_HSurface(Sref); - Handle(Geom2dAdaptor_HCurve) GHPCref = new Geom2dAdaptor_HCurve(PCref, First, Last); - Adaptor3d_CurveOnSurface ACSref(GHPCref,GAHSref); - myHCurve = new Adaptor3d_HCurveOnSurface(ACSref); - } + TopTools_IndexedMapOfShape aMV; + aMV.Add(aF1); + aMV.Add(aF2); + aMCV.Add(aF2, aMV); } } - - //=============================================== - // 2. Tolerances in InContext - { - if (myCref.IsNull()) - return; - Standard_Boolean ok=Standard_True;; - - Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*)&myShape.TShape()); - Standard_Real Tol = BRep_Tool::Tolerance(TopoDS::Edge(myShape)); - Standard_Real aNewTol=Tol; - - Standard_Boolean SameParameter = TE->SameParameter(); - Standard_Boolean SameRange = TE->SameRange(); - Standard_Real First = myHCurve->FirstParameter(); - Standard_Real Last = myHCurve->LastParameter(); - Standard_Real Delta =1.e-14; - - Handle(BRep_TFace)& TF = *((Handle(BRep_TFace)*) &S.TShape()); - const TopLoc_Location& Floc = S.Location(); - const TopLoc_Location& TFloc = TF->Location(); - const Handle(Geom_Surface)& Su = TF->Surface(); - TopLoc_Location L = (Floc * TFloc).Predivided(myShape.Location()); - // Standard_Boolean checkclosed = Standard_False; - Standard_Boolean pcurvefound = Standard_False; - - BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves()); - while (itcr.More()) { - const Handle(BRep_CurveRepresentation)& cr = itcr.Value(); - if (cr != myCref && cr->IsCurveOnSurface(Su,L)) { - pcurvefound = Standard_True; - const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr); - Standard_Real f,l; - GC->Range(f,l); - if (SameRange && (f != First || l != Last)) { - return ;//BRepCheck_InvalidSameRangeFlag); - if (SameParameter) { - return; //BRepCheck_InvalidSameParameterFlag); - } - } - - Handle(Geom_Surface) Sb = cr->Surface(); - Sb = Handle(Geom_Surface)::DownCast (Su->Transformed(L.Transformation())); - Handle(Geom2d_Curve) PC = cr->PCurve(); - Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(Sb); - Handle(Geom2dAdaptor_HCurve) GHPC = new Geom2dAdaptor_HCurve(PC,f,l); - Adaptor3d_CurveOnSurface ACS(GHPC,GAHS); - ok = Validate(myHCurve->Curve(), ACS, Tol, SameParameter, aNewTol); - if (ok) { - if (cr->IsCurveOnClosedSurface()) { - //return ;// BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface); - } - else { - //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface); - } - if (SameParameter) { - //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag); - } - // - if (aNewTolUpdateTolerance(aNewTol+Delta); - // - CorrectVertexTolerance(myShape); - } - } - - if (cr->IsCurveOnClosedSurface()) { - // checkclosed = Standard_True; - GHPC->ChangeCurve2d().Load(cr->PCurve2(),f,l); // same bounds - ACS.Load(GAHS); // sans doute inutile - ACS.Load(GHPC); // meme remarque... - ok = Validate(myHCurve->Curve(),ACS,Tol,SameParameter, aNewTol); - if (ok) { - //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface); - if (SameParameter) { - //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag); - } - if (aNewTolUpdateTolerance(aNewTol+Delta); - CorrectVertexTolerance(myShape); - } - } - } - } - itcr.Next(); - } - - if (!pcurvefound) { - Handle(Geom_Plane) P; - Handle(Standard_Type) styp = Su->DynamicType(); - if (styp == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) { - P = Handle(Geom_Plane)::DownCast(Handle(Geom_RectangularTrimmedSurface):: - DownCast(Su)->BasisSurface()); - } - else { - P = Handle(Geom_Plane)::DownCast(Su); - } - if (P.IsNull()) { // not a plane - return;//BRepCheck::Add(lst,BRepCheck_NoCurveOnSurface); - } - - else {// on fait la projection a la volee, comme BRep_Tool - P = Handle(Geom_Plane)::DownCast(P->Transformed(L.Transformation())); - //on projette Cref sur ce plan - Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(P); - - // Dub - Normalement myHCurve est une GeomAdaptor_HCurve - GeomAdaptor_Curve& Gac = Handle(GeomAdaptor_HCurve)::DownCast(myHCurve)->ChangeCurve(); - Handle(Geom_Curve) C3dx = Gac.Curve(); - Handle(Geom_Curve) ProjOnPlane = GeomProjLib::ProjectOnPlane - (new Geom_TrimmedCurve(C3dx,First,Last), P, P->Position().Direction(), Standard_True); - - Handle(GeomAdaptor_HCurve) aHCurve = new GeomAdaptor_HCurve(ProjOnPlane); - - ProjLib_ProjectedCurve proj(GAHS,aHCurve); - Handle(Geom2d_Curve) PC = Geom2dAdaptor::MakeCurve(proj); - Handle(Geom2dAdaptor_HCurve) GHPC = - new Geom2dAdaptor_HCurve(PC, myHCurve->FirstParameter(), myHCurve->LastParameter()); - - Adaptor3d_CurveOnSurface ACS(GHPC,GAHS); - - Standard_Boolean okx = Validate(myHCurve->Curve(),ACS, - Tol,Standard_True, aNewTol); // voir dub... - if (okx) { - //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface); - if (aNewTolUpdateTolerance(aNewTol+Delta); - CorrectVertexTolerance(myShape); - } - } - } - - }//end of if (!pcurvefound) { - } // end of 2. Tolerances in InContext - + GEOMAlgo_AlgoTools::FindChains(aMCV, aMapChains); } - //======================================================================= -//function : CorrectVertexTolerance -//purpose : +// function: FindChains +// purpose : //======================================================================= -void CorrectVertexTolerance(const TopoDS_Edge& aE) +void GEOMAlgo_AlgoTools::FindChains(const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, + GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMapChains) { - Standard_Integer k, aNbV; - Standard_Real aTolE, aTolV; - TopTools_IndexedMapOfShape aVMap; - - aTolE=BRep_Tool::Tolerance(aE); - - TopExp::MapShapes(aE, TopAbs_VERTEX, aVMap); - aNbV=aVMap.Extent(); - for (k=1; k<=aNbV; ++k) { - const TopoDS_Vertex& aV=TopoDS::Vertex(aVMap(k)); - aTolV=BRep_Tool::Tolerance(aV); - if (aTolVUpdateTolerance(aTolE); + Standard_Integer i, j, aNbCV, aNbV; + TopTools_IndexedMapOfShape aProcessed, aChain; + // + aNbCV=aMCV.Extent(); + for (i=1; i<=aNbCV; ++i) { + const TopoDS_Shape& aF=aMCV.FindKey(i); + if (aProcessed.Contains(aF)) { + continue; } + // + aProcessed.Add(aF); + aChain.Add(aF); + // + const TopTools_IndexedMapOfShape& aMV=aMCV(i); + aNbV=aMV.Extent(); + for (j=1; j<=aNbV; ++j) { + const TopoDS_Shape& aFx=aMV(j); + ProcessBlock(aFx, aMCV, aProcessed, aChain); + } + aMapChains.Add(aF, aChain); + aChain.Clear(); } } - - - -#define NCONTROL 23 //======================================================================= -//function : Validate -//purpose : +// function: ProcessBlock +// purpose: //======================================================================= -Standard_Boolean Validate(const Adaptor3d_Curve& CRef, - const Adaptor3d_Curve& Other, - const Standard_Real Tol, - const Standard_Boolean SameParameter, - Standard_Real& aNewTolerance) +void ProcessBlock(const TopoDS_Shape& aF, + const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, + TopTools_IndexedMapOfShape& aProcessed, + TopTools_IndexedMapOfShape& aChain) { - Standard_Real First, Last, MaxDistance, aD, Tol2; - - First = CRef.FirstParameter(); - Last = CRef.LastParameter(); - MaxDistance = 0.; - Tol2 = Tol*Tol; - - Standard_Integer i, aNC1=NCONTROL-1; - - Standard_Boolean aFlag=Standard_False; - Standard_Boolean proj = (!SameParameter || - First != Other.FirstParameter() || - Last != Other.LastParameter()); + Standard_Integer j, aNbV; // - // 1. - if (!proj) { - for (i = 0; i < NCONTROL; i++) { - Standard_Real prm = ((aNC1-i)*First + i*Last)/aNC1; - gp_Pnt pref = CRef.Value(prm); - gp_Pnt pother = Other.Value(prm); - - aD=pref.SquareDistance(pother); - - if (aD > Tol2) { - if (aD>MaxDistance) { - MaxDistance=aD; - } - aFlag=Standard_True; - } - } - - if (aFlag) { - aNewTolerance=sqrt(MaxDistance); - } - return aFlag; + if (aProcessed.Contains(aF)) { + return; } - + aProcessed.Add(aF); + aChain.Add(aF); // - // 2. - else { - Extrema_LocateExtPC refd,otherd; - Standard_Real OFirst, OLast; - OFirst = Other.FirstParameter(); - OLast = Other.LastParameter(); - - gp_Pnt pd = CRef.Value(First); - gp_Pnt pdo = Other.Value(OFirst); - - aD = pd.SquareDistance(pdo); - if (aD > Tol2) { - if (aD>MaxDistance) { - MaxDistance=aD; - } - aFlag=Standard_True; - } - - pd = CRef.Value(Last); - pdo = Other.Value(OLast); - aD = pd.SquareDistance(pdo); - if (aD > Tol2 && aD > MaxDistance) { - MaxDistance=aD; - aFlag=Standard_True; - } - - refd.Initialize(CRef, First, Last, CRef.Resolution(Tol)); - otherd.Initialize(Other, OFirst, OLast, Other.Resolution(Tol)); - - for (i = 2; i< aNC1; i++) { - Standard_Real rprm = ((aNC1-i)*First + i*Last)/aNC1; - gp_Pnt pref = CRef.Value(rprm); - - Standard_Real oprm = ((aNC1-i)*OFirst + i*OLast)/aNC1; - gp_Pnt pother = Other.Value(oprm); - - refd.Perform(pother,rprm); - if (!refd.IsDone() || refd.SquareDistance() > Tol2) { - if (refd.IsDone()) { - aD=refd.SquareDistance(); - if (aD > Tol2 && aD>MaxDistance) { - aFlag=Standard_True; - MaxDistance=aD; - } - } - } - - otherd.Perform(pref,oprm); - if (!otherd.IsDone() || otherd.SquareDistance() > Tol2) { - - if (otherd.IsDone()) { - aD=otherd.SquareDistance(); - if (aD > Tol2 && aD>MaxDistance) { - aFlag=Standard_True; - MaxDistance=aD; - } - } - } - } - } - - aD=sqrt (MaxDistance); - aNewTolerance=aD; - - return aFlag; - -} - -//======================================================================= -// Function : CheckEdge -// purpose : Correct tolerances for Vertices on Edge -//======================================================================= -void CheckEdge (const TopoDS_Edge& Ed, const Standard_Real aMaxTol) -{ - TopoDS_Edge E=Ed; - E.Orientation(TopAbs_FORWARD); - - gp_Pnt Controlp; - - TopExp_Explorer aVExp; - aVExp.Init(E, TopAbs_VERTEX); - for (; aVExp.More(); aVExp.Next()) { - TopoDS_Vertex aVertex= TopoDS::Vertex(aVExp.Current()); - - Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &aVertex.TShape()); - const gp_Pnt& prep = TV->Pnt(); - - Standard_Real Tol, aD2, aNewTolerance, dd; - - Tol =BRep_Tool::Tolerance(aVertex); - Tol = Max(Tol, BRep_Tool::Tolerance(E)); - dd=0.1*Tol; - Tol*=Tol; - - const TopLoc_Location& Eloc = E.Location(); - BRep_ListIteratorOfListOfPointRepresentation itpr; - - Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*)&E.TShape()); - BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves()); - while (itcr.More()) { - const Handle(BRep_CurveRepresentation)& cr = itcr.Value(); - const TopLoc_Location& loc = cr->Location(); - TopLoc_Location L = (Eloc * loc).Predivided(aVertex.Location()); - - if (cr->IsCurve3D()) { - const Handle(Geom_Curve)& C = cr->Curve3D(); - if (!C.IsNull()) { - itpr.Initialize(TV->Points()); - while (itpr.More()) { - const Handle(BRep_PointRepresentation)& pr = itpr.Value(); - if (pr->IsPointOnCurve(C,L)) { - Controlp = C->Value(pr->Parameter()); - Controlp.Transform(L.Transformation()); - aD2=prep.SquareDistance(Controlp); - if (aD2 > Tol) { - aNewTolerance=sqrt(aD2)+dd; - if (aNewToleranceUpdateTolerance(aNewTolerance); - } - } - itpr.Next(); - } - - TopAbs_Orientation orv = aVertex.Orientation(); - if (orv == TopAbs_FORWARD || orv == TopAbs_REVERSED) { - const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr); - - if (orv==TopAbs_FORWARD) - Controlp = C->Value(GC->First()); - else - Controlp = C->Value(GC->Last()); - - Controlp.Transform(L.Transformation()); - aD2=prep.SquareDistance(Controlp); - - if (aD2 > Tol) { - aNewTolerance=sqrt(aD2)+dd; - if (aNewToleranceUpdateTolerance(aNewTolerance); - } - } - } - } - itcr.Next(); - } + const TopTools_IndexedMapOfShape& aMV=aMCV.FindFromKey(aF); + aNbV=aMV.Extent(); + for (j=1; j<=aNbV; ++j) { + const TopoDS_Shape& aFx=aMV(j); + ProcessBlock(aFx, aMCV, aProcessed, aChain); } } diff --git a/src/GEOMAlgo/GEOMAlgo_AlgoTools_2.cxx b/src/GEOMAlgo/GEOMAlgo_AlgoTools_2.cxx deleted file mode 100755 index b52a2504c..000000000 --- a/src/GEOMAlgo/GEOMAlgo_AlgoTools_2.cxx +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (C) 2007-2012 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 -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// 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/ or email : webmaster.salome@opencascade.com -// -// File : GEOMAlgo_AlgoTools_2.cxx -// Created : -// Author : Peter KURNEV - -#include - -#include -#include -#include -#include -#include -#include - - - -static - void ProcessBlock(const TopoDS_Shape& aF, - const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, - TopTools_IndexedMapOfShape& aProcessed, - TopTools_IndexedMapOfShape& aChain); - -//======================================================================= -// function: FindChains -// purpose : -//======================================================================= -void GEOMAlgo_AlgoTools::FindChains(const GEOMAlgo_ListOfCoupleOfShapes& aLCS, - GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMapChains) -{ - GEOMAlgo_ListIteratorOfListOfCoupleOfShapes aItCS; - GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape aMCV; - // - aItCS.Initialize(aLCS); - for (; aItCS.More(); aItCS.Next()) { - const GEOMAlgo_CoupleOfShapes& aCS=aItCS.Value(); - // - const TopoDS_Shape& aF1=aCS.Shape1(); - const TopoDS_Shape& aF2=aCS.Shape2(); - // - // - if (aMCV.Contains(aF1)) { - TopTools_IndexedMapOfShape& aMV=aMCV.ChangeFromKey(aF1); - aMV.Add(aF1); - aMV.Add(aF2); - } - else { - TopTools_IndexedMapOfShape aMV; - aMV.Add(aF1); - aMV.Add(aF2); - aMCV.Add(aF1, aMV); - } - // - if (aMCV.Contains(aF2)) { - TopTools_IndexedMapOfShape& aMV=aMCV.ChangeFromKey(aF2); - aMV.Add(aF1); - aMV.Add(aF2); - } - else { - TopTools_IndexedMapOfShape aMV; - aMV.Add(aF1); - aMV.Add(aF2); - aMCV.Add(aF2, aMV); - } - } - GEOMAlgo_AlgoTools::FindChains(aMCV, aMapChains); -} -//======================================================================= -// function: FindChains -// purpose : -//======================================================================= -void GEOMAlgo_AlgoTools::FindChains(const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, - GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMapChains) -{ - Standard_Integer i, j, aNbCV, aNbV; - TopTools_IndexedMapOfShape aProcessed, aChain; - // - aNbCV=aMCV.Extent(); - for (i=1; i<=aNbCV; ++i) { - const TopoDS_Shape& aF=aMCV.FindKey(i); - if (aProcessed.Contains(aF)) { - continue; - } - // - aProcessed.Add(aF); - aChain.Add(aF); - // - const TopTools_IndexedMapOfShape& aMV=aMCV(i); - aNbV=aMV.Extent(); - for (j=1; j<=aNbV; ++j) { - const TopoDS_Shape& aFx=aMV(j); - ProcessBlock(aFx, aMCV, aProcessed, aChain); - } - aMapChains.Add(aF, aChain); - aChain.Clear(); - } -} -//======================================================================= -// function: ProcessBlock -// purpose: -//======================================================================= -void ProcessBlock(const TopoDS_Shape& aF, - const GEOMAlgo_IndexedDataMapOfShapeIndexedMapOfShape& aMCV, - TopTools_IndexedMapOfShape& aProcessed, - TopTools_IndexedMapOfShape& aChain) -{ - Standard_Integer j, aNbV; - // - if (aProcessed.Contains(aF)) { - return; - } - aProcessed.Add(aF); - aChain.Add(aF); - // - const TopTools_IndexedMapOfShape& aMV=aMCV.FindFromKey(aF); - aNbV=aMV.Extent(); - for (j=1; j<=aNbV; ++j) { - const TopoDS_Shape& aFx=aMV(j); - ProcessBlock(aFx, aMCV, aProcessed, aChain); - } -} - diff --git a/src/GEOMAlgo/GEOMAlgo_CheckerSI.cxx b/src/GEOMAlgo/GEOMAlgo_CheckerSI.cxx deleted file mode 100755 index e559e1c5b..000000000 --- a/src/GEOMAlgo/GEOMAlgo_CheckerSI.cxx +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2007-2012 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 -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// 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/ or email : webmaster.salome@opencascade.com -// -// File: GEOMAlgo_CheckerSI.cxx -// Created: -// Author: Peter KURNEV -// -// - -#include -#include -#include -#include -#include -#include - -//======================================================================= -//function : GEOMAlgo_CheckerSI -//purpose : -//======================================================================= -GEOMAlgo_CheckerSI::GEOMAlgo_CheckerSI() -: - BOPAlgo_PaveFiller() -{ -} -//======================================================================= -//function : GEOMAlgo_CheckerSI -//purpose : -//======================================================================= -GEOMAlgo_CheckerSI::GEOMAlgo_CheckerSI(const BOPCol_BaseAllocator& theAllocator) -: - BOPAlgo_PaveFiller(theAllocator) -{ -} -//======================================================================= -//function : ~ -//purpose : -//======================================================================= -GEOMAlgo_CheckerSI::~GEOMAlgo_CheckerSI() -{ -} -//======================================================================= -//function : Init -//purpose : -//======================================================================= -void GEOMAlgo_CheckerSI::Init() -{ - Standard_Integer aNb; - // - myErrorStatus=0; - // - aNb=myArguments.Extent(); - if (!aNb) { - myErrorStatus=10; - return; - } - if (aNb>1) { - myErrorStatus=11; - return; - } - // - // 0 Clear - Clear(); - // - // 1.myDS - myDS=new BOPDS_DS(myAllocator); - myDS->SetArguments(myArguments); - myDS->Init(); - // - // 2.myIterator - myIterator=new GEOMAlgo_IteratorCheckerSI(myAllocator); - myIterator->SetDS(myDS); - myIterator->Prepare(); - // - // 3 myContext - myContext=new BOPInt_Context; - // - myErrorStatus=0; -} diff --git a/src/GEOMAlgo/GEOMAlgo_CheckerSI.hxx b/src/GEOMAlgo/GEOMAlgo_CheckerSI.hxx deleted file mode 100755 index ffabab3ec..000000000 --- a/src/GEOMAlgo/GEOMAlgo_CheckerSI.hxx +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2007-2012 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 -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// 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/ or email : webmaster.salome@opencascade.com -// -// File: GEOMAlgo_CheckerSI.hxx -// Created: -// Author: Peter KURNEV -// -// - -#ifndef _GEOMAlgo_CheckerSI_HeaderFile -#define _GEOMAlgo_CheckerSI_HeaderFile - -#include -#include - -#include -#include - -//======================================================================= -//class : GEOMAlgo_CheckerSI -//purpose : -//======================================================================= -class GEOMAlgo_CheckerSI : public BOPAlgo_PaveFiller { - public: - - //! Empty contructor
- //!
- Standard_EXPORT - GEOMAlgo_CheckerSI(); - - //! Contructor
- //! theAllocator - the allocator to manage the memory
- //!
- Standard_EXPORT - GEOMAlgo_CheckerSI(const BOPCol_BaseAllocator& theAllocator); - - Standard_EXPORT - virtual ~GEOMAlgo_CheckerSI(); - -protected: - Standard_EXPORT - virtual void Init() ; - -}; -#endif diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer.cxx index c0bd52c27..b6ba99b4b 100755 --- a/src/GEOMAlgo/GEOMAlgo_Gluer.cxx +++ b/src/GEOMAlgo/GEOMAlgo_Gluer.cxx @@ -463,7 +463,7 @@ void GEOMAlgo_Gluer::MakeSubShapes (const TopoDS_Shape& theShape, aER.Orientation(TopAbs_FORWARD); if (!BRep_Tool::Degenerated(aER)) { // orient image - Standard_Boolean bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse1(aER, aE, myContext); + Standard_Boolean bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse(aER, aE, myContext); if (bIsToReverse) { aER.Reverse(); } @@ -515,7 +515,7 @@ void GEOMAlgo_Gluer::MakeSolids() myResult=aCmp; // if (aMS.Extent()) { - GEOMAlgo_AlgoTools::CorrectCurveOnSurface(myResult); + BOPTools_AlgoTools::CorrectCurveOnSurface(myResult, 0.0001); } } //======================================================================= @@ -977,7 +977,7 @@ void GEOMAlgo_Gluer::MakeFace(const TopoDS_Face& aF, BOPTools_AlgoTools2D::BuildPCurveForEdgeOnFace(aER, aFFWD); // orient image - bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse1(aER, aE, myContext); + bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse(aER, aE, myContext); if (bIsToReverse) { aER.Reverse(); } diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx index 30da63a2b..2fe42cec2 100644 --- a/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx +++ b/src/GEOMAlgo/GEOMAlgo_Gluer2.cxx @@ -44,6 +44,8 @@ #include #include +#include + #include #include @@ -450,7 +452,7 @@ void GEOMAlgo_Gluer2::FillContainers(const TopAbs_ShapeEnum aType) if (myOrigins.IsBound(aE)) { aEnew=myOrigins.Find(aE); // - bToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse(aEnew, aE, myContext); + bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aEnew, aE, myContext); if (bToReverse) { aEnew.Reverse(); } diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx index 1e4aaa09f..cd934dad5 100644 --- a/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx +++ b/src/GEOMAlgo/GEOMAlgo_Gluer2_1.cxx @@ -168,7 +168,7 @@ void GEOMAlgo_Gluer2::MakeFace(const TopoDS_Face& theF, } //modified by NIZNHY-PKV Fri Feb 03 11:18:20 2012t // - bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse1(aEx, aE, myContext); + bIsToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse(aEx, aE, myContext); if (bIsToReverse) { aEx.Reverse(); } diff --git a/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx b/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx index 7766f30a1..19694f493 100644 --- a/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx +++ b/src/GEOMAlgo/GEOMAlgo_Gluer2_2.cxx @@ -31,8 +31,9 @@ #include #include +#include + #include -#include //======================================================================= //function : PrepareHistory @@ -98,7 +99,7 @@ const TopTools_ListOfShape& GEOMAlgo_Gluer2::Modified(const TopoDS_Shape& theS) aSim.Orientation(theS.Orientation()); } else { - bToReverse=GEOMAlgo_AlgoTools::IsSplitToReverse(aSim, theS, myContext); + bToReverse=BOPTools_AlgoTools::IsSplitToReverse(aSim, theS, myContext); if (bToReverse) { aSim.Reverse(); } diff --git a/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.cxx b/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.cxx deleted file mode 100755 index 82bab4d46..000000000 --- a/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.cxx +++ /dev/null @@ -1,190 +0,0 @@ -// File: GEOMAlgo_IteratorChecker.cxx -// Created: -// Author: Peter KURNEV - -#include - -#include -#include -#include -// -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//======================================================================= -//function : -//purpose : -//======================================================================= -GEOMAlgo_IteratorCheckerSI::GEOMAlgo_IteratorCheckerSI() -: - BOPDS_Iterator() -{ -} -//======================================================================= -//function : -//purpose : -//======================================================================= -GEOMAlgo_IteratorCheckerSI::GEOMAlgo_IteratorCheckerSI - (const Handle(NCollection_BaseAllocator)& theAllocator) -: - BOPDS_Iterator(theAllocator) -{ -} -//======================================================================= -//function : ~ -//purpose : -//======================================================================= -GEOMAlgo_IteratorCheckerSI::~GEOMAlgo_IteratorCheckerSI() -{ -} -//======================================================================= -// function: Intersect -// purpose: -//======================================================================= -void GEOMAlgo_IteratorCheckerSI::Intersect() -{ - Standard_Boolean bFlag; - Standard_Integer aNbS, i, aNbB; - Standard_Integer aNbSD, iX, j, iDS, jB, k;; - TopAbs_ShapeEnum aTi, aTj; - Handle(NCollection_IncAllocator) aAllocator; - BOPCol_ListIteratorOfListOfInteger aIt; - BOPCol_DataMapIteratorOfDataMapOfIntegerListOfInteger aItVSD; - // - //-----------------------------------------------------scope_1 f - aAllocator=new NCollection_IncAllocator(); - // - BOPCol_DataMapOfShapeInteger aMSI(100, aAllocator); - BOPCol_DataMapOfIntegerInteger aMII(100, aAllocator); - BOPDS_MapOfPassKeyBoolean aMPA(100, aAllocator); - BOPDS_MapOfPassKeyBoolean aMPKXB(100, aAllocator); - BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator); - BOPDS_PassKeyBoolean aPKXB; - // - BOPDS_BoxBndTreeSelector aSelector; - BOPDS_BoxBndTree aBBTree; - NCollection_UBTreeFiller aTreeFiller(aBBTree); - // - // myPairsAvoid, aMSI, aMSB - aNbS=myDS->NbSourceShapes(); - for (i=0; iShapeInfo(i); - // - if (aSI.HasBRep()) { - const TopoDS_Shape& aSi=aSI.Shape(); - aTi=aSI.ShapeType(); - if (aTi!=TopAbs_VERTEX) { - //-- - const BOPCol_ListOfInteger& aLA=aSI.SubShapes(); - aIt.Initialize(aLA); - for (; aIt.More(); aIt.Next()) { - iX=aIt.Value(); - aPKXB.Clear(); - aPKXB.SetIds(i, iX); - aMPA.Add(aPKXB); - } - //--t - } - else { - aPKXB.Clear(); - aPKXB.SetIds(i, i); - aMPA.Add(aPKXB); - } - // - const Bnd_Box& aBoxEx=aSI.Box(); - // - aMSI.Bind(aSi, i); - aMSB.Add(aSi, aBoxEx); - } - } // for (i=0; iShapeInfo(i); - aTi=aSI.ShapeType(); - if (!aSI.HasBRep()){ - continue; - } - // - const TopoDS_Shape& aSi=myDS->Shape(i); - aTi=aSi.ShapeType(); - const Bnd_Box& aBoxEx=aMSB.FindFromKey(aSi); - aSelector.Clear(); - aSelector.SetBox(aBoxEx); - // - aNbSD=aBBTree.Select(aSelector); - if (!aNbSD){ - continue; - } - // - const BOPCol_ListOfInteger& aLI=aSelector.Indices(); - // - k=0; - // - aIt.Initialize(aLI); - for (; aIt.More(); aIt.Next()) { - jB=aIt.Value(); // box index in MII - j=aMII.Find(jB); // DS index - // - aPKXB.SetIds(i, j); - if (aMPA.Contains(aPKXB)) { - continue; - } - // - if (aMPKXB.Add(aPKXB)) { - bFlag=Standard_False;// Bounding boxes are intersected - const Bnd_Box& aBoxi=myDS->ShapeInfo(i).Box(); - const Bnd_Box& aBoxj=myDS->ShapeInfo(j).Box(); - if (aBoxi.IsOut(aBoxj)) { - bFlag=!bFlag; //Bounding boxes of Sub-shapes are intersected - } - aTj=myDS->ShapeInfo(j).ShapeType();// - iX=BOPDS_Tools::TypeToInteger(aTi, aTj); - aPKXB.SetFlag(bFlag); - myLists(iX).Append(aPKXB); - }// if (aMPKXB.Add(aPKXB)) { - }// for (; aIt.More(); aIt.Next()) { - }//for (i=1; i<=aNbS; ++i) { - // - aMSI.Clear(); - aMII.Clear(); - aMPA.Clear(); - aMPKXB.Clear(); - aMSB.Clear(); - // - aAllocator.Nullify(); - //-----------------------------------------------------scope_1 t -} - diff --git a/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.hxx b/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.hxx deleted file mode 100755 index cb5ef071e..000000000 --- a/src/GEOMAlgo/GEOMAlgo_IteratorCheckerSI.hxx +++ /dev/null @@ -1,57 +0,0 @@ - -// Copyright (C) 2007-2012 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 -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// 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/ or email : webmaster.salome@opencascade.com -// -// File: GEOMAlgo_CheckerSI.hxx -// Created: -// Author: Peter KURNEV -// -// - -#ifndef GEOMAlgo_IteratorCheckerSI_HeaderFile -#define GEOMAlgo_IteratorCheckerSI_HeaderFile - -#include -#include -#include -#include - -//======================================================================= -//class : GEOMAlgo_CheckerSI -//purpose : -//======================================================================= -class GEOMAlgo_IteratorCheckerSI : public BOPDS_Iterator { - public: - Standard_EXPORT - GEOMAlgo_IteratorCheckerSI(); - - Standard_EXPORT - GEOMAlgo_IteratorCheckerSI(const Handle(NCollection_BaseAllocator)& theAllocator); - - Standard_EXPORT - ~GEOMAlgo_IteratorCheckerSI(); - - Standard_EXPORT - virtual void Intersect(); - -}; - -#endif diff --git a/src/GEOMAlgo/Makefile.am b/src/GEOMAlgo/Makefile.am index ee3921ab7..1e6c612cc 100644 --- a/src/GEOMAlgo/Makefile.am +++ b/src/GEOMAlgo/Makefile.am @@ -30,7 +30,6 @@ dist_libGEOMAlgo_la_SOURCES = \ GEOMAlgo_Algo.cxx \ GEOMAlgo_AlgoTools.cxx \ GEOMAlgo_AlgoTools_1.cxx \ - GEOMAlgo_AlgoTools_2.cxx \ GEOMAlgo_BndSphere.cxx \ GEOMAlgo_BndSphereTree.cxx \ GEOMAlgo_BoxBndTree.cxx \ @@ -72,9 +71,7 @@ dist_libGEOMAlgo_la_SOURCES = \ GEOMAlgo_StateCollector.cxx \ GEOMAlgo_SurfaceTools.cxx \ GEOMAlgo_VertexSolid.cxx \ - GEOMAlgo_WireSolid.cxx \ - GEOMAlgo_CheckerSI.cxx \ - GEOMAlgo_IteratorCheckerSI.cxx + GEOMAlgo_WireSolid.cxx # header files @@ -135,9 +132,7 @@ salomeinclude_HEADERS = \ GEOMAlgo_StateCollector.hxx \ GEOMAlgo_SurfaceTools.hxx \ GEOMAlgo_VertexSolid.hxx \ - GEOMAlgo_WireSolid.hxx \ - GEOMAlgo_CheckerSI.hxx \ - GEOMAlgo_IteratorCheckerSI.hxx + GEOMAlgo_WireSolid.hxx libGEOMAlgo_la_CPPFLAGS = \ $(CAS_CPPFLAGS) \ diff --git a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx index 036b4d672..9a7833593 100644 --- a/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx @@ -117,7 +117,7 @@ #include #include #include -#include +#include #include #include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC @@ -1373,7 +1373,7 @@ bool GEOMImpl_IMeasureOperations::CheckSelfIntersections BOPCol_ListOfShape aLCS; aLCS.Append(aScopy); // - GEOMAlgo_CheckerSI aCSI; // checker of self-interferences + BOPAlgo_CheckerSI aCSI; // checker of self-interferences aCSI.SetArguments(aLCS); // 1. Launch the checker