0027468: Incorrect processing of some cases by HLR algorithm
[occt.git] / src / HLRBRep / HLRBRep_CurveTool.cxx
CommitLineData
b311480e 1// Created on: 1995-07-17
2// Created by: Modelistation
3// Copyright (c) 1995-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
42cf5bc1 17
cb389a77 18#include <Geom2d_BezierCurve.hxx>
19#include <Geom2d_BSplineCurve.hxx>
42cf5bc1 20#include <GeomAbs_CurveType.hxx>
21#include <GeomAbs_Shape.hxx>
22#include <gp_Pnt2d.hxx>
23#include <gp_Vec2d.hxx>
24#include <HLRBRep_Curve.hxx>
25#include <HLRBRep_CurveTool.hxx>
26#include <Standard_DomainError.hxx>
27#include <Standard_NoSuchObject.hxx>
28#include <Standard_OutOfRange.hxx>
7fd59977 29#include <TColStd_Array1OfReal.hxx>
30
31//=======================================================================
32//function : NbSamples
33//purpose :
34//=======================================================================
7fd59977 35Standard_Integer
36HLRBRep_CurveTool::NbSamples (const Standard_Address C)
37{
38 GeomAbs_CurveType typC = ((HLRBRep_Curve *)C)->GetType();
39 static Standard_Real nbsOther = 10.0;
40 Standard_Real nbs = nbsOther;
41
42 if(typC == GeomAbs_Line)
43 nbs = 2;
44 else if(typC == GeomAbs_BezierCurve)
45 nbs = 3 + ((HLRBRep_Curve *)C)->NbPoles();
46 else if(typC == GeomAbs_BSplineCurve) {
47 nbs = ((HLRBRep_Curve *)C)->NbKnots();
48 nbs*= ((HLRBRep_Curve *)C)->Degree();
49 if(nbs < 2.0) nbs=2;
50 }
51 if(nbs>50)
52 nbs = 50;
53 return((Standard_Integer)nbs);
54}
55
56//=======================================================================
57//function : NbSamples
58//purpose :
59//=======================================================================
60
61Standard_Integer
62HLRBRep_CurveTool::NbSamples (const Standard_Address C,
c59fcd11 63 const Standard_Real u1,
64 const Standard_Real u2)
7fd59977 65{
66 GeomAbs_CurveType typC = ((HLRBRep_Curve *)C)->GetType();
67 static Standard_Real nbsOther = 10.0;
68 Standard_Real nbs = nbsOther;
69
70 if(typC == GeomAbs_Line)
71 nbs = 2;
72 else if(typC == GeomAbs_BezierCurve)
73 nbs = 3 + ((HLRBRep_Curve *)C)->NbPoles();
74 else if(typC == GeomAbs_BSplineCurve) {
c59fcd11 75 Handle(Geom_Curve) aCurve = ((HLRBRep_Curve *)C)->Curve().Curve().Curve();
76 GeomAdaptor_Curve GAcurve(aCurve, u1, u2);
77 nbs = GAcurve.NbIntervals(GeomAbs_CN) + 1;
7fd59977 78 nbs*= ((HLRBRep_Curve *)C)->Degree();
79 if(nbs < 2.0) nbs=2;
80 }
81 if(nbs>50)
82 nbs = 50;
83 return((Standard_Integer)nbs);
84}