-// Copyright (C) 2007-2015 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
-//
+// Copyright (C) 2014-2015 EDF-R&D
// 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
#include <TopExp.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Vertex.hxx>
+#include <gp_XYZ.hxx>
+#include <Adaptor3d_Curve.hxx>
class TopoDS_Wire;
-//! The type represents a 1 monifold connected topo curve
+//! Get the parameter of the projected point on the curve, and return the distance of the original point
+double ProjectPointToCurve(const gp_XYZ& thePoint,
+ const Adaptor3d_Curve& theCurve,
+ double& theParameter);
+
+//! The type represents a 1 manifold connected topo curve
//! with forward orientation.
class HYDROData_TopoCurve
{
HYDROData_TopoCurve(const TopoDS_Edge& theEdge) {myEdges.push_back(theEdge);}
//! Initializes the curve by the wire.
- //! Returns 'false' if the wire is not 1 monifold or
+ //! Returns 'false' if the wire is not 1 manifold or
//! is disconnected or is empty.
HYDRODATA_EXPORT bool Initialize(const TopoDS_Wire& theWire);
//! Returns the curve edges.
const std::list<TopoDS_Edge>& Edges() const {return myEdges;}
+ //! Returns the curve edges.
+ std::list<TopoDS_Edge>& Edges() {return myEdges;}
+
//! Cuts the curve in the given parameter of the given edge and
//! fills the cut part.
- HYDRODATA_EXPORT void Cut(
+ //! Returns 'true' if:
+ //! - the curve is open and was split into two parts or
+ //! - the curve is closed and was cut into an open curve.
+ HYDRODATA_EXPORT bool Cut(
const std::list<TopoDS_Edge>::iterator& theEdgePosition,
const double theParameter,
HYDROData_TopoCurve& theCurve);
//! Cuts the curve at the parameters.
//! Each parameter vector list corresponds to the curve edge and
//! is ordered in the ascending order.
- HYDRODATA_EXPORT void Cut(
+ HYDRODATA_EXPORT bool Cut(
const std::deque<std::list<double> >& theParameters,
std::deque<HYDROData_TopoCurve>& theCurves) const;
std::deque<HYDROData_TopoCurve>& theCurves)
{
HYDROData_TopoCurve aCurve;
- if (!aCurve.Initialize(theWire))
+ if (aCurve.Initialize(theWire))
{
return aCurve.Connect(theTolerance, theCurves);
}
//! Creates a B-spline piecewise curve corresponding to the curve
//! and using the deflection.
- HYDRODATA_EXPORT bool BSplinePiecewiseCurve(
+ //! Returns the piece count.
+ //! Returns 0 in the case of any error.
+ HYDRODATA_EXPORT int BSplinePiecewiseCurve(
const double theDeflection, HYDROData_TopoCurve& theCurve) const;
//! Calculates the values of the curve in its knots.
- //! Returns 'false' if a curve edge has a nonidentity location or a nonforward
+ //! Returns 'false' if a curve edge has a non-identity location or a non-forward
//! orientation or has no a B-spline representation.
- HYDRODATA_EXPORT bool ValuesInKnots(std::deque<gp_XYZ>& theValues) const;
+ HYDRODATA_EXPORT bool ValuesInKnots(std::list<gp_XYZ>& theValues) const;
private:
//! Transfers the edges of the parameter to this curve end.