using PaintDotNet.Annotation.Enum; using PaintDotNet.Base; using PaintDotNet.Data.Param; using PaintDotNet.FieldView; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Globalization; using System.Windows.Forms; namespace PaintDotNet.Menus { /// /// 视场菜单 /// internal sealed class ViewSettingMenu : PdnMenuItem { private PdnMenuItem menuViewSelect; private PdnMenuItem menuViewDeleteSelect; private PdnMenuItem menuViewClearAll; private ToolStripSeparator menuHelpSeparator1; private PdnMenuItem menuOvalView; private PdnMenuItem menuRoundView; private PdnMenuItem menuRectangleView; private PdnMenuItem menuRectangleExView; private PdnMenuItem menuTriangleView; private PdnMenuItem menuTriangleExView; private PdnMenuItem menuSquareView; private PdnMenuItem menuPolygonView; private ToolStripSeparator menuHelpSeparator2; private PdnMenuItem menuMergeFieldOfView; private PdnMenuItem menuDeleteFieldOfView; private ToolStripSeparator menuHelpSeparator3; private PdnMenuItem menuShearFieldOfView; private PdnMenuItem menuTransparentCut; private ToolStripSeparator menuHelpSeparator4; private PdnMenuItem menuOpenFieldOfView; private PdnMenuItem menuModifyFieldOfView; private PdnMenuItem menuSaveFieldOfView; public ViewSettingMenu(int menuId) { InitializeComponent(); this.MenuId = menuId; this.AutoNextScript = false; this.AutomaticScript = false; } protected override void OnAppWorkspaceChanged() { base.OnAppWorkspaceChanged(); } protected override void OnDropDownOpening(EventArgs e) { //this.RecursiveData(this.DropDownItems); base.OnDropDownOpening(e); } private void InitializeComponent() { this.menuViewSelect = new PdnMenuItem(ActionType.ViewSelect); this.menuViewDeleteSelect = new PdnMenuItem(ActionType.ViewDeleteSelect); this.menuViewClearAll = new PdnMenuItem(ActionType.ViewClearAll); this.menuHelpSeparator1 = new ToolStripSeparator(); this.menuOvalView = new PdnMenuItem(ActionType.OvalView); this.menuRoundView = new PdnMenuItem(ActionType.RoundView); this.menuRectangleView = new PdnMenuItem(ActionType.RectangleView); this.menuRectangleExView = new PdnMenuItem(ActionType.RectangleExView); this.menuTriangleView = new PdnMenuItem(ActionType.TriangleView); this.menuTriangleExView = new PdnMenuItem(ActionType.TriangleExView); this.menuSquareView = new PdnMenuItem(ActionType.SquareView); this.menuPolygonView = new PdnMenuItem(ActionType.PolygonView); this.menuHelpSeparator2 = new ToolStripSeparator(); this.menuMergeFieldOfView = new PdnMenuItem(ActionType.MergeFieldOfView); this.menuDeleteFieldOfView = new PdnMenuItem(ActionType.DeleteFieldOfView); this.menuHelpSeparator3 = new ToolStripSeparator(); this.menuShearFieldOfView = new PdnMenuItem(ActionType.ShearFieldOfView); this.menuTransparentCut = new PdnMenuItem(ActionType.TransparentCut); this.menuHelpSeparator4 = new ToolStripSeparator(); this.menuOpenFieldOfView = new PdnMenuItem(ActionType.OpenFieldOfView); this.menuModifyFieldOfView = new PdnMenuItem(ActionType.ModifyFieldOfView); this.menuSaveFieldOfView = new PdnMenuItem(ActionType.SaveFieldOfView); // // 主菜单 // this.DropDownItems.AddRange(new ToolStripItem[] { this.menuViewSelect, this.menuViewDeleteSelect, this.menuViewClearAll, this.menuHelpSeparator1, this.menuOvalView, this.menuRoundView, this.menuRectangleView, this.menuRectangleExView, this.menuTriangleView, this.menuTriangleExView, this.menuSquareView, this.menuPolygonView, this.menuHelpSeparator2, this.menuMergeFieldOfView, this.menuDeleteFieldOfView, this.menuHelpSeparator3, this.menuShearFieldOfView, this.menuTransparentCut, this.menuHelpSeparator4, this.menuOpenFieldOfView, this.menuModifyFieldOfView, this.menuSaveFieldOfView }); this.Name = "Menu.ViewSetting"; this.Text = PdnResources.GetString("Menu.ViewSetting.Text"); // // 选择视场 // this.menuViewSelect.Click += new EventHandler(MenuViewSelect_Click); this.menuViewSelect.NeedWaitKey = true; // // 删除选择 // this.menuViewDeleteSelect.Click += new System.EventHandler(MenuViewDeleteSelect_Click); this.menuViewDeleteSelect.NeedWaitKey = true; // // 清空全部 // this.menuViewClearAll.Click += new System.EventHandler(MenuViewClearAll_Click); this.menuViewClearAll.NeedWaitKey = true; // // 椭圆视场 // this.menuOvalView.Click += new System.EventHandler(MenuOvalView_Click); this.menuOvalView.NeedWaitKey = true; // // 圆形视场 // this.menuRoundView.Click += new System.EventHandler(MenuRoundView_Click); this.menuRoundView.NeedWaitKey = true; // // 矩形视场 // this.menuRectangleView.Click += new System.EventHandler(MenuRectangleView_Click); this.menuRectangleView.NeedWaitKey = true; // // 矩形视场 // this.menuRectangleExView.Click += new System.EventHandler(MenuRectangleExView_Click); this.menuRectangleExView.NeedWaitKey = true; // // 直角三角形视场 // this.menuTriangleView.Click += new System.EventHandler(MenuTriangleView_Click); this.menuTriangleView.NeedWaitKey = true; // // 任意三角形视场 // this.menuTriangleExView.Click += new System.EventHandler(MenuTriangleExView_Click); this.menuTriangleExView.NeedWaitKey = true; // // 正方形视场 // this.menuSquareView.Click += new System.EventHandler(MenuSquareView_Click); this.menuSquareView.NeedWaitKey = true; // // 多边形视场 // this.menuPolygonView.Click += new System.EventHandler(MenuPolygonView_Click); this.menuPolygonView.NeedWaitKey = true; // // 合并视场 // this.menuMergeFieldOfView.Click += new System.EventHandler(MenuMergeFieldOfView_Click); this.menuMergeFieldOfView.NeedWaitKey = true; this.menuMergeFieldOfView.Checked = true; // // 删除视场 // this.menuDeleteFieldOfView.Click += new System.EventHandler(MenuDeleteFieldOfView_Click); this.menuDeleteFieldOfView.NeedWaitKey = true; this.menuDeleteFieldOfView.Checked = false; // // 剪切视场 // this.menuShearFieldOfView.Click += new System.EventHandler(MenuShearFieldOfView_Click); this.menuShearFieldOfView.NeedWaitKey = true; // // 透明剪切 // this.menuTransparentCut.Click += new System.EventHandler(MenuTransparentCut_Click); this.menuTransparentCut.NeedWaitKey = true; // // 打开视场 // this.menuOpenFieldOfView.Click += new System.EventHandler(MenuOpenFieldOfView_Click); this.menuOpenFieldOfView.NeedWaitKey = true; // // 修改视场 // this.menuModifyFieldOfView.Click += new System.EventHandler(MenuModifyFieldOfView_Click); this.menuModifyFieldOfView.NeedWaitKey = true; // // 保存视场 // this.menuSaveFieldOfView.Click += new System.EventHandler(MenuSaveFieldOfView_Click); this.menuSaveFieldOfView.NeedWaitKey = true; // // 加载菜单的文字和icon // this.LoadNames(this.Name); this.LoadIcons(); } /// /// 选择视场 /// /// /// private void MenuViewSelect_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.Pointer; } } /// /// 删除选择的视场 /// /// /// private void MenuViewDeleteSelect_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.Pointer; AppWorkspace.ActiveDocumentWorkspace.GraphicsList.DeleteSelection(DrawClass.View); AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } /// /// 清空全部 /// /// /// private void MenuViewClearAll_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.GraphicsList.DeleteAllView(); AppWorkspace.ActiveDocumentWorkspace.Refresh(); } } /// /// 椭圆视场 /// /// /// private void MenuOvalView_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.ViewOval; } } /// /// 圆形视场 /// /// /// private void MenuRoundView_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.ViewCircle; } } /// /// 矩形视场 /// /// /// private void MenuRectangleView_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.ViewRectangle; } } /// /// 矩形视场 /// /// /// private void MenuRectangleExView_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.ViewRectangleEx; } } /// /// 三角形视场 /// /// /// private void MenuTriangleView_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.ViewTriangle; } } /// /// 任意三角形视场 /// /// /// private void MenuTriangleExView_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.ViewTriangleEx; } } /// /// 正方形视场 /// /// /// private void MenuSquareView_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.ViewSquare; } } /// /// 多边形视场 /// /// /// private void MenuPolygonView_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.ViewPolygon; } } /// /// 合并视场 /// /// /// private void MenuMergeFieldOfView_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { AppWorkspace.ActiveDocumentWorkspace.CombineMode = CombineMode.Union; if (!AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView; AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView = !AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView; this.menuMergeFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView; this.menuDeleteFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView"); this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView"); } } } /// /// 删除视场 /// /// /// private void MenuDeleteFieldOfView_Click(object sender, EventArgs e) { if (AppWorkspace.ActiveDocumentWorkspace != null) { AppWorkspace.ActiveDocumentWorkspace.CombineMode = CombineMode.Complement; if(!AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView; AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView = !AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView; this.menuMergeFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView; this.menuDeleteFieldOfView.Checked = AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView; this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.MergeFieldOfView, "MergeFieldOfView"); this.AppWorkspace.toolBar.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView"); this.AppWorkspace.toolsPanel.RefreshBtnSelect(AppWorkspace.ActiveDocumentWorkspace.DeleteFieldOfView, "DeleteFieldOfView"); } } } /// /// 剪切视场 /// /// /// private void MenuShearFieldOfView_Click(object sender, EventArgs e) { if (this.AppWorkspace!=null && this.AppWorkspace.ActiveDocumentWorkspace!=null) { Bitmap bitmap = this.AppWorkspace.ActiveDocumentWorkspace.GetCutSizeWithColorWhiteOrTransparent(false); if(bitmap!=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(bitmap)); dw.Document = document; dw.xmlSaveModel = this.AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel; dw.rules = this.AppWorkspace.ActiveDocumentWorkspace.rules; dw.fileText = PdnResources.GetString("Menu.ViewSetting.ShearFieldOfView.Text") + "-" + Startup.instance.step_length; AppWorkspace.ActiveDocumentWorkspace = dw; Startup.instance.step_length += 1; } } } /// /// 透明剪切 /// /// /// private void MenuTransparentCut_Click(object sender, EventArgs e) { if (this.AppWorkspace != null && this.AppWorkspace.ActiveDocumentWorkspace != null) { Bitmap bitmap = this.AppWorkspace.ActiveDocumentWorkspace.GetCutSizeWithColorWhiteOrTransparent(true); if (bitmap != 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(bitmap)); dw.Document = document; dw.xmlSaveModel = this.AppWorkspace.ActiveDocumentWorkspace.xmlSaveModel; dw.rules = this.AppWorkspace.ActiveDocumentWorkspace.rules; dw.fileText = PdnResources.GetString("Menu.ViewSetting.TransparentCut.Text") + "-" + Startup.instance.step_length; AppWorkspace.ActiveDocumentWorkspace = dw; Startup.instance.step_length += 1; } } } /// /// 打开视场 /// /// /// private void MenuOpenFieldOfView_Click(object sender, EventArgs e) { using (OpenViewDialog dialog = new OpenViewDialog(AppWorkspace)) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } dialog.StartPosition = FormStartPosition.CenterScreen; dialog.ShowDialog(); } } /// /// 修改视场 /// /// /// private void MenuModifyFieldOfView_Click(object sender, EventArgs e) { //如果当前界面有视场、并且选中的是视场 if (AppWorkspace.ActiveDocumentWorkspace!=null && AppWorkspace.ActiveDocumentWorkspace.GraphicsList!=null && AppWorkspace.ActiveDocumentWorkspace.GraphicsList.Count>0 && AppWorkspace.ActiveDocumentWorkspace.GraphicsList.SelectionCount==1) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } var changeViewDialog = (ChangeViewDialog)Application.OpenForms["ChangeViewDialog"];//尝试获取已经弹出的窗口对象 FloatingFormMethod.ShowFloatForm(changeViewDialog, changeViewDialog == null ? new ChangeViewDialog(AppWorkspace)/*没有弹出的窗口对象则创建*/ : null, AppWorkspace); } else { MessageBox.Show(PdnResources.GetString("Menu.leaseonlyonefieldofviewtomodify.Text")); } } /// /// 保存视场 /// /// /// private void MenuSaveFieldOfView_Click(object sender, EventArgs e) { if(AppWorkspace.ActiveDocumentWorkspace!=null) { Region region = AppWorkspace.ActiveDocumentWorkspace.GetRegion(); Bitmap bitmap = AppWorkspace.ActiveDocumentWorkspace.CompositionSurface.CreateAliasedBitmap(); //判断当前surfacebox内是否有视场 if (region != null) { using (SaveViewDialog dialog = new SaveViewDialog(AppWorkspace, region, bitmap)) { if (AppWorkspace.startScriptRecording) { AppWorkspace.SetScriptStartRecording(((PdnMenuItem)sender).MenuId, ((PdnMenuItem)sender).Text, new List()); } dialog.StartPosition = FormStartPosition.CenterScreen; dialog.ShowDialog(); } } else { MessageBox.Show(PdnResources.GetString("Menu.Drawthefieldofviewfirst.Text")); } } } private string GetCultureInfoName(CultureInfo ci) { CultureInfo en_US = new CultureInfo("en-US"); if (ci.Equals(en_US)) { return GetCultureInfoName(ci.Parent); } else { return ci.NativeName; } } } }