7fd59977 |
1 | -- File: IGESSolid_TopoBuilder.cdl |
2 | -- Created: Wed Nov 16 16:05:42 1994 |
3 | -- Author: Christian CAILLET |
4 | -- <cky@stylox> |
5 | ---Copyright: Matra Datavision 1994 |
6 | |
7 | |
8 | class TopoBuilder from IGESSolid |
9 | |
10 | ---Purpose : This class manages the creation of an IGES Topologic entity |
11 | -- (BREP : ManifoldSolid, Shell, Face) |
12 | -- This includes definiting of Vertex and Edge Lists, |
13 | -- building of Edges and Loops |
14 | |
15 | uses HSequenceOfInteger, HSequenceOfTransient, |
16 | XYZ, HSequenceOfXYZ, IGESEntity, |
17 | VertexList, EdgeList, Loop, Face, Shell, ManifoldSolid |
18 | |
19 | raises DomainError |
20 | |
21 | is |
22 | |
23 | Create returns TopoBuilder; |
24 | ---Purpose : Creates an empty TopoBuilder |
25 | -- This creates also a unique VertexList and a unique EdgeList, |
26 | -- empty, but which can be referenced from starting |
27 | |
28 | Clear (me : in out) is static; |
29 | ---Purpose : Resets the TopoBuilder for an entirely new operation |
30 | -- (with a new EdgeList, a new VertexList, new Shells, ...) |
31 | |
32 | AddVertex (me : in out; val : XYZ) is static; |
33 | ---Purpose : Adds a Vertex to the VertexList |
34 | |
35 | NbVertices (me) returns Integer is static; |
36 | ---Purpose : Returns the count of already recorded Vertices |
37 | |
38 | Vertex (me; num : Integer) returns XYZ; |
39 | ---Purpose : Returns a Vertex, given its rank |
40 | ---C++ : return const & |
41 | |
42 | VertexList (me) returns mutable VertexList; |
43 | ---Purpose : Returns the VertexList. It can be referenced, but it remains |
44 | -- empty until call to EndShell or EndSolid |
45 | |
46 | AddEdge (me : in out; curve : mutable IGESEntity; vstart, vend : Integer) |
47 | ---Purpose : Adds an Edge (3D) to the EdgeList, defined by a Curve and |
48 | -- two number of Vertex, for start and end |
49 | raises DomainError is static; |
50 | -- Error if curve is Null or if vstart or vend is zero |
51 | |
52 | NbEdges (me) returns Integer is static; |
53 | ---Purpose : Returns the count of recorded Edges (3D) |
54 | |
55 | Edge (me; num : Integer; curve : out mutable IGESEntity; |
56 | vstart, vend : out Integer) is static; |
57 | ---Purpose : Returns the definition of an Edge (3D) given its rank |
58 | |
59 | EdgeList (me) returns mutable EdgeList; |
60 | ---Purpose : Returns the EdgeList. It can be referenced, but it remains |
61 | -- empty until call to EndShell or EndSolid |
62 | |
63 | EndLists (me : in out) is static protected; |
64 | ---Purpose : Closes the definition of Vertex and Edge Lists |
65 | -- Warning : Called only by EndSimpleShell and EndSolid |
66 | |
67 | |
68 | MakeLoop (me : in out) is static; |
69 | ---Purpose : Begins the definition of a new Loop : it is the Current Loop |
70 | -- All Edges (UV) defined by MakeEdge/EndEdge will be added in it |
71 | -- The Loop can then be referenced but is empty. It will be |
72 | -- filled with its Edges(UV) by EndLoop (from SetOuter/AddInner) |
73 | |
74 | MakeEdge (me : in out; edgetype, edge3d, orientation : Integer) |
75 | ---Purpose : Defines an Edge(UV), to be added in the current Loop by EndEdge |
76 | -- <edgetype> gives the type of the edge |
77 | -- <edge3d> identifies the Edge(3D) used as support |
78 | -- The EdgeList is allways the current one |
79 | -- <orientation gives the orientation flag |
80 | -- It is then necessary to : |
81 | -- - give the parametric curves |
82 | -- - close the definition of this edge(UV) by EndEdge, else |
83 | -- the next call to MakeEdge will erase this one |
84 | raises DomainError is static; |
85 | -- Error if <edge3d> is null or out of range, or if |
86 | -- <edgetype> or <orientation> has not admitted value, |
87 | -- or if no current Loop is defined |
88 | |
89 | AddCurveUV (me : in out; curve : mutable IGESEntity; iso : Integer) |
90 | ---Purpose : Adds a Parametric Curve (UV) to the current Edge(UV) |
91 | raises DomainError is static; |
92 | -- Error if curve is Null or not of an admitted type, or if |
93 | -- no current Edge(UV) is defined |
94 | |
95 | EndEdge (me : in out) is static; |
96 | ---Purpose : Closes the definition of an Edge(UV) and adds it to the |
97 | -- current Loop |
98 | |
99 | EndLoop (me : in out) is static protected; |
100 | ---Purpose : Closes the definition of a Loop and fills it |
101 | -- Warning : EndLoop should not be called directly but through |
102 | -- SetOuter or AddInner, which work on the current Face |
103 | |
104 | MakeFace (me : in out; surface : mutable IGESEntity) |
105 | ---Purpose : Begins the definition of a new Face, on a surface |
106 | -- All Loops defined by MakeLoop will be added in it, according |
107 | -- the closing call : SetOuter for the Outer Loop (by default, |
108 | -- if SetOuter is not called, no OuterLoop is defined); |
109 | -- AddInner for the list of Inner Loops (there can be none) |
110 | raises DomainError is static; |
111 | -- Error if <surface> is Null or not of an admitted type |
112 | |
113 | SetOuter (me : in out) is static; |
114 | ---Purpose : Closes the current Loop and sets it Loop as Outer Loop. If no |
115 | -- current Loop has yet been defined, does nothing. |
116 | |
117 | AddInner (me : in out) is static; |
118 | ---Purpose : Closes the current Loop and adds it to the list of Inner Loops |
119 | -- for the current Face |
120 | |
121 | EndFace (me : in out; orientation : Integer) is static; |
122 | ---Purpose : Closes the definition of the current Face, fills it and adds |
123 | -- it to the current Shell with an orientation flag (0/1) |
124 | |
125 | MakeShell (me : in out) is static; |
126 | ---Purpose : Begins the definition of a new Shell (either Simple or in a |
127 | -- Solid) |
128 | |
129 | EndShell (me : in out) is static protected; |
130 | ---Purpose : Closes the definition of the current Shell |
131 | -- Warning : EndShell should not be called directly but through |
132 | -- EndSimpleShell (for a simple Shell), SetMainShell (for main |
133 | -- Shell of a Solid) or AddVoidShell (to a Solid) |
134 | |
135 | EndSimpleShell (me : in out) is static; |
136 | ---Purpose : Closes the whole definition as that of a simple Shell |
137 | |
138 | SetMainShell (me : in out; orientation : Integer) is static; |
139 | ---Purpose : Closes the definition of the current Shell as for the Main |
140 | -- Shell of a Solid, with an orientation flag (0/1) |
141 | |
142 | AddVoidShell (me : in out; orientation : Integer) is static; |
143 | ---Purpose : Closes the definition of the current Shell and adds it to the |
144 | -- list of Void Shells of a Solid, with an orientation flag (0/1) |
145 | |
146 | EndSolid (me : in out) is static; |
147 | ---Purpose : Closes the whole definition as that of a ManifoldSolid |
148 | -- Its call is exclusive from that of EndSimpleShell |
149 | |
150 | Shell (me) returns mutable Shell is static; |
151 | ---Purpose : Returns the current Shell. The current Shell is created empty |
152 | -- by MakeShell and filled by EndShell |
153 | |
154 | Solid (me) returns mutable ManifoldSolid is static; |
155 | ---Purpose : Returns the current ManifoldSolid. It is created empty by |
156 | -- Create and filled by EndSolid |
157 | |
158 | fields |
159 | |
160 | thesolid : ManifoldSolid; -- current Solid |
161 | themains : Shell; |
162 | themflag : Integer; |
163 | thevoids : HSequenceOfTransient; |
164 | thevflag : HSequenceOfInteger; |
165 | theshell : Shell; -- current Shell |
166 | thefaces : HSequenceOfTransient; |
167 | thefflag : HSequenceOfInteger; |
168 | theface : Face; -- current Face |
169 | thesurf : IGESEntity; |
170 | theouter : Integer; |
171 | theinner : HSequenceOfTransient; |
172 | |
173 | theloop : Loop; -- current Loop |
174 | theetype : HSequenceOfInteger; |
175 | thee3d : HSequenceOfInteger; |
176 | theeflag : HSequenceOfInteger; |
177 | theeuv : HSequenceOfTransient; -- (for Edges UV) |
178 | theisol : HSequenceOfInteger; |
179 | thecuruv : HSequenceOfTransient; -- current Edge(UV) |
180 | theiso : HSequenceOfTransient; |
181 | |
182 | theedgel : EdgeList; |
183 | thecur3d : HSequenceOfTransient; |
184 | thevstar : HSequenceOfInteger; |
185 | thevend : HSequenceOfInteger; |
186 | |
187 | thevertl : VertexList; |
188 | thepoint : HSequenceOfXYZ; |
189 | |
190 | end TopoBuilder; |