void BuildNodeLines()
    {
        for (int i = 0; i < nodeArray.Length; ++i)
        {
            Voxelizer.SDF_Node n = nodeArray[i];

            // the Cube
            float   s = (n.Max.x - n.Min.x) * 0.5f;
            Vector3 p = new Vector3(n.Min.x + s, n.Min.y + s, n.Min.z + s);

            /*
             *       0---2
             *      /   /|
             *     1---3 |
             *     | 4 : 6
             *     5---7/
             *
             *     Y  Z
             *     | /
             *     |/___X
             */

            CUBE c;
            //top
            c.v0 = new Vector3(p.x - s, p.y + s, p.z + s);
            c.v1 = new Vector3(p.x - s, p.y + s, p.z - s);
            c.v2 = new Vector3(p.x + s, p.y + s, p.z + s);
            c.v3 = new Vector3(p.x + s, p.y + s, p.z - s);
            //bottom
            c.v4 = new Vector3(p.x - s, p.y - s, p.z + s);
            c.v5 = new Vector3(p.x - s, p.y - s, p.z - s);
            c.v6 = new Vector3(p.x + s, p.y - s, p.z + s);
            c.v7 = new Vector3(p.x + s, p.y - s, p.z - s);

            AddCube(c);

            //at lowest nodes draw the Nearest surface Vector
            if (n.c0 == -1 && s * 2.0f <= Smallest_Size)
            {
                AddLine(p, n.SurfacePoint, true);
            }
        }
    }
    //=============================================================================================================================================
    //helper function to read a string and format it into a Node
    //=============================================================================================================================================
    Voxelizer.SDF_Node ParseNode(string word)
    {
        Voxelizer.SDF_Node node = new Voxelizer.SDF_Node();

        int    item = 0;
        string str  = "";

        word += ','; //required to get through all items
        char c = word[0];

        //Node Format : int,int[8],Vector3,Vector3,Vector3
        for (int i = 0; i < word.Length; ++i)
        {
            c = word[i];

            if (c == ',')
            {
                switch (item)
                {
                case 0:
                    node.index = int.Parse(str);
                    break;

                case 1:     //Node Index
                    node.c0 = int.Parse(str);
                    break;

                case 2:     //Node Children
                    node.c1 = int.Parse(str);
                    break;

                case 3:
                    node.c2 = int.Parse(str);
                    break;

                case 4:
                    node.c3 = int.Parse(str);
                    break;

                case 5:
                    node.c4 = int.Parse(str);
                    break;

                case 6:
                    node.c5 = int.Parse(str);
                    break;

                case 7:
                    node.c6 = int.Parse(str);
                    break;

                case 8:
                    node.c7 = int.Parse(str);
                    break;

                case 9:     //Node Min
                    node.Min.x = float.Parse(str);
                    break;

                case 10:
                    node.Min.y = float.Parse(str);
                    break;

                case 11:
                    node.Min.z = float.Parse(str);
                    break;

                case 12:     //Node Max
                    node.Max.x = float.Parse(str);
                    break;

                case 13:
                    node.Max.y = float.Parse(str);
                    break;

                case 14:
                    node.Max.z = float.Parse(str);
                    break;

                case 15:     //Node SurfacePoint
                    node.SurfacePoint.x = float.Parse(str);
                    break;

                case 16:
                    node.SurfacePoint.y = float.Parse(str);
                    break;

                case 17:     //never gets called....
                    node.SurfacePoint.z = float.Parse(str);
                    break;

                default:
                    break;
                }
                str = "";
                item++;
            }
            else
            {
                str += c;
            }
        }
        return(node);
    }