예제 #1
0
        private void toolStripButtonZoomtoFeature_Click(object sender, EventArgs e)
        {
            Rectangle2D bb = CurrImage.BoundingBox();

            double imageSize = Math.Max(bb.Width, bb.Height);

            if (imageSize > 0.0)
            {
                double screenSize = Math.Min(renderPanel.Width, renderPanel.Height);
                renderContext.DrawScale = (screenSize / imageSize) / 1.2;
            }
            else
            {
                renderContext.DrawScale = 1.0;
            }

            Vector2D displaySize = new Vector2D((renderPanel.Width / renderContext.DrawScale), (renderPanel.Height / renderContext.DrawScale));
            Vector2D center      = bb.MidPoint - (displaySize / 2.0f);

            renderContext.Location.x = -center.x * renderContext.DrawScale;
            renderContext.Location.y = -center.y * renderContext.DrawScale;

            renderPanel.Render();
        }
예제 #2
0
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                dragLocation  = new Point(e.X, e.Y);
                dragMouseLock = true;
            }
            if (e.Button == MouseButtons.Left)
            {
                Vector2D loc        = renderContext.ScreenToPoint(e.X, e.Y);
                Vector2D snappedLoc = loc;
                if (snapToGridPermanentButton.Checked)
                {
                    snappedLoc = renderContext.GridSnap(loc);
                }

                switch (editAction)
                {
                case EditAction.ActionMovePoints:
                {
                    List <Primitive2D> prims = CurrImage.GetPrimitivesAtLocation(loc, 4.0f / renderContext.DrawScale);

                    if (prims.Count == 0)
                    {
                        if (!multiselect)
                        {
                            mouseWasMovedAfterClick = false;
                        }
                    }
                    else
                    {
                        mouseWasMovedAfterClick = true;
                        if (!multiselect)
                        {
                            selection.Clear();
                            selection.Add(prims[0]);
                        }
                        else
                        {
                            selection.TogglePrimitive(prims[0]);
                        }
                    }
                    break;
                }

                case EditAction.ActionAddPoints:
                {
                    CurrImage.primitives.Add(new Vector2D(snappedLoc));
                    break;
                }

                case EditAction.ActionAddLines:
                {
                    if (linkObject != null)
                    {
                        ObjectLinker.EndLinkingObjects(CurrImage.GetLinkablePrimitives(), loc, linkObject);
                        linkObject = null;
                        renderPanel.Render();
                        return;
                    }
                    else
                    {
                        linkObject = ObjectLinker.StartLinkingObjects(CurrImage.GetLinkablePrimitives(), loc);
                        if (linkObject != null)
                        {
                            renderPanel.Render();
                            return;
                        }
                    }



                    VectorCloud2D dots = CurrImage.GetPointsAtLoction(loc, 4.0f / renderContext.DrawScale);
                    Vector2D      dot;
                    if (dots.Count == 0)
                    {
                        dot = new Vector2D(snappedLoc);
                        CurrImage.primitives.Add(dot);
                    }
                    else
                    {
                        dot = dots[0];
                    }

                    if (lineStartPoint != null)
                    {
                        // Line is ready, connect!
                        CurrImage.primitives.Add(new Line2D(lineStartPoint, dot));
                        lineStartPoint = null;
                    }
                    else
                    {
                        // First dot, draw dummy line
                        lineStartPoint = dot;
                    }
                    break;
                }
                }
            }
            renderPanel.Render();
        }