Changed, Curve Linedefs mode: re-designed the mode UI. Alternative control options are now available (check Help tab while the mode is active).

Changed, Curve Linedefs mode: changed curve generation logic. Setting Distance to 0 will now divide selected linedefs into equal parts.
Changed, Curve Linedefs mode: curve vertices are now drawn.
Updated ZDoom_DECORATE.cfg.
This commit is contained in:
MaxED 2016-10-26 22:33:36 +00:00 committed by spherallic
parent 62835e28fb
commit 36169dc15f
16 changed files with 642 additions and 575 deletions

View File

@ -1385,6 +1385,7 @@ constants
PSPF_ADDBOB;
PSPF_POWDOUBLE;
PSPF_CVARFAST;
PSPF_FLIP;
//A_BFGSpray flags
BFGF_MISSILEORIGIN;
BFGF_HURTSOURCE;

View File

@ -12,6 +12,7 @@ namespace CodeImp.DoomBuilder.Controls
public decimal Value { get { return nud.Value; } set { nud.Value = value; } }
public decimal Minimum { get { return nud.Minimum; } set { nud.Minimum = value; } }
public decimal Maximum { get { return nud.Maximum; } set { nud.Maximum = value; } }
public decimal Increment { get { return nud.Increment; } set { nud.Increment = value; } }
private NumericUpDown nud;

View File

@ -70,6 +70,7 @@ namespace CodeImp.DoomBuilder.Editing
// Selection
protected bool selecting;
protected bool selectpressed; //mxd
protected bool editpressed; //mxd
protected Vector2D selectstart;
protected RectangleF selectionrect;
protected MarqueSelectionMode marqueSelectionMode; //mxd
@ -758,6 +759,7 @@ namespace CodeImp.DoomBuilder.Editing
[BeginAction("classicedit", BaseAction = true)]
protected virtual void OnEditBegin()
{
editpressed = true; //mxd
}
/// <summary>
@ -767,6 +769,7 @@ namespace CodeImp.DoomBuilder.Editing
[EndAction("classicedit", BaseAction = true)]
protected virtual void OnEditEnd()
{
editpressed = false; //mxd
}
/// <summary>

View File

