Isosurface.AdaptiveDualContouring.OctreeNode.ProcessIndexes C# (CSharp) Method

ProcessIndexes() public static method

public static ProcessIndexes ( OctreeNode nodes, int direction, List indexes ) : void
nodes OctreeNode
direction int
indexes List
return void
        public static void ProcessIndexes(OctreeNode[] nodes, int direction, List<int> indexes)
        {
            int min_size = 10000000;
            int min_index = 0;
            int[] indices = { -1, -1, -1, -1 };
            bool flip = false;
            bool sign_changed = false;

            for (int i = 0; i < 4; i++)
            {
                int edge = processEdgeMask[direction, i];
                int c1 = edgevmap[edge, 0];
                int c2 = edgevmap[edge, 1];

                int m1 = (nodes[i].draw_info.corners >> c1) & 1;
                int m2 = (nodes[i].draw_info.corners >> c2) & 1;

                if (nodes[i].size < min_size)
                {
                    min_size = nodes[i].size;
                    min_index = i;
                    flip = m1 == 1;
                    sign_changed = ((m1 == 0 && m2 != 0) || (m1 != 0 && m2 == 0));
                }

                indices[i] = nodes[i].draw_info.index;

                //sign_changed = true;
            }

            if (sign_changed)
            {
                if (!flip)
                {
                    if (indices[0] != indices[1] && indices[1] != indices[3])
                    {
                        indexes.Add(indices[0]);
                        indexes.Add(indices[1]);
                        indexes.Add(indices[3]);
                    }

                    if (indices[0] != indices[2] && indices[2] != indices[3])
                    {
                        indexes.Add(indices[0]);
                        indexes.Add(indices[3]);
                        indexes.Add(indices[2]);
                    }
                }
                else
                {
                    if (indices[0] != indices[1] && indices[1] != indices[3])
                    {
                        indexes.Add(indices[0]);
                        indexes.Add(indices[3]);
                        indexes.Add(indices[1]);
                    }

                    if (indices[0] != indices[2] && indices[2] != indices[3])
                    {
                        indexes.Add(indices[0]);
                        indexes.Add(indices[2]);
                        indexes.Add(indices[3]);
                    }
                }
            }
        }