Example #1
0
        private void Canvas_MouseUp(object sender, MouseEventArgs e)
        {
            canvas.Focus();

            if (e.Button == MouseButtons.Left && selectionBegin)
            {
                canvas.UnselectAll();

                PointF selectionStart = selectionBox.Points[0];
                PointF selectionEnd   = selectionBox.Points[2];

                PointF selectionOrigin = new PointF();
                SizeF  selectionSize   = new SizeF();

                selectionSize.Width  = Math.Abs(selectionEnd.X - selectionStart.X);
                selectionSize.Height = Math.Abs(selectionEnd.Y - selectionStart.Y);

                if (selectionEnd.X > selectionStart.X)
                {
                    if (selectionEnd.Y > selectionStart.Y)
                    {
                        selectionOrigin.X = selectionStart.X;
                        selectionOrigin.Y = selectionStart.Y;
                    }
                    else
                    {
                        selectionOrigin.X = selectionStart.X;
                        selectionOrigin.Y = selectionEnd.Y;
                    }
                }
                else
                {
                    if (selectionEnd.Y > selectionStart.Y)
                    {
                        selectionOrigin.X = selectionEnd.X;
                        selectionOrigin.Y = selectionStart.Y;
                    }
                    else
                    {
                        selectionOrigin.X = selectionEnd.X;
                        selectionOrigin.Y = selectionEnd.Y;
                    }
                }

                RectangleF rect = new RectangleF(selectionOrigin.X,
                                                 selectionOrigin.Y,
                                                 selectionSize.Width,
                                                 selectionSize.Height);

                float square = selectionSize.Width * selectionSize.Height;

                if (square >= 4.0F)
                {
                    List <CanvasItem> items = canvas.BoxTest(rect);

                    if (items.Count != 0)
                    {
                        foreach (var item in items)
                        {
                            item.Select();
                        }

                        canvas.Invalidate();
                    }
                }

                canvas.RemoveItem(selectionBox);
                selectionBox = null;

                selectionBegin = false;
                canvas.Invalidate();
            }

            else if (e.Button == MouseButtons.Left && draggingBegin)
            {
                draggingBegin = false;
                canvas.Cursor = Cursors.Default;
            }

            else if (e.Button == MouseButtons.Right && scrollingBegin)
            {
                scrollingBegin = false;
                canvas.Cursor  = Cursors.Default;
            }
        }
Example #2
0
        private void Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && !selectionBegin)
            {
                PointF pos = canvas.ScreenToWorld(new Point(e.X, e.Y));

                CanvasItem item = canvas.HitTest(pos);

                if (item != null)
                {
                    // Нажали внутри итема

                    if (!item.Selected)
                    {
                        // Если не выделен - выделить

                        if (canvas.GetModifierKeys() != Keys.Shift)
                        {
                            canvas.UnselectAll();
                        }

                        item.Select();
                        canvas.Invalidate();
                    }
                    else
                    {
                        // Если выделен - начать перетаскивание

                        selectedDragItems = canvas.GetSelected();

                        foreach (var next in selectedDragItems)
                        {
                            next.SavedPos    = new PointF(next.Pos.X, next.Pos.Y);
                            next.SavedPosEnd = new PointF(next.PosEnd.X, next.PosEnd.Y);

                            next.SavedPoints = new List <PointF>();
                            foreach (var point in next.Points)
                            {
                                next.SavedPoints.Add(point);
                            }
                        }

                        savedMouse    = new Point(e.X, e.Y);
                        draggingBegin = true;
                    }
                }
                else
                {
                    // Рамка выделения

                    List <PointF> points = new List <PointF>();

                    points.Add(pos);
                    points.Add(pos);
                    points.Add(pos);
                    points.Add(pos);
                    points.Add(pos);

                    selectionBox = new CanvasPolyLine(points);

                    selectionBox.FrontColor = Color.Black;

                    canvas.AddItem(selectionBox);

                    selectionBegin = true;
                }
            }

            else if (e.Button == MouseButtons.Right && !scrollingBegin)
            {
                savedScroll = new PointF(canvas.Scroll.X, canvas.Scroll.Y);
                savedMouse  = new Point(e.X, e.Y);

                canvas.Cursor = Cursors.SizeAll;

                scrollingBegin = true;
            }
        }
Example #3
0
        private void VisualizeLogisim(LogisimConverter.LogisimModel model)
        {
            canvasControl1.RemoveAllItems();

            // Comps

            foreach (var comp in model.comps)
            {
                CanvasRect rect = new CanvasRect((PointF)comp.loc,
                                                 LogisimConverter.CompSize, LogisimConverter.CompSize, Color.Gold);

                rect.Text = comp.name;

                if (comp.name == "Text")
                {
                    // Skip labels
                    continue;
                }
                else if (comp.name == "1")
                {
                    rect.FrontColor = Color.Tomato;
                }
                else if (comp.name == "0")
                {
                    rect.FrontColor = Color.LimeGreen;
                }

#if DEBUG
                rect.Text += " #" + comp.id.ToString();
#endif

                canvasControl1.AddItem(rect);
            }

            // Wires

            foreach (var wire in model.wires)
            {
                List <PointF> path = new List <PointF>();

                foreach (var p in wire.path)
                {
                    path.Add(p);
                }

                CanvasPolyLine line = new CanvasPolyLine(path, 1, Color.Black);
                line.Text = wire.name;

                WireMeta meta = new WireMeta();

                meta.wire     = wire;
                line.UserData = meta;

                canvasControl1.AddItem(line);
                WireDirection(wire, meta);
            }

            // Vias

            foreach (var vias in model.viases)
            {
                CanvasPoint point = new CanvasPoint(vias.loc, 5, Color.Gold);
#if DEBUG
                //point.Text = vias.id.ToString();
                //point.TextColor = Color.DeepPink;
#endif
                canvasControl1.AddItem(point);
            }

            canvasControl1.Invalidate();
        }