@ -122,12 +122,6 @@
<Compile Include="General\Association.cs" />
<Compile Include="General\BuilderPlug.cs" />
<Compile Include="General\CopyStructures.cs" />
<Compile Include="Interface\CurveLinedefsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Interface\CurveLinedefsForm.Designer.cs">
<DependentUpon>CurveLinedefsForm.cs</DependentUpon>
</Compile>
<Compile Include="Interface\DrawShapeOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
@ -261,10 +255,6 @@
<EmbeddedResource Include="Resources\SectorsMode.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Interface\CurveLinedefsForm.resx">
<SubType>Designer</SubType>
<DependentUpon>CurveLinedefsForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Interface\MenusForm.resx">
<SubType>Designer</SubType>
<DependentUpon>MenusForm.cs</DependentUpon>
@ -423,6 +413,12 @@
<Compile Include="Interface\BridgeModeForm.Designer.cs">
<DependentUpon>BridgeModeForm.cs</DependentUpon>
</Compile>
<Compile Include="Interface\CurveLinedefsOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Interface\CurveLinedefsOptionsPanel.Designer.cs">
<DependentUpon>CurveLinedefsOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Interface\DrawCurveOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
@ -649,6 +645,9 @@
<EmbeddedResource Include="Resources\DrawGeometryMode.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Interface\CurveLinedefsOptionsPanel.resx">
<DependentUpon>CurveLinedefsOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Interface\DrawLineOptionsPanel.resx">
<DependentUpon>DrawLineOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
@ -781,6 +780,12 @@
<ItemGroup>
<None Include="Resources\Guidelines.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Check.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Close.png" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -18,7 +18,10 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.BuilderModes.Interface;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
@ -35,6 +38,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
#region ================== Constants
internal const int DEFAULT_VERTICES_COUNT = 8; //mxd
internal const int DEFAULT_DISTANCE = 128; //mxd
internal const int DEFAULT_ANGLE = 180; //mxd
private const float LINE_THICKNESS = 0.6f;
#endregion
@ -44,6 +50,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Collections
private ICollection<Linedef> selectedlines;
private ICollection<Linedef> unselectedlines;
private Dictionary<Linedef, List<Vector2D>> curves; //mxd
//mxd. UI and controls
private CurveLinedefsOptionsPanel panel;
private Linedef closestline;
private Vector2D mousedownoffset;
private int prevoffset;
#endregion
@ -57,91 +70,141 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Constructor / Disposer
// Constructor
public CurveLinedefsMode(EditMode basemode)
public CurveLinedefsMode()
{
// Make collections by selection
selectedlines = General.Map.Map.GetSelectedLinedefs(true);
unselectedlines = General.Map.Map.GetSelectedLinedefs(false);
}
// Disposer
public override void Dispose()
{
// Not already disposed?
if(!isdisposed)
{
// Clean up
curves = new Dictionary<Linedef, List<Vector2D>>(selectedlines.Count); //mxd
// Done
base.Dispose();
}
//mxd. UI
panel = new CurveLinedefsOptionsPanel();
}
#endregion
#region ================== Methods
// This generates the vertices to split the line with, from start to end
private static List<Vector2D> GenerateCurve(Linedef line)
//mxd
private void GenerateCurves()
{
// Fetch settings from window
int vertices = BuilderPlug.Me.CurveLinedefsForm.Vertices;
float distance = BuilderPlug.Me.CurveLinedefsForm.Distance;
float angle = BuilderPlug.Me.CurveLinedefsForm.Angle;
bool fixedcurve = BuilderPlug.Me.CurveLinedefsForm.FixedCurve;
bool backwards = BuilderPlug.Me.CurveLinedefsForm.Backwards;
foreach(Linedef ld in selectedlines) curves[ld] = GenerateCurve(ld);
}
// This generates the vertices to split the line with, from start to end
private List<Vector2D> GenerateCurve(Linedef line)
{
// Fetch settings from the panel
bool fixedcurve = panel.FixedCurve;
int vertices = Math.Min(panel.Vertices, (int)Math.Ceiling(line.Length / 4));
int distance = panel.Distance;
int angle = (!fixedcurve && distance == 0 ? Math.Max(5, panel.Angle) : panel.Angle);
float theta = Angle2D.DegToRad(angle);
if(distance < 0) theta = -theta; //mxd
// Make list
List<Vector2D> points = new List<Vector2D>(vertices);
//Added by Anders Åstrand 2008-05-18
//The formulas used are taken from http://mathworld.wolfram.com/CircularSegment.html
//c and theta are known (length of line and angle parameter). d, R and h are
//calculated from those two
//If the curve is not supposed to be a circular segment it's simply deformed to fit
//the value set for distance.
float segDelta = 1.0f / (vertices + 1); //mxd
Vector2D linecenter = line.GetCenterPoint(); //mxd
//The vertices are generated to be evenly distributed (by angle) along the curve
//and lastly they are rotated and moved to fit with the original line
//calculate some identities of a circle segment (refer to the graph in the url above)
float c = line.Length;
float theta = angle;
float d = (c / (float)Math.Tan(theta / 2)) / 2;
float R = d / (float)Math.Cos(theta / 2);
float h = R - d;
float yDeform = fixedcurve ? 1 : distance / h;
if(backwards) yDeform = -yDeform;
for(int v = 1; v <= vertices; v++)
//mxd. Special cases...
if(theta == 0.0f)
{
//calculate the angle for this vertex
//the curve starts at PI/2 - theta/2 and is segmented into vertices+1 segments
//this assumes the line is horisontal and on y = 0, the point is rotated and moved later
float a = (Angle2D.PI - theta) / 2 + v * (theta / (vertices + 1));
//calculate the coordinates of the point, and distort the y coordinate
//using the deform factor calculated above
float x = (float)Math.Cos(a) * R;
float y = ((float)Math.Sin(a) * R - d) * yDeform;
//rotate and transform to fit original line
Vector2D vertex = new Vector2D(x, y).GetRotated(line.Angle + Angle2D.PIHALF);
vertex = vertex.GetTransformed(line.GetCenterPoint().x, line.GetCenterPoint().y, 1, 1);
points.Add(vertex);
for(int v = 1; v <= vertices; v++)
{
float x = (line.Length * segDelta) * (vertices - v + 1) - line.Length * 0.5f; // Line segment coord
// Rotate and transform to fit original line
Vector2D vertex = new Vector2D(x, 0).GetRotated(line.Angle + Angle2D.PIHALF) + linecenter;
points.Add(vertex);
}
}
else
{
//Added by Anders Åstrand 2008-05-18
//The formulas used are taken from http://mathworld.wolfram.com/CircularSegment.html
//c and theta are known (length of line and angle parameter). d, R and h are
//calculated from those two
//If the curve is not supposed to be a circular segment it's simply deformed to fit
//the value set for distance.
//The vertices are generated to be evenly distributed (by angle) along the curve
//and lastly they are rotated and moved to fit with the original line
//calculate some identities of a circle segment (refer to the graph in the url above)
float c = line.Length;
float d = (c / (float)Math.Tan(theta / 2)) / 2;
float R = d / (float)Math.Cos(theta / 2);
float h = R - d;
float yDeform = (fixedcurve ? 1 : distance / h);
float xDelta = Math.Min(1, yDeform); //mxd
for(int v = 1; v <= vertices; v++)
{
//calculate the angle for this vertex
//the curve starts at PI/2 - theta/2 and is segmented into vertices+1 segments
//this assumes the line is horisontal and on y = 0, the point is rotated and moved later
float a = (Angle2D.PI - theta) / 2 + v * (theta / (vertices + 1));
//calculate the coordinates of the point, and distort the y coordinate
//using the deform factor calculated above
float xr = (float)Math.Cos(a) * R; //mxd. Circle segment coord
float xl = (line.Length * segDelta) * (vertices - v + 1) - line.Length * 0.5f; // mxd. Line segment coord
float x = InterpolationTools.Linear(xl, xr, xDelta); //mxd
float y = ((float)Math.Sin(a) * R - d) * yDeform;
//rotate and transform to fit original line
Vector2D vertex = new Vector2D(x, y).GetRotated(line.Angle + Angle2D.PIHALF) + linecenter;
points.Add(vertex);
}
}
// Done
return points;
}
#endregion
#region ================== Settings panel (mxd)
private void AddInterface()
{
panel = new CurveLinedefsOptionsPanel();
int vertices = General.Settings.ReadPluginSetting("curvelinedefsmode.vertices", DEFAULT_VERTICES_COUNT);
int distance = General.Settings.ReadPluginSetting("curvelinedefsmode.distance", DEFAULT_DISTANCE);
int angle = General.Settings.ReadPluginSetting("curvelinedefsmode.angle", DEFAULT_ANGLE);
bool fixedcurve = General.Settings.ReadPluginSetting("curvelinedefsmode.fixedcurve", false);
panel.SetValues(vertices, distance, angle, fixedcurve);
panel.Register();
panel.OnValueChanged += OnValuesChanged;
}
private void RemoveInterface()
{
panel.OnValueChanged -= OnValuesChanged;
General.Settings.WritePluginSetting("curvelinedefsmode.vertices", panel.Vertices);
General.Settings.WritePluginSetting("curvelinedefsmode.distance", panel.Distance);
General.Settings.WritePluginSetting("curvelinedefsmode.angle", panel.Angle);
General.Settings.WritePluginSetting("curvelinedefsmode.fixedcurve", panel.FixedCurve);
panel.Unregister();
}
private void OnValuesChanged(object sender, EventArgs e)
{
// Update curves
GenerateCurves();
// Redraw display
General.Interface.RedrawDisplay();
}
#endregion
#region ================== Events
public override void OnHelp()
@ -165,8 +228,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnEngage();
renderer.SetPresentation(Presentation.Standard);
// Show toolbox window
BuilderPlug.Me.CurveLinedefsForm.Show((Form)General.Interface);
//mxd
AddInterface();
GenerateCurves();
}
// Disenagaging
@ -175,20 +239,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnDisengage();
// Hide toolbox window
BuilderPlug.Me.CurveLinedefsForm.Hide();
RemoveInterface();
}
// This applies the curves and returns to the base mode
public override void OnAccept()
{
// Create undo
General.Map.UndoRedo.CreateUndo("Curve linedefs");
string rest = (selectedlines.Count == 1 ? "a linedef" : selectedlines.Count + " linedefs"); //mxd
General.Map.UndoRedo.CreateUndo("Curve " + rest);
// Go for all selected lines
foreach(Linedef ld in selectedlines)
{
// Make curve for line
List<Vector2D> points = GenerateCurve(ld);
List<Vector2D> points = curves[ld];
if(points.Count > 0)
{
// TODO: We may want some sector create/join code in here
@ -196,10 +261,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Go for all points to split the line
Linedef splitline = ld;
for(int i = 0; i < points.Count; i++)
foreach(Vector2D p in points)
{
// Make vertex
Vertex v = General.Map.Map.CreateVertex(points[i]);
Vertex v = General.Map.Map.CreateVertex(p);
if(v == null)
{
General.Map.UndoRedo.WithdrawUndo();
@ -253,10 +318,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(renderer.StartOverlay(true))
{
// Go for all selected lines
float vsize = (renderer.VertexSize + 1.0f) / renderer.Scale; //mxd
foreach(Linedef ld in selectedlines)
{
// Make curve for line
List<Vector2D> points = GenerateCurve(ld);
List<Vector2D> points = curves[ld];
if(points.Count > 0)
{
Vector2D p1 = ld.Start.Position;
@ -273,6 +339,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Draw last line
renderer.RenderLine(p2, ld.End.Position, LINE_THICKNESS, General.Colors.Highlight, true);
//mxd. Draw verts
foreach(Vector2D p in points)
renderer.RenderRectangleFilled(new RectangleF(p.x - vsize, p.y - vsize, vsize * 2.0f, vsize * 2.0f), General.Colors.Selection, true);
}
}
renderer.Finish();
@ -280,7 +350,83 @@ namespace CodeImp.DoomBuilder.BuilderModes
renderer.Present();
}
//mxd
public override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
closestline = MapSet.NearestLinedef(selectedlines, mousedownmappos);
// Store offset between intial mouse position and curve top
Vector2D perpendicular = closestline.Line.GetPerpendicular().GetNormal();
if(panel.Distance != 0) perpendicular *= panel.Distance; // Special cases...
Vector2D curvetop = closestline.GetCenterPoint() - perpendicular;
mousedownoffset = mousedownmappos - curvetop;
}
//mxd
public override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
closestline = null;
prevoffset = 0;
}
//mxd
public override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
// Anything to do?
if((!selectpressed && !editpressed) || closestline == null) return;
// Do something...
Vector2D perpendicular = closestline.Line.GetPerpendicular().GetNormal();
if(panel.Distance != 0) perpendicular *= panel.Distance; // Special cases...
Vector2D center = closestline.GetCenterPoint();
Line2D radius = new Line2D(center, center - perpendicular);
float u = radius.GetNearestOnLine(mousemappos - mousedownoffset);
int dist = (panel.Distance == 0 ? 1 : panel.Distance); // Special cases...
int offset = (int)Math.Round(dist * u - dist);
// Change distance
if(selectpressed)
{
if(float.IsNaN(u)) panel.Distance = 0; // Special cases...
else panel.Distance += offset;
}
// Change angle
else if(editpressed && prevoffset != 0)
{
int diff = (int)Math.Round((offset - prevoffset) * renderer.Scale);
if(panel.Angle + diff > 0) panel.Angle += diff;
}
prevoffset = offset;
}
#endregion
#region ================== Actions (mxd)
[BeginAction("increasesubdivlevel")]
private void IncreaseSubdivLevel() { panel.Vertices += 1; }
[BeginAction("decreasesubdivlevel")]
private void DecreaseSubdivLevel() { panel.Vertices -= 1; }
[BeginAction("increasebevel")]
private void IncreaseBevel() { panel.Distance += panel.DistanceIncrement; }
[BeginAction("decreasebevel")]
private void DecreaseBevel() { panel.Distance -= panel.DistanceIncrement; }
[BeginAction("rotateclockwise")]
private void IncreaseAngle() { panel.Angle += panel.AngleIncrement; }
[BeginAction("rotatecounterclockwise")]
private void DecreaseAngle() { panel.Angle -= panel.AngleIncrement; }
#endregion
}
}

