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