incoherent face orientation in marching cubes

Janto Dreijer jantod at gmail.com
Mon Jan 13 02:10:46 EST 2014


Thanks Josh,

Unfortunately I need a single sided mesh. The resulting STL will be passed 
to constructive solid geometry code which needs to know which side is 
inside/outside.

Could your suggestion of looking at the volume field's gradient be done 
after running marching_cubes? It might be simpler than extending the 
internals of marching_cube.
Then again, I'm working with a binary input volume. So I don't really have 
a gradient...

Regards
Janto

On Friday, January 10, 2014 2:51:56 AM UTC+2, Josh Warner wrote:
>
> Calculate the gradient for each face, normalize it, and orient the face 
> counterclockwise around the descent of said gradient vector.
>
> It would require some pretty heavy modification, but might be worth it.
>
> On the other hand, you could potentially hack in a fix (depends on how the 
> STL package works) much easier by making the output double sided. A 
> double-sided mesh has each face twice, covering both orientations This way 
> you'd just append `faces` to itself, reverse indexing to flip the 
> orientation of each face, e.g.
>
> ``` python
> import numpy as np
> from skimage.measure import marching_cubes
>
> verts, faces = marching_cubes(vol, value)
>
> faces = np.concatenate((faces, faces[:, -1], axis=0)
>
> # Remainder of STL export code for faces here
> ```
>
> Which would be *far, far* simpler and less computationally intense than 
> dealing with the gradients...
>
> Would you mind trying this quick fix, Janto?
>
>
> On Wednesday, January 8, 2014 6:35:28 PM UTC-6, Stefan van der Walt wrote:
>>
>> Josh, you said you had some ideas on how to add this--could you expand? 
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20140112/df7ea21f/attachment.html>


More information about the scikit-image mailing list