View File

@ -1808,7 +1808,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(selected.Count > 0)
{
// Go into curve linedefs mode
General.Editing.ChangeMode(new CurveLinedefsMode(new LinedefsMode()));
General.Editing.ChangeMode(new CurveLinedefsMode());
}
}

View File

@ -86,7 +86,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Main objects
private MenusForm menusform;
private CurveLinedefsForm curvelinedefsform;
private FindReplaceForm findreplaceform;
private ErrorCheckForm errorcheckform;
private PreferencesForm preferencesform;
@ -149,7 +148,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override int MinimumRevision { get { return Assembly.GetExecutingAssembly().GetName().Version.Revision; } }
public MenusForm MenusForm { get { return menusform; } }
public CurveLinedefsForm CurveLinedefsForm { get { return curvelinedefsform ?? (curvelinedefsform = new CurveLinedefsForm()); } }
public FindReplaceForm FindReplaceForm { get { return findreplaceform ?? (findreplaceform = new FindReplaceForm()); } }
public ErrorCheckForm ErrorCheckForm { get { return errorcheckform ?? (errorcheckform = new ErrorCheckForm()); } }
public PreferencesForm PreferencesForm { get { return preferencesform; } }
@ -250,11 +248,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
menusform = null;
//mxd. These are created on demand, so they may be nulls.
if(curvelinedefsform != null)
{
curvelinedefsform.Dispose();
curvelinedefsform = null;
}
if(findreplaceform != null)
{
findreplaceform.Dispose();

View File

@ -1,255 +0,0 @@
using CodeImp.DoomBuilder.Windows;
namespace CodeImp.DoomBuilder.BuilderModes
{
partial class CurveLinedefsForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.Label label1;
this.distancelabel = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.vertices = new CodeImp.DoomBuilder.Controls.NumericTextbox();
this.distance = new CodeImp.DoomBuilder.Controls.NumericTextbox();
this.angle = new CodeImp.DoomBuilder.Controls.NumericTextbox();
this.verticesbar = new System.Windows.Forms.VScrollBar();
this.distancebar = new System.Windows.Forms.VScrollBar();
this.anglebar = new System.Windows.Forms.VScrollBar();
this.cancel = new System.Windows.Forms.Button();
this.apply = new System.Windows.Forms.Button();
this.circular = new System.Windows.Forms.CheckBox();
this.backwards = new System.Windows.Forms.CheckBox();
label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(24, 15);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(48, 13);
label1.TabIndex = 0;
label1.Text = "Vertices:";
//
// distancelabel
//
this.distancelabel.AutoSize = true;
this.distancelabel.Location = new System.Drawing.Point(20, 47);
this.distancelabel.Name = "distancelabel";
this.distancelabel.Size = new System.Drawing.Size(52, 13);
this.distancelabel.TabIndex = 1;
this.distancelabel.Text = "Distance:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(35, 79);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(37, 13);
this.label3.TabIndex = 2;
this.label3.Text = "Angle:";
//
// vertices
//
this.vertices.AllowDecimal = false;
this.vertices.AllowNegative = false;
this.vertices.AllowRelative = false;
this.vertices.ForeColor = System.Drawing.SystemColors.WindowText;
this.vertices.ImeMode = System.Windows.Forms.ImeMode.Off;
this.vertices.Location = new System.Drawing.Point(78, 12);
this.vertices.Name = "vertices";
this.vertices.Size = new System.Drawing.Size(45, 20);
this.vertices.TabIndex = 0;
this.vertices.Text = "8";
this.vertices.TextChanged += new System.EventHandler(this.vertices_TextChanged);
this.vertices.Leave += new System.EventHandler(this.vertices_Leave);
//
// distance
//
this.distance.AllowDecimal = false;
this.distance.AllowNegative = false;
this.distance.AllowRelative = false;
this.distance.ForeColor = System.Drawing.SystemColors.WindowText;
this.distance.ImeMode = System.Windows.Forms.ImeMode.Off;
this.distance.Location = new System.Drawing.Point(78, 44);
this.distance.Name = "distance";
this.distance.Size = new System.Drawing.Size(45, 20);
this.distance.TabIndex = 2;
this.distance.Text = "128";
this.distance.TextChanged += new System.EventHandler(this.distance_TextChanged);
this.distance.Leave += new System.EventHandler(this.distance_Leave);
//
// angle
//
this.angle.AllowDecimal = false;
this.angle.AllowNegative = false;
this.angle.AllowRelative = false;
this.angle.ForeColor = System.Drawing.SystemColors.WindowText;
this.angle.ImeMode = System.Windows.Forms.ImeMode.Off;
this.angle.Location = new System.Drawing.Point(78, 76);
this.angle.Name = "angle";
this.angle.Size = new System.Drawing.Size(45, 20);
this.angle.TabIndex = 4;
this.angle.Text = "180";
this.angle.TextChanged += new System.EventHandler(this.angle_TextChanged);
this.angle.Leave += new System.EventHandler(this.angle_Leave);
//
// verticesbar
//
this.verticesbar.LargeChange = 1;
this.verticesbar.Location = new System.Drawing.Point(125, 10);
this.verticesbar.Maximum = -1;
this.verticesbar.Minimum = -200;
this.verticesbar.Name = "verticesbar";
this.verticesbar.Size = new System.Drawing.Size(19, 24);
this.verticesbar.TabIndex = 1;
this.verticesbar.Value = -8;
this.verticesbar.ValueChanged += new System.EventHandler(this.verticesbar_ValueChanged);
//
// distancebar
//
this.distancebar.LargeChange = 8;
this.distancebar.Location = new System.Drawing.Point(125, 42);
this.distancebar.Maximum = 0;
this.distancebar.Minimum = -10000;
this.distancebar.Name = "distancebar";
this.distancebar.Size = new System.Drawing.Size(19, 24);
this.distancebar.SmallChange = 8;
this.distancebar.TabIndex = 3;
this.distancebar.Value = -128;
this.distancebar.ValueChanged += new System.EventHandler(this.distancebar_ValueChanged);
//
// anglebar
//
this.anglebar.LargeChange = 5;
this.anglebar.Location = new System.Drawing.Point(125, 74);
this.anglebar.Maximum = 0;
this.anglebar.Minimum = -180;
this.anglebar.Name = "anglebar";
this.anglebar.Size = new System.Drawing.Size(19, 24);
this.anglebar.SmallChange = 5;
this.anglebar.TabIndex = 5;
this.anglebar.Value = -180;
this.anglebar.ValueChanged += new System.EventHandler(this.anglebar_ValueChanged);
//
// cancel
//
this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancel.Location = new System.Drawing.Point(84, 167);
this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(70, 25);
this.cancel.TabIndex = 9;
this.cancel.Text = "Cancel";
this.cancel.UseVisualStyleBackColor = true;
this.cancel.Click += new System.EventHandler(this.cancel_Click);
//
// apply
//
this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.apply.Location = new System.Drawing.Point(7, 167);
this.apply.Name = "apply";
this.apply.Size = new System.Drawing.Size(70, 25);
this.apply.TabIndex = 8;
this.apply.Text = "OK";
this.apply.UseVisualStyleBackColor = true;
this.apply.Click += new System.EventHandler(this.apply_Click);
//
// circular
//
this.circular.AutoSize = true;
this.circular.Location = new System.Drawing.Point(22, 108);
this.circular.Name = "circular";
this.circular.Size = new System.Drawing.Size(118, 17);
this.circular.TabIndex = 6;
this.circular.Text = "Fixed circular curve";
this.circular.UseVisualStyleBackColor = true;
this.circular.CheckedChanged += new System.EventHandler(this.circular_CheckedChanged);
//
// backwards
//
this.backwards.AutoSize = true;
this.backwards.Location = new System.Drawing.Point(22, 132);
this.backwards.Name = "backwards";
this.backwards.Size = new System.Drawing.Size(109, 17);
this.backwards.TabIndex = 7;
this.backwards.Text = "Curve backwards";
this.backwards.UseVisualStyleBackColor = true;
this.backwards.CheckedChanged += new System.EventHandler(this.backwards_CheckedChanged);
//
// CurveLinedefsForm
//
this.AcceptButton = this.apply;
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.CancelButton = this.cancel;
this.ClientSize = new System.Drawing.Size(160, 199);
this.Controls.Add(this.backwards);
this.Controls.Add(this.circular);
this.Controls.Add(this.cancel);
this.Controls.Add(this.apply);
this.Controls.Add(this.anglebar);
this.Controls.Add(this.distancebar);
this.Controls.Add(this.verticesbar);
this.Controls.Add(this.angle);
this.Controls.Add(this.distance);
this.Controls.Add(this.vertices);
this.Controls.Add(this.label3);
this.Controls.Add(this.distancelabel);
this.Controls.Add(label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "CurveLinedefsForm";
this.Opacity = 0;
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "Curve Linedefs";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CurveLinedefsForm_FormClosing);
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CurveLinedefsForm_HelpRequested);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label3;
private CodeImp.DoomBuilder.Controls.NumericTextbox vertices;
private CodeImp.DoomBuilder.Controls.NumericTextbox distance;
private CodeImp.DoomBuilder.Controls.NumericTextbox angle;
private System.Windows.Forms.VScrollBar verticesbar;
private System.Windows.Forms.VScrollBar distancebar;
private System.Windows.Forms.VScrollBar anglebar;
private System.Windows.Forms.Button cancel;
private System.Windows.Forms.Button apply;
private System.Windows.Forms.CheckBox circular;
private System.Windows.Forms.Label distancelabel;
private System.Windows.Forms.CheckBox backwards;
}
}

