private void AddToCornerList(List <Characteristics.Corner> corners, Characteristics.Corner corner) { if (corner != null && !corners.Contains(corner)) { corners.Add(corner); } }
private Characteristics.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 (Characteristics.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 <Characteristics.Corner>(); } Characteristics.Corner q = new Characteristics.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 <Characteristics.Center>(), protrudes = new List <Characteristics.Border>(), adjacent = new List <Characteristics.Corner>() }; data.corners.Add(q); _cornerMap[index].Add(q); return(q); }