From b5b2979c8dcc1bb510e2a83275668a126345749b Mon Sep 17 00:00:00 2001 From: biwa <6475593+biwa@users.noreply.github.com> Date: Wed, 17 Jun 2020 22:22:00 +0200 Subject: [PATCH] Added feature to export the selected sectors as an image --- .../Plugins/BuilderModes/BuilderModes.csproj | 10 + .../BuilderModes/BuilderModesMono.csproj | 10 + .../BuilderModes/General/BuilderPlug.cs | 32 + .../Plugins/BuilderModes/IO/ImageExporter.cs | 156 +++++ .../ImageExportSettingsForm.Designer.cs | 205 ++++++ .../Interface/ImageExportSettingsForm.cs | 150 ++++ .../Interface/ImageExportSettingsForm.resx | 123 ++++ .../Interface/MenusForm.Designer.cs | 647 +++++++++--------- .../BuilderModes/Resources/Actions.cfg | 10 + 9 files changed, 1025 insertions(+), 318 deletions(-) create mode 100644 Source/Plugins/BuilderModes/IO/ImageExporter.cs create mode 100644 Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.Designer.cs create mode 100644 Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.cs create mode 100644 Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.resx diff --git a/Source/Plugins/BuilderModes/BuilderModes.csproj b/Source/Plugins/BuilderModes/BuilderModes.csproj index e6b90f8a..5250bf91 100755 --- a/Source/Plugins/BuilderModes/BuilderModes.csproj +++ b/Source/Plugins/BuilderModes/BuilderModes.csproj @@ -163,6 +163,12 @@ FindReplaceForm.cs + + Form + + + ImageExportSettingsForm.cs + Form @@ -187,6 +193,7 @@ SlopeArchForm.cs + True True @@ -202,6 +209,9 @@ + + ImageExportSettingsForm.cs + SlopeArchForm.cs diff --git a/Source/Plugins/BuilderModes/BuilderModesMono.csproj b/Source/Plugins/BuilderModes/BuilderModesMono.csproj index aaf5dbae..af6d58ff 100644 --- a/Source/Plugins/BuilderModes/BuilderModesMono.csproj +++ b/Source/Plugins/BuilderModes/BuilderModesMono.csproj @@ -163,6 +163,12 @@ FindReplaceForm.cs + + Form + + + ImageExportSettingsForm.cs + Form @@ -187,6 +193,7 @@ SlopeArchForm.cs + True True @@ -202,6 +209,9 @@ + + ImageExportSettingsForm.cs + SlopeArchForm.cs diff --git a/Source/Plugins/BuilderModes/General/BuilderPlug.cs b/Source/Plugins/BuilderModes/General/BuilderPlug.cs index 33f7f32e..cff78999 100755 --- a/Source/Plugins/BuilderModes/General/BuilderPlug.cs +++ b/Source/Plugins/BuilderModes/General/BuilderPlug.cs @@ -818,6 +818,38 @@ namespace CodeImp.DoomBuilder.BuilderModes } } + [BeginAction("exporttoimage")] + private void ExportToImage() + { + // Convert geometry selection to sectors + General.Map.Map.ConvertSelection(SelectionType.Sectors); + + // Get sectors + ICollection sectors = General.Map.Map.SelectedSectorsCount == 0 ? General.Map.Map.Sectors : General.Map.Map.GetSelectedSectors(true); + if (sectors.Count == 0) + { + General.Interface.DisplayStatus(StatusType.Warning, "Image export failed. Map has no sectors!"); + return; + } + + ImageExporter exporter = new ImageExporter(); + + ImageExportSettingsForm form = new ImageExportSettingsForm(); + if (form.ShowDialog() == DialogResult.OK) + { + ImageExportSettings settings = new ImageExportSettings(Path.GetFileName(form.FilePath), Path.GetDirectoryName(form.FilePath), form.Floor, form.GetPixelFormat(), form.GetImageFormat()); + + try + { + exporter.Export(sectors, settings); + } + catch(ArgumentException e) // Happens if there's not enough consecutive memory so create the file + { + MessageBox.Show("Exporting failed. There's likely not enough consecutive free memory to create the image. Try a lower color depth or file format", "Export failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + #endregion } } diff --git a/Source/Plugins/BuilderModes/IO/ImageExporter.cs b/Source/Plugins/BuilderModes/IO/ImageExporter.cs new file mode 100644 index 00000000..7ca4bb7e --- /dev/null +++ b/Source/Plugins/BuilderModes/IO/ImageExporter.cs @@ -0,0 +1,156 @@ +#region ================== Copyright (c) 2020 Boris Iwanski + +/* + * This program is free software: you can redistribute it and/or modify + * + * it under the terms of the GNU General Public License as published by + * + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.If not, see. + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CodeImp.DoomBuilder.Geometry; +using CodeImp.DoomBuilder.Map; +using System.Diagnostics; + +namespace CodeImp.DoomBuilder.BuilderModes.IO +{ + internal struct ImageExportSettings + { + public string Name; + public string Path; + public bool Floor; + public PixelFormat PixelFormat; + public ImageFormat ImageFormat; + + public ImageExportSettings(string name, string path, bool floor, PixelFormat pformat, ImageFormat iformat) + { + Name = name; + Path = path; + Floor = floor; + PixelFormat = pformat; + ImageFormat = iformat; + } + } + + internal class ImageExporter + { + public void Export(ICollection sectors, ImageExportSettings settings) + { + Bitmap bitmap; + Vector2D offset = new Vector2D(double.MaxValue, double.MinValue); + Vector2D size = new Vector2D(double.MinValue, double.MaxValue); + + HashSet vertices = new HashSet(); + + // Find the top left and bottom right corners of the selection + foreach(Sector s in sectors) + { + foreach (Sidedef sd in s.Sidedefs) + { + foreach (Vertex v in new Vertex[] { sd.Line.Start, sd.Line.End }) + { + if (v.Position.x < offset.x) + offset.x = v.Position.x; + + if (v.Position.x > size.x) + size.x = v.Position.x; + + if (v.Position.y > offset.y) + offset.y = v.Position.y; + + if (v.Position.y < size.y) + size.y = v.Position.y; + } + } + } + + // Right now "size" is the bottom right corener of the selection, so subtract the offset + // (top left corner of the selection). y will always be negative, so make it positive + size -= offset; + size.y *= -1.0; + + bitmap = new Bitmap((int)size.x, (int)size.y, settings.PixelFormat); + + Graphics g = Graphics.FromImage(bitmap); + g.Clear(Color.Black); // If we don't clear to black we'll see seams where the sectors touch, due to the AA + g.InterpolationMode = InterpolationMode.HighQualityBilinear; + g.CompositingQuality = CompositingQuality.HighQuality; + g.PixelOffsetMode = PixelOffsetMode.HighQuality; + g.SmoothingMode = SmoothingMode.AntiAlias; // Without AA the sector edges will be quite rough + + foreach (Sector s in sectors) + { + GraphicsPath p = new GraphicsPath(); + float rotation = (float)s.Fields.GetValue("rotationfloor", 0.0); + + // If a sector is rotated any offset is on the rotated axes. But we need to offset by + // map coordinates. We'll use this vector to compute that offset + Vector2D rotationvector = Vector2D.FromAngle(Angle2D.DegToRad(rotation) + Angle2D.PIHALF); + + // Sectors are triangulated, so draw every triangle + for (int i = 0; i < s.Triangles.Vertices.Count / 3; i++) + { + // The GDI image has the 0/0 coordinate in the top left, so invert the y component + Vector2D v1 = s.Triangles.Vertices[i * 3] - offset; v1.y *= -1.0; + Vector2D v2 = s.Triangles.Vertices[i * 3 + 1] - offset; v2.y *= -1.0; + Vector2D v3 = s.Triangles.Vertices[i * 3 + 2] - offset; v3.y *= -1.0; + + p.AddLine((float)v1.x, (float)v1.y, (float)v2.x, (float)v2.y); + p.AddLine((float)v2.x, (float)v2.y, (float)v3.x, (float)v3.y); + p.CloseFigure(); + } + + Bitmap texture; + + if(settings.Floor) + texture = General.Map.Data.GetFlatImage(s.FloorTexture).ExportBitmap(); + else + texture = General.Map.Data.GetFlatImage(s.CeilTexture).ExportBitmap(); + + Vector2D textureoffset = new Vector2D(); + textureoffset.x = s.Fields.GetValue("xpanningfloor", 0.0); + textureoffset.y = s.Fields.GetValue("ypanningfloor", 0.0); + + // Create the transformation matrix + Matrix matrix = new Matrix(); + matrix.Rotate(rotation); + matrix.Translate((float)(-offset.x * rotationvector.x), (float)(offset.x * rotationvector.y)); // Left/right offset from the map origin + matrix.Translate((float)(offset.y * rotationvector.y), (float)(offset.y * rotationvector.x)); // Up/down offset from the map origin + matrix.Translate(-(float)textureoffset.x, -(float)textureoffset.y); // Texture offset + + // Create the texture brush and apply the matrix + TextureBrush t = new TextureBrush(texture); + t.Transform = matrix; + + // Draw the islands of the sector + g.FillPath(t, p); + + } + + // Finally save the image + bitmap.Save(Path.Combine(settings.Path, settings.Name), settings.ImageFormat); + } + } +} diff --git a/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.Designer.cs new file mode 100644 index 00000000..fb9165de --- /dev/null +++ b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.Designer.cs @@ -0,0 +1,205 @@ +namespace CodeImp.DoomBuilder.BuilderModes.Interface +{ + partial class ImageExportSettingsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tbExportPath = new System.Windows.Forms.TextBox(); + this.browse = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.cancel = new System.Windows.Forms.Button(); + this.export = new System.Windows.Forms.Button(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.cbImageFormat = new System.Windows.Forms.ComboBox(); + this.cbPixelFormat = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.rbFloor = new System.Windows.Forms.RadioButton(); + this.rbCeiling = new System.Windows.Forms.RadioButton(); + this.SuspendLayout(); + // + // tbExportPath + // + this.tbExportPath.Location = new System.Drawing.Point(50, 9); + this.tbExportPath.Name = "tbExportPath"; + this.tbExportPath.Size = new System.Drawing.Size(344, 20); + this.tbExportPath.TabIndex = 2; + // + // browse + // + this.browse.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Folder; + this.browse.Location = new System.Drawing.Point(400, 7); + this.browse.Name = "browse"; + this.browse.Size = new System.Drawing.Size(30, 24); + this.browse.TabIndex = 3; + this.browse.UseVisualStyleBackColor = true; + this.browse.Click += new System.EventHandler(this.browse_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(32, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Path:"; + // + // cancel + // + this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancel.Location = new System.Drawing.Point(360, 110); + this.cancel.Name = "cancel"; + this.cancel.Size = new System.Drawing.Size(75, 23); + this.cancel.TabIndex = 7; + this.cancel.Text = "Cancel"; + this.cancel.UseVisualStyleBackColor = true; + this.cancel.Click += new System.EventHandler(this.cancel_Click); + // + // export + // + this.export.Location = new System.Drawing.Point(279, 110); + this.export.Name = "export"; + this.export.Size = new System.Drawing.Size(75, 23); + this.export.TabIndex = 6; + this.export.Text = "Export"; + this.export.UseVisualStyleBackColor = true; + this.export.Click += new System.EventHandler(this.export_Click); + // + // saveFileDialog + // + this.saveFileDialog.Filter = "PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|All files (*.*)|*.*"; + // + // cbImageFormat + // + this.cbImageFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbImageFormat.FormattingEnabled = true; + this.cbImageFormat.Items.AddRange(new object[] { + "PNG", + "JPG"}); + this.cbImageFormat.Location = new System.Drawing.Point(102, 35); + this.cbImageFormat.Name = "cbImageFormat"; + this.cbImageFormat.Size = new System.Drawing.Size(71, 21); + this.cbImageFormat.TabIndex = 8; + this.cbImageFormat.SelectedIndexChanged += new System.EventHandler(this.cbImageFormat_SelectedIndexChanged); + // + // cbPixelFormat + // + this.cbPixelFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbPixelFormat.FormattingEnabled = true; + this.cbPixelFormat.Items.AddRange(new object[] { + "32 bit", + "24 bit", + "16 bit"}); + this.cbPixelFormat.Location = new System.Drawing.Point(102, 62); + this.cbPixelFormat.Name = "cbPixelFormat"; + this.cbPixelFormat.Size = new System.Drawing.Size(71, 21); + this.cbPixelFormat.TabIndex = 9; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 38); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 13); + this.label2.TabIndex = 10; + this.label2.Text = "Image format:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 65); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(64, 13); + this.label3.TabIndex = 11; + this.label3.Text = "Color depth:"; + // + // rbFloor + // + this.rbFloor.AutoSize = true; + this.rbFloor.Checked = true; + this.rbFloor.Location = new System.Drawing.Point(227, 38); + this.rbFloor.Name = "rbFloor"; + this.rbFloor.Size = new System.Drawing.Size(48, 17); + this.rbFloor.TabIndex = 12; + this.rbFloor.TabStop = true; + this.rbFloor.Text = "Floor"; + this.rbFloor.UseVisualStyleBackColor = true; + // + // rbCeiling + // + this.rbCeiling.AutoSize = true; + this.rbCeiling.Location = new System.Drawing.Point(227, 60); + this.rbCeiling.Name = "rbCeiling"; + this.rbCeiling.Size = new System.Drawing.Size(56, 17); + this.rbCeiling.TabIndex = 13; + this.rbCeiling.Text = "Ceiling"; + this.rbCeiling.UseVisualStyleBackColor = true; + // + // ImageExportSettingsForm + // + this.AcceptButton = this.export; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancel; + this.ClientSize = new System.Drawing.Size(447, 145); + this.Controls.Add(this.rbCeiling); + this.Controls.Add(this.rbFloor); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cbPixelFormat); + this.Controls.Add(this.cbImageFormat); + this.Controls.Add(this.cancel); + this.Controls.Add(this.export); + this.Controls.Add(this.label1); + this.Controls.Add(this.browse); + this.Controls.Add(this.tbExportPath); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ImageExportSettingsForm"; + this.Text = "Image export settings"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button browse; + private System.Windows.Forms.TextBox tbExportPath; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button cancel; + private System.Windows.Forms.Button export; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.ComboBox cbImageFormat; + private System.Windows.Forms.ComboBox cbPixelFormat; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.RadioButton rbFloor; + private System.Windows.Forms.RadioButton rbCeiling; + } +} \ No newline at end of file diff --git a/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.cs b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.cs new file mode 100644 index 00000000..07bcabed --- /dev/null +++ b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.cs @@ -0,0 +1,150 @@ +#region ================== Copyright (c) 2020 Boris Iwanski + +/* + * This program is free software: you can redistribute it and/or modify + * + * it under the terms of the GNU General Public License as published by + * + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.If not, see. + */ + +#endregion + +using System; +using System.Drawing.Imaging; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeImp.DoomBuilder.BuilderModes.Interface +{ + public partial class ImageExportSettingsForm : Form + { + #region ================== Properties + + public string FilePath { get { return tbExportPath.Text.Trim(); } } + public bool Floor { get { return rbFloor.Checked; } } + + #endregion + + + #region ================== Constructor + + public ImageExportSettingsForm() + { + InitializeComponent(); + + cbImageFormat.SelectedIndex = 0; + cbPixelFormat.SelectedIndex = 0; + + string name = Path.GetFileNameWithoutExtension(General.Map.FileTitle) + "_" + General.Map.Options.LevelName + "_" + Path.GetFileNameWithoutExtension(Path.GetRandomFileName()); + + if (string.IsNullOrEmpty(General.Map.FilePathName)) + { + saveFileDialog.FileName = name; + } + else + { + saveFileDialog.InitialDirectory = Path.GetDirectoryName(General.Map.FilePathName); + saveFileDialog.FileName = Path.GetDirectoryName(General.Map.FilePathName) + Path.DirectorySeparatorChar + name + ".png"; + tbExportPath.Text = saveFileDialog.FileName; + } + } + + #endregion + + #region ================== Methods + + public ImageFormat GetImageFormat() + { + switch(cbImageFormat.SelectedIndex) + { + case 1: // JPG + return ImageFormat.Jpeg; + default: // PNG + return ImageFormat.Png; + } + } + + public PixelFormat GetPixelFormat() + { + switch(cbPixelFormat.SelectedIndex) + { + case 1: // 24 bit + return PixelFormat.Format24bppRgb; + case 2: // 16 bit + return PixelFormat.Format16bppRgb555; + default: // 32 bit + return PixelFormat.Format32bppArgb; + } + } + + private void browse_Click(object sender, EventArgs e) + { + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + tbExportPath.Text = saveFileDialog.FileName; + + string extension = Path.GetExtension(saveFileDialog.FileName); + + switch(extension) + { + case ".jpg": + cbImageFormat.SelectedIndex = 1; + break; + default: + cbImageFormat.SelectedIndex = 0; + break; + } + } + } + + #endregion + + private void cancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void export_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void cbImageFormat_SelectedIndexChanged(object sender, EventArgs e) + { + string newextension = ""; + + switch (cbImageFormat.SelectedIndex) + { + case 1: // JPG + newextension = ".jpg"; + break; + default: // PNG + newextension = ".png"; + break; + } + + tbExportPath.Text = Path.ChangeExtension(tbExportPath.Text, newextension); + } + } +} diff --git a/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.resx b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.resx new file mode 100644 index 00000000..5e7f0a6f --- /dev/null +++ b/Source/Plugins/BuilderModes/Interface/ImageExportSettingsForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs index 75842611..9cd313bf 100755 --- a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs +++ b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs @@ -31,11 +31,17 @@ namespace CodeImp.DoomBuilder.BuilderModes System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MenusForm)); this.menustrip = new System.Windows.Forms.MenuStrip(); this.linedefsmenu = new System.Windows.Forms.ToolStripMenuItem(); + this.placethingsl = new System.Windows.Forms.ToolStripMenuItem(); + this.syncthingeditlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.selectsinglesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.selectdoublesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); + this.fliplinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.alignlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.flipsidedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.curvelinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); this.splitlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.updatelightfogitem = new System.Windows.Forms.ToolStripMenuItem(); @@ -45,42 +51,52 @@ namespace CodeImp.DoomBuilder.BuilderModes this.alignCeilingToFrontItem = new System.Windows.Forms.ToolStripMenuItem(); this.alignCeilingToBackItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem(); this.sectorsmenu = new System.Windows.Forms.ToolStripMenuItem(); + this.placethingss = new System.Windows.Forms.ToolStripMenuItem(); + this.syncthingeditsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.flipsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.alignsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.makedooritem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.selectSimilarSectors = new System.Windows.Forms.ToolStripMenuItem(); this.thingsmenu = new System.Windows.Forms.ToolStripMenuItem(); + this.selectInSectorsItem = new System.Windows.Forms.ToolStripMenuItem(); + this.filterSelectionItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.alignToWallItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pointAtCursorItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.selectSimilarThingsItem = new System.Windows.Forms.ToolStripMenuItem(); this.vertsmenu = new System.Windows.Forms.ToolStripMenuItem(); + this.placethingsv = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.selectSimilarVertsItem = new System.Windows.Forms.ToolStripMenuItem(); this.globalstrip = new System.Windows.Forms.ToolStrip(); this.manualstrip = new System.Windows.Forms.ToolStrip(); - this.seperatorcopypaste = new System.Windows.Forms.ToolStripSeparator(); - this.separatorsectors1 = new System.Windows.Forms.ToolStripSeparator(); - this.separatorsectors2 = new System.Windows.Forms.ToolStripSeparator(); - this.gradientModeMenu = new System.Windows.Forms.ToolStripComboBox(); - this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox(); - this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator(); - this.fileMenuStrip = new System.Windows.Forms.MenuStrip(); - this.exportStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); - this.editmenuitem = new System.Windows.Forms.ToolStripMenuItem(); - this.separatorcopyprops = new System.Windows.Forms.ToolStripSeparator(); - this.viewmenuitem = new System.Windows.Forms.ToolStripMenuItem(); this.buttoncopyproperties = new System.Windows.Forms.ToolStripButton(); this.buttonpasteproperties = new System.Windows.Forms.ToolStripButton(); this.buttonpastepropertiesoptions = new System.Windows.Forms.ToolStripButton(); + this.seperatorcopypaste = new System.Windows.Forms.ToolStripSeparator(); this.buttonselectionnumbers = new System.Windows.Forms.ToolStripButton(); this.buttonselectioneffects = new System.Windows.Forms.ToolStripButton(); + this.separatorsectors1 = new System.Windows.Forms.ToolStripSeparator(); this.buttonMakeDoor = new System.Windows.Forms.ToolStripButton(); + this.separatorsectors2 = new System.Windows.Forms.ToolStripSeparator(); this.buttonbrightnessgradient = new System.Windows.Forms.ToolStripButton(); this.buttonfloorgradient = new System.Windows.Forms.ToolStripButton(); this.buttonceilinggradient = new System.Windows.Forms.ToolStripButton(); this.buttonflipselectionh = new System.Windows.Forms.ToolStripButton(); this.buttonflipselectionv = new System.Windows.Forms.ToolStripButton(); this.buttoncurvelinedefs = new System.Windows.Forms.ToolStripButton(); + this.gradientModeMenu = new System.Windows.Forms.ToolStripComboBox(); + this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox(); + this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator(); this.buttonMarqueSelectTouching = new System.Windows.Forms.ToolStripButton(); this.syncthingteditbutton = new System.Windows.Forms.ToolStripButton(); this.buttonAlignThingsToWall = new System.Windows.Forms.ToolStripButton(); @@ -88,31 +104,16 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonTextureOffset3DFloorLock = new System.Windows.Forms.ToolStripButton(); this.buttonlightradii = new System.Windows.Forms.ToolStripButton(); this.buttonsoundradii = new System.Windows.Forms.ToolStripButton(); - this.placethingsl = new System.Windows.Forms.ToolStripMenuItem(); - this.syncthingeditlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.fliplinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.alignlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.flipsidedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.curvelinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem(); - this.placethingss = new System.Windows.Forms.ToolStripMenuItem(); - this.syncthingeditsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.flipsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.alignsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.makedooritem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectSimilarSectors = new System.Windows.Forms.ToolStripMenuItem(); - this.selectInSectorsItem = new System.Windows.Forms.ToolStripMenuItem(); - this.filterSelectionItem = new System.Windows.Forms.ToolStripMenuItem(); - this.alignToWallItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pointAtCursorItem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectSimilarThingsItem = new System.Windows.Forms.ToolStripMenuItem(); - this.placethingsv = new System.Windows.Forms.ToolStripMenuItem(); - this.selectSimilarVertsItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fileMenuStrip = new System.Windows.Forms.MenuStrip(); + this.exportStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectionToImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editmenuitem = new System.Windows.Forms.ToolStripMenuItem(); + this.separatorcopyprops = new System.Windows.Forms.ToolStripSeparator(); this.itemcopyprops = new System.Windows.Forms.ToolStripMenuItem(); this.itempasteprops = new System.Windows.Forms.ToolStripMenuItem(); this.itempastepropsoptions = new System.Windows.Forms.ToolStripMenuItem(); + this.viewmenuitem = new System.Windows.Forms.ToolStripMenuItem(); this.itemlightradii = new System.Windows.Forms.ToolStripMenuItem(); this.itemsoundradii = new System.Windows.Forms.ToolStripMenuItem(); this.menustrip.SuspendLayout(); @@ -159,6 +160,28 @@ namespace CodeImp.DoomBuilder.BuilderModes this.linedefsmenu.Visible = false; this.linedefsmenu.DropDownOpening += new System.EventHandler(this.linedefsmenu_DropDownOpening); // + // placethingsl + // + this.placethingsl.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; + this.placethingsl.Name = "placethingsl"; + this.placethingsl.Size = new System.Drawing.Size(223, 22); + this.placethingsl.Tag = "placethings"; + this.placethingsl.Text = "&Place Things..."; + this.placethingsl.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // syncthingeditlinedefsitem + // + this.syncthingeditlinedefsitem.CheckOnClick = true; + this.syncthingeditlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; + this.syncthingeditlinedefsitem.Name = "syncthingeditlinedefsitem"; + this.syncthingeditlinedefsitem.Size = new System.Drawing.Size(223, 22); + this.syncthingeditlinedefsitem.Tag = "syncedthingedit"; + this.syncthingeditlinedefsitem.Text = "&Synchronized Things Editing"; + this.syncthingeditlinedefsitem.ToolTipText = "When enabled, selected things will be dragged when dragging linedefs.\r\nRectangula" + + "r selection will also select things (holding Alt while selecting \r\ninverts this " + + "behaviour)."; + this.syncthingeditlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; @@ -185,11 +208,46 @@ namespace CodeImp.DoomBuilder.BuilderModes this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem4.Size = new System.Drawing.Size(220, 6); // + // fliplinedefsitem + // + this.fliplinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.fliplinedefsitem.Name = "fliplinedefsitem"; + this.fliplinedefsitem.Size = new System.Drawing.Size(223, 22); + this.fliplinedefsitem.Tag = "fliplinedefs"; + this.fliplinedefsitem.Text = "&Flip Linedefs"; + this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // alignlinedefsitem + // + this.alignlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.alignlinedefsitem.Name = "alignlinedefsitem"; + this.alignlinedefsitem.Size = new System.Drawing.Size(223, 22); + this.alignlinedefsitem.Tag = "alignlinedefs"; + this.alignlinedefsitem.Text = "Align &Linedefs"; + // + // flipsidedefsitem + // + this.flipsidedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.flipsidedefsitem.Name = "flipsidedefsitem"; + this.flipsidedefsitem.Size = new System.Drawing.Size(223, 22); + this.flipsidedefsitem.Tag = "flipsidedefs"; + this.flipsidedefsitem.Text = "F&lip Sidedefs"; + this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem1.Size = new System.Drawing.Size(220, 6); // + // curvelinedefsitem + // + this.curvelinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.CurveLines; + this.curvelinedefsitem.Name = "curvelinedefsitem"; + this.curvelinedefsitem.Size = new System.Drawing.Size(223, 22); + this.curvelinedefsitem.Tag = "curvelinesmode"; + this.curvelinedefsitem.Text = "&Curve Linedefs..."; + this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripMenuItem3 // this.toolStripMenuItem3.Name = "toolStripMenuItem3"; @@ -259,6 +317,15 @@ namespace CodeImp.DoomBuilder.BuilderModes this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(220, 6); // + // selectSimilarLinesItem + // + this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarLinesItem.Name = "selectSimilarLinesItem"; + this.selectSimilarLinesItem.Size = new System.Drawing.Size(223, 22); + this.selectSimilarLinesItem.Tag = "selectsimilar"; + this.selectSimilarLinesItem.Text = "Select Similar..."; + this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // sectorsmenu // this.sectorsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -279,27 +346,101 @@ namespace CodeImp.DoomBuilder.BuilderModes this.sectorsmenu.Text = "&Sectors"; this.sectorsmenu.Visible = false; // + // placethingss + // + this.placethingss.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; + this.placethingss.Name = "placethingss"; + this.placethingss.Size = new System.Drawing.Size(223, 22); + this.placethingss.Tag = "placethings"; + this.placethingss.Text = "&Place Things..."; + this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // syncthingeditsectorsitem + // + this.syncthingeditsectorsitem.CheckOnClick = true; + this.syncthingeditsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; + this.syncthingeditsectorsitem.Name = "syncthingeditsectorsitem"; + this.syncthingeditsectorsitem.Size = new System.Drawing.Size(223, 22); + this.syncthingeditsectorsitem.Tag = "syncedthingedit"; + this.syncthingeditsectorsitem.Text = "&Synchronized Things Editing"; + this.syncthingeditsectorsitem.ToolTipText = resources.GetString("syncthingeditsectorsitem.ToolTipText"); + this.syncthingeditsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Size = new System.Drawing.Size(220, 6); // + // joinsectorsitem + // + this.joinsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Join; + this.joinsectorsitem.Name = "joinsectorsitem"; + this.joinsectorsitem.Size = new System.Drawing.Size(223, 22); + this.joinsectorsitem.Tag = "joinsectors"; + this.joinsectorsitem.Text = "&Join Sectors"; + this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // mergesectorsitem + // + this.mergesectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Merge; + this.mergesectorsitem.Name = "mergesectorsitem"; + this.mergesectorsitem.Size = new System.Drawing.Size(223, 22); + this.mergesectorsitem.Tag = "mergesectors"; + this.mergesectorsitem.Text = "&Merge Sectors"; + this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Size = new System.Drawing.Size(220, 6); // + // flipsectorlinedefsitem + // + this.flipsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem"; + this.flipsectorlinedefsitem.Size = new System.Drawing.Size(223, 22); + this.flipsectorlinedefsitem.Tag = "fliplinedefs"; + this.flipsectorlinedefsitem.Text = "&Flip Linedefs"; + this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // alignsectorlinedefsitem + // + this.alignsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.alignsectorlinedefsitem.Name = "alignsectorlinedefsitem"; + this.alignsectorlinedefsitem.Size = new System.Drawing.Size(223, 22); + this.alignsectorlinedefsitem.Tag = "alignlinedefs"; + this.alignsectorlinedefsitem.Text = "Align &Linedefs"; + this.alignsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; this.toolStripSeparator8.Size = new System.Drawing.Size(220, 6); // + // makedooritem + // + this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door; + this.makedooritem.Name = "makedooritem"; + this.makedooritem.Size = new System.Drawing.Size(223, 22); + this.makedooritem.Tag = "makedoor"; + this.makedooritem.Text = "Make &Door"; + this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Size = new System.Drawing.Size(220, 6); this.toolStripSeparator4.Visible = false; // + // selectSimilarSectors + // + this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarSectors.Name = "selectSimilarSectors"; + this.selectSimilarSectors.Size = new System.Drawing.Size(223, 22); + this.selectSimilarSectors.Tag = "selectsimilar"; + this.selectSimilarSectors.Text = "Select Similar..."; + this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction); + // // thingsmenu // this.thingsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -315,16 +456,61 @@ namespace CodeImp.DoomBuilder.BuilderModes this.thingsmenu.Text = "Things"; this.thingsmenu.Visible = false; // + // selectInSectorsItem + // + this.selectInSectorsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; + this.selectInSectorsItem.Name = "selectInSectorsItem"; + this.selectInSectorsItem.Size = new System.Drawing.Size(244, 22); + this.selectInSectorsItem.Tag = "thingsselectinsectors"; + this.selectInSectorsItem.Text = "&Select Things in Selected Sectors"; + this.selectInSectorsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // filterSelectionItem + // + this.filterSelectionItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.FilterThings; + this.filterSelectionItem.Name = "filterSelectionItem"; + this.filterSelectionItem.Size = new System.Drawing.Size(244, 22); + this.filterSelectionItem.Tag = "filterselectedthings"; + this.filterSelectionItem.Text = "Filter Selection..."; + this.filterSelectionItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Size = new System.Drawing.Size(241, 6); // + // alignToWallItem + // + this.alignToWallItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.AlignThings; + this.alignToWallItem.Name = "alignToWallItem"; + this.alignToWallItem.Size = new System.Drawing.Size(244, 22); + this.alignToWallItem.Tag = "thingaligntowall"; + this.alignToWallItem.Text = "&Align Things to Nearest Linedef"; + this.alignToWallItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // pointAtCursorItem + // + this.pointAtCursorItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.ThingPointAtCursor; + this.pointAtCursorItem.Name = "pointAtCursorItem"; + this.pointAtCursorItem.Size = new System.Drawing.Size(244, 22); + this.pointAtCursorItem.Tag = "thinglookatcursor"; + this.pointAtCursorItem.Text = "&Point to Cursor"; + this.pointAtCursorItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; this.toolStripSeparator6.Size = new System.Drawing.Size(241, 6); // + // selectSimilarThingsItem + // + this.selectSimilarThingsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarThingsItem.Name = "selectSimilarThingsItem"; + this.selectSimilarThingsItem.Size = new System.Drawing.Size(244, 22); + this.selectSimilarThingsItem.Tag = "selectsimilar"; + this.selectSimilarThingsItem.Text = "Select Similar..."; + this.selectSimilarThingsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // vertsmenu // this.vertsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -336,11 +522,29 @@ namespace CodeImp.DoomBuilder.BuilderModes this.vertsmenu.Text = "Vertices"; this.vertsmenu.Visible = false; // + // placethingsv + // + this.placethingsv.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; + this.placethingsv.Name = "placethingsv"; + this.placethingsv.Size = new System.Drawing.Size(153, 22); + this.placethingsv.Tag = "placethings"; + this.placethingsv.Text = "&Place Things..."; + this.placethingsv.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; this.toolStripSeparator7.Size = new System.Drawing.Size(150, 6); // + // selectSimilarVertsItem + // + this.selectSimilarVertsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarVertsItem.Name = "selectSimilarVertsItem"; + this.selectSimilarVertsItem.Size = new System.Drawing.Size(153, 22); + this.selectSimilarVertsItem.Tag = "selectsimilar"; + this.selectSimilarVertsItem.Text = "Select Similar..."; + this.selectSimilarVertsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // // globalstrip // this.globalstrip.Location = new System.Drawing.Point(0, 48); @@ -383,99 +587,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.manualstrip.TabIndex = 2; this.manualstrip.Text = "toolStrip1"; // - // seperatorcopypaste - // - this.seperatorcopypaste.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.seperatorcopypaste.Name = "seperatorcopypaste"; - this.seperatorcopypaste.Size = new System.Drawing.Size(6, 25); - // - // separatorsectors1 - // - this.separatorsectors1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors1.Name = "separatorsectors1"; - this.separatorsectors1.Size = new System.Drawing.Size(6, 25); - // - // separatorsectors2 - // - this.separatorsectors2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors2.Name = "separatorsectors2"; - this.separatorsectors2.Size = new System.Drawing.Size(6, 25); - // - // gradientModeMenu - // - this.gradientModeMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gradientModeMenu.Name = "gradientModeMenu"; - this.gradientModeMenu.Size = new System.Drawing.Size(144, 25); - this.gradientModeMenu.ToolTipText = "Brightness Gradient Target"; - this.gradientModeMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); - // - // gradientInterpolationMenu - // - this.gradientInterpolationMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gradientInterpolationMenu.Name = "gradientInterpolationMenu"; - this.gradientInterpolationMenu.Size = new System.Drawing.Size(108, 25); - this.gradientInterpolationMenu.ToolTipText = "Brightness and Height Gradient Interpolation Mode"; - this.gradientInterpolationMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); - // - // separatorsectors3 - // - this.separatorsectors3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors3.Name = "separatorsectors3"; - this.separatorsectors3.Size = new System.Drawing.Size(6, 25); - // - // fileMenuStrip - // - this.fileMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exportStripMenuItem, - this.editmenuitem, - this.viewmenuitem}); - this.fileMenuStrip.Location = new System.Drawing.Point(0, 0); - this.fileMenuStrip.Name = "fileMenuStrip"; - this.fileMenuStrip.Size = new System.Drawing.Size(794, 24); - this.fileMenuStrip.TabIndex = 3; - this.fileMenuStrip.Text = "menuStrip1"; - // - // exportStripMenuItem - // - this.exportStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem5}); - this.exportStripMenuItem.Name = "exportStripMenuItem"; - this.exportStripMenuItem.Size = new System.Drawing.Size(53, 20); - this.exportStripMenuItem.Text = "Export"; - // - // toolStripMenuItem5 - // - this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(226, 22); - this.toolStripMenuItem5.Tag = "exporttoobj"; - this.toolStripMenuItem5.Text = "Selection to Wavefront .obj..."; - this.toolStripMenuItem5.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // editmenuitem - // - this.editmenuitem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.separatorcopyprops, - this.itemcopyprops, - this.itempasteprops, - this.itempastepropsoptions}); - this.editmenuitem.Name = "editmenuitem"; - this.editmenuitem.Size = new System.Drawing.Size(39, 20); - this.editmenuitem.Text = "Edit"; - // - // separatorcopyprops - // - this.separatorcopyprops.Name = "separatorcopyprops"; - this.separatorcopyprops.Size = new System.Drawing.Size(204, 6); - // - // viewmenuitem - // - this.viewmenuitem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.itemlightradii, - this.itemsoundradii}); - this.viewmenuitem.Name = "viewmenuitem"; - this.viewmenuitem.Size = new System.Drawing.Size(44, 20); - this.viewmenuitem.Text = "View"; - // // buttoncopyproperties // this.buttoncopyproperties.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -510,6 +621,12 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonpastepropertiesoptions.TextAlign = System.Drawing.ContentAlignment.TopRight; this.buttonpastepropertiesoptions.Click += new System.EventHandler(this.InvokeTaggedAction); // + // seperatorcopypaste + // + this.seperatorcopypaste.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.seperatorcopypaste.Name = "seperatorcopypaste"; + this.seperatorcopypaste.Size = new System.Drawing.Size(6, 25); + // // buttonselectionnumbers // this.buttonselectionnumbers.CheckOnClick = true; @@ -532,6 +649,12 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonselectioneffects.Text = "View Tags and Effects"; this.buttonselectioneffects.Click += new System.EventHandler(this.buttonselectioneffects_Click); // + // separatorsectors1 + // + this.separatorsectors1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors1.Name = "separatorsectors1"; + this.separatorsectors1.Size = new System.Drawing.Size(6, 25); + // // buttonMakeDoor // this.buttonMakeDoor.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -543,6 +666,12 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonMakeDoor.Text = "Make Door From Selection"; this.buttonMakeDoor.Click += new System.EventHandler(this.InvokeTaggedAction); // + // separatorsectors2 + // + this.separatorsectors2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors2.Name = "separatorsectors2"; + this.separatorsectors2.Size = new System.Drawing.Size(6, 25); + // // buttonbrightnessgradient // this.buttonbrightnessgradient.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -609,6 +738,28 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttoncurvelinedefs.Text = "Curve Linedefs"; this.buttoncurvelinedefs.Click += new System.EventHandler(this.InvokeTaggedAction); // + // gradientModeMenu + // + this.gradientModeMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gradientModeMenu.Name = "gradientModeMenu"; + this.gradientModeMenu.Size = new System.Drawing.Size(144, 25); + this.gradientModeMenu.ToolTipText = "Brightness Gradient Target"; + this.gradientModeMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); + // + // gradientInterpolationMenu + // + this.gradientInterpolationMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gradientInterpolationMenu.Name = "gradientInterpolationMenu"; + this.gradientInterpolationMenu.Size = new System.Drawing.Size(108, 25); + this.gradientInterpolationMenu.ToolTipText = "Brightness and Height Gradient Interpolation Mode"; + this.gradientInterpolationMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); + // + // separatorsectors3 + // + this.separatorsectors3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors3.Name = "separatorsectors3"; + this.separatorsectors3.Size = new System.Drawing.Size(6, 25); + // // buttonMarqueSelectTouching // this.buttonMarqueSelectTouching.CheckOnClick = true; @@ -691,208 +842,58 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonsoundradii.Text = "Ambient Sound Radii"; this.buttonsoundradii.Click += new System.EventHandler(this.buttonsoundradii_Click); // - // placethingsl + // fileMenuStrip // - this.placethingsl.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; - this.placethingsl.Name = "placethingsl"; - this.placethingsl.Size = new System.Drawing.Size(223, 22); - this.placethingsl.Tag = "placethings"; - this.placethingsl.Text = "&Place Things..."; - this.placethingsl.Click += new System.EventHandler(this.InvokeTaggedAction); + this.fileMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exportStripMenuItem, + this.editmenuitem, + this.viewmenuitem}); + this.fileMenuStrip.Location = new System.Drawing.Point(0, 0); + this.fileMenuStrip.Name = "fileMenuStrip"; + this.fileMenuStrip.Size = new System.Drawing.Size(794, 24); + this.fileMenuStrip.TabIndex = 3; + this.fileMenuStrip.Text = "menuStrip1"; // - // syncthingeditlinedefsitem + // exportStripMenuItem // - this.syncthingeditlinedefsitem.CheckOnClick = true; - this.syncthingeditlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; - this.syncthingeditlinedefsitem.Name = "syncthingeditlinedefsitem"; - this.syncthingeditlinedefsitem.Size = new System.Drawing.Size(223, 22); - this.syncthingeditlinedefsitem.Tag = "syncedthingedit"; - this.syncthingeditlinedefsitem.Text = "&Synchronized Things Editing"; - this.syncthingeditlinedefsitem.ToolTipText = "When enabled, selected things will be dragged when dragging linedefs.\r\nRectangula" + - "r selection will also select things (holding Alt while selecting \r\ninverts this " + - "behaviour)."; - this.syncthingeditlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + this.exportStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem5, + this.selectionToImageToolStripMenuItem}); + this.exportStripMenuItem.Name = "exportStripMenuItem"; + this.exportStripMenuItem.Size = new System.Drawing.Size(53, 20); + this.exportStripMenuItem.Text = "Export"; // - // fliplinedefsitem + // toolStripMenuItem5 // - this.fliplinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; - this.fliplinedefsitem.Name = "fliplinedefsitem"; - this.fliplinedefsitem.Size = new System.Drawing.Size(223, 22); - this.fliplinedefsitem.Tag = "fliplinedefs"; - this.fliplinedefsitem.Text = "&Flip Linedefs"; - this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Size = new System.Drawing.Size(226, 22); + this.toolStripMenuItem5.Tag = "exporttoobj"; + this.toolStripMenuItem5.Text = "Selection to Wavefront .obj..."; + this.toolStripMenuItem5.Click += new System.EventHandler(this.InvokeTaggedAction); // - // alignlinedefsitem + // selectionToImageToolStripMenuItem // - this.alignlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; - this.alignlinedefsitem.Name = "alignlinedefsitem"; - this.alignlinedefsitem.Size = new System.Drawing.Size(223, 22); - this.alignlinedefsitem.Tag = "alignlinedefs"; - this.alignlinedefsitem.Text = "Align &Linedefs"; + this.selectionToImageToolStripMenuItem.Name = "selectionToImageToolStripMenuItem"; + this.selectionToImageToolStripMenuItem.Size = new System.Drawing.Size(226, 22); + this.selectionToImageToolStripMenuItem.Tag = "exporttoimage"; + this.selectionToImageToolStripMenuItem.Text = "Selection to image"; + this.selectionToImageToolStripMenuItem.Click += new System.EventHandler(this.InvokeTaggedAction); // - // flipsidedefsitem + // editmenuitem // - this.flipsidedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; - this.flipsidedefsitem.Name = "flipsidedefsitem"; - this.flipsidedefsitem.Size = new System.Drawing.Size(223, 22); - this.flipsidedefsitem.Tag = "flipsidedefs"; - this.flipsidedefsitem.Text = "F&lip Sidedefs"; - this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + this.editmenuitem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.separatorcopyprops, + this.itemcopyprops, + this.itempasteprops, + this.itempastepropsoptions}); + this.editmenuitem.Name = "editmenuitem"; + this.editmenuitem.Size = new System.Drawing.Size(39, 20); + this.editmenuitem.Text = "Edit"; // - // curvelinedefsitem + // separatorcopyprops // - this.curvelinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.CurveLines; - this.curvelinedefsitem.Name = "curvelinedefsitem"; - this.curvelinedefsitem.Size = new System.Drawing.Size(223, 22); - this.curvelinedefsitem.Tag = "curvelinesmode"; - this.curvelinedefsitem.Text = "&Curve Linedefs..."; - this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectSimilarLinesItem - // - this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarLinesItem.Name = "selectSimilarLinesItem"; - this.selectSimilarLinesItem.Size = new System.Drawing.Size(223, 22); - this.selectSimilarLinesItem.Tag = "selectsimilar"; - this.selectSimilarLinesItem.Text = "Select Similar..."; - this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // placethingss - // - this.placethingss.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; - this.placethingss.Name = "placethingss"; - this.placethingss.Size = new System.Drawing.Size(223, 22); - this.placethingss.Tag = "placethings"; - this.placethingss.Text = "&Place Things..."; - this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // syncthingeditsectorsitem - // - this.syncthingeditsectorsitem.CheckOnClick = true; - this.syncthingeditsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; - this.syncthingeditsectorsitem.Name = "syncthingeditsectorsitem"; - this.syncthingeditsectorsitem.Size = new System.Drawing.Size(223, 22); - this.syncthingeditsectorsitem.Tag = "syncedthingedit"; - this.syncthingeditsectorsitem.Text = "&Synchronized Things Editing"; - this.syncthingeditsectorsitem.ToolTipText = resources.GetString("syncthingeditsectorsitem.ToolTipText"); - this.syncthingeditsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // joinsectorsitem - // - this.joinsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Join; - this.joinsectorsitem.Name = "joinsectorsitem"; - this.joinsectorsitem.Size = new System.Drawing.Size(223, 22); - this.joinsectorsitem.Tag = "joinsectors"; - this.joinsectorsitem.Text = "&Join Sectors"; - this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // mergesectorsitem - // - this.mergesectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Merge; - this.mergesectorsitem.Name = "mergesectorsitem"; - this.mergesectorsitem.Size = new System.Drawing.Size(223, 22); - this.mergesectorsitem.Tag = "mergesectors"; - this.mergesectorsitem.Text = "&Merge Sectors"; - this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // flipsectorlinedefsitem - // - this.flipsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; - this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem"; - this.flipsectorlinedefsitem.Size = new System.Drawing.Size(223, 22); - this.flipsectorlinedefsitem.Tag = "fliplinedefs"; - this.flipsectorlinedefsitem.Text = "&Flip Linedefs"; - this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // alignsectorlinedefsitem - // - this.alignsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; - this.alignsectorlinedefsitem.Name = "alignsectorlinedefsitem"; - this.alignsectorlinedefsitem.Size = new System.Drawing.Size(223, 22); - this.alignsectorlinedefsitem.Tag = "alignlinedefs"; - this.alignsectorlinedefsitem.Text = "Align &Linedefs"; - this.alignsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // makedooritem - // - this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door; - this.makedooritem.Name = "makedooritem"; - this.makedooritem.Size = new System.Drawing.Size(223, 22); - this.makedooritem.Tag = "makedoor"; - this.makedooritem.Text = "Make &Door"; - this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectSimilarSectors - // - this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarSectors.Name = "selectSimilarSectors"; - this.selectSimilarSectors.Size = new System.Drawing.Size(223, 22); - this.selectSimilarSectors.Tag = "selectsimilar"; - this.selectSimilarSectors.Text = "Select Similar..."; - this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectInSectorsItem - // - this.selectInSectorsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; - this.selectInSectorsItem.Name = "selectInSectorsItem"; - this.selectInSectorsItem.Size = new System.Drawing.Size(244, 22); - this.selectInSectorsItem.Tag = "thingsselectinsectors"; - this.selectInSectorsItem.Text = "&Select Things in Selected Sectors"; - this.selectInSectorsItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // filterSelectionItem - // - this.filterSelectionItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.FilterThings; - this.filterSelectionItem.Name = "filterSelectionItem"; - this.filterSelectionItem.Size = new System.Drawing.Size(244, 22); - this.filterSelectionItem.Tag = "filterselectedthings"; - this.filterSelectionItem.Text = "Filter Selection..."; - this.filterSelectionItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // alignToWallItem - // - this.alignToWallItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.AlignThings; - this.alignToWallItem.Name = "alignToWallItem"; - this.alignToWallItem.Size = new System.Drawing.Size(244, 22); - this.alignToWallItem.Tag = "thingaligntowall"; - this.alignToWallItem.Text = "&Align Things to Nearest Linedef"; - this.alignToWallItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // pointAtCursorItem - // - this.pointAtCursorItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.ThingPointAtCursor; - this.pointAtCursorItem.Name = "pointAtCursorItem"; - this.pointAtCursorItem.Size = new System.Drawing.Size(244, 22); - this.pointAtCursorItem.Tag = "thinglookatcursor"; - this.pointAtCursorItem.Text = "&Point to Cursor"; - this.pointAtCursorItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectSimilarThingsItem - // - this.selectSimilarThingsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarThingsItem.Name = "selectSimilarThingsItem"; - this.selectSimilarThingsItem.Size = new System.Drawing.Size(244, 22); - this.selectSimilarThingsItem.Tag = "selectsimilar"; - this.selectSimilarThingsItem.Text = "Select Similar..."; - this.selectSimilarThingsItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // placethingsv - // - this.placethingsv.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; - this.placethingsv.Name = "placethingsv"; - this.placethingsv.Size = new System.Drawing.Size(153, 22); - this.placethingsv.Tag = "placethings"; - this.placethingsv.Text = "&Place Things..."; - this.placethingsv.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectSimilarVertsItem - // - this.selectSimilarVertsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarVertsItem.Name = "selectSimilarVertsItem"; - this.selectSimilarVertsItem.Size = new System.Drawing.Size(153, 22); - this.selectSimilarVertsItem.Tag = "selectsimilar"; - this.selectSimilarVertsItem.Text = "Select Similar..."; - this.selectSimilarVertsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + this.separatorcopyprops.Name = "separatorcopyprops"; + this.separatorcopyprops.Size = new System.Drawing.Size(204, 6); // // itemcopyprops // @@ -921,6 +922,15 @@ namespace CodeImp.DoomBuilder.BuilderModes this.itempastepropsoptions.Text = "Paste Properties Special..."; this.itempastepropsoptions.Click += new System.EventHandler(this.InvokeTaggedAction); // + // viewmenuitem + // + this.viewmenuitem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.itemlightradii, + this.itemsoundradii}); + this.viewmenuitem.Name = "viewmenuitem"; + this.viewmenuitem.Size = new System.Drawing.Size(44, 20); + this.viewmenuitem.Text = "View"; + // // itemlightradii // this.itemlightradii.CheckOnClick = true; @@ -1055,5 +1065,6 @@ namespace CodeImp.DoomBuilder.BuilderModes private System.Windows.Forms.ToolStripMenuItem itemlightradii; private System.Windows.Forms.ToolStripMenuItem itemsoundradii; private System.Windows.Forms.ToolStripButton buttonTextureOffset3DFloorLock; + private System.Windows.Forms.ToolStripMenuItem selectionToImageToolStripMenuItem; } } \ No newline at end of file diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg index 825b2559..fde04b11 100755 --- a/Source/Plugins/BuilderModes/Resources/Actions.cfg +++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg @@ -1372,6 +1372,16 @@ exporttoobj allowscroll = false; } +exporttoimage +{ + title = "Export to image"; + category = "tools"; + description = "Exports selected sectors (or the whole map if no sectors selected) to an image"; + allowkeys = true; + allowmouse = false; + allowscroll = false; +} + flooralignmode { title = "Floor Align Mode";