View File

@ -1,203 +0,0 @@
#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* 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.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Windows;
using CodeImp.DoomBuilder.Geometry;
using System.Drawing;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
public partial class CurveLinedefsForm : DelayedForm
{
#region ================== Constants
private const int MIN_VERTICES = 1;
private const int MAX_VERTICES = 200;
private const int MIN_DISTANCE = 0;
private const int MAX_DISTANCE = 10000;
private const int MIN_ANGLE = 1;
private const int MAX_ANGLE = 350;
#endregion
#region ================== Properties
public int Vertices { get { return -verticesbar.Value; } }
public float Distance { get { return -distancebar.Value; } }
public float Angle { get { return Angle2D.DegToRad(-anglebar.Value); } }
public bool FixedCurve { get { return circular.Checked; } }
public bool Backwards { get { return backwards.Checked; } }
#endregion
#region ================== Constructor / Disposer
// Constructor
public CurveLinedefsForm()
{
// Initialize
InitializeComponent();
// Set negative properties for stupid
// scrollbars that work the other way around
verticesbar.Maximum = -MIN_VERTICES;
verticesbar.Minimum = -MAX_VERTICES;
distancebar.Maximum = -MIN_DISTANCE;
distancebar.Minimum = -MAX_DISTANCE;
anglebar.Maximum = -MIN_ANGLE;
anglebar.Minimum = -MAX_ANGLE;
}
#endregion
#region ================== Interface
// Window closing
private void CurveLinedefsForm_FormClosing(object sender, FormClosingEventArgs e)
{
// User closing the window?
if(e.CloseReason == CloseReason.UserClosing)
{
// Just cancel
General.Editing.CancelMode();
e.Cancel = true;
}
}
// This shows the window
public void Show(Form owner)
{
// First time showing?
//if((this.Location.X == 0) && (this.Location.Y == 0))
{
// Position at left-top of owner
this.Location = new Point(owner.Location.X + 20, owner.Location.Y + 90);
}
// Show window
base.Show(owner);
}
// Vertices bar changed
private void verticesbar_ValueChanged(object sender, EventArgs e)
{
int v = -verticesbar.Value;
vertices.Text = v.ToString();
General.Interface.RedrawDisplay();
}
// Vertices loses focus
private void vertices_Leave(object sender, EventArgs e)
{
int v = -verticesbar.Value;
vertices.Text = v.ToString();
}
// Vertices change
private void vertices_TextChanged(object sender, EventArgs e)
{
int result = -vertices.GetResult(-verticesbar.Value);
if((result >= verticesbar.Minimum) && (result <= verticesbar.Maximum)) verticesbar.Value = result;
}
// Distance bar changed
private void distancebar_ValueChanged(object sender, EventArgs e)
{
int v = -distancebar.Value;
distance.Text = v.ToString();
General.Interface.RedrawDisplay();
}
// Distance loses focus
private void distance_Leave(object sender, EventArgs e)
{
int v = -distancebar.Value;
distance.Text = v.ToString();
}
// Distance changed
private void distance_TextChanged(object sender, EventArgs e)
{
int result = -distance.GetResult(-distancebar.Value);
if((result >= distancebar.Minimum) && (result <= distancebar.Maximum)) distancebar.Value = result;
}
// Angle bar changed
private void anglebar_ValueChanged(object sender, EventArgs e)
{
int v = -anglebar.Value;
angle.Text = v.ToString();
General.Interface.RedrawDisplay();
}
// Angle loses focus
private void angle_Leave(object sender, EventArgs e)
{
int v = -anglebar.Value;
angle.Text = v.ToString();
}
// Angle changed
private void angle_TextChanged(object sender, EventArgs e)
{
int result = -angle.GetResult(-anglebar.Value);
if((result >= anglebar.Minimum) && (result <= anglebar.Maximum)) anglebar.Value = result;
}
// Circular curve switched
private void circular_CheckedChanged(object sender, EventArgs e)
{
// Enable/disable controls
distance.Enabled = !circular.Checked;
distancebar.Enabled = !circular.Checked;
distancelabel.Enabled = !circular.Checked;
General.Interface.RedrawDisplay();
}
// Curve backwards switched
private void backwards_CheckedChanged(object sender, EventArgs e)
{
General.Interface.RedrawDisplay();
}
// Cancel clicked
private void cancel_Click(object sender, EventArgs e)
{
// Cancel now
General.Editing.CancelMode();
}
// Apply clicked
private void apply_Click(object sender, EventArgs e)
{
// Apply now
General.Editing.AcceptMode();
}
private void CurveLinedefsForm_HelpRequested(object sender, HelpEventArgs hlpevent)
{
General.ShowHelp("e_curvelinedefs.html");
}
#endregion
}
}

