コード例 #1
0
        internal ViewerControl.MouseAction ImminentAction(MouseEventArgs e)
        {
            if (clickableThings == null)
            {
                return(null);
            }

            int i = 0;

            while (i < clickableThings.GetLength(0))
            {
                ClickableThing clickableThing = clickableThings[i];
                if (clickableThing.vertexLocation.originalIndex >= 0 && clickableThing.path.IsVisible(e.Location))
                {
                    if (clickableThing.clickedWhich == ClickableThing.ClickedWhich.Segment)
                    {
                        return(new SegmentMouseAction(this, clickableThing.vertexLocation.originalIndex, e.Location));
                    }

                    return(new VertexMouseAction(this, clickableThing.vertexLocation.originalIndex));
                }
                else
                {
                    i++;
                }
            }

            return(null);
        }
コード例 #2
0
        private void UpdateState(State state)
        {
            if (state.Equals(lastState))
            {
                return;
            }

            TracedScreenPoint[] path = GetUserRegion()
                                       .GetPath(CoordinateSystemUtilities.GetBounds(csi, state.center, state.size),
                                                state.center.zoom,
                                                csi);
            List <TracedScreenPoint> list = new List <TracedScreenPoint>();
            int length = path.GetLength(0);

            for (int i = 0; i < length; i++)
            {
                D.Assert(path[i].originalIndex >= 0);
                int num = (i + length - 1) % length;
                if (!(path[num].pointf == path[i].pointf))
                {
                    list.Add(path[i]);
                }
            }

            list.ToArray();
            int count = list.Count;
            List <ClickableThing> list2 = new List <ClickableThing>();
            List <ClickableThing> list3 = new List <ClickableThing>();

            for (int j = 0; j < count; j++)
            {
                ClickableThing clickableThing = new ClickableThing();
                list2.Add(clickableThing);
                clickableThing.vertexLocation = list[j];
                clickableThing.path           = new GraphicsPath();
                clickableThing.path.AddEllipse(list[j].pointf.X - 4f, list[j].pointf.Y - 4f, 8f, 8f);
                clickableThing.clickedWhich = ClickableThing.ClickedWhich.Vertex;
                clickableThing.pointIndex   = j;
                ClickableThing clickableThing2 = new ClickableThing();
                list3.Add(clickableThing2);
                clickableThing2.vertexLocation = list[j];
                clickableThing2.path           = new GraphicsPath();
                clickableThing2.path.AddLine(list[j].pointf, list[(j + 1) % count].pointf);
                clickableThing2.path.Widen(new Pen(Color.Black, 4f));
                clickableThing2.clickedWhich = ClickableThing.ClickedWhich.Segment;
                clickableThing2.pointIndex   = j;
            }

            list2.AddRange(list3);
            clickableThings = list2.ToArray();
            lastState       = new State(state);
        }
コード例 #3
0
        internal void Paint(PaintSpecification e, LatLonZoom center, Size size)
        {
            if (GetUserRegion() == null)
            {
                return;
            }

            State state;

            state.center = center;
            state.size   = size;
            state.valid  = true;
            UpdateState(state);
            ClickableThing[] array = clickableThings;
            for (int i = 0; i < array.Length; i++)
            {
                ClickableThing clickableThing = array[i];
                e.Graphics.FillPath(segmentFillBrush, clickableThing.path);
            }
        }