@@ -310,9 +310,10 @@ function marching_cubes{ST,FT,M<:AbstractMesh}(sdf::SignedDistanceField{3,ST,FT}
310
310
sdf[xi+ 1 ,yi,zi+ 1 ] < iso && (cubeindex |= 32 )
311
311
sdf[xi+ 1 ,yi+ 1 ,zi+ 1 ] < iso && (cubeindex |= 64 )
312
312
sdf[xi,yi+ 1 ,zi+ 1 ] < iso && (cubeindex |= 128 )
313
+ cubeindex += 1
313
314
314
315
# Cube is entirely in/out of the surface
315
- edge_table[cubeindex+ 1 ] == 0 && continue
316
+ edge_table[cubeindex] == 0 && continue
316
317
317
318
points = (Point {3,Float64} (xi- 1 ,yi- 1 ,zi- 1 ).* s,
318
319
Point {3,Float64} (xi,yi- 1 ,zi- 1 ).* s,
@@ -324,61 +325,61 @@ function marching_cubes{ST,FT,M<:AbstractMesh}(sdf::SignedDistanceField{3,ST,FT}
324
325
Point {3,Float64} (xi- 1 ,yi,zi).* s)
325
326
326
327
# Find the vertices where the surface intersects the cube
327
- if (edge_table[cubeindex+ 1 ] & 1 != 0 )
328
+ if (edge_table[cubeindex] & 1 != 0 )
328
329
vertlist[1 ] =
329
330
vertex_interp (iso,points[1 ],points[2 ],sdf[xi,yi,zi],sdf[xi+ 1 ,yi,zi])
330
331
end
331
- if (edge_table[cubeindex+ 1 ] & 2 != 0 )
332
+ if (edge_table[cubeindex] & 2 != 0 )
332
333
vertlist[2 ] =
333
334
vertex_interp (iso,points[2 ],points[3 ],sdf[xi+ 1 ,yi,zi],sdf[xi+ 1 ,yi+ 1 ,zi])
334
335
end
335
- if (edge_table[cubeindex+ 1 ] & 4 != 0 )
336
+ if (edge_table[cubeindex] & 4 != 0 )
336
337
vertlist[3 ] =
337
338
vertex_interp (iso,points[3 ],points[4 ],sdf[xi+ 1 ,yi+ 1 ,zi],sdf[xi,yi+ 1 ,zi])
338
339
end
339
- if (edge_table[cubeindex+ 1 ] & 8 != 0 )
340
+ if (edge_table[cubeindex] & 8 != 0 )
340
341
vertlist[4 ] =
341
342
vertex_interp (iso,points[4 ],points[1 ],sdf[xi,yi+ 1 ,zi],sdf[xi,yi,zi])
342
343
end
343
- if (edge_table[cubeindex+ 1 ] & 16 != 0 )
344
+ if (edge_table[cubeindex] & 16 != 0 )
344
345
vertlist[5 ] =
345
346
vertex_interp (iso,points[5 ],points[6 ],sdf[xi,yi,zi+ 1 ],sdf[xi+ 1 ,yi,zi+ 1 ])
346
347
end
347
- if (edge_table[cubeindex+ 1 ] & 32 != 0 )
348
+ if (edge_table[cubeindex] & 32 != 0 )
348
349
vertlist[6 ] =
349
350
vertex_interp (iso,points[6 ],points[7 ],sdf[xi+ 1 ,yi,zi+ 1 ],sdf[xi+ 1 ,yi+ 1 ,zi+ 1 ])
350
351
end
351
- if (edge_table[cubeindex+ 1 ] & 64 != 0 )
352
+ if (edge_table[cubeindex] & 64 != 0 )
352
353
vertlist[7 ] =
353
354
vertex_interp (iso,points[7 ],points[8 ],sdf[xi+ 1 ,yi+ 1 ,zi+ 1 ],sdf[xi,yi+ 1 ,zi+ 1 ])
354
355
end
355
- if (edge_table[cubeindex+ 1 ] & 128 != 0 )
356
+ if (edge_table[cubeindex] & 128 != 0 )
356
357
vertlist[8 ] =
357
358
vertex_interp (iso,points[8 ],points[5 ],sdf[xi,yi+ 1 ,zi+ 1 ],sdf[xi,yi,zi+ 1 ])
358
359
end
359
- if (edge_table[cubeindex+ 1 ] & 256 != 0 )
360
+ if (edge_table[cubeindex] & 256 != 0 )
360
361
vertlist[9 ] =
361
362
vertex_interp (iso,points[1 ],points[5 ],sdf[xi,yi,zi],sdf[xi,yi,zi+ 1 ])
362
363
end
363
- if (edge_table[cubeindex+ 1 ] & 512 != 0 )
364
+ if (edge_table[cubeindex] & 512 != 0 )
364
365
vertlist[10 ] =
365
366
vertex_interp (iso,points[2 ],points[6 ],sdf[xi+ 1 ,yi,zi],sdf[xi+ 1 ,yi,zi+ 1 ])
366
367
end
367
- if (edge_table[cubeindex+ 1 ] & 1024 != 0 )
368
+ if (edge_table[cubeindex] & 1024 != 0 )
368
369
vertlist[11 ] =
369
370
vertex_interp (iso,points[3 ],points[7 ],sdf[xi+ 1 ,yi+ 1 ,zi],sdf[xi+ 1 ,yi+ 1 ,zi+ 1 ])
370
371
end
371
- if (edge_table[cubeindex+ 1 ] & 2048 != 0 )
372
+ if (edge_table[cubeindex] & 2048 != 0 )
372
373
vertlist[12 ] =
373
374
vertex_interp (iso,points[4 ],points[8 ],sdf[xi,yi+ 1 ,zi],sdf[xi,yi+ 1 ,zi+ 1 ])
374
375
end
375
376
376
377
# Create the triangle
377
378
for i = 1 : 3 : 13
378
- tri_table[cubeindex+ 1 ][i] == - 1 && break
379
- push! (vts, vertlist[tri_table[cubeindex+ 1 ][i ]])
380
- push! (vts, vertlist[tri_table[cubeindex+ 1 ][i+ 1 ]])
381
- push! (vts, vertlist[tri_table[cubeindex+ 1 ][i+ 2 ]])
379
+ tri_table[cubeindex][i] == - 1 && break
380
+ push! (vts, vertlist[tri_table[cubeindex][i ]])
381
+ push! (vts, vertlist[tri_table[cubeindex][i+ 1 ]])
382
+ push! (vts, vertlist[tri_table[cubeindex][i+ 2 ]])
382
383
fct = length (vts)
383
384
push! (fcs, Face {3,Int,0} (fct, fct- 1 , fct- 2 ))
384
385
end
0 commit comments