View File

@ -0,0 +1,256 @@
namespace CodeImp.DoomBuilder.BuilderModes.Interface
{
partial class CurveLinedefsOptionsPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.toolstrip = new System.Windows.Forms.ToolStrip();
this.vertslabel = new System.Windows.Forms.ToolStripLabel();
this.verts = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.distancelabel = new System.Windows.Forms.ToolStripLabel();
this.distance = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.anglelabel = new System.Windows.Forms.ToolStripLabel();
this.angle = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.separator1 = new System.Windows.Forms.ToolStripSeparator();
this.fixedcurve = new System.Windows.Forms.ToolStripButton();
this.separator2 = new System.Windows.Forms.ToolStripSeparator();
this.apply = new System.Windows.Forms.ToolStripButton();
this.cancel = new System.Windows.Forms.ToolStripButton();
this.reset = new System.Windows.Forms.ToolStripButton();
this.toolstrip.SuspendLayout();
this.SuspendLayout();
//
// toolstrip
//
this.toolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.vertslabel,
this.verts,
this.distancelabel,
this.distance,
this.anglelabel,
this.angle,
this.reset,
this.separator1,
this.fixedcurve,
this.separator2,
this.apply,
this.cancel});
this.toolstrip.Location = new System.Drawing.Point(0, 0);
this.toolstrip.Name = "toolstrip";
this.toolstrip.Size = new System.Drawing.Size(620, 25);
this.toolstrip.TabIndex = 0;
this.toolstrip.Text = "toolStrip1";
//
// vertslabel
//
this.vertslabel.Name = "vertslabel";
this.vertslabel.Size = new System.Drawing.Size(54, 22);
this.vertslabel.Text = "Vertices: ";
//
// verts
//
this.verts.AutoSize = false;
this.verts.Increment = new decimal(new int[] {
1,
0,
0,
0});
this.verts.Margin = new System.Windows.Forms.Padding(3, 0, 6, 0);
this.verts.Maximum = new decimal(new int[] {
200,
0,
0,
0});
this.verts.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.verts.Name = "verts";
this.verts.Size = new System.Drawing.Size(56, 22);
this.verts.Text = "8";
this.verts.Value = new decimal(new int[] {
8,
0,
0,
0});
this.verts.ValueChanged += new System.EventHandler(this.OnUIValuesChanged);
//
// distancelabel
//
this.distancelabel.Name = "distancelabel";
this.distancelabel.Size = new System.Drawing.Size(55, 22);
this.distancelabel.Text = "Distance:";
//
// distance
//
this.distance.AutoSize = false;
this.distance.Increment = new decimal(new int[] {
8,
0,
0,
0});
this.distance.Margin = new System.Windows.Forms.Padding(3, 0, 6, 0);
this.distance.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.distance.Minimum = new decimal(new int[] {
10000,
0,
0,
-2147483648});
this.distance.Name = "distance";
this.distance.Size = new System.Drawing.Size(56, 25);
this.distance.Text = "128";
this.distance.Value = new decimal(new int[] {
128,
0,
0,
0});
this.distance.ValueChanged += new System.EventHandler(this.OnUIValuesChanged);
//
// anglelabel
//
this.anglelabel.Name = "anglelabel";
this.anglelabel.Size = new System.Drawing.Size(41, 22);
this.anglelabel.Text = "Angle:";
//
// angle
//
this.angle.AutoSize = false;
this.angle.Increment = new decimal(new int[] {
8,
0,
0,
0});
this.angle.Margin = new System.Windows.Forms.Padding(3, 0, 6, 0);
this.angle.Maximum = new decimal(new int[] {
350,
0,
0,
0});
this.angle.Minimum = new decimal(new int[] {
0,
0,
0,
0});
this.angle.Name = "angle";
this.angle.Size = new System.Drawing.Size(56, 22);
this.angle.Text = "180";
this.angle.Value = new decimal(new int[] {
180,
0,
0,
0});
this.angle.ValueChanged += new System.EventHandler(this.OnUIValuesChanged);
//
// separator1
//
this.separator1.Name = "separator1";
this.separator1.Size = new System.Drawing.Size(6, 25);
//
// fixedcurve
//
this.fixedcurve.CheckOnClick = true;
this.fixedcurve.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.DrawCurveMode;
this.fixedcurve.ImageTransparentColor = System.Drawing.Color.Magenta;
this.fixedcurve.Margin = new System.Windows.Forms.Padding(3, 1, 3, 2);
this.fixedcurve.Name = "fixedcurve";
this.fixedcurve.Size = new System.Drawing.Size(128, 22);
this.fixedcurve.Text = "Fixed circular curve";
this.fixedcurve.CheckedChanged += new System.EventHandler(this.fixedcurve_CheckedChanged);
//
// separator2
//
this.separator2.Name = "separator2";
this.separator2.Size = new System.Drawing.Size(6, 25);
//
// apply
//
this.apply.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.apply.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Check;
this.apply.ImageTransparentColor = System.Drawing.Color.Magenta;
this.apply.Margin = new System.Windows.Forms.Padding(6, 1, 0, 2);
this.apply.Name = "apply";
this.apply.Size = new System.Drawing.Size(23, 22);
this.apply.Text = "Apply";
this.apply.Click += new System.EventHandler(this.apply_Click);
//
// cancel
//
this.cancel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.cancel.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Close;
this.cancel.ImageTransparentColor = System.Drawing.Color.Magenta;
this.cancel.Name = "cancel";
this.cancel.Size = new System.Drawing.Size(23, 22);
this.cancel.Text = "Cancel";
this.cancel.Click += new System.EventHandler(this.cancel_Click);
//
// reset
//
this.reset.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.reset.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Reset;
this.reset.ImageTransparentColor = System.Drawing.Color.Magenta;
this.reset.Margin = new System.Windows.Forms.Padding(0, 1, 3, 2);
this.reset.Name = "reset";
this.reset.Size = new System.Drawing.Size(23, 22);
this.reset.Text = "Reset";
this.reset.Click += new System.EventHandler(this.reset_Click);
//
// CurveLinedefsOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.toolstrip);
this.Name = "CurveLinedefsOptionsPanel";
this.Size = new System.Drawing.Size(620, 60);
this.toolstrip.ResumeLayout(false);
this.toolstrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolstrip;
private System.Windows.Forms.ToolStripLabel vertslabel;
private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown verts;
private System.Windows.Forms.ToolStripLabel distancelabel;
private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown distance;
private System.Windows.Forms.ToolStripLabel anglelabel;
private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown angle;
private System.Windows.Forms.ToolStripSeparator separator1;
private System.Windows.Forms.ToolStripButton fixedcurve;
private System.Windows.Forms.ToolStripSeparator separator2;
private System.Windows.Forms.ToolStripButton apply;
private System.Windows.Forms.ToolStripButton cancel;
private System.Windows.Forms.ToolStripButton reset;
}
}

