/// <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 }
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); } }