Example #1
0
 private void AddToCornerList(List <Graph.Corner> corners, Graph.Corner corner)
 {
     if (corner != null && !corners.Contains(corner))
     {
         corners.Add(corner);
     }
 }
Example #2
0
    private Graph.Corner MakeCorner(Point point)
    {
        if (point == null)
        {
            return(null);
        }
        for (int i = (int)(point.X) - 1; i <= (int)(point.X) + 1; i++)
        {
            if (_cornerMap.ContainsKey(i))
            {
                foreach (Graph.Corner corner in _cornerMap[i])
                {
                    float dx = (float)point.X - corner.pos.x;
                    float dy = (float)point.Y - corner.pos.y;
                    if (Mathf.Sqrt(dx * dx + dy * dy) < Mathf.Epsilon)
                    {
                        return(corner);
                    }
                }
            }
        }

        int index = (int)point.X;

        if (!_cornerMap.ContainsKey(index) || _cornerMap[index] == null)
        {
            _cornerMap[index] = new List <Graph.Corner>();
        }
        Graph.Corner q = new Graph.Corner
        {
            id        = data.corners.Count,
            pos       = point.ToVector(),
            border    = (point.X == 0 || point.X == rectangle.Width || point.Y == 0 || point.Y == rectangle.Height),
            touches   = new List <Graph.Center>(),
            protrudes = new List <Graph.Edge>(),
            adjacent  = new List <Graph.Corner>()
        };
        data.corners.Add(q);
        _cornerMap[index].Add(q);
        return(q);
    }