0024157: Parallelization of assembly part of BO
[occt.git] / src / StdPrs / StdPrs_ToolRFace.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 <StdPrs_ToolRFace.ixx>
20 #include <Geom2d_TrimmedCurve.hxx>
21 #include <BRep_Tool.hxx>
22 #include <TopoDS.hxx>
23 #include <Adaptor2d_Curve2d.hxx>
24
25
26 #define OCC316
27
28 //=======================================================================
29 //function : StdPrs_ToolRFace
30 //purpose  : 
31 //=======================================================================
32
33 StdPrs_ToolRFace::StdPrs_ToolRFace()
34 {
35 }
36
37 //=======================================================================
38 //function : StdPrs_ToolRFace
39 //purpose  : 
40 //=======================================================================
41
42 StdPrs_ToolRFace::StdPrs_ToolRFace(const Handle(BRepAdaptor_HSurface)& aSurface) :
43        myFace(((BRepAdaptor_Surface*)&(aSurface->Surface()))->Face())
44 {
45   myFace.Orientation(TopAbs_FORWARD);
46 }
47
48 //=======================================================================
49 //function : IsOriented
50 //purpose  : 
51 //=======================================================================
52
53 Standard_Boolean StdPrs_ToolRFace::IsOriented () const {
54   
55   return Standard_True;
56
57 }
58
59 //=======================================================================
60 //function : Init
61 //purpose  : 
62 //=======================================================================
63
64 void StdPrs_ToolRFace::Init() 
65 {
66   myExplorer.Init(myFace,TopAbs_EDGE);
67   if (myExplorer.More()) {
68     Standard_Real U1,U2;
69     const Handle(Geom2d_Curve)& C = 
70       BRep_Tool::CurveOnSurface(TopoDS::Edge(myExplorer.Current()),
71                                 myFace,
72                                 U1,U2);
73     DummyCurve.Load(C,U1,U2);
74   }
75 }
76
77 //=======================================================================
78 //function : More
79 //purpose  : 
80 //=======================================================================
81
82 Standard_Boolean StdPrs_ToolRFace::More() const
83 {
84   return myExplorer.More();
85 }
86
87 //=======================================================================
88 //function : Next
89 //purpose  : 
90 //=======================================================================
91
92 void StdPrs_ToolRFace::Next()
93 {
94   myExplorer.Next();
95
96   if (myExplorer.More()) {
97     // skip INTERNAL and EXTERNAL edges
98     while (myExplorer.More() && (myExplorer.Current().Orientation() == TopAbs_INTERNAL 
99                               || myExplorer.Current().Orientation() == TopAbs_EXTERNAL)) 
100         myExplorer.Next();
101     if (myExplorer.More()) {
102       Standard_Real U1,U2;
103       const Handle(Geom2d_Curve)& C = 
104         BRep_Tool::CurveOnSurface(TopoDS::Edge(myExplorer.Current()),
105                                   myFace,
106                                   U1,U2);
107 #ifdef OCC316
108       if ( !C.IsNull() )
109 #endif
110         DummyCurve.Load(C,U1,U2);
111     }
112   }
113 }
114
115 //=======================================================================
116 //function : Value
117 //purpose  : 
118 //=======================================================================
119
120 Adaptor2d_Curve2dPtr StdPrs_ToolRFace::Value() const
121 {
122   return (Adaptor2d_Curve2dPtr)&DummyCurve;
123 }
124
125 //=======================================================================
126 //function : Orientation
127 //purpose  : 
128 //=======================================================================
129
130 TopAbs_Orientation StdPrs_ToolRFace::Orientation () const {
131   return myExplorer.Current().Orientation();
132 }
133