]> gitweb.factorcode.org Git - factor.git/blob - unmaintained/euler/b-rep/examples/examples.factor
096af775e3bd9373a9978a7de3391eb76153d6dd
[factor.git] / unmaintained / euler / b-rep / examples / examples.factor
1 USING: accessors assocs euler.b-rep game.models.half-edge
2 kernel locals math.vectors.simd.cords sequences ;
3 IN: euler.b-rep.examples
4
5 CONSTANT: valid-cube-b-rep
6     T{ b-rep
7         { faces {
8             T{ face { edge  0 } { next-ring f } { base-face 0 } }
9             T{ face { edge  4 } { next-ring f } { base-face 1 } }
10             T{ face { edge  8 } { next-ring f } { base-face 2 } }
11             T{ face { edge 12 } { next-ring f } { base-face 3 } }
12             T{ face { edge 16 } { next-ring f } { base-face 4 } }
13             T{ face { edge 20 } { next-ring f } { base-face 5 } }
14         } }
15         { edges {
16             T{ b-edge { face 0 } { vertex  0 } { opposite-edge  6 } { next-edge  1 } }
17             T{ b-edge { face 0 } { vertex  1 } { opposite-edge 19 } { next-edge  2 } }
18             T{ b-edge { face 0 } { vertex  3 } { opposite-edge 12 } { next-edge  3 } }
19             T{ b-edge { face 0 } { vertex  2 } { opposite-edge 21 } { next-edge  0 } }
20
21             T{ b-edge { face 1 } { vertex  4 } { opposite-edge 10 } { next-edge  5 } }
22             T{ b-edge { face 1 } { vertex  5 } { opposite-edge 16 } { next-edge  6 } }
23             T{ b-edge { face 1 } { vertex  1 } { opposite-edge  0 } { next-edge  7 } }
24             T{ b-edge { face 1 } { vertex  0 } { opposite-edge 20 } { next-edge  4 } }
25
26             T{ b-edge { face 2 } { vertex  6 } { opposite-edge 14 } { next-edge  9 } }
27             T{ b-edge { face 2 } { vertex  7 } { opposite-edge 17 } { next-edge 10 } }
28             T{ b-edge { face 2 } { vertex  5 } { opposite-edge  4 } { next-edge 11 } }
29             T{ b-edge { face 2 } { vertex  4 } { opposite-edge 23 } { next-edge  8 } }
30
31             T{ b-edge { face 3 } { vertex  2 } { opposite-edge  2 } { next-edge 13 } }
32             T{ b-edge { face 3 } { vertex  3 } { opposite-edge 18 } { next-edge 14 } }
33             T{ b-edge { face 3 } { vertex  7 } { opposite-edge  8 } { next-edge 15 } }
34             T{ b-edge { face 3 } { vertex  6 } { opposite-edge 22 } { next-edge 12 } }
35
36             T{ b-edge { face 4 } { vertex  1 } { opposite-edge  5 } { next-edge 17 } }
37             T{ b-edge { face 4 } { vertex  5 } { opposite-edge  9 } { next-edge 18 } }
38             T{ b-edge { face 4 } { vertex  7 } { opposite-edge 13 } { next-edge 19 } }
39             T{ b-edge { face 4 } { vertex  3 } { opposite-edge  1 } { next-edge 16 } }
40
41             T{ b-edge { face 5 } { vertex  4 } { opposite-edge  7 } { next-edge 21 } }
42             T{ b-edge { face 5 } { vertex  0 } { opposite-edge  3 } { next-edge 22 } }
43             T{ b-edge { face 5 } { vertex  2 } { opposite-edge 15 } { next-edge 23 } }
44             T{ b-edge { face 5 } { vertex  6 } { opposite-edge 11 } { next-edge 20 } }
45         } }
46         { vertices {
47             T{ vertex { position double-4{ -1.0 -1.0 -1.0  0.0 } } { edge 0 } }
48             T{ vertex { position double-4{ -1.0  1.0 -1.0  0.0 } } { edge 1 } }
49             T{ vertex { position double-4{  1.0 -1.0 -1.0  0.0 } } { edge 3 } }
50             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 2 } }
51             T{ vertex { position double-4{ -1.0 -1.0  1.0  0.0 } } { edge 4 } }
52             T{ vertex { position double-4{ -1.0  1.0  1.0  0.0 } } { edge 5 } }
53             T{ vertex { position double-4{  1.0 -1.0  1.0  0.0 } } { edge 8 } }
54             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 9 } }
55         } }
56     }
57
58 CONSTANT: missing-face-cube-b-rep
59     T{ b-rep
60         { faces {
61             T{ face { edge  0 } { next-ring f } { base-face 0 } }
62             T{ face { edge  4 } { next-ring f } { base-face 1 } }
63             T{ face { edge  8 } { next-ring f } { base-face 2 } }
64             T{ face { edge 12 } { next-ring f } { base-face 3 } }
65             T{ face { edge 16 } { next-ring f } { base-face 4 } }
66         } }
67         { edges {
68             T{ b-edge { face 0 } { vertex  0 } { opposite-edge  6 } { next-edge  1 } }
69             T{ b-edge { face 0 } { vertex  1 } { opposite-edge 19 } { next-edge  2 } }
70             T{ b-edge { face 0 } { vertex  3 } { opposite-edge 12 } { next-edge  3 } }
71             T{ b-edge { face 0 } { vertex  2 } { opposite-edge  f } { next-edge  0 } }
72
73             T{ b-edge { face 1 } { vertex  4 } { opposite-edge 10 } { next-edge  5 } }
74             T{ b-edge { face 1 } { vertex  5 } { opposite-edge 16 } { next-edge  6 } }
75             T{ b-edge { face 1 } { vertex  1 } { opposite-edge  0 } { next-edge  7 } }
76             T{ b-edge { face 1 } { vertex  0 } { opposite-edge  f } { next-edge  4 } }
77
78             T{ b-edge { face 2 } { vertex  6 } { opposite-edge 14 } { next-edge  9 } }
79             T{ b-edge { face 2 } { vertex  7 } { opposite-edge 17 } { next-edge 10 } }
80             T{ b-edge { face 2 } { vertex  5 } { opposite-edge  4 } { next-edge 11 } }
81             T{ b-edge { face 2 } { vertex  4 } { opposite-edge  f } { next-edge  8 } }
82
83             T{ b-edge { face 3 } { vertex  2 } { opposite-edge  2 } { next-edge 13 } }
84             T{ b-edge { face 3 } { vertex  3 } { opposite-edge  f } { next-edge 14 } }
85             T{ b-edge { face 3 } { vertex  7 } { opposite-edge  8 } { next-edge 15 } }
86             T{ b-edge { face 3 } { vertex  6 } { opposite-edge 18 } { next-edge 12 } }
87
88             T{ b-edge { face 4 } { vertex  1 } { opposite-edge  5 } { next-edge 17 } }
89             T{ b-edge { face 4 } { vertex  5 } { opposite-edge  9 } { next-edge 18 } }
90             T{ b-edge { face 4 } { vertex  7 } { opposite-edge 13 } { next-edge 19 } }
91             T{ b-edge { face 4 } { vertex  3 } { opposite-edge  1 } { next-edge 16 } }
92         } }
93         { vertices {
94             T{ vertex { position double-4{ -1.0 -1.0 -1.0  0.0 } } { edge 0 } }
95             T{ vertex { position double-4{ -1.0  1.0 -1.0  0.0 } } { edge 1 } }
96             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 3 } }
97             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 2 } }
98             T{ vertex { position double-4{ -1.0 -1.0  1.0  0.0 } } { edge 4 } }
99             T{ vertex { position double-4{ -1.0  1.0  1.0  0.0 } } { edge 5 } }
100             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 8 } }
101             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 9 } }
102         } }
103     }
104
105 CONSTANT: non-quad-face-cube-b-rep
106     T{ b-rep
107         { faces {
108             T{ face { edge  0 } { next-ring f } { base-face 0 } }
109             T{ face { edge  4 } { next-ring f } { base-face 1 } }
110             T{ face { edge  8 } { next-ring f } { base-face 2 } }
111             T{ face { edge 12 } { next-ring f } { base-face 3 } }
112             T{ face { edge 18 } { next-ring f } { base-face 4 } }
113         } }
114         { edges {
115             T{ b-edge { face 0 } { vertex  0 } { opposite-edge  6 } { next-edge  1 } }
116             T{ b-edge { face 0 } { vertex  1 } { opposite-edge 19 } { next-edge  2 } }
117             T{ b-edge { face 0 } { vertex  3 } { opposite-edge 12 } { next-edge  3 } }
118             T{ b-edge { face 0 } { vertex  2 } { opposite-edge 19 } { next-edge  0 } }
119
120             T{ b-edge { face 1 } { vertex  4 } { opposite-edge 10 } { next-edge  5 } }
121             T{ b-edge { face 1 } { vertex  5 } { opposite-edge 16 } { next-edge  6 } }
122             T{ b-edge { face 1 } { vertex  1 } { opposite-edge  0 } { next-edge  7 } }
123             T{ b-edge { face 1 } { vertex  0 } { opposite-edge 18 } { next-edge  4 } }
124
125             T{ b-edge { face 2 } { vertex  6 } { opposite-edge 14 } { next-edge  9 } }
126             T{ b-edge { face 2 } { vertex  7 } { opposite-edge 17 } { next-edge 10 } }
127             T{ b-edge { face 2 } { vertex  5 } { opposite-edge  4 } { next-edge 11 } }
128             T{ b-edge { face 2 } { vertex  4 } { opposite-edge 21 } { next-edge  8 } }
129
130             T{ b-edge { face 3 } { vertex  2 } { opposite-edge  2 } { next-edge 13 } }
131             T{ b-edge { face 3 } { vertex  3 } { opposite-edge 20 } { next-edge 16 } }
132             T{ b-edge { face 3 } { vertex  7 } { opposite-edge  8 } { next-edge 15 } }
133             T{ b-edge { face 3 } { vertex  6 } { opposite-edge 18 } { next-edge 12 } }
134             T{ b-edge { face 3 } { vertex  1 } { opposite-edge  5 } { next-edge 17 } }
135             T{ b-edge { face 3 } { vertex  5 } { opposite-edge  9 } { next-edge 14 } }
136
137             T{ b-edge { face 4 } { vertex  4 } { opposite-edge  7 } { next-edge 19 } }
138             T{ b-edge { face 4 } { vertex  0 } { opposite-edge  3 } { next-edge 20 } }
139             T{ b-edge { face 4 } { vertex  2 } { opposite-edge 15 } { next-edge 21 } }
140             T{ b-edge { face 4 } { vertex  6 } { opposite-edge 11 } { next-edge 18 } }
141         } }
142         { vertices {
143             T{ vertex { position double-4{ -1.0 -1.0 -1.0  0.0 } } { edge 0 } }
144             T{ vertex { position double-4{ -1.0  1.0 -1.0  0.0 } } { edge 1 } }
145             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 3 } }
146             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 2 } }
147             T{ vertex { position double-4{ -1.0 -1.0  1.0  0.0 } } { edge 4 } }
148             T{ vertex { position double-4{ -1.0  1.0  1.0  0.0 } } { edge 5 } }
149             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 8 } }
150             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 9 } }
151         } }
152     }
153
154 CONSTANT: multi-ringed-face-cube-b-rep
155     T{ b-rep
156         { faces {
157             T{ face { edge  0 } { next-ring f } { base-face 0 } }
158             T{ face { edge  4 } { next-ring f } { base-face 1 } }
159             T{ face { edge  8 } { next-ring f } { base-face 2 } }
160             T{ face { edge 12 } { next-ring f } { base-face 3 } }
161             T{ face { edge 16 } { next-ring f } { base-face 4 } }
162             T{ face { edge 20 } { next-ring 6 } { base-face 5 } }
163             T{ face { edge 24 } { next-ring f } { base-face 5 } }
164         } }
165         { edges {
166             T{ b-edge { face 0 } { vertex  0 } { opposite-edge  6 } { next-edge  1 } }
167             T{ b-edge { face 0 } { vertex  1 } { opposite-edge 19 } { next-edge  2 } }
168             T{ b-edge { face 0 } { vertex  3 } { opposite-edge 12 } { next-edge  3 } }
169             T{ b-edge { face 0 } { vertex  2 } { opposite-edge 21 } { next-edge  0 } }
170
171             T{ b-edge { face 1 } { vertex  4 } { opposite-edge 10 } { next-edge  5 } }
172             T{ b-edge { face 1 } { vertex  5 } { opposite-edge 16 } { next-edge  6 } }
173             T{ b-edge { face 1 } { vertex  1 } { opposite-edge  0 } { next-edge  7 } }
174             T{ b-edge { face 1 } { vertex  0 } { opposite-edge 20 } { next-edge  4 } }
175
176             T{ b-edge { face 2 } { vertex  6 } { opposite-edge 14 } { next-edge  9 } }
177             T{ b-edge { face 2 } { vertex  7 } { opposite-edge 17 } { next-edge 10 } }
178             T{ b-edge { face 2 } { vertex  5 } { opposite-edge  4 } { next-edge 11 } }
179             T{ b-edge { face 2 } { vertex  4 } { opposite-edge 23 } { next-edge  8 } }
180
181             T{ b-edge { face 3 } { vertex  2 } { opposite-edge  2 } { next-edge 13 } }
182             T{ b-edge { face 3 } { vertex  3 } { opposite-edge 22 } { next-edge 14 } }
183             T{ b-edge { face 3 } { vertex  7 } { opposite-edge  8 } { next-edge 15 } }
184             T{ b-edge { face 3 } { vertex  6 } { opposite-edge 18 } { next-edge 12 } }
185
186             T{ b-edge { face 4 } { vertex  1 } { opposite-edge  5 } { next-edge 17 } }
187             T{ b-edge { face 4 } { vertex  5 } { opposite-edge  9 } { next-edge 18 } }
188             T{ b-edge { face 4 } { vertex  7 } { opposite-edge 13 } { next-edge 19 } }
189             T{ b-edge { face 4 } { vertex  3 } { opposite-edge  1 } { next-edge 16 } }
190
191             T{ b-edge { face 5 } { vertex  4 } { opposite-edge  7 } { next-edge 21 } }
192             T{ b-edge { face 5 } { vertex  0 } { opposite-edge  3 } { next-edge 22 } }
193             T{ b-edge { face 5 } { vertex  2 } { opposite-edge 15 } { next-edge 23 } }
194             T{ b-edge { face 5 } { vertex  6 } { opposite-edge 11 } { next-edge 20 } }
195
196             T{ b-edge { face 6 } { vertex  8 } { opposite-edge  f } { next-edge 25 } }
197             T{ b-edge { face 6 } { vertex  9 } { opposite-edge  f } { next-edge 26 } }
198             T{ b-edge { face 6 } { vertex 10 } { opposite-edge  f } { next-edge 27 } }
199             T{ b-edge { face 6 } { vertex 11 } { opposite-edge  f } { next-edge 24 } }
200         } }
201         { vertices {
202             T{ vertex { position double-4{ -1.0 -1.0 -1.0  0.0 } } { edge 0 } }
203             T{ vertex { position double-4{ -1.0  1.0 -1.0  0.0 } } { edge 1 } }
204             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 3 } }
205             T{ vertex { position double-4{  1.0  1.0 -1.0  0.0 } } { edge 2 } }
206             T{ vertex { position double-4{ -1.0 -1.0  1.0  0.0 } } { edge 4 } }
207             T{ vertex { position double-4{ -1.0  1.0  1.0  0.0 } } { edge 5 } }
208             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 8 } }
209             T{ vertex { position double-4{  1.0  1.0  1.0  0.0 } } { edge 9 } }
210
211             T{ vertex { position double-4{ -1.0 -1.0  0.5  0.0 } } { edge 24 } }
212             T{ vertex { position double-4{ -1.0 -1.0 -0.5  0.0 } } { edge 25 } }
213             T{ vertex { position double-4{  1.0  1.0 -0.5  0.0 } } { edge 26 } }
214             T{ vertex { position double-4{  1.0  1.0  0.5  0.0 } } { edge 27 } }
215         } }
216     }
217
218 CONSTANT: valid-multi-valence-b-rep
219     T{ b-rep
220         { edges {
221             T{ b-edge { face  0 } { vertex 23 } { opposite-edge  12 } { next-edge   1 } }
222             T{ b-edge { face  0 } { vertex 22 } { opposite-edge   8 } { next-edge   2 } }
223             T{ b-edge { face  0 } { vertex 20 } { opposite-edge   4 } { next-edge   3 } }
224             T{ b-edge { face  0 } { vertex 21 } { opposite-edge  16 } { next-edge   0 } }
225
226             T{ b-edge { face  1 } { vertex 21 } { opposite-edge   2 } { next-edge   5 } }
227             T{ b-edge { face  1 } { vertex 20 } { opposite-edge  11 } { next-edge   6 } }
228             T{ b-edge { face  1 } { vertex 16 } { opposite-edge  20 } { next-edge   7 } }
229             T{ b-edge { face  1 } { vertex 17 } { opposite-edge  17 } { next-edge   4 } }
230
231             T{ b-edge { face  2 } { vertex 20 } { opposite-edge   1 } { next-edge   9 } }
232             T{ b-edge { face  2 } { vertex 22 } { opposite-edge  15 } { next-edge  10 } }
233             T{ b-edge { face  2 } { vertex 18 } { opposite-edge  24 } { next-edge  11 } }
234             T{ b-edge { face  2 } { vertex 16 } { opposite-edge   5 } { next-edge   8 } }
235
236             T{ b-edge { face  3 } { vertex 22 } { opposite-edge   0 } { next-edge  13 } }
237             T{ b-edge { face  3 } { vertex 23 } { opposite-edge  19 } { next-edge  14 } }
238             T{ b-edge { face  3 } { vertex 19 } { opposite-edge  28 } { next-edge  15 } }
239             T{ b-edge { face  3 } { vertex 18 } { opposite-edge   9 } { next-edge  12 } }
240
241             T{ b-edge { face  4 } { vertex 23 } { opposite-edge   3 } { next-edge  17 } }
242             T{ b-edge { face  4 } { vertex 21 } { opposite-edge   7 } { next-edge  18 } }
243             T{ b-edge { face  4 } { vertex 17 } { opposite-edge  32 } { next-edge  19 } }
244             T{ b-edge { face  4 } { vertex 19 } { opposite-edge  13 } { next-edge  16 } }
245
246             T{ b-edge { face  5 } { vertex 17 } { opposite-edge   6 } { next-edge  21 } }
247             T{ b-edge { face  5 } { vertex 16 } { opposite-edge  27 } { next-edge  22 } }
248             T{ b-edge { face  5 } { vertex 0  } { opposite-edge  36 } { next-edge  23 } }
249             T{ b-edge { face  5 } { vertex 1  } { opposite-edge  33 } { next-edge  20 } }
250
251             T{ b-edge { face  6 } { vertex 16 } { opposite-edge  10 } { next-edge  25 } }
252             T{ b-edge { face  6 } { vertex 18 } { opposite-edge  31 } { next-edge  26 } }
253             T{ b-edge { face  6 } { vertex 2  } { opposite-edge  44 } { next-edge  27 } }
254             T{ b-edge { face  6 } { vertex 0  } { opposite-edge  21 } { next-edge  24 } }
255
256             T{ b-edge { face  7 } { vertex 18 } { opposite-edge  14 } { next-edge  29 } }
257             T{ b-edge { face  7 } { vertex 19 } { opposite-edge  35 } { next-edge  30 } }
258             T{ b-edge { face  7 } { vertex 3  } { opposite-edge  52 } { next-edge  31 } }
259             T{ b-edge { face  7 } { vertex 2  } { opposite-edge  25 } { next-edge  28 } }
260
261             T{ b-edge { face  8 } { vertex 19 } { opposite-edge  18 } { next-edge  33 } }
262             T{ b-edge { face  8 } { vertex 17 } { opposite-edge  23 } { next-edge  34 } }
263             T{ b-edge { face  8 } { vertex 1  } { opposite-edge  60 } { next-edge  35 } }
264             T{ b-edge { face  8 } { vertex 3  } { opposite-edge  29 } { next-edge  32 } }
265
266             T{ b-edge { face  9 } { vertex 1  } { opposite-edge  22 } { next-edge  37 } }
267             T{ b-edge { face  9 } { vertex 0  } { opposite-edge  43 } { next-edge  38 } }
268             T{ b-edge { face  9 } { vertex 8  } { opposite-edge  68 } { next-edge  39 } }
269             T{ b-edge { face  9 } { vertex 9  } { opposite-edge  65 } { next-edge  36 } }
270
271             T{ b-edge { face 10 } { vertex 0  } { opposite-edge  47 } { next-edge  41 } }
272             T{ b-edge { face 10 } { vertex 10 } { opposite-edge  73 } { next-edge  42 } }
273             T{ b-edge { face 10 } { vertex 24 } { opposite-edge  72 } { next-edge  43 } }
274             T{ b-edge { face 10 } { vertex 8  } { opposite-edge  37 } { next-edge  40 } }
275
276             T{ b-edge { face 11 } { vertex  0 } { opposite-edge  26 } { next-edge  45 } }
277             T{ b-edge { face 11 } { vertex  2 } { opposite-edge  51 } { next-edge  46 } }
278             T{ b-edge { face 11 } { vertex 12 } { opposite-edge  76 } { next-edge  47 } }
279             T{ b-edge { face 11 } { vertex 10 } { opposite-edge  40 } { next-edge  44 } }
280
281             T{ b-edge { face 12 } { vertex  2 } { opposite-edge  55 } { next-edge  49 } }
282             T{ b-edge { face 12 } { vertex 14 } { opposite-edge  81 } { next-edge  50 } }
283             T{ b-edge { face 12 } { vertex 26 } { opposite-edge  80 } { next-edge  51 } }
284             T{ b-edge { face 12 } { vertex 12 } { opposite-edge  45 } { next-edge  48 } }
285
286             T{ b-edge { face 13 } { vertex  2 } { opposite-edge  30 } { next-edge  53 } }
287             T{ b-edge { face 13 } { vertex  3 } { opposite-edge  59 } { next-edge  54 } }
288             T{ b-edge { face 13 } { vertex 15 } { opposite-edge  84 } { next-edge  55 } }
289             T{ b-edge { face 13 } { vertex 14 } { opposite-edge  48 } { next-edge  52 } }
290
291             T{ b-edge { face 14 } { vertex  3 } { opposite-edge  63 } { next-edge  57 } }
292             T{ b-edge { face 14 } { vertex 13 } { opposite-edge  89 } { next-edge  58 } }
293             T{ b-edge { face 14 } { vertex 27 } { opposite-edge  88 } { next-edge  59 } }
294             T{ b-edge { face 14 } { vertex 15 } { opposite-edge  53 } { next-edge  56 } }
295
296             T{ b-edge { face 15 } { vertex  3 } { opposite-edge  34 } { next-edge  61 } }
297             T{ b-edge { face 15 } { vertex  1 } { opposite-edge  64 } { next-edge  62 } }
298             T{ b-edge { face 15 } { vertex 11 } { opposite-edge  92 } { next-edge  63 } }
299             T{ b-edge { face 15 } { vertex 13 } { opposite-edge  56 } { next-edge  60 } }
300
301             T{ b-edge { face 16 } { vertex 11 } { opposite-edge  61 } { next-edge  65 } }
302             T{ b-edge { face 16 } { vertex  1 } { opposite-edge  39 } { next-edge  66 } }
303             T{ b-edge { face 16 } { vertex  9 } { opposite-edge  97 } { next-edge  67 } }
304             T{ b-edge { face 16 } { vertex 25 } { opposite-edge  96 } { next-edge  64 } }
305
306             T{ b-edge { face 17 } { vertex  9 } { opposite-edge  38 } { next-edge  69 } }
307             T{ b-edge { face 17 } { vertex  8 } { opposite-edge  75 } { next-edge  70 } }
308             T{ b-edge { face 17 } { vertex  4 } { opposite-edge 102 } { next-edge  71 } }
309             T{ b-edge { face 17 } { vertex  5 } { opposite-edge  98 } { next-edge  68 } }
310
311             T{ b-edge { face 18 } { vertex  8 } { opposite-edge  42 } { next-edge  73 } }
312             T{ b-edge { face 18 } { vertex 24 } { opposite-edge  41 } { next-edge  74 } }
313             T{ b-edge { face 18 } { vertex 10 } { opposite-edge  79 } { next-edge  75 } }
314             T{ b-edge { face 18 } { vertex  4 } { opposite-edge  69 } { next-edge  72 } }
315
316             T{ b-edge { face 19 } { vertex 10 } { opposite-edge  46 } { next-edge  77 } }
317             T{ b-edge { face 19 } { vertex 12 } { opposite-edge  83 } { next-edge  78 } }
318             T{ b-edge { face 19 } { vertex  6 } { opposite-edge 103 } { next-edge  79 } }
319             T{ b-edge { face 19 } { vertex  4 } { opposite-edge  74 } { next-edge  76 } }
320
321             T{ b-edge { face 20 } { vertex 12 } { opposite-edge  50 } { next-edge  81 } }
322             T{ b-edge { face 20 } { vertex 26 } { opposite-edge  49 } { next-edge  82 } }
323             T{ b-edge { face 20 } { vertex 14 } { opposite-edge  87 } { next-edge  83 } }
324             T{ b-edge { face 20 } { vertex  6 } { opposite-edge  77 } { next-edge  80 } }
325
326             T{ b-edge { face 21 } { vertex 14 } { opposite-edge  54 } { next-edge  85 } }
327             T{ b-edge { face 21 } { vertex 15 } { opposite-edge  91 } { next-edge  86 } }
328             T{ b-edge { face 21 } { vertex  7 } { opposite-edge 100 } { next-edge  87 } }
329             T{ b-edge { face 21 } { vertex  6 } { opposite-edge  82 } { next-edge  84 } }
330
331             T{ b-edge { face 22 } { vertex 15 } { opposite-edge  58 } { next-edge  89 } }
332             T{ b-edge { face 22 } { vertex 27 } { opposite-edge  57 } { next-edge  90 } }
333             T{ b-edge { face 22 } { vertex 13 } { opposite-edge  95 } { next-edge  91 } }
334             T{ b-edge { face 22 } { vertex  7 } { opposite-edge  85 } { next-edge  88 } }
335
336             T{ b-edge { face 23 } { vertex 13 } { opposite-edge  62 } { next-edge  93 } }
337             T{ b-edge { face 23 } { vertex 11 } { opposite-edge  99 } { next-edge  94 } }
338             T{ b-edge { face 23 } { vertex  5 } { opposite-edge 101 } { next-edge  95 } }
339             T{ b-edge { face 23 } { vertex  7 } { opposite-edge  90 } { next-edge  92 } }
340
341             T{ b-edge { face 24 } { vertex 11 } { opposite-edge  67 } { next-edge  97 } }
342             T{ b-edge { face 24 } { vertex 25 } { opposite-edge  66 } { next-edge  98 } }
343             T{ b-edge { face 24 } { vertex  9 } { opposite-edge  71 } { next-edge  99 } }
344             T{ b-edge { face 24 } { vertex  5 } { opposite-edge  93 } { next-edge  96 } }
345
346             T{ b-edge { face 25 } { vertex  6 } { opposite-edge  86 } { next-edge 101 } }
347             T{ b-edge { face 25 } { vertex  7 } { opposite-edge  94 } { next-edge 102 } }
348             T{ b-edge { face 25 } { vertex  5 } { opposite-edge  70 } { next-edge 103 } }
349             T{ b-edge { face 25 } { vertex  4 } { opposite-edge  78 } { next-edge 100 } }
350         } }
351         { vertices {
352             T{ vertex { position double-4{  1.0  1.0  1.0 0.0 } } { edge  37 } }
353             T{ vertex { position double-4{  1.0  1.0 -1.0 0.0 } } { edge  36 } }
354             T{ vertex { position double-4{  1.0 -1.0  1.0 0.0 } } { edge  52 } }
355             T{ vertex { position double-4{  1.0 -1.0 -1.0 0.0 } } { edge  53 } }
356
357             T{ vertex { position double-4{  3.0  1.0  1.0 0.0 } } { edge  70 } }
358             T{ vertex { position double-4{  3.0  1.0 -1.0 0.0 } } { edge  71 } }
359             T{ vertex { position double-4{  3.0 -1.0  1.0 0.0 } } { edge  87 } }
360             T{ vertex { position double-4{  3.0 -1.0 -1.0 0.0 } } { edge  86 } }
361
362             T{ vertex { position double-4{  2.0  2.0  1.0 0.0 } } { edge  38 } }
363             T{ vertex { position double-4{  2.0  2.0 -1.0 0.0 } } { edge  39 } }
364             T{ vertex { position double-4{  2.0  1.0  2.0 0.0 } } { edge  47 } }
365             T{ vertex { position double-4{  2.0  1.0 -2.0 0.0 } } { edge  62 } }
366
367             T{ vertex { position double-4{  2.0 -1.0  2.0 0.0 } } { edge  51 } }
368             T{ vertex { position double-4{  2.0 -1.0 -2.0 0.0 } } { edge  57 } }
369             T{ vertex { position double-4{  2.0 -2.0  1.0 0.0 } } { edge  55 } }
370             T{ vertex { position double-4{  2.0 -2.0 -1.0 0.0 } } { edge  54 } }
371
372             T{ vertex { position double-4{ -1.0  1.0  1.0 0.0 } } { edge   6 } }
373             T{ vertex { position double-4{ -1.0  1.0 -1.0 0.0 } } { edge   7 } }
374             T{ vertex { position double-4{ -1.0 -1.0  1.0 0.0 } } { edge  15 } }
375             T{ vertex { position double-4{ -1.0 -1.0 -1.0 0.0 } } { edge  14 } }
376
377             T{ vertex { position double-4{ -2.0  1.0  1.0 0.0 } } { edge   2 } }
378             T{ vertex { position double-4{ -2.0  1.0 -1.0 0.0 } } { edge   3 } }
379             T{ vertex { position double-4{ -2.0 -1.0  1.0 0.0 } } { edge   1 } }
380             T{ vertex { position double-4{ -2.0 -1.0 -1.0 0.0 } } { edge   0 } }
381
382             T{ vertex { position double-4{  2.0  2.0  2.0 0.0 } } { edge  42 } }
383             T{ vertex { position double-4{  2.0  2.0 -2.0 0.0 } } { edge  67 } }
384             T{ vertex { position double-4{  2.0 -2.0  2.0 0.0 } } { edge  50 } }
385             T{ vertex { position double-4{  2.0 -2.0 -2.0 0.0 } } { edge  58 } }
386         } }
387         { faces {
388             T{ face { edge   0 } { next-ring f } { base-face  0 } }
389             T{ face { edge   4 } { next-ring f } { base-face  1 } }
390             T{ face { edge   8 } { next-ring f } { base-face  2 } }
391             T{ face { edge  12 } { next-ring f } { base-face  3 } }
392             T{ face { edge  16 } { next-ring f } { base-face  4 } }
393             T{ face { edge  20 } { next-ring f } { base-face  5 } }
394             T{ face { edge  24 } { next-ring f } { base-face  6 } }
395             T{ face { edge  28 } { next-ring f } { base-face  7 } }
396             T{ face { edge  32 } { next-ring f } { base-face  8 } }
397             T{ face { edge  36 } { next-ring f } { base-face  9 } }
398             T{ face { edge  40 } { next-ring f } { base-face 10 } }
399             T{ face { edge  44 } { next-ring f } { base-face 11 } }
400             T{ face { edge  48 } { next-ring f } { base-face 12 } }
401             T{ face { edge  52 } { next-ring f } { base-face 13 } }
402             T{ face { edge  56 } { next-ring f } { base-face 14 } }
403             T{ face { edge  60 } { next-ring f } { base-face 15 } }
404             T{ face { edge  64 } { next-ring f } { base-face 16 } }
405             T{ face { edge  68 } { next-ring f } { base-face 17 } }
406             T{ face { edge  72 } { next-ring f } { base-face 18 } }
407             T{ face { edge  76 } { next-ring f } { base-face 19 } }
408             T{ face { edge  80 } { next-ring f } { base-face 20 } }
409             T{ face { edge  84 } { next-ring f } { base-face 21 } }
410             T{ face { edge  88 } { next-ring f } { base-face 22 } }
411             T{ face { edge  92 } { next-ring f } { base-face 23 } }
412             T{ face { edge  96 } { next-ring f } { base-face 24 } }
413             T{ face { edge 100 } { next-ring f } { base-face 25 } }
414         } }
415     }
416
417 CONSTANT: degenerate-incomplete-face
418     T{ b-rep
419         { edges {
420             T{ b-edge { face 0 } { vertex 0 } { opposite-edge 5 } { next-edge 1 } }
421             T{ b-edge { face 0 } { vertex 1 } { opposite-edge 4 } { next-edge 2 } }
422             T{ b-edge { face 0 } { vertex 2 } { opposite-edge 3 } { next-edge 3 } }
423             T{ b-edge { face 0 } { vertex 3 } { opposite-edge 2 } { next-edge 4 } }
424             T{ b-edge { face 0 } { vertex 2 } { opposite-edge 1 } { next-edge 5 } }
425             T{ b-edge { face 0 } { vertex 1 } { opposite-edge 0 } { next-edge 0 } }
426         } }
427         { vertices {
428             T{ vertex { position double-4{ -1 -1 0 0 } } { edge 0 } }
429             T{ vertex { position double-4{  1 -1 0 0 } } { edge 1 } }
430             T{ vertex { position double-4{  1  1 0 0 } } { edge 2 } }
431             T{ vertex { position double-4{ -1  1 0 0 } } { edge 3 } }
432         } }
433         { faces {
434             T{ face { edge 0 } { next-ring f } { base-face 0 } }
435         } }
436     }
437
438 CONSTANT: partially-degenerate-second-face
439     T{ b-rep
440         { edges {
441             T{ b-edge { face 0 } { vertex 0 } { opposite-edge 6 } { next-edge 1 } }
442             T{ b-edge { face 0 } { vertex 1 } { opposite-edge 5 } { next-edge 2 } }
443             T{ b-edge { face 0 } { vertex 2 } { opposite-edge 4 } { next-edge 3 } }
444             T{ b-edge { face 0 } { vertex 3 } { opposite-edge 9 } { next-edge 0 } }
445
446             T{ b-edge { face 1 } { vertex 3 } { opposite-edge 2 } { next-edge 5 } }
447             T{ b-edge { face 1 } { vertex 2 } { opposite-edge 1 } { next-edge 6 } }
448             T{ b-edge { face 1 } { vertex 1 } { opposite-edge 0 } { next-edge 7 } }
449             T{ b-edge { face 1 } { vertex 0 } { opposite-edge 8 } { next-edge 8 } }
450             T{ b-edge { face 1 } { vertex 4 } { opposite-edge 7 } { next-edge 9 } }
451             T{ b-edge { face 1 } { vertex 0 } { opposite-edge 3 } { next-edge 4 } }
452         } }
453         { vertices {
454             T{ vertex { position double-4{ -1 -1 0 0 } } { edge 0 } }
455             T{ vertex { position double-4{  1 -1 0 0 } } { edge 1 } }
456             T{ vertex { position double-4{  1  1 0 0 } } { edge 2 } }
457             T{ vertex { position double-4{ -1  1 0 0 } } { edge 3 } }
458             T{ vertex { position double-4{ -2 -2 0 0 } } { edge 8 } }
459         } }
460         { faces {
461             T{ face { edge 0 } { next-ring f } { base-face 0 } }
462             T{ face { edge 4 } { next-ring f } { base-face 1 } }
463         } }
464     }
465
466 : nth-when ( index/f seq -- elt/f )
467     over [ nth ] [ 2drop f ] if ; inline
468
469 :: connect-b-rep ( b-rep -- )
470     b-rep faces>> [
471         [ b-rep edges>> nth-when ] change-edge
472         [ b-rep faces>> nth-when ] change-next-ring
473         [ b-rep faces>> nth-when ] change-base-face
474         drop
475     ] each
476
477     b-rep vertices>> [
478         [ b-rep edges>> nth-when ] change-edge
479         drop
480     ] each
481
482     b-rep edges>> [
483         [ b-rep faces>> nth-when ] change-face
484         [ b-rep vertices>> nth-when ] change-vertex
485         [ b-rep edges>> nth-when ] change-opposite-edge
486         [ b-rep edges>> nth-when ] change-next-edge
487         drop
488     ] each ;
489
490 :: disconnect-b-rep ( b-rep -- )
491     b-rep faces>> >index-hash :> face-indices
492     b-rep edges>> >index-hash :> edge-indices
493     b-rep vertices>> >index-hash :> vertex-indices
494
495     b-rep faces>> [
496         [ edge-indices at ] change-edge
497         [ face-indices at ] change-next-ring
498         [ face-indices at ] change-base-face
499         drop
500     ] each
501
502     b-rep vertices>> [
503         [ edge-indices at ] change-edge
504         drop
505     ] each
506
507     b-rep edges>> [
508         [ face-indices at ] change-face
509         [ vertex-indices at ] change-vertex
510         [ edge-indices at ] change-opposite-edge
511         [ edge-indices at ] change-next-edge
512         drop
513     ] each ;
514
515 valid-cube-b-rep connect-b-rep
516 missing-face-cube-b-rep connect-b-rep
517 non-quad-face-cube-b-rep connect-b-rep
518 multi-ringed-face-cube-b-rep connect-b-rep
519 valid-multi-valence-b-rep connect-b-rep
520 degenerate-incomplete-face connect-b-rep
521 partially-degenerate-second-face connect-b-rep