Contour ======= Isosurface contouring methods are used to extract the surface from a field of values, most often an image or an implicit function evaluated on a grid of points. One of the earliest and most famous methods is the Marching Cubes algorithm by :cite:t:`Lorensen1987`, which inspired a variety of "marching element" methods that follow a similar approach. These methods "march" from element to element, at each one assessing the node values to determine whether each node is above or below the isovalue threshold in order to determine whether that node is inside or outside of the surface. Partitions are then created by placing new nodes along edges that change from inside to outside. Lookup tables can then be used to efficiently determine what partitions need to be used based on which nodes are inside and which nodes are outside. The new nodes can either be placed on the midpoint of the edges or interpolation can be used to approximate where along the edge the isovalue is. Marching Squares ---------------- See also :func:`~mymesh.contour.MarchingSquares` Marching squares operates on square (or quadrilateral) elements. Since each of the four nodes can either be inside or outside of the isoline, a :math:`2^4=16` entry lookup table can be used where a binary lookup index can be obtained based on the state of each node (1 = inside, 0 = outside). Marching squares can either be used to extract line segments along the boundary or triangles to fill the inside of the isoline. .. graphviz:: graph bits { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", color="#BF616A", xlabel="0"]; v1 [pos="1.,0.!", color="#EBCB8B", xlabel="1"]; v2 [pos="1.,1.!", color="#A3BE8C", xlabel="2"]; v3 [pos="0.,1.!", color="#B48EAD", xlabel="3"]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; struct1 [shape=plaintext, pos="2.5,0.75!", label=<
Index = 0 1 2 3
>]; } Edge Lookup Table .. grid:: 3 6 6 6 :outline: .. grid-item:: :child-align: center .. graphviz:: graph case0 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; } Case 0 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v6 -- v7 [color="#5E81AC"]; } Case 1 .. grid-item:: :child-align: center .. graphviz:: graph case2 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v5 -- v6 [color="#5E81AC"]; } Case 2 .. grid-item:: :child-align: center .. graphviz:: graph case3 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v5 -- v7 [color="#5E81AC"]; } Case 3 .. grid-item:: :child-align: center .. graphviz:: graph case4 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v5 [color="#5E81AC"]; } Case 4 .. grid-item:: :child-align: center .. graphviz:: graph case5 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v4 [color="#5E81AC"]; v5 -- v6 [color="#5E81AC"]; } Case 5 .. grid-item:: :child-align: center .. graphviz:: graph case6 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v6 [color="#5E81AC"]; } Case 6 .. grid-item:: :child-align: center .. graphviz:: graph case7 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v7 [color="#5E81AC"]; } Case 7 .. grid-item:: :child-align: center .. graphviz:: graph case8 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v4 [color="#5E81AC"]; } Case 8 .. grid-item:: :child-align: center .. graphviz:: graph case9 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v6 -- v4 [color="#5E81AC"]; } Case 9 .. grid-item:: :child-align: center .. graphviz:: graph case10 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v5 [color="#5E81AC"]; v6 -- v7 [color="#5E81AC"]; } Case 10 .. grid-item:: :child-align: center .. graphviz:: graph case11 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=bllack]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v5 -- v4 [color="#5E81AC"]; } Case 11 .. grid-item:: :child-align: center .. graphviz:: graph case12 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v5 [color="#5E81AC"]; } Case 12 .. grid-item:: :child-align: center .. graphviz:: graph case13 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v6 -- v5 [color="#5E81AC"]; } Case 13 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v6 [color="#5E81AC"]; } Case 14 .. grid-item:: :child-align: center .. graphviz:: graph case15 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; } Case 15 .. grid-item:: :child-align: center .. graphviz:: graph legend { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,1.!", fillcolor=black]; v1 [pos="0.,0.75!", fillcolor=white]; Inside [shape=plaintext, pos="0.6,1.!"]; Outside [shape=plaintext, pos="0.6,0.75!"]; blank [pos="0.,0!", color=white]; } Triangle Lookup Table .. grid:: 3 6 6 6 :outline: .. grid-item:: :child-align: center .. graphviz:: graph case0 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; } Case 0 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v6 [color="#5E81AC"]; v6 -- v3 [color="#5E81AC"]; v3 -- v7 [color="#5E81AC"]; } Case 1 .. grid-item:: :child-align: center .. graphviz:: graph case2 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v5 -- v2 [color="#5E81AC"]; v2 -- v6 [color="#5E81AC"]; v6 -- v5 [color="#5E81AC"]; } Case 2 .. grid-item:: :child-align: center .. graphviz:: graph case3 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; //v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v7 -- v5 [color="#5E81AC"]; v5 -- v2 [color="#5E81AC"]; v2 -- v7 [color="#5E81AC"]; v2 -- v3 [color="#5E81AC"]; v3 -- v7 [color="#5E81AC"]; } Case 3 .. grid-item:: :child-align: center .. graphviz:: graph case4 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v1 [color="#5E81AC"]; v1 -- v5 [color="#5E81AC"]; v5 -- v4 [color="#5E81AC"]; } Case 4 .. grid-item:: :child-align: center .. graphviz:: graph case5 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v1 [color="#5E81AC"]; v1 -- v5 [color="#5E81AC"]; v5 -- v4 [color="#5E81AC"]; v5 -- v6 [color="#5E81AC"]; v6 -- v4 [color="#5E81AC"]; v6 -- v7 [color="#5E81AC"]; v7 -- v4 [color="#5E81AC"]; v6 -- v3 [color="#5E81AC"]; v3 -- v7 [color="#5E81AC"]; } Case 5 .. grid-item:: :child-align: center .. graphviz:: graph case6 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; //v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v4 -- v1 [color="#5E81AC"]; v1 -- v2 [color="#5E81AC"]; v2 -- v4 [color="#5E81AC"]; v2 -- v6 [color="#5E81AC"]; v6 -- v4 [color="#5E81AC"]; } Case 6 .. grid-item:: :child-align: center .. graphviz:: graph case7 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=white]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; //v1 -- v2 [style=dotted]; //v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v1 -- v2 [color="#5E81AC"]; v2 -- v3 [color="#5E81AC"]; v3 -- v1 [color="#5E81AC"]; v3 -- v4 [color="#5E81AC"]; v4 -- v1 [color="#5E81AC"]; v3 -- v7 [color="#5E81AC"]; v4 -- v7 [color="#5E81AC"]; } Case 7 .. grid-item:: :child-align: center .. graphviz:: graph case8 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [color="#5E81AC"]; v4 -- v7 [color="#5E81AC"]; v7 -- v0 [color="#5E81AC"]; } Case 8 .. grid-item:: :child-align: center .. graphviz:: graph case9 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; //v3 -- v0 [style=dotted]; v0 -- v4 [color="#5E81AC"]; v4 -- v6 [color="#5E81AC"]; v6 -- v0 [color="#5E81AC"]; v6 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; } Case 9 .. grid-item:: :child-align: center .. graphviz:: graph case10 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [color="#5E81AC"]; v4 -- v7 [color="#5E81AC"]; v7 -- v0 [color="#5E81AC"]; v4 -- v5 [color="#5E81AC"]; v5 -- v7 [color="#5E81AC"]; v5 -- v6 [color="#5E81AC"]; v6 -- v7 [color="#5E81AC"]; v5 -- v2 [color="#5E81AC"]; v2 -- v6 [color="#5E81AC"]; } Case 10 .. grid-item:: :child-align: center .. graphviz:: graph case11 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=white]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; //v2 -- v3 [style=dotted]; //v3 -- v0 [style=dotted]; v0 -- v2 [color="#5E81AC"]; v2 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; v0 -- v4 [color="#5E81AC"]; v4 -- v5 [color="#5E81AC"]; v5 -- v0 [color="#5E81AC"]; v5 -- v2 [color="#5E81AC"]; } Case 11 .. grid-item:: :child-align: center .. graphviz:: graph case12 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; //v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v1 [color="#5E81AC"]; v1 -- v5 [color="#5E81AC"]; v5 -- v0 [color="#5E81AC"]; v5 -- v7 [color="#5E81AC"]; v7 -- v0 [color="#5E81AC"]; } Case 12 .. grid-item:: :child-align: center .. graphviz:: graph case13 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=white]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; //v0 -- v1 [style=dotted]; v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; //v3 -- v0 [style=dotted]; v0 -- v1 [color="#5E81AC"]; v1 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; v1 -- v5 [color="#5E81AC"]; v5 -- v6 [color="#5E81AC"]; v6 -- v1 [color="#5E81AC"]; v6 -- v3 [color="#5E81AC"]; } Case 13 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=white]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; v6 [pos="0.5,1.!", color="#5E81AC"]; v7 [pos="0.,0.5!", color="#5E81AC"]; //v0 -- v1 [style=dotted]; //v1 -- v2 [style=dotted]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v1 [color="#5E81AC"]; v1 -- v2 [color="#5E81AC"]; v2 -- v0 [color="#5E81AC"]; v2 -- v6 [color="#5E81AC"]; v6 -- v0 [color="#5E81AC"]; v6 -- v7 [color="#5E81AC"]; v7 -- v0 [color="#5E81AC"]; } Case 14 .. grid-item:: :child-align: center .. graphviz:: graph case15 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,0.!", fillcolor=black]; v1 [pos="1.,0.!", fillcolor=black]; v2 [pos="1.,1.!", fillcolor=black]; v3 [pos="0.,1.!", fillcolor=black]; //v4 [pos="0.5,0.!", color="#5E81AC"]; //v5 [pos="1.0,0.5!", color="#5E81AC"]; //v6 [pos="0.5,1.!", color="#5E81AC"]; //v7 [pos="0.,0.5!", color="#5E81AC"]; v0 -- v1 [color="#5E81AC"]; v1 -- v2 [color="#5E81AC"]; v2 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; v0 -- v2 [color="#5E81AC"]; } Case 15 .. grid-item:: :child-align: center .. graphviz:: graph legend { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,1.!", fillcolor=black]; v1 [pos="0.,0.75!", fillcolor=white]; Inside [shape=plaintext, pos="0.6,1.!"]; Outside [shape=plaintext, pos="0.6,0.75!"]; blank [pos="0.,0!", color=white]; } Marching Cubes -------------- :cite:t:`Lorensen1987` See also :func:`~mymesh.contour.MarchingCubes` For a cube, there are :math:`2^8 = 256` possible combinations of vertices falling inside or outside of the surface, however by rotations and inversion, this can be reduced to 15 unique triangulations. Marching Cubes Lookup Table .. grid:: 3 6 6 6 :outline: .. grid-item:: :child-align: center .. graphviz:: graph case0 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=white]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges //e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; //e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges //e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; } Case 0 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e4 [color="#5E81AC"]; e4 -- e0 [color="#5E81AC"]; } Case 1 .. grid-item:: :child-align: center .. graphviz:: graph case2 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges //e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e1 -- e3 [color="#5E81AC"]; e3 -- e5 [color="#5E81AC"]; e5 -- e1 [color="#5E81AC"]; e3 -- e4 [color="#5E81AC"]; e4 -- e5 [color="#5E81AC"]; } Case 2 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=black]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e4 [color="#5E81AC"]; e4 -- e0 [color="#5E81AC"]; e5 -- e8 [color="#5E81AC"]; e8 -- e9 [color="#5E81AC"]; e9 -- e5 [color="#5E81AC"]; } Case 3 .. grid-item:: :child-align: center .. graphviz:: graph case4 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=black]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e4 [color="#5E81AC"]; e4 -- e0 [color="#5E81AC"]; e6 -- e9 [color="#5E81AC"]; e9 -- e10 [color="#5E81AC"]; e10 -- e6 [color="#5E81AC"]; } Case 4 .. grid-item:: :child-align: center .. graphviz:: graph case5 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=white]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges //e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e5 [color="#5E81AC"]; e5 -- e0 [color="#5E81AC"]; e5 -- e7 [color="#5E81AC"]; e5 -- e6 [color="#5E81AC"]; e6 -- e7 [color="#5E81AC"]; e3 -- e7 [color="#5E81AC"]; } Case 5 .. grid-item:: :child-align: center .. graphviz:: graph case6 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=black]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges //e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e3 -- e1 [color="#5E81AC"]; e1 -- e5 [color="#5E81AC"]; e5 -- e3 [color="#5E81AC"]; e4 -- e5 [color="#5E81AC"]; e4 -- e3 [color="#5E81AC"]; e6 -- e9 [color="#5E81AC"]; e9 -- e10 [color="#5E81AC"]; e10 -- e6 [color="#5E81AC"]; } Case 6 .. grid-item:: :child-align: center .. graphviz:: graph case7 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=white]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=white]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=black]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=black]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; //e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e1 [color="#5E81AC"]; e1 -- e5 [color="#5E81AC"]; e5 -- e0 [color="#5E81AC"]; e4 -- e8 [color="#5E81AC"]; e8 -- e11 [color="#5E81AC"]; e11 -- e4 [color="#5E81AC"]; e6 -- e9 [color="#5E81AC"]; e9 -- e10 [color="#5E81AC"]; e10 -- e6 [color="#5E81AC"]; } Case 7 .. grid-item:: :child-align: center .. graphviz:: graph case8 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges //e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; //e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e4 -- e5 [color="#5E81AC"]; e5 -- e6 [color="#5E81AC"]; e6 -- e4 [color="#5E81AC"]; e4 -- e7 [color="#5E81AC"]; e7 -- e6 [color="#5E81AC"]; } Case 8 .. grid-item:: :child-align: center .. graphviz:: graph case9 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=black]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; //e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e1 [color="#5E81AC"]; e1 -- e6 [color="#5E81AC"]; e6 -- e0 [color="#5E81AC"]; e0 -- e10 [color="#5E81AC"]; e10 -- e6 [color="#5E81AC"]; e0 -- e4 [color="#5E81AC"]; e4 -- e11 [color="#5E81AC"]; e11 -- e10 [color="#5E81AC"]; e4 -- e10 [color="#5E81AC"]; } Case 9 .. grid-item:: :child-align: center .. graphviz:: graph case10 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=black]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=black]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges //e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e8 [color="#5E81AC"]; e8 -- e0 [color="#5E81AC"]; e8 -- e11 [color="#5E81AC"]; e11 -- e3 [color="#5E81AC"]; e1 -- e2 [color="#5E81AC"]; e2 -- e9 [color="#5E81AC"]; e9 -- e1 [color="#5E81AC"]; e9 -- e10 [color="#5E81AC"]; e10 -- e2 [color="#5E81AC"]; } Case 10 .. grid-item:: :child-align: center .. graphviz:: graph case11 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=black]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; //e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; //e5 [pos="1.4, 1.0!" color="#5E81AC"]; //e6 [pos="1.8, 1.4!", color="#5E81AC"]; e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; //e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e1 [color="#5E81AC"]; e1 -- e9 [color="#5E81AC"]; e9 -- e0 [color="#5E81AC"]; e0 -- e4 [color="#5E81AC"]; e4 -- e7 [color="#5E81AC"]; e7 -- e0 [color="#5E81AC"]; e7 -- e10 [color="#5E81AC"]; e10 -- e9 [color="#5E81AC"]; e9 -- e7 [color="#5E81AC"]; } Case 11 .. grid-item:: :child-align: center .. graphviz:: graph case12 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=white]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=black]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=white]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.0!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; e7 [pos="0.8, 1.3!", color="#5E81AC"]; // top edges e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; //e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e5 [color="#5E81AC"]; e5 -- e6 [color="#5E81AC"]; e6 -- e7 [color="#5E81AC"]; e7 -- e3 [color="#5E81AC"]; e0 -- e5 [color="#5E81AC"]; e5 -- e7 [color="#5E81AC"]; e4 -- e11 [color="#5E81AC"]; e11 -- e8 [color="#5E81AC"]; e8 -- e4 [color="#5E81AC"]; } Case 12 .. grid-item:: :child-align: center .. graphviz:: graph case13 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=black]; v1 [pos="1.4,0.5!", fillcolor=white]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=white]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=black]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=black]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; e1 [pos="1.6, 0.7!", color="#5E81AC"]; e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 1.1!" color="#5E81AC"]; e6 [pos="1.8, 1.4!", color="#5E81AC"]; e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges e8 [pos="1.0, 1.5!", color="#5E81AC"]; e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e4 [color="#5E81AC"]; e4 -- e0 [color="#5E81AC"]; e1 -- e2 [color="#5E81AC"]; e2 -- e6 [color="#5E81AC"]; e6 -- e1 [color="#5E81AC"]; e5 -- e8 [color="#5E81AC"]; e8 -- e9 [color="#5E81AC"]; e9 -- e5 [color="#5E81AC"]; e7 -- e10 [color="#5E81AC"]; e10 -- e11 [color="#5E81AC"]; e11 -- e7 [color="#5E81AC"]; } Case 13 .. grid-item:: :child-align: center .. graphviz:: graph case14 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.4,0.5!", fillcolor=white]; v1 [pos="1.4,0.5!", fillcolor=black]; v2 [pos="1.8,0.9!", fillcolor=black]; v3 [pos="0.8,0.9!", fillcolor=black]; v4 [pos="0.4,1.5!", fillcolor=white]; v5 [pos="1.4,1.5!", fillcolor=white]; v6 [pos="1.8,1.9!", fillcolor=white]; v7 [pos="0.8,1.9!", fillcolor=black]; // bottom edges e0 [pos="0.9, 0.5!", color="#5E81AC"]; //e1 [pos="1.6, 0.7!", color="#5E81AC"]; //e2 [pos="1.3, 0.9!", color="#5E81AC"]; e3 [pos="0.6, 0.7!", color="#5E81AC"]; // middle edges //e4 [pos="0.4, 1.0!", color="#5E81AC"]; e5 [pos="1.4, 0.75!" color="#5E81AC"]; e6 [pos="1.8, 1.6!", color="#5E81AC"]; //e7 [pos="0.8, 1.4!", color="#5E81AC"]; // top edges //e8 [pos="0.9, 1.5!", color="#5E81AC"]; //e9 [pos="1.6, 1.7!", color="#5E81AC"]; e10 [pos="1.3, 1.9!", color="#5E81AC"]; e11 [pos="0.6, 1.7!", color="#5E81AC"]; v0 -- v1 [style=solid]; v1 -- v2 [style=solid]; v2 -- v3 [style=dotted]; v3 -- v0 [style=dotted]; v0 -- v4 [style=solid]; v1 -- v5 [style=solid]; v2 -- v6 [style=solid]; v3 -- v7 [style=dotted]; v4 -- v5 [style=solid]; v5 -- v6 [style=solid]; v6 -- v7 [style=solid]; v7 -- v4 [style=solid]; e0 -- e3 [color="#5E81AC"]; e3 -- e11 [color="#5E81AC"]; e11 -- e0 [color="#5E81AC"]; e0 -- e5 [color="#5E81AC"]; e5 -- e6 [color="#5E81AC"]; e6 -- e11 [color="#5E81AC"]; e11 -- e10 [color="#5E81AC"]; e10 -- e6 [color="#5E81AC"]; e0 -- e6 [color="#5E81AC"]; } Case 14 .. grid-item:: :child-align: center .. graphviz:: graph legend { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,1.!", fillcolor=black]; v1 [pos="0.,0.75!", fillcolor=white]; Inside [shape=plaintext, pos="0.6,1.!"]; Outside [shape=plaintext, pos="0.6,0.75!"]; blank [pos="0.,0!", color=white]; } Marching Cubes 33 ^^^^^^^^^^^^^^^^^ :cite:t:`Chernyaev1995` See also :func:`~mymesh.contour.MarchingCubes` One of the main shortcomings of the marching cubes algorithm is that there exist several ambiguous cases - situations in which there are multiple possible triangulations that could be used to separate the inside from the outside of the surface. For example, the opposite corners of Case 4 could be connected through the center of the cube. These ambiguities can lead to topological errors and non-watertight surfaces. Several methods have been proposed to resolve these ambiguities, including an extend lookup table that has 33 entries, rather than 15 :cite:`Chernyaev1995`. Additional tests are used to test whether diagonal nodes are connected or separated to choose the correct triangulation. Marching Tetrahedra ------------------- :cite:t:`Bloomenthal1994` See also :func:`~mymesh.contour.MarchingTetrahedra` Another approach to resolve the ambiguities of marching cubes is to partition tetrahedra, rather than cubes. Mixed-Surface Lookup Table .. grid:: 3 6 6 6 :outline: .. grid-item:: :child-align: center .. graphviz:: graph case0 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=white]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; } Case 0 .. grid-item:: :child-align: center .. graphviz:: graph case1 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=black]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v3 -- v5 [color="#5E81AC"]; v5 -- v4 [color="#5E81AC"]; v4 -- v3 [color="#5E81AC"]; } Case 1 .. grid-item:: :child-align: center .. graphviz:: graph case2 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=white]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v4 -- v2 [color="#5E81AC"]; v2 -- v1 [color="#5E81AC"]; v1 -- v4 [color="#5E81AC"]; } Case 2 .. grid-item:: :child-align: center .. graphviz:: graph case3 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=black]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v1 -- v3 [color="#5E81AC"]; v3 -- v5 [color="#5E81AC"]; v5 -- v2 [color="#5E81AC"]; v2 -- v1 [color="#5E81AC"]; } Case 3 .. grid-item:: :child-align: center .. graphviz:: graph case4 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=white]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v3 [color="#5E81AC"]; v3 -- v1 [color="#5E81AC"]; v1 -- v0 [color="#5E81AC"]; } Case 4 .. grid-item:: :child-align: center .. graphviz:: graph case5 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=black]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v1 -- v0 [color="#5E81AC"]; v0 -- v5 [color="#5E81AC"]; v5 -- v4 [color="#5E81AC"]; v4 -- v1 [color="#5E81AC"]; } Case 5 .. grid-item:: :child-align: center .. graphviz:: graph case6 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=white]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v3 [color="#5E81AC"]; v3 -- v4 [color="#5E81AC"]; v4 -- v2 [color="#5E81AC"]; v2 -- v0 [color="#5E81AC"]; } Case 6 .. grid-item:: :child-align: center .. graphviz:: graph case7 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=white]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=black]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v5 [color="#5E81AC"]; v5 -- v2 [color="#5E81AC"]; v2 -- v0 [color="#5E81AC"]; } Case 7 .. grid-item:: :child-align: center .. graphviz:: graph case8 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=white]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v2 [color="#5E81AC"]; v2 -- v5 [color="#5E81AC"]; v5 -- v0 [color="#5E81AC"]; } Case 8 .. grid-item:: :child-align: center .. graphviz:: graph case9 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=black]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v2 [color="#5E81AC"]; v2 -- v4 [color="#5E81AC"]; v4 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; } Case 9 .. grid-item:: :child-align: center .. graphviz:: graph case10 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=white]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v1 [color="#5E81AC"]; v1 -- v4 [color="#5E81AC"]; v4 -- v5 [color="#5E81AC"]; v5 -- v0 [color="#5E81AC"]; } Case 10 .. grid-item:: :child-align: center .. graphviz:: graph case11 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=white]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=black]; v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v0 -- v1 [color="#5E81AC"]; v1 -- v3 [color="#5E81AC"]; v3 -- v0 [color="#5E81AC"]; } Case 11 .. grid-item:: :child-align: center .. graphviz:: graph case12 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=white]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v1 -- v2 [color="#5E81AC"]; v2 -- v5 [color="#5E81AC"]; v5 -- v3 [color="#5E81AC"]; v3 -- v1 [color="#5E81AC"]; } Case 12 .. grid-item:: :child-align: center .. graphviz:: graph case6 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=white]; v9 [pos="0.4,0.8!", fillcolor=black]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; v1 [pos="0.75,0.!", color="#5E81AC"]; v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v1 -- v2 [color="#5E81AC"]; v2 -- v4 [color="#5E81AC"]; v4 -- v1 [color="#5E81AC"]; } Case 13 .. grid-item:: :child-align: center .. graphviz:: graph case14 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=white]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; v3 [pos="0.5,0.3!", color="#5E81AC"]; v4 [pos="0.65,0.5!", color="#5E81AC"]; v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; v3 -- v4 [color="#5E81AC"]; v4 -- v5 [color="#5E81AC"]; v5 -- v3 [color="#5E81AC"]; } Case 14 .. grid-item:: :child-align: center .. graphviz:: graph case15 { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v6 [pos="0.,0.!", fillcolor=black]; v7 [pos="0.6,-0.2!", fillcolor=black]; v8 [pos="0.9,0.2!", fillcolor=black]; v9 [pos="0.4,0.8!", fillcolor=black]; //v0 [pos="0.3,-0.1!", color="#5E81AC"]; //v1 [pos="0.75,0.!", color="#5E81AC"]; //v2 [pos="0.45,0.1!", color="#5E81AC"]; //v3 [pos="0.5,0.3!", color="#5E81AC"]; //v4 [pos="0.65,0.5!", color="#5E81AC"]; //v5 [pos="0.2,0.4!", color="#5E81AC"]; v6 -- v7 [style=solid]; v7 -- v8 [style=solid]; v8 -- v6 [style=dotted]; v6 -- v9 [style=solid]; v7 -- v9 [style=solid]; v8 -- v9 [style=solid]; } Case 15 .. grid-item:: :child-align: center .. graphviz:: graph legend { node [shape=point, fontname="source code pro"]; edge [style=solid, penwidth=2]; v0 [pos="0.,1.!", fillcolor=black]; v1 [pos="0.,0.75!", fillcolor=white]; Inside [shape=plaintext, pos="0.6,1.!"]; Outside [shape=plaintext, pos="0.6,0.75!"]; blank [pos="0.,0!", color=white]; } A similar lookup table can be constructed for volume elements (tetrahedra and wedges). Quadrilateral and wedge elements can be decomposed into triangles and tetrahedra, respectively, however care must be taken to ensure the edges of adjacent wedges are partitioned consistently so that they are split along the same diagonal.