using OpenCvSharp; using PaintDotNet.Adjust; using PaintDotNet.Adjust.BaseImage; using PaintDotNet.Annotation; using PaintDotNet.Annotation.Enum; using PaintDotNet.Annotation.Label; using PaintDotNet.Base; using PaintDotNet.Base.CommTool; using PaintDotNet.Data.Param; using PaintDotNet.DbOpreate.DbBll; using PaintDotNet.DbOpreate.DbModel; using PaintDotNet.Preview2; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace PaintDotNet.Menus { /// /// 编辑菜单 /// internal sealed class EditMenu : PdnMenuItem { private PdnMenuItem menuEditUndo; private PdnMenuItem menuEditRedo; private PdnMenuItem menuEditCopy; private PdnMenuItem menuEditPaste; private PdnMenuItem menuEditDelete; private ToolStripSeparator menuEditSeparator1; private PdnMenuItem menuViewZoomIn; private PdnMenuItem menuViewZoomOut; private PdnMenuItem menuViewActualSize; private PdnMenuItem menuViewZoomToWindow; private PdnMenuItem menuViewZoomToWidth; private PdnMenuItem menuViewZoomToHeight; private ToolStripSeparator menuEditSeparator2; private PdnMenuItem menuImageCut; private PdnMenuItem menuLockZoom; private PdnMenuItem menuFixedMultiple; private ToolStripSeparator menuEditSeparator3; private PdnMenuItem menuImageFlipHorizontal; private PdnMenuItem menuImageFlipVertical; private PdnMenuItem menuImageFlipCenter; private ToolStripSeparator menuEditSeparator4; private PdnMenuItem menuImageRotate90CW; private PdnMenuItem menuImageRotate180; private PdnMenuItem menuImageRotate90CCW; private Bitmap copyedBitmap;//复制的图片 private int nameNum = 0;//命名使用 public static Preview2Dialog _p2Form => Preview2Dialog.Instance; private bool OnBackspaceTyped(Keys keys) { if (AppWorkspace.ActiveDocumentWorkspace != null) { //this.menuEditFillSelection.PerformClick(); return true; } else { return false; } } public EditMenu(int menuId) { //PdnBaseForm.RegisterFormHotKey(Keys.Back, OnBackspaceTyped); //PdnBaseForm.RegisterFormHotKey(Keys.Shift | Keys.Delete, OnLeftHandedCutHotKey); PdnBaseForm.RegisterFormHotKey(Keys.Control | Keys.Insert, OnLeftHandedCopyHotKey); PdnBaseForm.RegisterFormHotKey(Keys.Shift | Keys.Insert, OnLeftHandedPasteHotKey); InitializeComponent(); this.MenuId = menuId; } /** private bool OnLeftHandedCutHotKey(Keys keys) { this.menuEditCut.PerformClick(); return true; }**/ private bool OnLeftHandedCopyHotKey(Keys keys) { this.menuEditCopy.PerformClick(); return true; } private bool OnLeftHandedPasteHotKey(Keys keys) { this.menuEditPaste.PerformClick(); return true; } private void InitializeComponent() { this.menuEditUndo = new PdnMenuItem(ActionType.Undo); this.menuEditRedo = new PdnMenuItem(ActionType.Redo); this.menuEditCopy = new PdnMenuItem(ActionType.Copy); this.menuEditPaste = new PdnMenuItem(ActionType.Paste); this.menuEditDelete = new PdnMenuItem(ActionType.Delete); this.menuEditSeparator1 = new ToolStripSeparator(); this.menuViewZoomIn = new PdnMenuItem(ActionType.ZoomIn); this.menuViewZoomOut = new PdnMenuItem(ActionType.ZoomOut); this.menuViewActualSize = new PdnMenuItem(ActionType.ActualSize, true); this.menuViewZoomToWindow = new PdnMenuItem(ActionType.ZoomToWindow, true); this.menuViewZoomToWidth = new PdnMenuItem(ActionType.ZoomToWidth, true); this.menuViewZoomToHeight = new PdnMenuItem(ActionType.ZoomToHeight, true); this.menuEditSeparator2 = new ToolStripSeparator(); this.menuImageCut = new PdnMenuItem(ActionType.ImageCut); this.menuLockZoom = new PdnMenuItem(ActionType.LockZoom); this.menuFixedMultiple = new PdnMenuItem(ActionType.FixedMultiple); //this.menuFixedMultiple.Visible = false; this.menuEditSeparator3 = new ToolStripSeparator(); this.menuImageFlipHorizontal = new PdnMenuItem(ActionType.FlipHorizontal); this.menuImageFlipVertical = new PdnMenuItem(ActionType.FlipVertical); this.menuImageFlipCenter = new PdnMenuItem(ActionType.FlipCenter); this.menuEditSeparator4 = new ToolStripSeparator(); this.menuImageRotate90CW = new PdnMenuItem(ActionType.Rotate90CW); this.menuImageRotate180 = new PdnMenuItem(ActionType.Rotate180); this.menuImageRotate90CCW = new PdnMenuItem(ActionType.Rotate90CCW); // // EditMenu // this.DropDownItems.AddRange( new ToolStripItem[] { this.menuEditUndo, this.menuEditRedo, this.menuEditCopy, this.menuEditPaste, this.menuEditDelete, this.menuEditSeparator1, this.menuViewZoomIn, this.menuViewZoomOut, this.menuViewActualSize, this.menuViewZoomToWindow, this.menuViewZoomToWidth, this.menuViewZoomToHeight, this.menuEditSeparator2, this.menuImageCut, this.menuLockZoom, this.menuFixedMultiple, this.menuEditSeparator3, this.menuImageFlipHorizontal, this.menuImageFlipVertical, this.menuImageFlipCenter, this.menuEditSeparator4, this.menuImageRotate90CW, this.menuImageRotate180, this.menuImageRotate90CCW }); ; this.Name = "Menu.Edit"; this.Text = PdnResources.GetString("Menu.Edit.Text"); // // 撤销 // this.menuEditUndo.Click += new EventHandler(this.MenuEditUndo_Click); // // 恢复 // this.menuEditRedo.Click += new EventHandler(this.MenuEditRedo_Click); // // 复制 // this.menuEditCopy.Click += new EventHandler(this.MenuEditCopy_Click); // // 粘贴 // this.menuEditPaste.Click += new EventHandler(this.MenuEditPaste_Click); // // 删除 // this.menuEditDelete.Click += new EventHandler(this.MenuEditDelete_Click); // // 放大 // this.menuViewZoomIn.ShortcutKeyDisplayString = PdnResources.GetString("Menu.View.ZoomIn.ShortcutKeyDisplayString"); this.menuViewZoomIn.NeedWaitKey = true; this.menuViewZoomIn.Click += new EventHandler(this.MenuViewZoomIn_Click); // // 缩小 // this.menuViewZoomOut.ShortcutKeyDisplayString = PdnResources.GetString("Menu.View.ZoomOut.ShortcutKeyDisplayString"); this.menuViewZoomOut.NeedWaitKey = true; this.menuViewZoomOut.Click += new EventHandler(this.MenuViewZoomOut_Click); // // 实际大小 // this.menuViewActualSize.NeedWaitKey = true; this.menuViewActualSize.Click += new EventHandler(this.MenuViewActualSize_Click); // // 合适大小 // this.menuViewZoomToWindow.NeedWaitKey = true; this.menuViewZoomToWindow.Click += new EventHandler(this.MenuViewZoomToWindow_Click); // // 合适宽度 // this.menuViewZoomToWidth.NeedWaitKey = true; this.menuViewZoomToWidth.Click += new EventHandler(this.MenuViewZoomToWidth_Click); // // // 合适高度 this.menuViewZoomToHeight.NeedWaitKey = true; this.menuViewZoomToHeight.Click += new EventHandler(this.MenuViewZoomToHeight_Click); // // 图片裁剪 // this.menuImageCut.NeedWaitKey = true; this.menuImageCut.AutomaticScript = false; this.menuImageCut.Click += new EventHandler(this.MenuImageCut_Click); // // 锁定扩缩 // this.menuLockZoom.Click += new EventHandler(this.MenuLockZoom_Click); // // 定倍显示 // this.menuFixedMultiple.Click += new EventHandler(this.MenuFixedMultiple_Click); // // 水平翻转 // this.menuImageFlipHorizontal.Click += new EventHandler(this.MenuImageFlipHorizontal_Click); // // 垂直翻转 // this.menuImageFlipVertical.Click += new EventHandler(this.MenuImageFlipVertical_Click); // // 中心翻转 // this.menuImageFlipCenter.Click += new EventHandler(this.MenuImageFlipCenter_Click); // // 旋转90度 // this.menuImageRotate90CW.Click += new EventHandler(this.MenuImageRotate90_Click); //this.menuImageRotate90CW.ShortcutKeys = Keys.Control | Keys.J; // // 旋转180度 // this.menuImageRotate180.Click += new EventHandler(this.MenuImageRotate180_Click); //this.menuImageRotate180.ShortcutKeys = Keys.Control | Keys.J; // // 旋转270度 // this.menuImageRotate90CCW.Click += new EventHandler(this.MenuImageRotate270_Click); //this.menuImageRotate90CCW.ShortcutKeys = Keys.Control | Keys.J; // // 加载菜单的文字和icon // this.LoadNames(this.Name); this.LoadIcons(); } protected override void OnDropDownOpening(EventArgs e) { this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.ActualSize : false; this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.SuitableSize : false; this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.SuitableWidth : false; this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.SuitableHeight : false; this.menuLockZoom.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.LockZoom : false; this.menuFixedMultiple.Checked = AppWorkspace.ActiveDocumentWorkspace != null ? AppWorkspace.ActiveDocumentWorkspace.FixedMultiple : false; if (AppWorkspace.ActiveDocumentWorkspace == null/* || AppWorkspace.ScriptRunning*/) { this.menuViewZoomToWindow.Enabled = false; this.menuViewActualSize.Enabled = false; this.menuEditCopy.Enabled = false; this.menuEditDelete.Enabled = false; this.menuLockZoom.Checked = false; this.menuFixedMultiple.Enabled = false; } else { this.menuViewZoomToWindow.Enabled = true; //this.menuViewZoomToSelection.Enabled = !AppWorkspace.ActiveDocumentWorkspace.Selection.IsEmpty; this.menuViewActualSize.Enabled = true; this.menuEditCopy.Enabled = true; //this.menuLockZoom.Checked = AppWorkspace.isLockZoom; this.menuEditDelete.Enabled = false; if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList != null && AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count > 0) { for (int i = 0; i < AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count; i++) { if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList[i].Selected) { this.menuEditDelete.Enabled = true; break; } } } //this.menuViewZoomToWindow.Checked = (AppWorkspace.ActiveDocumentWorkspace.ZoomBasis == ZoomBasis.FitToWindow); this.menuFixedMultiple.Enabled = true; } if (copyedBitmap != null/* && !AppWorkspace.ScriptRunning*/) this.menuEditPaste.Enabled = true; else this.menuEditPaste.Enabled = false; //this.menuEditDelete.Enabled = selection; //this.menuEditCut.Enabled = selection && bitmapLayer; // find out if there's anything on the clipboard that we can use //bool isClipImageAvailable = Utility.IsClipboardImageAvailable(); //this.menuEditPaste.Enabled = isClipImageAvailable && (AppWorkspace.ActiveDocumentWorkspace != null); /** if (!this.menuEditPaste.Enabled) { if (AppWorkspace.ActiveDocumentWorkspace != null) { bool canHandle; try { IDataObject pasted = Clipboard.GetDataObject(); } catch (ExternalException) { canHandle = false; } if (canHandle) { this.menuEditPaste.Enabled = true; } } }**/ if (AppWorkspace.ActiveDocumentWorkspace != null/* && !AppWorkspace.ScriptRunning*/) { this.menuEditUndo.Enabled = (AppWorkspace.ActiveDocumentWorkspace.undoManager.CanUndo);// (AppWorkspace.ActiveDocumentWorkspace.History.UndoStack.Count > 1); // top of stack is always assumed to be a "NullHistoryMemento," which is not undoable! thus we don't count it this.menuEditRedo.Enabled = (AppWorkspace.ActiveDocumentWorkspace.undoManager.CanRedo);// (AppWorkspace.ActiveDocumentWorkspace.History.RedoStack.Count > 0); } else { this.menuEditUndo.Enabled = false; this.menuEditRedo.Enabled = false; } //this.RecursiveData(this.DropDownItems); base.OnDropDownOpening(e); } /// /// 撤销 /// /// /// private void MenuEditUndo_Click(object sender, EventArgs e) { if (_p2Form != null) { _p2Form._document.undoManager.Undo(); _p2Form._document.Refresh(); } else if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.undoManager.Undo(); AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } /// /// 恢复 /// /// /// private void MenuEditRedo_Click(object sender, EventArgs e) { if (_p2Form != null) { _p2Form._document.undoManager.Redo(); _p2Form._document.Refresh(); } if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.undoManager.Redo(); AppWorkspace.ActiveDocumentWorkspace.Refresh(); } /** if (AppWorkspace.ActiveDocumentWorkspace != null && !AppWorkspace.ActiveDocumentWorkspace.IsMouseCaptured()) { AppWorkspace.ActiveDocumentWorkspace.PerformAction(new HistoryRedoAction()); }**/ } /// /// 复制 /// /// /// private void MenuEditCopy_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null && AppWorkspace.ActiveDocumentWorkspace.CompositionSurface != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } Bitmap temp = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreateAliasedBitmap(); copyedBitmap = new Bitmap(temp.Width, temp.Height); Graphics graphics = Graphics.FromImage(copyedBitmap); graphics.DrawImage(temp, 0, 0, temp.Width, temp.Height); if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList.IsExsitSpecificObject(DrawToolType.ImageCut)) { //获取裁剪的矩形区域 List objList = AppWorkspace.ActiveDocumentWorkspace.GraphicsList.GetDrawToolTypeList(DrawToolType.ImageCut); ImageCutDraw imageCutDraw = (ImageCutDraw)objList[0]; RectangleF cutRectangle = imageCutDraw.Rectangle; copyedBitmap = DrawRulerHelper.KiCut(copyedBitmap, (int)cutRectangle.X, (int)cutRectangle.Y, (int)cutRectangle.Width, (int)cutRectangle.Height); } } } /// /// 粘贴 /// /// /// private void MenuEditPaste_Click(object sender, EventArgs e) { if (copyedBitmap != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace(); Document document = Document.FromImageMat(Camera.Tools.ToMat(copyedBitmap)); dw.Document = document; //图片命名 nameNum++; int numLength = nameNum.ToString().Length; string joinName = ""; switch (numLength) { case 1: joinName = "00" + nameNum; break; case 2: joinName = "0" + nameNum; break; default: joinName = nameNum.ToString(); break; } dw.xmlSaveModel = AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel; dw.rules = AppWorkspace.ActiveDocumentWorkspace.rules; dw.fileText = PdnResources.GetString("Menu.Copythepicture.Text") + "-" + joinName; AppWorkspace.ActiveDocumentWorkspace = dw; } } /// /// 删除 /// /// /// private void MenuEditDelete_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList != null && AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count > 0) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } for (int i = AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count - 1; i >= 0; i--) { if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList[i].Selected == true) { //对数字标记做单独处理 if (AppWorkspace.ActiveDocumentWorkspace.GraphicsList[i].drawToolType == DrawToolType.DrawNumberMark) { DrawNumberMark drawNumberMark = (DrawNumberMark)AppWorkspace.ActiveDocumentWorkspace.GraphicsList[i]; List objList = AppWorkspace.ActiveDocumentWorkspace.GraphicsList.GetDrawToolTypeList(DrawToolType.DrawNumberMark); if (objList != null && objList.Count > 0) { for (int j = 0; j < objList.Count; j++) { DrawNumberMark modifyNum = (DrawNumberMark)objList[j]; if (modifyNum.nowNum > drawNumberMark.nowNum) { modifyNum.nowNum -= 1; } } } } AppWorkspace.ActiveDocumentWorkspace.GraphicsList.RemoveObj(AppWorkspace.ActiveDocumentWorkspace.GraphicsList[i]); } } AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } } private void MenuViewZoomIn_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.ZoomIn(); } } private void MenuViewZoomOut_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.ZoomOut(); } } private void MenuViewActualSize_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } if (!AppWorkspace.ActiveDocumentWorkspace.ActualSize) { AppWorkspace.ActiveDocumentWorkspace.ActualSize = !AppWorkspace.ActiveDocumentWorkspace.ActualSize; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace.ActualSize; AppWorkspace.ActiveDocumentWorkspace.SuitableSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableSize; AppWorkspace.ActiveDocumentWorkspace.SuitableWidth = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; AppWorkspace.ActiveDocumentWorkspace.SuitableHeight = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; } else { AppWorkspace.ActiveDocumentWorkspace.ActualSize = !AppWorkspace.ActiveDocumentWorkspace.ActualSize; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace.ActualSize; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } AppWorkspace.UpdateBottomButtonSelectionStatus(); AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.ScaleFactor; AppWorkspace.ActiveDocumentWorkspace.ScaleFactor = ScaleFactor.OneToOne; } } private void MenuViewZoomToWindow_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } if (!AppWorkspace.ActiveDocumentWorkspace.SuitableSize) { AppWorkspace.ActiveDocumentWorkspace.SuitableSize = !AppWorkspace.ActiveDocumentWorkspace.SuitableSize; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableSize; AppWorkspace.ActiveDocumentWorkspace.ActualSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace.ActualSize; AppWorkspace.ActiveDocumentWorkspace.SuitableWidth = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; AppWorkspace.ActiveDocumentWorkspace.SuitableHeight = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } else { AppWorkspace.ActiveDocumentWorkspace.SuitableSize = !AppWorkspace.ActiveDocumentWorkspace.SuitableSize; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableSize; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } AppWorkspace.UpdateBottomButtonSelectionStatus(); AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWindow; } } private void MenuViewZoomToWidth_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } if (!AppWorkspace.ActiveDocumentWorkspace.SuitableWidth) { AppWorkspace.ActiveDocumentWorkspace.SuitableWidth = !AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; AppWorkspace.ActiveDocumentWorkspace.SuitableSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableSize; AppWorkspace.ActiveDocumentWorkspace.ActualSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace.ActualSize; AppWorkspace.ActiveDocumentWorkspace.SuitableHeight = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } else { AppWorkspace.ActiveDocumentWorkspace.SuitableWidth = !AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWidth; } } private void MenuViewZoomToHeight_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } if (!AppWorkspace.ActiveDocumentWorkspace.SuitableHeight) { AppWorkspace.ActiveDocumentWorkspace.SuitableHeight = !AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; AppWorkspace.ActiveDocumentWorkspace.SuitableWidth = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableWidth, "ZoomToWidth"); this.menuViewZoomToWidth.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableWidth; AppWorkspace.ActiveDocumentWorkspace.SuitableSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableSize, "ZoomToWindow"); this.menuViewZoomToWindow.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableSize; AppWorkspace.ActiveDocumentWorkspace.ActualSize = false; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.ActualSize, "ActualSize"); this.menuViewActualSize.Checked = AppWorkspace.ActiveDocumentWorkspace.ActualSize; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } else { AppWorkspace.ActiveDocumentWorkspace.SuitableHeight = !AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.SuitableHeight, "ZoomToHeight"); this.menuViewZoomToHeight.Checked = AppWorkspace.ActiveDocumentWorkspace.SuitableHeight; this.AppWorkspace.UpdateBottomButtonSelectionStatus(); } AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToHeight; } } private void MenuImageCut_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.ActiveTool = DrawToolType.ImageCut; } } /// /// 锁定扩缩 /// /// /// private void MenuLockZoom_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.LockZoom = !AppWorkspace.ActiveDocumentWorkspace.LockZoom; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.LockZoom, "LockZoom"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.LockZoom, "LockZoom"); this.menuLockZoom.Checked = !this.menuLockZoom.Checked; AppWorkspace.UpdateBottomButtonSelectionStatus(); AppWorkspace.isLockZoom = this.menuLockZoom.Checked; AppWorkspace.lockScaleRatio = AppWorkspace.ActiveDocumentWorkspace.ScaleFactor.Ratio; } } /// /// 定倍显示 /// /// /// private void MenuFixedMultiple_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.FixedMultiple = !AppWorkspace.ActiveDocumentWorkspace.FixedMultiple; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.FixedMultiple, "FixedMultiple"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.FixedMultiple, "FixedMultiple"); this.menuFixedMultiple.Checked = AppWorkspace.ActiveDocumentWorkspace.FixedMultiple; int dotPitch = Startup.instance.configModel.DotPitchId;//获取系统激活的点距id if (dotPitch <= 0) { MessageBox.Show(PdnResources.GetString("Menu.hedotdistancefirstandthenadjustthedisplayoperation.Text") + "!"); return; } mic_screen_rules screenList = mic_screen_rules_BLL.FindDefault(dotPitch);//从数据库查询点距具体信息 if (screenList == null) { MessageBox.Show(PdnResources.GetString("Menu.Failedtogetpointdistanceinformation.Text")); return; } double pointPitch = 0; try { pointPitch = double.Parse(screenList.point_pitch);//获取点距 } catch (System.Exception) { MessageBox.Show(PdnResources.GetString("Menu.Pointdistanceinformationexception.Text")); return; } if (pointPitch <= 0) { MessageBox.Show(PdnResources.GetString("Menu.Pointdistanceinformationexception.Text")); return; } string imgName = AppWorkspace.ActiveDocumentWorkspace.GetFriendlyName();//原始图片名 Bitmap oldBit = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreateAliasedBitmap();//原始图片 //获取系统的毫米标尺 double unitLength = 0; //AppWorkspace.getMeasureInfo().TryGetValue(MeasurementUnit.Millimeter, out unitLength); unitLength = AppWorkspace.ActiveDocumentWorkspace.GetRuler(MeasurementUnit.Millimeter); if (unitLength == 0) unitLength = 1; int oldWidth = oldBit.Width; int oldHeight = oldBit.Height; int targetWidth = 0; int targetHeight = 0; if (oldWidth <= 1 || oldHeight <= 1)//像素最小为1,之后不再处理 return; double pantographRatio = unitLength / pointPitch;//缩放比 double aspectRatio = oldWidth / (oldHeight * 1d);//宽高比 if (oldWidth <= oldHeight) { if (Startup.instance.ruleDB != null) targetWidth = (int)(oldWidth * pantographRatio * (double)Startup.instance.ruleDB.gain_multiple); else targetWidth = (int)(oldWidth * pantographRatio); if (targetWidth < 1 || targetWidth > oldWidth)//像素值异常不做处理 return; targetHeight = (int)(targetWidth / aspectRatio); } else { if (Startup.instance.ruleDB != null) targetHeight = (int)(oldHeight * pantographRatio * (double)Startup.instance.ruleDB.gain_multiple); else targetHeight = (int)(oldHeight * pantographRatio); if (targetHeight < 1 || targetHeight > oldHeight)//像素值异常不做处理 return; targetWidth = (int)(targetHeight * aspectRatio); } //缩放图片 using (Bitmap targetBit = new Bitmap(targetWidth, targetHeight)) { using (Graphics g = Graphics.FromImage(targetBit)) { g.DrawImage(oldBit, new Rectangle(0, 0, targetWidth, targetHeight), new Rectangle(0, 0, oldWidth, oldHeight), GraphicsUnit.Pixel); DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace(); Document document = Document.FromImageMat(Camera.Tools.ToMat(targetBit)); dw.Document = document; dw.xmlSaveModel = this.AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel; dw.rules = this.AppWorkspace.ActiveDocumentWorkspace.rules; dw.fileText = imgName; AppWorkspace.ActiveDocumentWorkspace = dw; } } } } /// /// 水平镜像 /// /// /// private void MenuImageFlipHorizontal_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.HorizontalMirroringButton_Click(sender, null); } } /// /// 垂直镜像 /// /// /// private void MenuImageFlipVertical_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.VerticalMirrorButton_Click(sender, null); } } /// /// 中心镜像 /// /// /// private void MenuImageFlipCenter_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.CenterMirrorButton_Click(sender, null); } } /// /// 旋转90度 /// /// /// private void MenuImageRotate90_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } Mat src = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreatedAliasedMat(); Mat dst = new Mat(); GeometryIntent.ImageRotate(src, dst, FlipMode.Y);//待测试 if (AppWorkspace.ScriptRunning) { DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace(); Document document = Document.FromImageMat(dst); dw.Document = document; dw.fileText = PdnResources.GetString("Menu.Edit.Text") + "-" + ((PdnMenuItem)sender).Text + "-" + Startup.instance.step_length; AppWorkspace.ActiveDocumentWorkspace = dw; Startup.instance.step_length += 1; } else { ZoomBasis zoom = AppWorkspace.ActiveDocumentWorkspace.ZoomBasis; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWindow; Document document = Document.FromImageMat(dst); AppWorkspace.ActiveDocumentWorkspace.Document = document; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = zoom; AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } } /// /// 旋转180度 /// /// /// private void MenuImageRotate180_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } Mat src = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreatedAliasedMat(); Mat dst = new Mat(); GeometryIntent.ImageRotate(src, dst, FlipMode.XY);//待测试 if (AppWorkspace.ScriptRunning) { DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace(); Document document = Document.FromImageMat(dst); dw.Document = document; dw.fileText = PdnResources.GetString("Menu.Edit.Text") + "-" + ((PdnMenuItem)sender).Text + "-" + Startup.instance.step_length; AppWorkspace.ActiveDocumentWorkspace = dw; Startup.instance.step_length += 1; } else { ZoomBasis zoom = AppWorkspace.ActiveDocumentWorkspace.ZoomBasis; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWindow; Document document = Document.FromImageMat(dst); AppWorkspace.ActiveDocumentWorkspace.Document = document; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = zoom; AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } } /// /// 旋转270度 /// /// /// private void MenuImageRotate270_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } Mat src = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreatedAliasedMat(); Mat dst = new Mat(); GeometryIntent.ImageRotate(src, dst, FlipMode.X);//待测试 if (AppWorkspace.ScriptRunning) { DocumentWorkspace dw = AppWorkspace.AddNewDocumentWorkspace(); Document document = Document.FromImageMat(dst); dw.Document = document; dw.fileText = PdnResources.GetString("Menu.Edit.Text") + "-" + ((PdnMenuItem)sender).Text + "-" + Startup.instance.step_length; AppWorkspace.ActiveDocumentWorkspace = dw; Startup.instance.step_length += 1; } else { ZoomBasis zoom = AppWorkspace.ActiveDocumentWorkspace.ZoomBasis; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWindow; Document document = Document.FromImageMat(dst); AppWorkspace.ActiveDocumentWorkspace.Document = document; AppWorkspace.ActiveDocumentWorkspace.ZoomBasis = zoom; AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } } } }