bool VertexAtBoundary(OECPVertex vtx, RectangleF square) { var leftLine = new OECPLine(new OECPVertex(square.Left, square.Top), new OECPVertex(square.Left, square.Bottom), true); var rightLine = new OECPLine(new OECPVertex(square.Right, square.Top), new OECPVertex(square.Right, square.Bottom), true); var topLine = new OECPLine(new OECPVertex(square.Left, square.Top), new OECPVertex(square.Right, square.Top), true); var botLine = new OECPLine(new OECPVertex(square.Left, square.Bottom), new OECPVertex(square.Right, square.Bottom), true); bool onLeft = leftLine.VertexOnLine(vtx); if (onLeft) { _projVtx = leftLine.GetProjectVertex(vtx); return(true); } bool onRight = rightLine.VertexOnLine(vtx); if (onRight) { _projVtx = rightLine.GetProjectVertex(vtx); return(true); } bool onTop = topLine.VertexOnLine(vtx); if (onTop) { _projVtx = topLine.GetProjectVertex(vtx); return(true); } bool onBot = botLine.VertexOnLine(vtx); if (onBot) { _projVtx = botLine.GetProjectVertex(vtx); return(true); } return(false); }