Пример #1
0
        /// <summary>
        /// set outside edge that link with this glyph point
        /// </summary>
        /// <param name="edge">edge must be outside edge</param>
        internal void SetOutsideEdgeUnconfirmEdgeDirection(OutsideEdgeLine edge)
        {
            //at this stage, we don't known the edge is outward or inward.
            //so just set it
            //------------------------------------------
            //e0 and e1 will be swaped later for this point SetCorrectInwardAndOutWardEdge() ***

            if (_e0 == null)
            {
                _e0 = edge;
            }
            else if (_e1 == null)
            {
                _e1 = edge;
            }
            else
            {
                throw new System.NotSupportedException();
            }
            //----
#if DEBUG
            if (edge == null)
            {
            }
            if (_e0 == _e1)
            {
                throw new System.NotSupportedException();
            }
#endif
        }
Пример #2
0
        void DrawPerpendicularEdgeControlPoints(PixelFarm.Drawing.Painter painter, OutsideEdgeLine internalEdgeLine)
        {
            //Vector2 regen0 = edge._newRegen0 * _pxscale;
            //Vector2 regen1 = edge._newRegen1 * _pxscale;
            //painter.FillRectLBWH(regen0.X, regen0.Y, 5, 5, PixelFarm.Drawing.Color.Green);
            //painter.FillRectLBWH(regen1.X, regen1.Y, 5, 5, PixelFarm.Drawing.Color.Blue);

            bool foundSomePerpendicularEdge = false;

            if (internalEdgeLine.ControlEdge_P != null && internalEdgeLine.ControlEdge_Q != null)
            {
                Vector2 m0 = internalEdgeLine.ControlEdge_P.GetMidPoint();
                Vector2 m1 = internalEdgeLine.ControlEdge_Q.GetMidPoint();

                //find angle from m0-> m1

                Vector2 v2 = (m0 + m1) / 2;
                //find perpendicular line  from  midpoint_m0m1 to edge
                Vector2 cutpoint;
                if (MyMath.FindPerpendicularCutPoint(internalEdgeLine, v2, out cutpoint))
                {
                    painter.Line(
                        v2.X * _pxscale, v2.Y * _pxscale,
                        cutpoint.X * _pxscale, cutpoint.Y * _pxscale,
                        PixelFarm.Drawing.Color.Red);
                    foundSomePerpendicularEdge = true;
                }

                //Vector2 e0_fitpos = internalEdgeLine.ControlEdge_P.GetFitPos() * _pxscale;
                //Vector2 e1_fitpos = internalEdgeLine.ControlEdge_Q.GetFitPos() * _pxscale;

                //painter.Line(
                //      e0_fitpos.X, e0_fitpos.Y,
                //      regen0.X, regen0.Y,
                //      PixelFarm.Drawing.Color.Yellow);
                //painter.Line(
                //    e1_fitpos.X, e1_fitpos.Y,
                //    regen1.X, regen1.Y,
                //    PixelFarm.Drawing.Color.Yellow);
            }

            if (internalEdgeLine.ControlEdge_P != null)
            {
                Vector2 v2 = internalEdgeLine.ControlEdge_P.GetMidPoint();
                //Vector2 cutpoint = internalEdgeLine._ctrlEdge_P_cutAt;
                //painter.Line(
                //    v2.X * _pxscale, v2.Y * _pxscale,
                //    cutpoint.X * _pxscale, cutpoint.Y * _pxscale,
                //    PixelFarm.Drawing.Color.Green);
                //foundSomePerpendicularEdge = true;
            }
            if (internalEdgeLine.ControlEdge_Q != null)
            {
                Vector2 v2 = internalEdgeLine.ControlEdge_Q.GetMidPoint();
                //Vector2 cutpoint = internalEdgeLine._ctrlEdge_Q_cutAt;
                //painter.Line(
                //    v2.X * _pxscale, v2.Y * _pxscale,
                //    cutpoint.X * _pxscale, cutpoint.Y * _pxscale,
                //    PixelFarm.Drawing.Color.Green);
                //foundSomePerpendicularEdge = true;
            }

            if (!foundSomePerpendicularEdge)
            {
                //TODO: reimplement this again
                //Vector2 midpoint = edge.GetMidPoint();
                //painter.FillRectLBWH(midpoint.X, midpoint.Y, 5, 5, PixelFarm.Drawing.Color.White);
            }
        }