public override void DebugDraw(ref Matrix drawMatrix)
        {
            base.DebugDraw(ref drawMatrix);

            if (MyFakes.DEBUG_DRAW_NAVMESH_PROCESSED_VOXEL_CELLS)
            {
                Vector3 tformedCellSize = Vector3.TransformNormal(m_cellSize, drawMatrix);
                Vector3 origin          = Vector3.Transform(m_voxelMap.PositionLeftBottomCorner - m_voxelMap.PositionComp.GetPosition(), drawMatrix);

                BoundingBoxD bb;
                foreach (var cell in m_processedCells)
                {
                    bb.Min = origin + tformedCellSize * (new Vector3D(0.0625) + cell);
                    bb.Max = bb.Min + tformedCellSize;
                    VRageRender.MyRenderProxy.DebugDrawAABB(bb, Color.Orange, 1.0f, 1.0f, false);
                    //VRageRender.MyRenderProxy.DebugDrawText3D(bb.Center, cell.ToString(), Color.Orange, 0.5f, false);
                }
            }

            VRageRender.MyRenderProxy.DebugDrawSphere(m_debugPos1, 0.2f, Color.Red, 1.0f, false);
            VRageRender.MyRenderProxy.DebugDrawSphere(m_debugPos2, 0.2f, Color.Green, 1.0f, false);
            VRageRender.MyRenderProxy.DebugDrawSphere(m_debugPos3, 0.1f, Color.Red, 1.0f, false);
            VRageRender.MyRenderProxy.DebugDrawSphere(m_debugPos4, 0.1f, Color.Green, 1.0f, false);

            if (MyFakes.DEBUG_DRAW_VOXEL_CONNECTION_HELPER)
            {
                m_connectionHelper.DebugDraw(ref drawMatrix, Mesh);
            }

            if (MyFakes.DEBUG_DRAW_NAVMESH_CELL_BORDERS)
            {
                foreach (var cell in m_debugCellEdges)
                {
                    foreach (var edge in cell.Value)
                    {
                        VRageRender.MyRenderProxy.DebugDrawLine3D(edge.V1, edge.V2, Color.Orange, Color.Orange, false);
                    }
                }
            }
            else
            {
                m_debugCellEdges.Clear();
            }

            if (MyFakes.DEBUG_DRAW_NAVMESH_HIERARCHY)
            {
                if (MyFakes.DEBUG_DRAW_NAVMESH_HIERARCHY_LITE)
                {
                    m_higherLevel.DebugDraw(lite: true);
                }
                else
                {
                    m_higherLevel.DebugDraw(lite: false);
                    m_higherLevelHelper.DebugDraw();
                }
            }
        }
        public override void DebugDraw(ref Matrix drawMatrix)
        {
            if (!MyDebugDrawSettings.ENABLE_DEBUG_DRAW)
            {
                return;
            }

            base.DebugDraw(ref drawMatrix);

            if ((MyDebugDrawSettings.DEBUG_DRAW_NAVMESHES & MyWEMDebugDrawMode.EDGES) != 0)
            {
                if (m_connectionHelper != null)
                {
                    foreach (var edge in m_connectionHelper)
                    {
                        Vector3 A = Vector3.Transform(edge.Key.A / 256.0f, drawMatrix);
                        Vector3 B = Vector3.Transform(edge.Key.B / 256.0f, drawMatrix);
                        MyRenderProxy.DebugDrawLine3D(A, B, Color.Red, Color.Yellow, false);
                    }
                }
            }

            if ((MyDebugDrawSettings.DEBUG_DRAW_NAVMESHES & MyWEMDebugDrawMode.NORMALS) != 0)
            {
                foreach (var entry in m_smallTriangleRegistry)
                {
                    var list = entry.Value;
                    foreach (var triIndex in list)
                    {
                        var     tri    = GetTriangle(triIndex);
                        Vector3 normal = Vector3.Transform(tri.Center + tri.Normal * 0.2f, drawMatrix);
                        Vector3 center = Vector3.Transform(tri.Center, drawMatrix);
                        MyRenderProxy.DebugDrawLine3D(center, normal, Color.Blue, Color.Blue, true);
                    }
                }
            }

            if (MyFakes.DEBUG_DRAW_NAVMESH_HIERARCHY)
            {
                if (m_higherLevel != null)
                {
                    m_higherLevel.DebugDraw(lite: MyFakes.DEBUG_DRAW_NAVMESH_HIERARCHY_LITE);
                }
            }

            /*foreach (var entry in m_smallTriangleRegistry)
             * {
             *  var list = entry.Value;
             *  foreach (var triIndex in list)
             *  {
             *      var tri = GetTriangle(triIndex);
             *      Vector3 normal = Vector3.Transform(tri.Center + tri.Normal * 0.2f, drawMatrix);
             *      Vector3 center = Vector3.Transform(tri.Center, drawMatrix);
             *      MyRenderProxy.DebugDrawText3D(center, entry.Key.ToString(), Color.Blue, 0.7f, true);
             *  }
             * }*/

            /*
             * if (m_cubeSet != null)
             * {
             *  foreach (var entry in m_cubeSet)
             *  {
             *      Vector3 pos = Vector3.Transform(entry, drawMatrix);
             *      MyRenderProxy.DebugDrawSphere(pos, 0.1f, Color.Red, 1.0f, false);
             *      MyRenderProxy.DebugDrawText3D(pos, entry.ToString(), Color.Red, 1.0f, false);
             *  }
             * }*/
        }