예제 #1
0
        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);
        }
예제 #2
0
 public abstract RadialSegment HitTest(RadPolarPoint point);