public override RadialSegment HitTest(RadPolarPoint point) { foreach (var item in this.Segments) { var layoutSlot = item.LayoutSlot; bool insideAngleRange = false; // TODO: consider refactor this. if (layoutSlot.StartAngle > 270 && layoutSlot.StartAngle + layoutSlot.SweepAngle > 360) { var startAng = layoutSlot.StartAngle > 270 ? layoutSlot.StartAngle - 360 : layoutSlot.StartAngle; var endAng = (layoutSlot.StartAngle + layoutSlot.SweepAngle) % 360; var currentAngle = point.Angle > 270 ? point.Angle - 360 : point.Angle; insideAngleRange = startAng <= currentAngle && currentAngle <= endAng; } else { insideAngleRange = layoutSlot.StartAngle <= point.Angle && layoutSlot.StartAngle + layoutSlot.SweepAngle >= point.Angle; } if (layoutSlot.InnerRadius <= point.Radius && layoutSlot.OuterRadius >= point.Radius && insideAngleRange) { return(item); } } return(null); }
public abstract RadialSegment HitTest(RadPolarPoint point);