-// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2013-2022 CEA/DEN, EDF R&D, OPEN CASCADE
//
// 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.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <gp_Pnt.hxx>
#include <Geom_Curve.hxx>
#include <TopoDS_Shape.hxx>
+#include <TopoDS_Wire.hxx>
#include <TColgp_HArray1OfPnt.hxx>
+#include <Geom_BSplineCurve.hxx>
+#include <QColor>
#include <list>
#include <vector> // TODO: remove
+#include <NCollection_IndexedDataMap.hxx>
class CurveCreator_Curve;
Handle(V3d_View) theView,
int& x, int& y );
+ /**
+ * Generates a random color
+ */
+ CURVECREATOR_EXPORT static Quantity_Color getRandColor();
+
+ /**
+ * Convert QColor to Quantity_Color
+ */
+ CURVECREATOR_EXPORT static Quantity_Color colorConv(QColor color);
+
+ /**
+ * Convert Quantity_Color to QColor
+ */
+ CURVECREATOR_EXPORT static QColor colorConv(Quantity_Color color);
+
/*!
* \brief Returns the point clicked in 3D view.
*
* Generates shape on the curve
* \param theCurve a curve object, that contains data
* \param theShape a generated shape
+ * \param Sect2Shape optional out map: section to constructed shape (wire+vertices)
*/
CURVECREATOR_EXPORT static void constructShape( const CurveCreator_ICurve* theCurve,
- TopoDS_Shape& theShape );
+ TopoDS_Shape& theShape,
+ NCollection_IndexedDataMap<int, TopoDS_Shape>* Sect2Shape = NULL);
/**
* Generates a curve from a shape.
gp_Pnt& thePoint, gp_Pnt& thePoint1,
gp_Pnt& thePoint2 );
+ /**
+ * The algorithm builds the cubic B-spline passing through the points that the
+ * tangent vector in each given point P is calculated by the following way:
+ * if point P is preceded by a point A and is followed by a point B then
+ * the tangent vector is equal to (P - A) / |P - A| + (B - P) / |B - P|;
+ * if point P is preceded by a point A but is not followed by any point then
+ * the tangent vector is equal to P - A;
+ * if point P is followed by a point B but is not preceded by any point then
+ * the tangent vector is equal to B - P.
+ */
+ CURVECREATOR_EXPORT static bool constructBSpline( const Handle(TColgp_HArray1OfPnt)& thePoints,
+ const Standard_Boolean theIsClosed,
+ Handle(Geom_BSplineCurve)& theBSpline );
+
+ /**
+ * Constructs the wire corresponding to the section.
+ */
+ CURVECREATOR_EXPORT static TopoDS_Wire ConstructWire(
+ Handle(TColgp_HArray1OfPnt) thePoints,
+ const bool theIsPolyline,
+ const bool theIsClosed);
+
protected:
/*
* Returns whether the clicked point belong to the curve or has a very near projection
* \param IsBSpline BSpline flag. Output parameter.
* \return the array of points. Null handle in case of failure.
*/
- static Handle_TColgp_HArray1OfPnt getPoints
+ static Handle(TColgp_HArray1OfPnt) getPoints
(const TopoDS_Shape &theShape,
bool &IsClosed,
bool &IsBSpline);
* \param thePlnStatus the current status on input. It can be modified on
* output.
*/
- static void FindPlane(const Handle_TColgp_HArray1OfPnt &thePoints,
+ static void FindPlane(const Handle(TColgp_HArray1OfPnt) &thePoints,
gp_Pln &thePlane,
Standard_Integer &thePlnStatus);