/// <summary> /// Add new object to draw area. /// Function is called when user left-clicks draw area, /// and one of ToolObject-derived tools is active. /// </summary> /// <param name="drawArea"></param> /// <param name="o"></param> protected void AddNewObject(DrawArea drawArea, DrawObject o) { drawArea.GraphicsList.UnselectAll(); o.Selected = true; drawArea.GraphicsList.Add(o); drawArea.Capture = true; drawArea.Refresh(); drawArea.SetDirty(); }
/// <summary> /// Right mouse button is released /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e) { int al = drawArea.TheLayers.ActiveLayerIndex; if (selectMode == SelectionMode.NetSelection) { // Group selection drawArea.TheLayers[al].Graphics.SelectInRectangle(drawArea.NetRectangle); selectMode = SelectionMode.None; drawArea.DrawNetRectangle = false; } if (resizedObject != null) { // after resizing resizedObject.Normalize(); if (drawArea.UpdateDrawObject != null) { List <DrawObject> drawObjectList = new List <DrawObject>(); drawObjectList.Add(resizedObject); drawArea.UpdateDrawObject.BeginInvoke(drawObjectList, null, null); } resizedObject = null; } drawArea.Capture = false; drawArea.Invalidate(); if (commandChangeState != null && wasMove) { if (drawArea.UpdateDrawObject != null) { List <DrawObject> drawObjectList = new List <DrawObject>(); foreach (DrawObject o in drawArea.TheLayers[al].Graphics.Selection) { drawObjectList.Add(o); } drawArea.UpdateDrawObject.BeginInvoke(drawObjectList, null, null); } // Keep state after moving/resizing and add command to history commandChangeState.NewState(drawArea.TheLayers); drawArea.AddCommandToHistory(commandChangeState); commandChangeState = null; } lastPoint = drawArea.BackTrackMouse(e.Location); }
// private /// <summary> /// Copy fields from this instance to cloned instance drawObject. /// Called from Clone functions of derived classes. /// </summary> /// <param name="drawObject">Object being cloned</param> protected void FillDrawObjectFields(DrawObject drawObject) { drawObject.selected = selected; drawObject.color = color; drawObject.penWidth = penWidth; drawObject.ID = ID; drawObject._brushType = _brushType; drawObject._penType = _penType; drawObject.drawBrush = drawBrush; drawObject.drawpen = drawpen; drawObject.fillColor = fillColor; drawObject._rotation = _rotation; drawObject._center = _center; }
public SwitchEditDialog(string monitorID, int portID, string deviceID, DrawObject obj) { InitializeComponent(); this.monitorID = monitorID; this.portID = portID.ToString(); this.deviceID = deviceID; label1.Text = "监控端口"; textBox1.Text = this.monitorID; label2.Visible = textBox2.Visible = label3.Visible = textBox3.Visible = true; textBox2.Text = this.deviceID; textBox3.Text = this.portID; }
/// <summary> /// Delete drawobject /// </summary> /// <param name="o"></param> /// <returns></returns> public bool DeleteDrawObject(DrawObject o) { int n = graphicsList.Count; for (int i = n - 1; i >= 0; i--) { if (((DrawObject)graphicsList[i]) == o) { graphicsList.RemoveAt(i); _isDirty = true; return(true); } } return(false); }
/// <summary> /// Add new object to draw area. /// Function is called when user left-clicks draw area, /// and one of ToolObject-derived tools is active. /// </summary> /// <param name="drawArea"></param> /// <param name="o"></param> protected void AddNewObject(DrawArea drawArea, DrawObject o) { int al = drawArea.TheLayers.ActiveLayerIndex; drawArea.TheLayers[al].Graphics.UnselectAll(); o.Selected = true; o.Dirty = true; // Set the object id now o.ID = DrawObject.sCurrentDrawObjectId++; drawArea.TheLayers[al].Graphics.Add(o); drawArea.Capture = true; mDrawObject = o; drawArea.Invalidate(); }
/// <summary> /// Right-click handler /// </summary> /// <param name="e"></param> private void OnContextMenu(MouseEventArgs e) { // Change current selection if necessary var point = new Point(e.X, e.Y); int n = GraphicsList.Count; DrawObject o = null; for (int i = 0; i < n; i++) { if (GraphicsList[i].HitTest(point) == 0) { o = GraphicsList[i]; break; } } if (o != null) { if (!o.Selected) { GraphicsList.UnselectAll(); } // Select clicked object o.Selected = true; _bringToFrontToolStripMenuItem.Enabled = true; _sendToBackToolStripMenuItem.Enabled = true; _cutToolStripMenuItem.Enabled = true; _copyToolStripMenuItem.Enabled = true; _deleteToolStripMenuItem.Enabled = true; } else { _bringToFrontToolStripMenuItem.Enabled = false; _sendToBackToolStripMenuItem.Enabled = false; _cutToolStripMenuItem.Enabled = false; _copyToolStripMenuItem.Enabled = false; _deleteToolStripMenuItem.Enabled = false; GraphicsList.UnselectAll(); } _pasteToolStripMenuItem.Enabled = GraphicsList.AreItemsInMemory(); _contextMenuStrip.Show(MousePosition); Refresh(); }
/// <summary> /// Get properties from selected objects and fill GraphicsProperties instance /// </summary> /// <returns></returns> private GraphicsProperties GetProperties() { GraphicsProperties properties = new GraphicsProperties(); int n = SelectionCount; if (n < 1) { return(properties); } DrawObject o = GetSelectedObject(0); int firstColor = o.Color.ToArgb(); int firstPenWidth = o.PenWidth; bool allColorsAreEqual = true; bool allWidthAreEqual = true; for (int i = 1; i < n; i++) { if (GetSelectedObject(i).Color.ToArgb() != firstColor) { allColorsAreEqual = false; } if (GetSelectedObject(i).PenWidth != firstPenWidth) { allWidthAreEqual = false; } } if (allColorsAreEqual) { properties.ColorDefined = true; properties.Color = Color.FromArgb(firstColor); } if (allWidthAreEqual) { properties.PenWidthDefined = true; properties.PenWidth = firstPenWidth; } return(properties); }
/// <summary> /// Right mouse button is released /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(ImageDrawBox drawArea, MouseEventArgs e) { if (selectMode == SelectionMode.NetSelection) { // Remove old selection rectangle ControlPaint.DrawReversibleFrame( drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint)), Color.Black, FrameStyle.Dashed); //Point pointscroll = GetEventPointInArea(drawArea, e); // Make group selection //zhoujin - user zoomfactor //drawArea.GraphicsList.SelectInRectangle( // DrawRectangle.GetNormalizedRectangle(new Point(startPoint.X + Math.Abs(drawArea.AutoScrollPosition.X), startPoint.Y + Math.Abs(drawArea.AutoScrollPosition.Y)), // new Point(lastPoint.X + Math.Abs(drawArea.AutoScrollPosition.X), lastPoint.Y + Math.Abs(drawArea.AutoScrollPosition.Y)))); double zoomFactor = drawArea.ZoomFactor; drawArea.GraphicsList.SelectInRectangle( DrawRectangle.GetNormalizedRectangle(new Point(ConvertToZoomed(startPoint.X, zoomFactor), ConvertToZoomed(startPoint.Y, zoomFactor)), new Point(ConvertToZoomed(lastPoint.X, zoomFactor), ConvertToZoomed(lastPoint.Y, zoomFactor)))); selectMode = SelectionMode.None; } if (resizedObject != null) { // after resizing resizedObject.Normalize(); resizedObject = null; } drawArea.Capture = false; drawArea.Refresh(); drawArea.GraphicsList.Dirty = true; if (commandChangeState != null && wasMove) { // Keep state after moving/resizing and add command to history commandChangeState.NewState(drawArea.GraphicsList); drawArea.AddCommandToHistory(commandChangeState); commandChangeState = null; } }
public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e) { if (_selectMode == SelectionMode.NetSelection) { // âûáîð ãðóïïû drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle); _selectMode = SelectionMode.None; drawArea.DrawNetRectangle = false; } if (_resizedObject != null) { // ïîñëå ðåñàéçà _resizedObject.Normalize(); _resizedObject = null; drawArea.ResizeCommand(drawArea.GraphicsList.GetFirstSelected(), new PointF(_startPoint.X, _startPoint.Y), new PointF(e.X, e.Y), _resizedObjectHandle); } drawArea.Capture = false; drawArea.Refresh(); //ïóøàåì êîìàíäó â undo/redo ëèñò if (_selectMode == SelectionMode.Move) { var movedItemsList = new ArrayList(); for (int i = 0; i < drawArea.GraphicsList.SelectionCount; i++) { movedItemsList.Add(drawArea.GraphicsList.GetSelectedObject(i)); } var delta = new PointF { X = e.X - _startPoint.X, Y = e.Y - _startPoint.Y }; drawArea.MoveCommand(movedItemsList, delta); } IsComplete = true; }
/// <summary> /// Right mouse button is released /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e) { if (_selectMode == SelectionMode.NetSelection) { // Group selection drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle); _selectMode = SelectionMode.None; drawArea.DrawNetRectangle = false; } if (_resizedObject != null) { // after resizing _resizedObject.Normalize(); _resizedObject = null; drawArea.ResizeCommand(drawArea.GraphicsList.GetFirstSelected(), new PointF(_startPoint.X, _startPoint.Y), new PointF(e.X, e.Y), _resizedObjectHandle); } drawArea.Capture = false; drawArea.Refresh(); //push the command to undo/Redo list now if (_selectMode == SelectionMode.Move) { var movedItemsList = new ArrayList(); for (int i = 0; i < drawArea.GraphicsList.SelectionCount; i++) { movedItemsList.Add(drawArea.GraphicsList.GetSelectedObject(i)); } var delta = new PointF { X = e.X - _startPoint.X, Y = e.Y - _startPoint.Y }; drawArea.MoveCommand(movedItemsList, delta); } IsComplete = true; }
// Replace objects in graphicsList with objects from list private void ReplaceObjects(GraphicsList graphicsList, List <DrawObject> list) { for (int i = 0; i < graphicsList.Count; i++) { DrawObject replacement = null; foreach (DrawObject o in list) { if (o.ID == graphicsList[i].ID) { replacement = o; break; } } if (replacement != null) { graphicsList.Replace(i, replacement); } } }
/// <summary> /// Right mouse button is released /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e) { if (selectMode == SelectionMode.NetSelection) { // Group selection drawArea.GraphicsList.SelectInRectangle(drawArea.NetRectangle); selectMode = SelectionMode.None; drawArea.DrawNetRectangle = false; } if (resizedObject != null) { // after resizing resizedObject.Normalize(); resizedObject = null; } drawArea.Capture = false; drawArea.Refresh(); }
/// <summary> /// Left mouse is released. /// New object is created and resized. /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e) { int al = drawArea.TheLayers.ActiveLayerIndex; if (drawArea.TheLayers[al].Graphics.Count > 0) { drawArea.TheLayers[al].Graphics[0].Normalize(); } if ((drawArea.ActiveTool != DrawArea.DrawToolType.Polygon) || ((drawArea.ActiveTool == DrawArea.DrawToolType.Polygon) && (e.Button == MouseButtons.Right))) { drawArea.ActiveTool = DrawArea.DrawToolType.Pointer; drawArea.AddDrawObject?.BeginInvoke(mDrawObject, null, null); drawArea.AddCommandToHistory(new CommandAdd(mDrawObject)); mDrawObject = null; } drawArea.Capture = false; drawArea.Invalidate(); }
/// <summary> /// Add new object to draw area. /// Function is called when user left-clicks draw area, /// and one of ToolObject-derived tools is active. /// </summary> /// <param name="drawArea"></param> /// <param name="o"></param> protected void AddNewObject(DrawArea drawArea, DrawObject o) { int al = drawArea.TheLayers.ActiveLayerIndex; drawArea.TheLayers[al].Graphics.UnselectAll(); o.Selected = true; o.Dirty = true; int objectID = 0; // Set the object id now for (int i = 0; i < drawArea.TheLayers.Count; i++) { objectID = +drawArea.TheLayers[i].Graphics.Count; } objectID++; o.ID = objectID; drawArea.TheLayers[al].Graphics.Add(o); drawArea.Capture = true; drawArea.Refresh(); }
private static Point TestForConnection(DrawArea drawArea, Point p, out int objectID) { // Determine if within 5 pixels of a connection point // Step 1: see if a 5 x 5 rectangle centered on the mouse cursor intersects with an object // Step 2: If it does, then see if there is a connection point within the rectangle // Step 3: If there is, move the point to the connection point, record the object's id in the connector // objectID = -1; Rectangle testRectangle = new Rectangle(p.X - 2, p.Y - 2, 5, 5); int al = drawArea.TheLayers.ActiveLayerIndex; bool connectionHere = false; Point h = new Point(-1, -1); GraphicsList gl = drawArea.TheLayers[al].Graphics; for (int i = 1; i < gl.Count; i++) { if (gl[i].IntersectsWith(testRectangle)) { DrawObject obj = (DrawObject)gl[i]; for (int j = 1; j < obj.HandleCount + 1; j++) { h = obj.GetHandle(j); if (testRectangle.Contains(h)) { connectionHere = true; p = h; objectID = obj.ID; // obj.DrawConnection(drawArea., j); break; } } } if (connectionHere) { break; } } return(p); }
/// <summary> /// Left mouse is released. /// New object is created and resized. /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseUp(ImageDrawBox drawArea, MouseEventArgs e) { drawArea.GraphicsList[0].Normalize(); drawArea.AddCommandToHistory(new CommandAdd(drawArea.GraphicsList[0])); drawArea.ActiveTool = ImageDrawBox.DrawToolType.Pointer; //TODO : 这部分代码需要整理 //zhoujin: 如果是正在定标则删除图形,并弹出定标窗口 if (drawArea.DrawMode == ImageDrawBox.DrawingMode.SetUnit) { DrawObject drawObj = drawArea.GraphicsList[0]; //定标只支持用画直线的方式 if (drawObj is DrawLine) { DrawLine drawLine = drawObj as DrawLine; double pxLen = CalcLenght(drawLine.StartPoint, drawLine.EndPoint); SetUnitForm setUnitForm = new SetUnitForm(drawArea, pxLen); setUnitForm.ShowDialog(); drawArea.GraphicsList.DeleteLastAddedObject(); drawArea.DrawMode = ImageDrawBox.DrawingMode.Measure; } } if (drawArea.DrawMode == ImageDrawBox.DrawingMode.SetROI) { DrawObject drawObj = drawArea.GraphicsList[0]; //设置ROI只支持用矩形绘制 if (drawObj is DrawRectangle) { DrawRectangle drawRect = drawObj as DrawRectangle; drawArea.SetROI(drawRect.GetBoundingBox()); drawArea.GraphicsList.DeleteLastAddedObject(); drawArea.DrawMode = ImageDrawBox.DrawingMode.Measure; } } drawArea.Capture = false; drawArea.Refresh(); drawArea.GraphicsList.Dirty = true; }
/// <summary> /// Returns (-1), (0), (+1) to represent the relative Z-order of the object being compared with this object /// </summary> /// <param name="obj">DrawObject that is compared to this object</param> /// <returns> (-1) if the object is less (further back) than this object. /// (0) if the object is equal to this object (same level graphically). /// (1) if the object is greater (closer to the front) than this object.</returns> public int CompareTo(object obj) { DrawObject d = obj as DrawObject; int x = 0; if (d != null) { if (d.ZOrder == ZOrder) { x = 0; } else if (d.ZOrder > ZOrder) { x = -1; } else { x = 1; } } return(x); }
/// <summary> /// Right-click handler /// </summary> /// <param name="e"></param> private void OnContextMenu(MouseEventArgs e) { // Change current selection if necessary Point point = BackTrackMouse(new Point(e.X, e.Y)); Point menuPoint = new Point(e.X, e.Y); int al = _layers.ActiveLayerIndex; int n = _layers[al].Graphics.Count; DrawObject o = null; for (int i = 0; i < n; i++) { if (_layers[al].Graphics[i].HitTest(point) == 0) { o = _layers[al].Graphics[i]; break; } } if (o != null) { if (!o.Selected) { _layers[al].Graphics.UnselectAll(); } // Select clicked object o.Selected = true; } else { _layers[al].Graphics.UnselectAll(); } Refresh(); Owner.ctxtMenu.Show(this, menuPoint); }
public bool LoadFromXml(XmlTextReader reader) { ErrH.Log("DrawArea", "LoadFromXML", "", ErrH._LogPriority.Info); _graphicsList.Clear(); var svg = new SvgDoc(); if (!svg.LoadFromFile(reader)) { return(false); } SvgRoot root = svg.GetSvgRoot(); if (root == null) { return(false); } try { SizePicture = new SizeF(DrawObject.ParseSize(root.Width, DrawObject.Dpi.X), DrawObject.ParseSize(root.Height, DrawObject.Dpi.Y)); } catch { } _mOriginalSize = SizePicture; SvgElement ele = root.getChild(); _mScale = new SizeF(1, 1); if (ele != null) { _graphicsList.AddFromSvg(ele); } Description = _graphicsList.Description; return(true); }
public void SelectByTag(Object tag) { if (_layers != null) { Int32 count = _layers.Count; for (Int32 i = 0; i < count; i++) { Layer layer = _layers[i]; if (layer != null) { layer.Graphics.UnselectAll(); } } int lc = _layers.Count; for (int i = 0; i < lc; i++) { if (_layers[i].IsVisible) { if (_layers[i].Graphics != null) { count = _layers[i].Graphics.Count; for (Int32 n = 0; n < count; n++) { DrawObject drawObject = _layers[i].Graphics[n]; if (tag == drawObject.Tag) { drawObject.Selected = true; return; } } } } } } }
/// <summary> /// Right-click handler /// </summary> /// <param name="e"></param> private void OnContextMenu(MouseEventArgs e) { // Change current selection if necessary Point point = new Point(e.X, e.Y); int n = GraphicsList.Count; DrawObject o = null; for (int i = 0; i < n; i++) { if (GraphicsList[i].HitTest(point) == 0) { o = GraphicsList[i]; break; } } if (o != null) { if (!o.Selected) { GraphicsList.UnselectAll(); } // Select clicked object o.Selected = true; } else { GraphicsList.UnselectAll(); } Refresh(); // Show context menu. // Make ugly trick which saves a lot of code. // Get menu items from Edit menu in main form and // make context menu from them. // These menu items are handled in the parent form without // any additional efforts. MainMenu mainMenu = Owner.Menu; // Main menu MenuItem editItem = mainMenu.MenuItems[1]; // Edit submenu // Make array of items for ContextMenu constructor // taking them from the Edit submenu MenuItem[] items = new MenuItem[editItem.MenuItems.Count]; for (int i = 0; i < editItem.MenuItems.Count; i++) { items[i] = editItem.MenuItems[i]; } Owner.SetStateOfControls(); // enable/disable menu items // Create and show context menu ContextMenu menu = new ContextMenu(items); menu.Show(this, point); // Restore items in the Edit menu (without this line Edit menu // is empty after forst right-click) editItem.MergeMenu(menu); }
// Create this command with DrawObject instance added to the list public CommandAdd(DrawObject drawObject) : base() { // Keep copy of added object this.drawObject = drawObject.Clone(); }
/// <summary> /// Thanks to Member 3272353 for this fix to object ordering problem. /// </summary> /// <param name="obj"></param> public void Append(DrawObject obj) { graphicsList.Add(obj); }
public void Add(DrawObject obj) { // insert to the top of z-order graphicsList.Insert(0, obj); }
/// <summary> /// Insert object to specified place. /// Used for Undo. /// </summary> public void Insert(int index, DrawObject obj) { if ( index >= 0 && index < graphicsList.Count ) { graphicsList.Insert(index, obj); } }
/// <summary> /// Left mouse button is pressed /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e) { Point pointscroll = GetEventPointInArea(drawArea, e); commandChangeState = null; wasMove = false; selectMode = SelectionMode.None; // Test for resizing (only if control is selected, cursor is on the handle) foreach (DrawObject o in drawArea.GraphicsList.Selection) { int handleNumber = o.HitTest(pointscroll); if (handleNumber > 0) { selectMode = SelectionMode.Size; // keep resized object in class member resizedObject = o; resizedObjectHandle = handleNumber; // Since we want to resize only one object, unselect all other objects drawArea.GraphicsList.UnselectAll(); o.Selected = true; commandChangeState = new CommandChangeState(drawArea.GraphicsList); drawArea.GraphicsList.Dirty = true; break; } } // Test for move (cursor is on the object) if (selectMode == SelectionMode.None) { int n1 = drawArea.GraphicsList.Count; DrawObject o = null; for (int i = 0; i < n1; i++) { if (drawArea.GraphicsList[i].HitTest(pointscroll) == 0) { o = drawArea.GraphicsList[i]; break; } } if (o != null) { selectMode = SelectionMode.Move; // Unselect all if Ctrl is not pressed and clicked object is not selected yet if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected) { drawArea.GraphicsList.UnselectAll(); } // Select clicked object o.Selected = true; commandChangeState = new CommandChangeState(drawArea.GraphicsList); drawArea.Cursor = Cursors.SizeAll; drawArea.GraphicsList.Dirty = true; } } // Net selection if (selectMode == SelectionMode.None) { // click on background if ((Control.ModifierKeys & Keys.Control) == 0) { drawArea.GraphicsList.UnselectAll(); } selectMode = SelectionMode.NetSelection; } lastPoint.X = e.X; lastPoint.Y = e.Y; startPoint.X = e.X; startPoint.Y = e.Y; drawArea.Capture = true; drawArea.Refresh(); if (selectMode == SelectionMode.NetSelection) { // Draw selection rectangle in initial position ControlPaint.DrawReversibleFrame( drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint)), Color.Black, FrameStyle.Dashed); } }
/// <summary> /// Mouse is moved. /// None button is pressed, ot left button is pressed. /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseMove(DrawArea drawArea, MouseEventArgs e) { Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y)); int al = drawArea.TheLayers.ActiveLayerIndex; wasMove = true; //toolTip.InitialDelay = 1; // set cursor when mouse button is not pressed if (e.Button == MouseButtons.None) { Cursor cursor = null; if (drawArea.TheLayers[al].Graphics != null) { // Hide tooltip in case it was displayed //toolTip.Hide(drawArea); for (int i = 0; i < drawArea.TheLayers[al].Graphics.Count; i++) { int n = drawArea.TheLayers[al].Graphics[i].HitTest(point); if (n > 0) { cursor = drawArea.TheLayers[al].Graphics[i].GetHandleCursor(n); break; } //if (n == 0) // toolTip.Show(drawArea.TheLayers[al].Graphics[i].TipText, drawArea, point, 250); } } if (cursor == null) { cursor = Cursors.Default; } drawArea.Cursor = cursor; return; } if (e.Button != MouseButtons.Left) { return; } // Left button is pressed // Find difference between previous and current position int dx = point.X - lastPoint.X; int dy = point.Y - lastPoint.Y; lastPoint.X = point.X; lastPoint.Y = point.Y; // resize if (selectMode == SelectionMode.Size) { if (resizedObject != null) { resizedObject.MoveHandleTo(point, resizedObjectHandle); drawArea.Invalidate(); } } // move if (selectMode == SelectionMode.Move) { int n = drawArea.TheLayers[al].Graphics.SelectionCount; for (int i = 0; i < n; i++) { DrawObject o = drawArea.TheLayers[al].Graphics.GetSelectedObject(i); if (o != null) { o.Move(dx, dy); if (!o.IsInRectngle(drawArea.Boundary, drawArea.ScaleX, drawArea.ScaleY)) { o.Move(-dx, -dy); } } } drawArea.Cursor = Cursors.SizeAll; drawArea.Invalidate(); } if (selectMode == SelectionMode.NetSelection) { drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint); drawArea.Invalidate(); return; } }
/// <summary> /// Replace object in specified place. /// Used for Undo. /// </summary> public void Replace(int index, DrawObject obj) { if (index >= 0 && index < graphicsList.Count) { graphicsList.RemoveAt(index); graphicsList.Insert(index, obj); } }
public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e) { _selectMode = SelectionMode.None; PointF point = new Point(e.X, e.Y); // òåñò äëÿ ðåñàéçà int n = drawArea.GraphicsList.SelectionCount; for (int i = 0; i < n; i++) { DrawObject o = drawArea.GraphicsList.GetSelectedObject(i); int handleNumber = o.HitTest(point); bool hitOnOutline = o.HitOnCircumferance; if (handleNumber > 0) { _selectMode = SelectionMode.Size; // äåðæèì èçìåíÿåìûé îáúåêò â ÷ëåíàõ êëàññà _resizedObject = o; _resizedObjectHandle = handleNumber; // ïðè ðåñàéçå îäíîãî îáúåêòà, àíñåëåêòÿòñÿ âñå îñòàëüíûå drawArea.GraphicsList.UnselectAll(); o.Selected = true; o.MouseClickOnHandle(handleNumber); break; } if (hitOnOutline && (n == 1)) // åñëè òîëüêî îäèí îáúåêò âûáðàí { _selectMode = SelectionMode.Size; o.MouseClickOnBorder(); o.Selected = true; } } // òåñò äëÿ ñäâèãà if (_selectMode == SelectionMode.None) { int n1 = drawArea.GraphicsList.Count; DrawObject o = null; for (int i = 0; i < n1; i++) { if (drawArea.GraphicsList[i].HitTest(point) == 0) { o = drawArea.GraphicsList[i]; break; } } if (o != null) { _selectMode = SelectionMode.Move; // àíñåëåêòíóòü âñå, åñëè íå çàæàò ctrl è êëèêíóòíûé îáúåêò åùå íå âûáðàí if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected) { drawArea.GraphicsList.UnselectAll(); } // âûáðàòü êëèêíóòûé îáúåêò o.Selected = true; drawArea.Cursor = Cursors.SizeAll; } } if (_selectMode == SelectionMode.None) { // êëèê íà çàäíåì ôîíå if ((Control.ModifierKeys & Keys.Control) == 0) { drawArea.GraphicsList.UnselectAll(); } _selectMode = SelectionMode.NetSelection; drawArea.DrawNetRectangle = true; } _lastPoint.X = e.X; _lastPoint.Y = e.Y; _startPoint.X = e.X; _startPoint.Y = e.Y; drawArea.Capture = true; drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(_startPoint, _lastPoint); drawArea.Refresh(); }
/// <summary> /// �Ҽ��˵� /// </summary> /// <param name="e"></param> private void OnContextMenu(MouseEventArgs e) { // Change current selection if necessary Point point = BackTrackMouse(new Point(e.X, e.Y)); List<DrawObject> o = new List<DrawObject>(); for (int i = _layers[_layers.ActiveLayerIndex].Graphics.Count - 1; i >= 0; i--) { if (_layers[_layers.ActiveLayerIndex].Graphics[i].HitTest(point) == 0) { PrepareHitProject = _layers[_layers.ActiveLayerIndex].Graphics[i]; } if (_layers[_layers.ActiveLayerIndex].Graphics[i].Selected) { o.Add(_layers[_layers.ActiveLayerIndex].Graphics[i].Clone()); } } PrepareCopyObjectList = o; if (PrepareHitProject == null && PrepareCopyObjectList.Count == 0) { _layers[_layers.ActiveLayerIndex].Graphics.UnselectAll(); } Refresh(); // Show context menu. // Context menu items are filled from owner form Edit menu items. m_ContextMenu = new ContextMenuStrip(); int nItems = owner.ContextParent.DropDownItems.Count; // Read Edit items and move them to context menu. // Since every move reduces number of items, read them in reverse order. // To get items in direct order, insert each of them to beginning. for (int i = nItems - 1; i >= 0; i--) { m_ContextMenu.Items.Insert(0, owner.ContextParent.DropDownItems[i]); } // Show context menu for owner form, so that it handles items selection. // Convert pointscroll from this window coordinates to owner's coordinates. point.X += this.Left; point.Y += this.Top; Point org = new Point(e.X, e.Y); m_ContextMenu.Show(this, org); Owner.SetStateOfControls(); // enable/disable menu items // Context menu is shown, but owner's Edit menu is now empty. // Subscribe to context menu Closed event and restore items there. m_ContextMenu.Closed += delegate(object sender, ToolStripDropDownClosedEventArgs args) { if (m_ContextMenu != null) // precaution { nItems = m_ContextMenu.Items.Count; for (int k = nItems - 1; k >= 0; k--) { owner.ContextParent.DropDownItems.Insert(0, m_ContextMenu.Items[k]); } } }; }
/// <summary> /// Left mouse button is pressed /// </summary> /// <param name="drawArea"></param> /// <param name="e"></param> public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e) { commandChangeState = null; wasMove = false; selectMode = SelectionMode.None; Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y)); // Test for resizing (only if control is selected, cursor is on the handle) int al = drawArea.TheLayers.ActiveLayerIndex; int n = drawArea.TheLayers[al].Graphics.SelectionCount; for (int i = 0; i < n; i++) { DrawObject o = drawArea.TheLayers[al].Graphics.GetSelectedObject(i); int handleNumber = o.HitTest(point); if (handleNumber > 0) { selectMode = SelectionMode.Size; // keep resized object in class members resizedObject = o; resizedObjectHandle = handleNumber; // Since we want to resize only one object, unselect all other objects drawArea.TheLayers[al].Graphics.UnselectAll(); o.Selected = true; commandChangeState = new CommandChangeState(drawArea.TheLayers); break; } } // Test for move (cursor is on the object) if (selectMode == SelectionMode.None) { int n1 = drawArea.TheLayers[al].Graphics.Count; DrawObject o = null; for (int i = 0; i < n1; i++) { if (drawArea.TheLayers[al].Graphics[i].HitTest(point) == 0) { o = drawArea.TheLayers[al].Graphics[i]; break; } } if (o != null) { selectMode = SelectionMode.Move; // Unselect all if Ctrl is not pressed and clicked object is not selected yet if ((Control.ModifierKeys & Keys.Control) == 0 && !o.Selected) { drawArea.TheLayers[al].Graphics.UnselectAll(); } // Select clicked object o.Selected = true; commandChangeState = new CommandChangeState(drawArea.TheLayers); drawArea.Cursor = Cursors.SizeAll; } } // Net selection if (selectMode == SelectionMode.None) { // click on background if ((Control.ModifierKeys & Keys.Control) == 0) { drawArea.TheLayers[al].Graphics.UnselectAll(); } selectMode = SelectionMode.NetSelection; drawArea.DrawNetRectangle = true; } lastPoint.X = point.X; lastPoint.Y = point.Y; startPoint.X = point.X; startPoint.Y = point.Y; drawArea.Capture = true; drawArea.NetRectangle = DrawRectangle.GetNormalizedRectangle(startPoint, lastPoint); drawArea.Refresh(); }
/// <summary> /// Right-click handler /// </summary> /// <param name="e"></param> private void OnContextMenu(MouseEventArgs e) { // Change current selection if necessary Point point = new Point(Math.Abs(this.AutoScrollPosition.X) + e.X, Math.Abs(this.AutoScrollPosition.Y) + e.Y); int n = GraphicsList.Count; DrawObject o = null; for (int i = 0; i < n; i++) { if (GraphicsList[i].HitTest(point) == 0) { o = GraphicsList[i]; break; } } if (o != null) { if (!o.Selected) { GraphicsList.UnselectAll(); } // Select clicked object o.Selected = true; } else { GraphicsList.UnselectAll(); } Refresh(); // in the case selection was changed // Show context menu. // Context menu items are filled from owner form Edit menu items. m_ContextMenu = new ContextMenuStrip(); int nItems = owner.ContextParent.DropDownItems.Count; // Read Edit items and move them to context menu. // Since every move reduces number of items, read them in reverse order. // To get items in direct order, insert each of them to beginning. for (int i = nItems - 1; i >= 0; i--) { m_ContextMenu.Items.Insert(0, owner.ContextParent.DropDownItems[i]); } // Show context menu for owner form, so that it handles items selection. // Convert pointscroll from this window coordinates to owner's coordinates. point.X += this.Left; point.Y += this.Top; Point org = new Point(e.X, e.Y); m_ContextMenu.Show(owner, org); Owner.SetStateOfControls(); // enable/disable menu items // Context menu is shown, but owner's Edit menu is now empty. // Subscribe to context menu Closed event and restore items there. m_ContextMenu.Closed += delegate(object sender, ToolStripDropDownClosedEventArgs args) { if (m_ContextMenu != null) // precaution { nItems = m_ContextMenu.Items.Count; for (int k = nItems - 1; k >= 0; k--) { owner.ContextParent.DropDownItems.Insert(0, m_ContextMenu.Items[k]); } } }; }
/// <summary> /// Copy fields from this instance to cloned instance drawObject. /// Called from Clone functions of derived classes. /// </summary> protected void FillDrawObjectFields(DrawObject drawObject) { drawObject.selected = this.selected; drawObject.color = this.color; drawObject.penWidth = this.penWidth; drawObject.ID = this.ID; }