8
LUX.Data.Lattice.T3.D3;
12
TMarcubeGrids = class;
14
IIterMarcube = interface(ISingleBricIterGridArray3D)
15
['{8FD59B4C-2D40-4262-A737-AD4FAC4B55E3}']
16
function GetKind: Byte;
17
property Kind: Byte read GetKind;
20
// -------------------------------------------------------------------------
22
TMarcubeIter = class(TSingleBricIterGridArray3D, IIterMarcube)
27
function GetKind: Byte;
29
property Kind: Byte read GetKind;
32
TMarcubeGrids = class(TSingleGridArray3D)
37
function NewBricIter: TBricIterGridArray3D<Single>; override;
39
procedure ForBrics(const Proc_: TConstProc<TMarcubeIter>);
40
procedure ForEdgesX(const Proc_: TConstProc<TMarcubeIter>);
41
procedure ForEdgesY(const Proc_: TConstProc<TMarcubeIter>);
42
procedure ForEdgesZ(const Proc_: TConstProc<TMarcubeIter>);
46
TRIAsTABLE: TArray3<Byte>;
48
implementation //------------------------------------------------------------
50
function TMarcubeIter.GetKind: Byte;
53
if Grids[0, 0, 0] < 0 then
54
Result := Result or $01;
55
if Grids[1, 0, 0] < 0 then
56
Result := Result or $02;
57
if Grids[0, 1, 0] < 0 then
58
Result := Result or $04;
59
if Grids[1, 1, 0] < 0 then
60
Result := Result or $08;
61
if Grids[0, 0, 1] < 0 then
62
Result := Result or $10;
63
if Grids[1, 0, 1] < 0 then
64
Result := Result or $20;
65
if Grids[0, 1, 1] < 0 then
66
Result := Result or $40;
67
if Grids[1, 1, 1] < 0 then
68
Result := Result or $80;
71
function TMarcubeGrids.NewBricIter: TBricIterGridArray3D<Single>;
73
Result := TMarcubeIter.Create(Self);
76
procedure TMarcubeGrids.ForBrics(const Proc_: TConstProc<TMarcubeIter>);
79
procedure(const B_: TSingleBricIterGridArray3D)
81
Proc_(B_ as TMarcubeIter);
85
procedure TMarcubeGrids.ForEdgesX(const Proc_: TConstProc<TMarcubeIter>);
88
procedure(const E_: TSingleBricIterGridArray3D)
90
Proc_(E_ as TMarcubeIter);
94
procedure TMarcubeGrids.ForEdgesY(const Proc_: TConstProc<TMarcubeIter>);
97
procedure(const E_: TSingleBricIterGridArray3D)
99
Proc_(E_ as TMarcubeIter);
103
procedure TMarcubeGrids.ForEdgesZ(const Proc_: TConstProc<TMarcubeIter>);
106
procedure(const E_: TSingleBricIterGridArray3D)
108
Proc_(E_ as TMarcubeIter);
112
initialization //-------------------------------------------------------------
114
TRIAsTABLE := [[], [[00, 04, 08]], [[00, 09, 06]], [[09, 04, 08], [06, 04, 09]],
115
[[01, 10, 04]], [[01, 08, 00], [10, 08, 01]], [[00, 09, 06], [04, 01, 10]],
116
[[01, 09, 06], [01, 10, 09], [10, 08, 09]], [[06, 11, 01]],
117
[[06, 11, 01], [00, 04, 08]], [[00, 11, 01], [09, 11, 00]],
118
[[04, 11, 01], [04, 08, 11], [08, 09, 11]], [[06, 10, 04], [11, 10, 06]],
119
[[06, 08, 00], [06, 11, 08], [11, 10, 08]], [[00, 10, 04], [00, 09, 10],
120
[09, 11, 10]], [[09, 11, 08], [08, 11, 10]], [[08, 05, 02]],
121
[[00, 05, 02], [04, 05, 00]], [[09, 06, 00], [02, 08, 05]],
122
[[09, 05, 02], [09, 06, 05], [06, 04, 05]], [[04, 01, 10], [08, 05, 02]],
123
[[05, 01, 10], [05, 02, 01], [02, 00, 01]], [[06, 00, 09], [04, 01, 10],
124
[02, 08, 05]], [[01, 10, 05], [06, 01, 05], [06, 05, 02], [06, 02, 09]],
125
[[06, 11, 01], [02, 08, 05]], [[00, 05, 02], [00, 04, 05], [01, 06, 11]],
126
[[00, 11, 01], [00, 09, 11], [02, 08, 05]], [[02, 09, 11], [02, 11, 04],
127
[02, 04, 05], [01, 04, 11]], [[10, 06, 11], [10, 04, 06], [08, 05, 02]],
128
[[06, 11, 10], [06, 10, 02], [06, 02, 00], [02, 10, 05]],
129
[[02, 08, 05], [00, 09, 04], [09, 10, 04], [09, 11, 10]],
130
[[05, 02, 09], [05, 09, 10], [10, 09, 11]], [[09, 02, 07]],
131
[[00, 04, 08], [09, 02, 07]], [[06, 02, 07], [00, 02, 06]],
132
[[02, 04, 08], [02, 07, 04], [07, 06, 04]], [[09, 02, 07], [04, 01, 10]],
133
[[08, 01, 10], [08, 00, 01], [09, 02, 07]], [[06, 02, 07], [06, 00, 02],
134
[04, 01, 10]], [[02, 07, 06], [02, 06, 10], [02, 10, 08], [10, 06, 01]],
135
[[09, 02, 07], [06, 11, 01]], [[08, 00, 04], [09, 02, 07], [01, 06, 11]],
136
[[11, 02, 07], [11, 01, 02], [01, 00, 02]], [[02, 07, 11], [08, 02, 11],
137
[08, 11, 01], [08, 01, 04]], [[06, 10, 04], [06, 11, 10], [07, 09, 02]],
138
[[07, 09, 02], [06, 11, 00], [11, 08, 00], [11, 10, 08]],
139
[[04, 00, 02], [04, 02, 11], [04, 11, 10], [07, 11, 02]],
140
[[02, 07, 11], [02, 11, 08], [08, 11, 10]], [[08, 07, 09], [05, 07, 08]],
141
[[00, 07, 09], [00, 04, 07], [04, 05, 07]], [[08, 06, 00], [08, 05, 06],
142
[05, 07, 06]], [[06, 04, 07], [07, 04, 05]], [[08, 07, 09], [08, 05, 07],
143
[10, 04, 01]], [[09, 05, 07], [09, 01, 05], [09, 00, 01], [10, 05, 01]],
144
[[01, 10, 04], [06, 00, 05], [06, 05, 07], [05, 00, 08]],
145
[[01, 10, 05], [01, 05, 06], [06, 05, 07]], [[07, 08, 05], [07, 09, 08],
146
[06, 11, 01]], [[01, 06, 11], [00, 04, 09], [04, 07, 09], [04, 05, 07]],
147
[[11, 01, 00], [11, 00, 05], [11, 05, 07], [05, 00, 08]],
148
[[11, 01, 04], [11, 04, 07], [07, 04, 05]], [[06, 11, 04], [04, 11, 10],
149
[07, 09, 08], [07, 08, 05]], [[11, 10, 00], [11, 00, 06], [10, 05, 00],
150
[09, 00, 07], [05, 07, 00]], [[05, 07, 00], [05, 00, 08], [07, 11, 00],
151
[04, 00, 10], [11, 10, 00]], [[05, 07, 11], [10, 05, 11]], [[10, 03, 05]],
152
[[08, 00, 04], [05, 10, 03]], [[00, 09, 06], [05, 10, 03]],
153
[[04, 09, 06], [04, 08, 09], [05, 10, 03]], [[03, 04, 01], [05, 04, 03]],
154
[[08, 03, 05], [08, 00, 03], [00, 01, 03]], [[04, 03, 05], [04, 01, 03],
155
[06, 00, 09]], [[06, 01, 03], [06, 03, 08], [06, 08, 09], [05, 08, 03]],
156
[[01, 06, 11], [10, 03, 05]], [[00, 04, 08], [01, 06, 11], [05, 10, 03]],
157
[[11, 00, 09], [11, 01, 00], [10, 03, 05]], [[05, 10, 03], [04, 08, 01],
158
[08, 11, 01], [08, 09, 11]], [[03, 06, 11], [03, 05, 06], [05, 04, 06]],
159
[[08, 03, 05], [00, 03, 08], [00, 11, 03], [00, 06, 11]],
160
[[00, 05, 04], [00, 11, 05], [00, 09, 11], [11, 03, 05]],
161
[[03, 05, 08], [03, 08, 11], [11, 08, 09]], [[10, 02, 08], [03, 02, 10]],
162
[[10, 00, 04], [10, 03, 00], [03, 02, 00]], [[02, 10, 03], [02, 08, 10],
163
[00, 09, 06]], [[09, 03, 02], [09, 04, 03], [09, 06, 04], [04, 10, 03]],
164
[[04, 02, 08], [04, 01, 02], [01, 03, 02]], [[00, 01, 02], [01, 03, 02]],
165
[[09, 06, 00], [02, 08, 01], [02, 01, 03], [01, 08, 04]],
166
[[09, 06, 01], [09, 01, 02], [02, 01, 03]], [[10, 02, 08], [10, 03, 02],
167
[11, 01, 06]], [[06, 11, 01], [00, 04, 03], [00, 03, 02], [03, 04, 10]],
168
[[08, 03, 02], [08, 10, 03], [09, 11, 00], [11, 01, 00]],
169
[[03, 02, 04], [03, 04, 10], [02, 09, 04], [01, 04, 11], [09, 11, 04]],
170
[[11, 04, 06], [11, 02, 04], [11, 03, 02], [08, 04, 02]],
171
[[06, 11, 03], [06, 03, 00], [00, 03, 02]], [[09, 11, 04], [09, 04, 00],
172
[11, 03, 04], [08, 04, 02], [03, 02, 04]], [[09, 11, 03], [02, 09, 03]],
173
[[07, 09, 02], [03, 05, 10]], [[09, 02, 07], [08, 00, 04], [03, 05, 10]],
174
[[02, 06, 00], [02, 07, 06], [03, 05, 10]], [[03, 05, 10], [02, 07, 08],
175
[07, 04, 08], [07, 06, 04]], [[03, 04, 01], [03, 05, 04], [02, 07, 09]],
176
[[09, 02, 07], [08, 00, 05], [00, 03, 05], [00, 01, 03]],
177
[[01, 05, 04], [01, 03, 05], [00, 02, 06], [02, 07, 06]],
178
[[07, 06, 08], [07, 08, 02], [06, 01, 08], [05, 08, 03], [01, 03, 08]],
179
[[06, 11, 01], [07, 09, 02], [10, 03, 05]], [[03, 05, 10], [09, 02, 07],
180
[00, 04, 08], [01, 06, 11]], [[10, 03, 05], [11, 01, 07], [01, 02, 07],
181
[01, 00, 02]], [[08, 01, 04], [08, 11, 01], [08, 02, 11], [07, 11, 02],
182
[05, 10, 03]], [[09, 02, 07], [06, 11, 05], [06, 05, 04], [05, 11, 03]],
183
[[00, 05, 08], [00, 03, 05], [00, 06, 03], [11, 03, 06], [09, 02, 07]],
184
[[05, 04, 11], [05, 11, 03], [04, 00, 11], [07, 11, 02], [00, 02, 11]],
185
[[03, 05, 08], [03, 08, 11], [02, 07, 08], [07, 11, 08]],
186
[[07, 10, 03], [07, 09, 10], [09, 08, 10]], [[07, 10, 03], [09, 10, 07],
187
[09, 04, 10], [09, 00, 04]], [[00, 08, 10], [00, 10, 07], [00, 07, 06],
188
[03, 07, 10]], [[10, 03, 07], [10, 07, 04], [04, 07, 06]],
189
[[04, 09, 08], [04, 03, 09], [04, 01, 03], [03, 07, 09]],
190
[[07, 09, 00], [07, 00, 03], [03, 00, 01]], [[01, 03, 08], [01, 08, 04],
191
[03, 07, 08], [00, 08, 06], [07, 06, 08]], [[07, 06, 01], [03, 07, 01]],
192
[[06, 11, 01], [07, 09, 03], [09, 10, 03], [09, 08, 10]],
193
[[09, 03, 07], [09, 10, 03], [09, 00, 10], [04, 10, 00], [06, 11, 01]],
194
[[01, 00, 07], [01, 07, 11], [00, 08, 07], [03, 07, 10], [08, 10, 07]],
195
[[10, 03, 07], [10, 07, 04], [11, 01, 07], [01, 04, 07]],
196
[[09, 08, 03], [09, 03, 07], [08, 04, 03], [11, 03, 06], [04, 06, 03]],
197
[[07, 09, 00], [07, 00, 03], [06, 11, 00], [11, 03, 00]],
198
[[00, 08, 04], [11, 03, 07]], [[07, 11, 03]], [[07, 03, 11]],
199
[[00, 04, 08], [11, 07, 03]], [[06, 00, 09], [11, 07, 03]],
200
[[09, 04, 08], [09, 06, 04], [11, 07, 03]], [[11, 07, 03], [01, 10, 04]],
201
[[01, 08, 00], [01, 10, 08], [03, 11, 07]], [[09, 06, 00], [11, 07, 03],
202
[04, 01, 10]], [[07, 03, 11], [09, 06, 10], [09, 10, 08], [10, 06, 01]],
203
[[07, 01, 06], [03, 01, 07]], [[01, 07, 03], [01, 06, 07], [00, 04, 08]],
204
[[07, 00, 09], [07, 03, 00], [03, 01, 00]], [[04, 08, 09], [04, 09, 03],
205
[04, 03, 01], [03, 09, 07]], [[10, 07, 03], [10, 04, 07], [04, 06, 07]],
206
[[00, 10, 08], [00, 07, 10], [00, 06, 07], [03, 10, 07]],
207
[[07, 03, 10], [09, 07, 10], [09, 10, 04], [09, 04, 00]],
208
[[07, 03, 10], [07, 10, 09], [09, 10, 08]], [[02, 08, 05], [07, 03, 11]],
209
[[05, 00, 04], [05, 02, 00], [07, 03, 11]], [[00, 09, 06], [02, 08, 05],
210
[11, 07, 03]], [[11, 07, 03], [09, 06, 02], [06, 05, 02], [06, 04, 05]],
211
[[08, 05, 02], [10, 04, 01], [07, 03, 11]], [[11, 07, 03], [01, 10, 02],
212
[01, 02, 00], [02, 10, 05]], [[00, 09, 06], [01, 10, 04], [02, 08, 05],
213
[11, 07, 03]], [[06, 02, 09], [06, 05, 02], [06, 01, 05], [10, 05, 01],
214
[11, 07, 03]], [[07, 01, 06], [07, 03, 01], [05, 02, 08]],
215
[[00, 04, 02], [02, 04, 05], [01, 06, 07], [01, 07, 03]],
216
[[08, 05, 02], [00, 09, 03], [00, 03, 01], [03, 09, 07]],
217
[[03, 01, 09], [03, 09, 07], [01, 04, 09], [02, 09, 05], [04, 05, 09]],
218
[[02, 08, 05], [07, 03, 04], [07, 04, 06], [04, 03, 10]],
219
[[02, 00, 10], [02, 10, 05], [00, 06, 10], [03, 10, 07], [06, 07, 10]],
220
[[09, 04, 00], [09, 10, 04], [09, 07, 10], [03, 10, 07], [02, 08, 05]],
221
[[05, 02, 09], [05, 09, 10], [07, 03, 09], [03, 10, 09]],
222
[[09, 03, 11], [02, 03, 09]], [[09, 03, 11], [09, 02, 03], [08, 00, 04]],
223
[[06, 03, 11], [06, 00, 03], [00, 02, 03]], [[11, 06, 04], [11, 04, 02],
224
[11, 02, 03], [08, 02, 04]], [[03, 09, 02], [03, 11, 09], [01, 10, 04]],
225
[[09, 02, 11], [11, 02, 03], [08, 00, 01], [08, 01, 10]],
226
[[04, 01, 10], [06, 00, 11], [00, 03, 11], [00, 02, 03]],
227
[[10, 08, 06], [10, 06, 01], [08, 02, 06], [11, 06, 03], [02, 03, 06]],
228
[[09, 01, 06], [09, 02, 01], [02, 03, 01]], [[08, 00, 04], [09, 02, 06],
229
[02, 01, 06], [02, 03, 01]], [[00, 02, 01], [01, 02, 03]],
230
[[04, 08, 02], [04, 02, 01], [01, 02, 03]], [[09, 02, 03], [09, 03, 04],
231
[09, 04, 06], [04, 03, 10]], [[02, 03, 06], [02, 06, 09], [03, 10, 06],
232
[00, 06, 08], [10, 08, 06]], [[10, 04, 00], [10, 00, 03], [03, 00, 02]],
233
[[10, 08, 02], [03, 10, 02]], [[03, 08, 05], [03, 11, 08], [11, 09, 08]],
234
[[00, 04, 05], [00, 05, 11], [00, 11, 09], [11, 05, 03]],
235
[[08, 05, 03], [00, 08, 03], [00, 03, 11], [00, 11, 06]],
236
[[03, 11, 06], [03, 06, 05], [05, 06, 04]], [[04, 01, 10], [08, 05, 11],
237
[08, 11, 09], [11, 05, 03]], [[11, 09, 05], [11, 05, 03], [09, 00, 05],
238
[10, 05, 01], [00, 01, 05]], [[00, 11, 06], [00, 03, 11], [00, 08, 03],
239
[05, 03, 08], [04, 01, 10]], [[03, 11, 06], [03, 06, 05], [01, 10, 06],
240
[10, 05, 06]], [[06, 03, 01], [06, 08, 03], [06, 09, 08], [05, 03, 08]],
241
[[04, 05, 09], [04, 09, 00], [05, 03, 09], [06, 09, 01], [03, 01, 09]],
242
[[08, 05, 03], [08, 03, 00], [00, 03, 01]], [[03, 01, 04], [05, 03, 04]],
243
[[04, 06, 03], [04, 03, 10], [06, 09, 03], [05, 03, 08], [09, 08, 03]],
244
[[00, 06, 09], [05, 03, 10]], [[10, 04, 00], [10, 00, 03], [08, 05, 00],
245
[05, 03, 00]], [[10, 05, 03]], [[05, 11, 07], [10, 11, 05]],
246
[[05, 11, 07], [05, 10, 11], [04, 08, 00]], [[11, 05, 10], [11, 07, 05],
247
[09, 06, 00]], [[07, 10, 11], [07, 05, 10], [06, 04, 09], [04, 08, 09]],
248
[[11, 04, 01], [11, 07, 04], [07, 05, 04]], [[11, 00, 01], [11, 05, 00],
249
[11, 07, 05], [05, 08, 00]], [[00, 09, 06], [04, 01, 07], [04, 07, 05],
250
[07, 01, 11]], [[07, 05, 01], [07, 01, 11], [05, 08, 01], [06, 01, 09],
251
[08, 09, 01]], [[01, 05, 10], [01, 06, 05], [06, 07, 05]],
252
[[00, 04, 08], [01, 06, 10], [06, 05, 10], [06, 07, 05]],
253
[[09, 07, 05], [09, 05, 01], [09, 01, 00], [10, 01, 05]],
254
[[08, 09, 01], [08, 01, 04], [09, 07, 01], [10, 01, 05], [07, 05, 01]],
255
[[06, 07, 04], [07, 05, 04]], [[08, 00, 06], [08, 06, 05], [05, 06, 07]],
256
[[00, 09, 07], [00, 07, 04], [04, 07, 05]], [[08, 09, 07], [05, 08, 07]],
257
[[02, 11, 07], [02, 08, 11], [08, 10, 11]], [[04, 02, 00], [04, 11, 02],
258
[04, 10, 11], [07, 02, 11]], [[06, 00, 09], [11, 07, 08], [11, 08, 10],
259
[08, 07, 02]], [[06, 04, 02], [06, 02, 09], [04, 10, 02], [07, 02, 11],
260
[10, 11, 02]], [[02, 11, 07], [08, 11, 02], [08, 01, 11], [08, 04, 01]],
261
[[11, 07, 02], [11, 02, 01], [01, 02, 00]], [[08, 07, 02], [08, 11, 07],
262
[08, 04, 11], [01, 11, 04], [00, 09, 06]], [[11, 07, 02], [11, 02, 01],
263
[09, 06, 02], [06, 01, 02]], [[02, 06, 07], [02, 10, 06], [02, 08, 10],
264
[10, 01, 06]], [[06, 07, 10], [06, 10, 01], [07, 02, 10], [04, 10, 00],
265
[02, 00, 10]], [[08, 10, 07], [08, 07, 02], [10, 01, 07], [09, 07, 00],
266
[01, 00, 07]], [[09, 07, 02], [04, 10, 01]], [[02, 08, 04], [02, 04, 07],
267
[07, 04, 06]], [[06, 07, 02], [00, 06, 02]], [[02, 08, 04], [02, 04, 07],
268
[00, 09, 04], [09, 07, 04]], [[09, 07, 02]], [[05, 09, 02], [05, 10, 09],
269
[10, 11, 09]], [[00, 04, 08], [09, 02, 10], [09, 10, 11], [10, 02, 05]],
270
[[06, 10, 11], [06, 02, 10], [06, 00, 02], [02, 05, 10]],
271
[[10, 11, 02], [10, 02, 05], [11, 06, 02], [08, 02, 04], [06, 04, 02]],
272
[[02, 11, 09], [02, 04, 11], [02, 05, 04], [01, 11, 04]],
273
[[00, 01, 05], [00, 05, 08], [01, 11, 05], [02, 05, 09], [11, 09, 05]],
274
[[00, 02, 11], [00, 11, 06], [02, 05, 11], [01, 11, 04], [05, 04, 11]],
275
[[06, 01, 11], [02, 05, 08]], [[01, 05, 10], [06, 05, 01], [06, 02, 05],
276
[06, 09, 02]], [[06, 10, 01], [06, 05, 10], [06, 09, 05], [02, 05, 09],
277
[00, 04, 08]], [[05, 10, 01], [05, 01, 02], [02, 01, 00]],
278
[[05, 10, 01], [05, 01, 02], [04, 08, 01], [08, 02, 01]],
279
[[09, 02, 05], [09, 05, 06], [06, 05, 04]], [[08, 00, 06], [08, 06, 05],
280
[09, 02, 06], [02, 05, 06]], [[00, 02, 05], [04, 00, 05]], [[08, 02, 05]],
281
[[09, 08, 11], [08, 10, 11]], [[00, 04, 10], [00, 10, 09], [09, 10, 11]],
282
[[06, 00, 08], [06, 08, 11], [11, 08, 10]], [[06, 04, 10], [11, 06, 10]],
283
[[04, 01, 11], [04, 11, 08], [08, 11, 09]], [[00, 01, 11], [09, 00, 11]],
284
[[04, 01, 11], [04, 11, 08], [06, 00, 11], [00, 08, 11]], [[06, 01, 11]],
285
[[01, 06, 09], [01, 09, 10], [10, 09, 08]], [[01, 06, 09], [01, 09, 10],
286
[00, 04, 09], [04, 10, 09]], [[01, 00, 08], [10, 01, 08]], [[01, 04, 10]],
287
[[09, 08, 04], [06, 09, 04]], [[00, 06, 09]], [[00, 08, 04]], []];
289
finalization //----------------------------------------------------------------