0024157: Parallelization of assembly part of BO
[occt.git] / src / DrawTrSurf / DrawTrSurf_BezierCurve.cxx
1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2012 OPEN CASCADE SAS
3 //
4 // The content of this file is subject to the Open CASCADE Technology Public
5 // License Version 6.5 (the "License"). You may not use the content of this file
6 // except in compliance with the License. Please obtain a copy of the License
7 // at http://www.opencascade.org and read it completely before using this file.
8 //
9 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 //
12 // The Original Code and all software distributed under the License is
13 // distributed on an "AS IS" basis, without warranty of any kind, and the
14 // Initial Developer hereby disclaims all such warranties, including without
15 // limitation, any warranties of merchantability, fitness for a particular
16 // purpose or non-infringement. Please see the License for the specific terms
17 // and conditions governing the rights and limitations under the License.
18
19 #include <DrawTrSurf_BezierCurve.ixx>
20 #include <Geom_BezierCurve.hxx>
21 #include <gp_Pnt2d.hxx>
22 #include <TColgp_Array1OfPnt.hxx>
23 #include <TColStd_Array1OfReal.hxx>
24
25 DrawTrSurf_BezierCurve::DrawTrSurf_BezierCurve (
26    const Handle(Geom_BezierCurve)& C) 
27    : DrawTrSurf_Curve (C, Draw_vert, 16, 0.05, 1) {
28
29       drawPoles = Standard_True;
30       polesLook = Draw_rouge;
31    }
32
33
34
35    DrawTrSurf_BezierCurve::DrawTrSurf_BezierCurve (
36    const Handle(Geom_BezierCurve)& C, const Draw_Color& CurvColor,
37    const Draw_Color& PolesColor, const Standard_Boolean ShowPoles, 
38    const Standard_Integer Discret,const Standard_Real Deflection,
39    const Standard_Integer DrawMode ) : 
40    DrawTrSurf_Curve (C, CurvColor, Discret, Deflection, DrawMode) {
41
42       drawPoles = ShowPoles;
43       polesLook = PolesColor;
44   }
45
46
47    void DrawTrSurf_BezierCurve::DrawOn (Draw_Display& dis) const {
48
49
50     Handle(Geom_BezierCurve) C = Handle(Geom_BezierCurve)::DownCast(curv);
51
52     if (drawPoles) {
53       Standard_Integer NbPoles = C->NbPoles();
54       dis.SetColor(polesLook);
55       TColgp_Array1OfPnt CPoles (1, NbPoles);
56       C->Poles (CPoles);
57       dis.MoveTo(CPoles(1));
58       for (Standard_Integer i = 2; i <= NbPoles; i++) {
59         dis.DrawTo(CPoles(i));
60       }
61     }
62
63     DrawTrSurf_Curve::DrawOn(dis);
64   }
65
66
67
68    void DrawTrSurf_BezierCurve::ShowPoles () { drawPoles = Standard_True; }
69
70
71    void DrawTrSurf_BezierCurve::ClearPoles () { drawPoles = Standard_False; }
72
73
74    void DrawTrSurf_BezierCurve::FindPole (
75    const Standard_Real X, const Standard_Real Y, const Draw_Display& D,
76    const Standard_Real XPrec, Standard_Integer& Index) const {
77     
78      Handle(Geom_BezierCurve) bz = Handle(Geom_BezierCurve)::DownCast(curv);
79      gp_Pnt2d p1(X/D.Zoom(),Y/D.Zoom());
80      Standard_Real Prec = XPrec / D.Zoom();
81      Index++;
82      Standard_Integer NbPoles = bz->NbPoles();
83      while (Index <= NbPoles) {
84        if (D.Project(bz->Pole(Index)).Distance(p1) <= Prec)
85          return;
86        Index++;
87      }
88      Index = 0;
89    }
90
91
92 //=======================================================================
93 //function : Copy
94 //purpose  : 
95 //=======================================================================
96
97 Handle(Draw_Drawable3D)  DrawTrSurf_BezierCurve::Copy()const 
98 {
99   Handle(DrawTrSurf_BezierCurve) DC = new DrawTrSurf_BezierCurve
100     (Handle(Geom_BezierCurve)::DownCast(curv->Copy()),
101      look,polesLook,
102      drawPoles,
103      GetDiscretisation(),GetDeflection(),GetDrawMode());
104      
105   return DC;
106 }
107
108
109
110
111