View File

@ -0,0 +1,127 @@
using System;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Geometry;
namespace CodeImp.DoomBuilder.BuilderModes.Interface
{
public partial class CurveLinedefsOptionsPanel : UserControl
{
#region ================== Event Handlers
public event EventHandler OnValueChanged;
#endregion
#region ================== Variables
private bool blockevents;
#endregion
#region ================== Properties
public int Vertices { get { return (int)verts.Value; } set { verts.Value = General.Clamp(value, (int)verts.Minimum, (int)verts.Maximum); } }
public int Distance { get { return (int)distance.Value; } set { distance.Value = General.Clamp(value, (int)distance.Minimum, (int)distance.Maximum); } }
public int DistanceIncrement { get { return (int)distance.Increment; } }
public int Angle { get { return (int)angle.Value; } set { angle.Value = (decimal)General.Clamp(value, (float)angle.Minimum, (float)angle.Maximum); } }
public int AngleIncrement { get { return (int)angle.Increment; } }
public bool FixedCurve { get { return fixedcurve.Checked; } }
#endregion
#region ================== Constructor
public CurveLinedefsOptionsPanel()
{
InitializeComponent();
}
#endregion
#region ================== Mathods
public void SetValues(int verts, int distance, int angle, bool fixedcurve)
{
blockevents = true;
this.verts.Value = verts;
this.distance.Value = distance;
this.angle.Value = angle;
this.fixedcurve.Checked = fixedcurve;
blockevents = false;
}
public void Register()
{
General.Interface.AddButton(vertslabel);
General.Interface.AddButton(verts);
General.Interface.AddButton(distancelabel);
General.Interface.AddButton(distance);
General.Interface.AddButton(anglelabel);
General.Interface.AddButton(angle);
General.Interface.AddButton(reset);
General.Interface.AddButton(separator1);
General.Interface.AddButton(fixedcurve);
General.Interface.AddButton(separator2);
General.Interface.AddButton(apply);
General.Interface.AddButton(cancel);
}
public void Unregister()
{
General.Interface.RemoveButton(cancel);
General.Interface.RemoveButton(apply);
General.Interface.RemoveButton(anglelabel);
General.Interface.RemoveButton(separator2);
General.Interface.RemoveButton(fixedcurve);
General.Interface.RemoveButton(separator1);
General.Interface.RemoveButton(reset);
General.Interface.RemoveButton(angle);
General.Interface.RemoveButton(anglelabel);
General.Interface.RemoveButton(distance);
General.Interface.RemoveButton(distancelabel);
General.Interface.RemoveButton(verts);
General.Interface.RemoveButton(vertslabel);
}
#endregion
#region ================== Events
private void apply_Click(object sender, EventArgs e)
{
// Apply now
General.Editing.AcceptMode();
}
private void cancel_Click(object sender, EventArgs e)
{
// Cancel now
General.Editing.CancelMode();
}
private void OnUIValuesChanged(object sender, EventArgs e)
{
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void fixedcurve_CheckedChanged(object sender, EventArgs e)
{
// Enable/disable controls
distance.Enabled = !fixedcurve.Checked;
distancelabel.Enabled = !fixedcurve.Checked;
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void reset_Click(object sender, EventArgs e)
{
SetValues(CurveLinedefsMode.DEFAULT_VERTICES_COUNT, CurveLinedefsMode.DEFAULT_DISTANCE, CurveLinedefsMode.DEFAULT_ANGLE, false);
if(OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
#endregion
}
}

View File

@ -117,31 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="vertices.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="distance.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="angle.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="verticesbar.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="distancebar.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="anglebar.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="circular.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="backwards.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="toolstrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -130,9 +130,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Check {
get {
object obj = ResourceManager.GetObject("Check", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Close {
get {
object obj = ResourceManager.GetObject("Close", resourceCulture);
@ -140,9 +144,6 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ColorPick {
get {
object obj = ResourceManager.GetObject("ColorPick", resourceCulture);

View File

@ -202,12 +202,18 @@
<data name="Text" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Text.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SoundRadius" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SoundRadius.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BrightnessGradient" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\BrightnessGradient.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FlipSelectionV" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\FlipSelectionV.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Door" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Door.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

View File

@ -212,6 +212,7 @@ group general
"Press <k>builder_classicselect</k> to place a vertex"
"Use <k>buildermodes_increasebevel</k> and <k>buildermodes_decreasebevel</k> to change bevel by current grid size"
"Use <k>buildermodes_increasesubdivlevel</k> and <k>buildermodes_decreasesubdivlevel</k> to change the number of points in ellipse"
"Use <k>buildermodes_rotateclockwise</k> and <k>buildermodes_rotatecounterclockwise</k> to rotate ellipse shape"
"Hold <b>Shift</b> to toggle grid snapping"
"Hold <b>Ctrl</b> to toggle snapping to nearest vertex"
"Hold <b>Alt - Shift</b> to snap to 4 cardinal directions"
@ -246,4 +247,13 @@ group gridlockhelp
"Use <k>builder_griddec</k> and <k>builder_gridinc</k> to change grid size."
"Hold <b>Alt - Shift</b> to snap to 4 cardinal directions"
"Place second vertex to finish drawing"
"Press <k>builder_cancelmode</k> or <k>builder_classicedit</k> to cancel"
class CurveLinedefsMode
group general
"<b>LMB-drag</b> or use <k>buildermodes_increasebevel</k> and <k>buildermodes_decreasebevel</k> to change curve depth"
"<b>RMB-drag</b> or use <k>buildermodes_rotateclockwise</k> and <k>buildermodes_rotatecounterclockwise</k> to change curve bulginess"
"Use <k>buildermodes_increasesubdivlevel</k> and <k>buildermodes_decreasesubdivlevel</k> to change the number of points in the curve"
"Press <k>builder_acceptmode</k> to accept"
"Press <k>builder_cancelmode</k> or <k>builder_classicedit</k> to cancel"