public ProjectionPoint(int x, int y, int projectionX,
     int projectionY, ProjectionPoint axis)
     : base(x, y)
 {
     ProjectionX = projectionX;
     ProjectionY = projectionY;
     IsAxis = false;
     Axis = axis;
 }
 public ProjectionPoint(int x, int y, ProjectionPoint axis)
     : base(x, y)
 {
     ProjectionX = x;
     ProjectionY = y;
     IsAxis = false;
     Axis = axis;
 }
 public Figure(ProjectionPoint[] cells)
 {
     Cells = cells.ToImmutableArray();
 }
        private Figure PerformOperation(Func<ProjectionPoint, Point> calculateProjectionCoord)
        {
            var axis = Cells.First(cell => cell.IsAxis);
            Point newPointAxis = calculateProjectionCoord(axis);
            var newAxis = new ProjectionPoint(axis.X, axis.Y, newPointAxis.X, newPointAxis.Y);

            var cells = Cells
                .Where(projectionPoint => !projectionPoint.IsAxis)
                .Select(projectionPoint =>
                {
                    Point newPoint = calculateProjectionCoord(projectionPoint);

                    return new ProjectionPoint(
                    projectionPoint.X, projectionPoint.Y,
                    newPoint.X, newPoint.Y, newAxis);
                }).ToList();
            cells.Add(newAxis);

            return new Figure(cells);
        }
 private static ProjectionPoint[] CellParse(EnterData.Figure.Point[] cells)
 {
     var axisPoint = cells.First(cell => cell.X == 0 && cell.Y == 0);
     var axisProjectionPoint = new ProjectionPoint(axisPoint.X, axisPoint.Y);
     var listCells = cells
         .Where(cell => !(cell.X == 0 && cell.Y == 0))
         .Select(cell => new ProjectionPoint(cell.X, cell.Y, axisProjectionPoint)).ToList();
     listCells.Add(axisProjectionPoint);
     return listCells.ToArray();
 }