-// File: BRepFill_CompatibleWires.cxx
-// Created: Thu Jul 2 16:47:25 1998
-// Author: Joelle CHAUVET
-// <jct@sgi64>
-
+// Created on: 1998-07-02
+// Created by: Joelle CHAUVET
+// Copyright (c) 1998-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
#include <BRepFill_CompatibleWires.ixx>
#include <TColStd_Array1OfReal.hxx>
#include <TColStd_SequenceOfReal.hxx>
-
+#ifdef DEB_EFV
static void EdgesFromVertex (const TopoDS_Wire& W,
const TopoDS_Vertex& V,
TopoDS_Edge& E1,
}
}
-
+#endif
static void SeqOfVertices (const TopoDS_Wire& W,
TopTools_SequenceOfShape& S)
{
}
TopoDS_Edge Edge = TopoDS::Edge(anExp.Current());
Standard_Real first, last;
- TopLoc_Location loc;
- Handle(Geom_Curve) curv;
- curv = BRep_Tool::Curve(Edge, loc, first, last);
- curv =
- Handle(Geom_Curve)::DownCast(curv->Transformed(loc.Transformation()));
+ Handle(Geom_Curve) curv = BRep_Tool::Curve(Edge, first, last);
if (wClosed) {
GeomAdaptor_Curve AdC;
AdC.Load(curv);
TopoDS_Shape aLocalShape = DSS.SupportOnShape2(isol);
TopoDS_Edge E = TopoDS::Edge(aLocalShape);
// TopoDS_Edge E = TopoDS::Edge(DSS.SupportOnShape2(isol));
-#ifdef DEB
- Standard_Real tol =
-#endif
- Precision::PConfusion();
Standard_Real first,last,param;
DSS.ParOnEdgeS2(isol,param);
BRep_Tool::Range(E,first,last);
// extremity of the first wire
V1 = TopoDS::Vertex(SeqV.Value(1));
- // previous wire
-#ifdef DEB
- const TopoDS_Wire& wire2 =
-#endif
- TopoDS::Wire(myWork(i-1));
// loop on vertices of wire1
for (ii=1;ii<=SeqV.Length();ii++) {
//purpose :
//=======================================================================
-void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean polar )
+void BRepFill_CompatibleWires::ComputeOrigin(const Standard_Boolean /*polar*/ )
{
// reorganize the wires respecting orientation and origin
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);
}
Standard_Real MinSumDist = Precision::Infinite();
- Standard_Integer jmin, j, k, n;
- Standard_Boolean forward;
+ Standard_Integer jmin = 1, j, k, n;
+ Standard_Boolean forward = Standard_False;
if (i == myWork.Length() && myDegen2)
{
// last point section
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);
+ gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ();
SumDist += Pprev.Distance(P);
if (NbSamples > 0)
{
(Ecurve.FirstParameter() + nbs*SampleOnCur) :
(Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur);
gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev);
- gp_Pnt PonCur = Ecurve.Value(ParOnCur);
+ gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ();
SumDist += PonPrev.Distance(PonCur);
}
}
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);
+ gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ();
SumDist += Pprev.Distance(P);
if (NbSamples > 0)
{
(Ecurve.FirstParameter() + nbs*SampleOnCur) :
(Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur);
gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev);
- gp_Pnt PonCur = Ecurve.Value(ParOnCur);
+ gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ();
SumDist += PonPrev.Distance(PonCur);
}
}
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);
+ gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ();
SumDist += Pprev.Distance(P);
if (NbSamples > 0)
{
(Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur) :
(Ecurve.FirstParameter() + nbs*SampleOnCur);
gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev);
- gp_Pnt PonCur = Ecurve.Value(ParOnCur);
+ gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ();
SumDist += PonPrev.Distance(PonCur);
}
}
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);
+ gp_Pnt P = BRep_Tool::Pnt(V).XYZ() + Offset.XYZ();
SumDist += Pprev.Distance(P);
if (NbSamples > 0)
{
(Ecurve.FirstParameter() + (NbSamples-nbs)*SampleOnCur) :
(Ecurve.FirstParameter() + nbs*SampleOnCur);
gp_Pnt PonPrev = PrevEcurve.Value(ParOnPrev);
- gp_Pnt PonCur = Ecurve.Value(ParOnCur);
+ gp_Pnt PonCur = Ecurve.Value(ParOnCur).XYZ() + Offset.XYZ();
SumDist += PonPrev.Distance(PonCur);
}
}
newwire.Orientation( TopAbs_FORWARD );
myWork(i) = newwire;
}
+#ifdef DEB_EFV
-/*
for ( i=ideb; i<=myWork.Length(); i++) {
const TopoDS_Wire& wire = TopoDS::Wire(myWork(i));
if (!Vsuiv.IsNull()) Psuiv=BRep_Tool::Pnt(Vsuiv);
}
}
-*/
+#endif
// blocking sections ?
if (vClosed) myWork(myWork.Length()) = myWork(1);