7fd59977 |
1 | // File: TopOpeBRepTool_face.cxx |
2 | // Created: Thu Jan 14 10:20:08 1999 |
3 | // Author: Prestataire Xuan PHAM PHU |
4 | // <xpu@poulopox.paris1.matra-dtv.fr> |
5 | |
6 | |
7 | #include <TopOpeBRepTool_face.ixx> |
8 | #include <TopOpeBRepTool_define.hxx> |
9 | #include <Standard_Failure.hxx> |
10 | #include <TopoDS.hxx> |
11 | #include <BRep_Tool.hxx> |
12 | #include <Precision.hxx> |
13 | #include <BRep_Builder.hxx> |
14 | #include <TopoDS_Iterator.hxx> |
15 | #include <BRepTopAdaptor_FClass2d.hxx> |
16 | |
17 | //======================================================================= |
18 | //function : TopOpeBRepTool_face |
19 | //purpose : |
20 | //======================================================================= |
21 | |
22 | TopOpeBRepTool_face::TopOpeBRepTool_face() |
23 | { |
24 | } |
25 | |
26 | static void FUN_reverse(const TopoDS_Face& f, TopoDS_Face& frev) |
27 | { |
28 | BRep_Builder B; |
29 | TopoDS_Shape aLocalShape = f.EmptyCopied(); |
30 | frev = TopoDS::Face(aLocalShape); |
31 | // frev = TopoDS::Face(f.EmptyCopied()); |
32 | TopoDS_Iterator it(f); |
33 | while (it.More()) { |
34 | B.Add(frev,it.Value().Reversed()); |
35 | it.Next(); |
36 | } |
37 | } |
38 | |
39 | //======================================================================= |
40 | //function : Init |
41 | //purpose : |
42 | //======================================================================= |
43 | |
44 | Standard_Boolean TopOpeBRepTool_face::Init(const TopoDS_Wire& W, const TopoDS_Face& Fref) |
45 | { |
46 | myFfinite.Nullify(); |
47 | myW = W; |
48 | |
49 | // fres : |
50 | // TopoDS_Face fres; |
51 | // Handle(Geom_Surface) su = BRep_Tool::Surface(Fref); |
52 | // BRep_Builder B; B.MakeFace(fres,su,Precision::Confusion()); |
53 | TopoDS_Shape aLocalShape = Fref.EmptyCopied(); |
54 | TopoDS_Face fres = TopoDS::Face(aLocalShape); |
55 | // TopoDS_Face fres = TopoDS::Face(Fref.EmptyCopied()); |
56 | BRep_Builder B; B.Add(fres,W); |
57 | B.NaturalRestriction(fres,Standard_True); |
58 | |
59 | // <myfinite> : |
60 | BRepTopAdaptor_FClass2d FClass(fres,0.); |
61 | Standard_Boolean infinite = ( FClass.PerformInfinitePoint() == TopAbs_IN); |
62 | myfinite = !infinite; |
63 | |
64 | // <myFfinite> : |
65 | if (myfinite) myFfinite = fres; |
66 | else FUN_reverse(fres,myFfinite); |
67 | return Standard_True; |
68 | } |
69 | |
70 | //======================================================================= |
71 | //function : IsDone |
72 | //purpose : |
73 | //======================================================================= |
74 | |
75 | Standard_Boolean TopOpeBRepTool_face::IsDone() const |
76 | { |
77 | return (!myFfinite.IsNull()); |
78 | } |
79 | |
80 | //======================================================================= |
81 | //function : Finite |
82 | //purpose : |
83 | //======================================================================= |
84 | |
85 | Standard_Boolean TopOpeBRepTool_face::Finite() const |
86 | { |
87 | if (!IsDone()) Standard_Failure::Raise("TopOpeBRepTool_face NOT DONE"); |
88 | return myfinite; |
89 | } |
90 | |
91 | //======================================================================= |
92 | //function : Ffinite |
93 | //purpose : |
94 | //======================================================================= |
95 | |
96 | const TopoDS_Face& TopOpeBRepTool_face::Ffinite() const |
97 | { |
98 | if (!IsDone()) Standard_Failure::Raise("TopOpeBRepTool_face NOT DONE"); |
99 | return myFfinite; |
100 | } |
101 | |
102 | //======================================================================= |
103 | //function : W |
104 | //purpose : |
105 | //======================================================================= |
106 | |
107 | const TopoDS_Wire& TopOpeBRepTool_face::W() const |
108 | { |
109 | return myW; |
110 | } |
111 | |
112 | //======================================================================= |
113 | //function : TopoDS_Face& |
114 | //purpose : |
115 | //======================================================================= |
116 | |
117 | TopoDS_Face TopOpeBRepTool_face::RealF() const |
118 | { |
119 | if (myfinite) return myFfinite; |
120 | TopoDS_Face realf; FUN_reverse(myFfinite,realf); |
121 | return realf; |
122 | } |
123 | |
124 | |