diff --git a/src/BRepFill/BRepFill_CompatibleWires.cxx b/src/BRepFill/BRepFill_CompatibleWires.cxx index 446186b110..0b8e372ec4 100644 --- a/src/BRepFill/BRepFill_CompatibleWires.cxx +++ b/src/BRepFill/BRepFill_CompatibleWires.cxx @@ -1455,9 +1455,24 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) Standard_Integer nbs, NbSamples = 0; if (theLength <= 2) NbSamples = 4; + gp_Pln FirstPlane; + PlaneOfWire(TopoDS::Wire(myWork(ideb)), FirstPlane); + gp_Pnt FirstBary = FirstPlane.Location(); + gp_Vec NormalOfFirstPlane = FirstPlane.Axis().Direction(); for (i = ideb+1; i <= ifin; i++) { const TopoDS_Wire& wire = TopoDS::Wire(myWork(i)); + + //Compute offset vector as current bary center projected on first plane + //to first bary center + gp_Pln CurPlane; + PlaneOfWire(wire, CurPlane); + gp_Pnt CurBary = CurPlane.Location(); + gp_Vec aVec(FirstBary, CurBary); + gp_Vec anOffsetProj = (aVec * NormalOfFirstPlane) * NormalOfFirstPlane; + CurBary.Translate(-anOffsetProj); //projected current bary center + gp_Vec Offset(CurBary, FirstBary); + TopoDS_Wire newwire; BRep_Builder BB; BB.MakeWire(newwire); @@ -1481,11 +1496,6 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) else for (j = 1; j <= theLength; j++) { - // get a vector to superpose SeqVertices(j) on PrevSeq(1) - const TopoDS_Vertex& Vprev = TopoDS::Vertex( PrevSeq(1) ); - const TopoDS_Vertex& V = TopoDS::Vertex( SeqVertices(j) ); - gp_Vec curToPrevVec( BRep_Tool::Pnt(V), BRep_Tool::Pnt(Vprev) ); - //Forward Standard_Real SumDist = 0.; for (k = j, n = 1; k <= theLength; k++, n++) @@ -1493,7 +1503,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) const TopoDS_Vertex& Vprev = TopoDS::Vertex( PrevSeq(n) ); gp_Pnt Pprev = BRep_Tool::Pnt(Vprev); const TopoDS_Vertex& V = TopoDS::Vertex( SeqVertices(k) ); - gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + curToPrevVec.XYZ(); + gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ(); SumDist += Pprev.Distance(P); if (NbSamples > 0) { @@ -1512,7 +1522,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) (Ecurve.FirstParameter() + nbs*SampleOnCur) : (Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur); gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev); - gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + curToPrevVec.XYZ(); + gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ(); SumDist += PonPrev.Distance(PonCur); } } @@ -1522,7 +1532,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) const TopoDS_Vertex& Vprev = TopoDS::Vertex( PrevSeq(n) ); gp_Pnt Pprev = BRep_Tool::Pnt(Vprev); const TopoDS_Vertex& V = TopoDS::Vertex( SeqVertices(k) ); - gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + curToPrevVec.XYZ(); + gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ(); SumDist += Pprev.Distance(P); if (NbSamples > 0) { @@ -1541,7 +1551,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) (Ecurve.FirstParameter() + nbs*SampleOnCur) : (Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur); gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev); - gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + curToPrevVec.XYZ(); + gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ(); SumDist += PonPrev.Distance(PonCur); } } @@ -1560,7 +1570,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) const TopoDS_Vertex& Vprev = TopoDS::Vertex( PrevSeq(n) ); gp_Pnt Pprev = BRep_Tool::Pnt(Vprev); const TopoDS_Vertex& V = TopoDS::Vertex( SeqVertices(k) ); - gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + curToPrevVec.XYZ(); + gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ(); SumDist += Pprev.Distance(P); if (NbSamples > 0) { @@ -1582,7 +1592,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) (Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur) : (Ecurve.FirstParameter() + nbs*SampleOnCur); gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev); - gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + curToPrevVec.XYZ(); + gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ(); SumDist += PonPrev.Distance(PonCur); } } @@ -1592,7 +1602,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) const TopoDS_Vertex& Vprev = TopoDS::Vertex( PrevSeq(n) ); gp_Pnt Pprev = BRep_Tool::Pnt(Vprev); const TopoDS_Vertex& V = TopoDS::Vertex( SeqVertices(k) ); - gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + curToPrevVec.XYZ(); + gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ(); SumDist += Pprev.Distance(P); if (NbSamples > 0) { @@ -1611,7 +1621,7 @@ void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ ) (Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur) : (Ecurve.FirstParameter() + nbs*SampleOnCur); gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev); - gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + curToPrevVec.XYZ(); + gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ(); SumDist += PonPrev.Distance(PonCur); } }