public override void Draw(System.Drawing.Graphics gc, Render.RenderParameter r, Render.RenderHint editState, Render.IDrawVisitor drawMethods, PointD mousePosition)
        {
            if (m_Param.Path != null)
            {
                /*if (editState.GetAttributes() == States.StateAttributes.Start)
                {
                    if (m_Param.Path is Tools.Model.VectorPath)
                    {
                        if (r.StrokeFill != null)
                            gc.FillPath(r.StrokeFill, (Tools.Model.VectorPath)m_Param.Path);
                        gc.DrawPath(r.StrokeOutline, (Tools.Model.VectorPath)m_Param.Path);
                    }

                }
                else*/ if (editState == Render.RenderHint.Start)
                {
                    if (m_Param.Path is Tools.Model.VectorPath)
                    {
                        Pen dashPen = (Pen)r.StrokeOutline.Clone();
                        dashPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                        if (m_Param.Path.PointCount > 0)
                        {
                            PointD firstPoint = (PointD)m_Param.Path.GetFirstPoint();
                            gc.DrawEllipse(dashPen, (float)firstPoint.X - Tools.Render.DrawHelper.TARGET_SIZE / 2.0f, (float)firstPoint.Y - Tools.Render.DrawHelper.TARGET_SIZE / 2.0f, (float)Tools.Render.DrawHelper.TARGET_SIZE, (float)Tools.Render.DrawHelper.TARGET_SIZE);

                            if (r.StrokeFill != null)
                                gc.FillPath(r.StrokeFill, ( Tools.Model.VectorPath)m_Param.Path);
                            gc.DrawPath(r.StrokeOutline, ( Tools.Model.VectorPath)m_Param.Path);

                            DrawRegionRepresentation(gc, r, drawMethods, mousePosition);
                        }
                    }
                }
                /*else if (editState.GetAttributes() == States.StateAttributes.Change)
                {
                    /*
                    drawMethods.DrawNegativeSpace(gc, m_Param, r);
                    drawMethods.DrawPositiveSpace(gc, m_Param, r);
                     *-/
                    DrawRegionRepresentation(gc, r, mousePosition);
                    if (editState is States.RegionChange)
                        ((States.RegionChange)editState).Handles.DrawHandles(gc, m_Param, r);

                }*/
                else
                {
                    /*
                    drawMethods.DrawNegativeSpace(gc, m_Param, r);
                    drawMethods.DrawPositiveSpace(gc, m_Param, r);
                     */

                    if (m_Param.Path is Tools.Model.VectorPath)
                    {
                        if (r.StrokeFill != null)
                            gc.FillPath(r.StrokeFill, (Tools.Model.VectorPath)m_Param.Path);
                        gc.DrawPath(r.StrokeOutline, (Tools.Model.VectorPath)m_Param.Path);
                    }

                    DrawRegionRepresentation(gc, r,drawMethods, mousePosition);

                        //TODO ((States.IFilterHandles)editState).Handles.DrawHandles(gc, m_Param, r);

                }

                drawMethods.DrawHandles(gc, this, r);

            }
        }
        public void Draw(System.Drawing.Graphics gc, Render.RenderParameter r, Render.RenderHint editState, Render.IDrawVisitor drawMethods, PointD mousePosition)
        {
            if (m_Param.Path != null && m_Param.Path.PointCount >= 2)
            {
                try
                {
                    if (m_visibleThickPath != null)
                    {
                        if (r.RegionInsideFill != null)
                            gc.FillPath(r.RegionInsideFill, m_visibleThickPath);
                        gc.DrawPath(r.RegionOutline, m_visibleThickPath);
                    }
                    gc.DrawPath(r.RegionOutline, (Tools.Model.VectorPath)m_Param.Path);
                }
                catch
                {
                    // don't know what happened here
                }

                if (editState ==  Render.RenderHint.Start)
                {
                    Pen dashPen = (Pen)r.RegionOutline.Clone();
                    dashPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                    if (m_Param.Path.PointCount > 0)
                    {
                        PointD firstPoint = mousePosition; // TODO ((States.LineHover)editState).FirstPoint;
                        gc.DrawEllipse(dashPen, (float)firstPoint.X - Tools.Render.DrawHelper.TARGET_SIZE / 2.0f, (float)firstPoint.Y - Tools.Render.DrawHelper.TARGET_SIZE / 2.0f, (float)Tools.Render.DrawHelper.TARGET_SIZE, (float)Tools.Render.DrawHelper.TARGET_SIZE);
                    }

                    /*
                    PointD normal;
                    double radius;
                    NormalOfPoint(mousePosition, out normal, out radius);
                    gc.DrawLine(r.ActivePen, (Point)mousePosition, (Point)(mousePosition - normal * radius));
                     */

                }
                else
                {
                    DrawArrowForces(gc, r, drawMethods);
                }

                    drawMethods.DrawHandles(gc, this, r);
                    // TODO ((States.IFilterHandles)editState).Handles.DrawHandles(gc, m_Param, r);

            }
        }