public int Compare(object o1, object o2) { DataPoint3D dataPoint3D = (DataPoint3D)o1; DataPoint3D dataPoint3D2 = (DataPoint3D)o2; int num = 0; if (dataPoint3D.xPosition < dataPoint3D2.xPosition) { num = -1; } else if (dataPoint3D.xPosition > dataPoint3D2.xPosition) { num = 1; } else { if (dataPoint3D.yPosition < dataPoint3D2.yPosition) { num = 1; } else if (dataPoint3D.yPosition > dataPoint3D2.yPosition) { num = -1; } if (!float.IsNaN(areaProjectionCenter.Y)) { double num2 = Math.Min(dataPoint3D.yPosition, dataPoint3D.height); double num3 = Math.Max(dataPoint3D.yPosition, dataPoint3D.height); double num4 = Math.Min(dataPoint3D2.yPosition, dataPoint3D2.height); double num5 = Math.Max(dataPoint3D2.yPosition, dataPoint3D2.height); if (!area.IsBottomSceneWallVisible()) { num = ((num3 >= (double)areaProjectionCenter.Y && num5 >= (double)areaProjectionCenter.Y) ? num : ((num3 >= (double)areaProjectionCenter.Y) ? 1 : (num * -1))); } else if (num2 <= (double)areaProjectionCenter.Y && num4 <= (double)areaProjectionCenter.Y) { num *= -1; } else if (num2 <= (double)areaProjectionCenter.Y) { num = 1; } } else if (!area.IsBottomSceneWallVisible()) { num *= -1; } } if (dataPoint3D.xPosition != dataPoint3D2.xPosition) { if (!float.IsNaN(areaProjectionCenter.X)) { if (dataPoint3D.xPosition + dataPoint3D.width / 2.0 >= (double)areaProjectionCenter.X && dataPoint3D2.xPosition + dataPoint3D2.width / 2.0 >= (double)areaProjectionCenter.X) { num *= -1; } } else if (area.DrawPointsInReverseOrder()) { num *= -1; } } if (!selection) { return(num); } return(-num); }