From 08e38f62bd088109a29f302afa12c0b018ae1126 Mon Sep 17 00:00:00 2001 From: codeimp Date: Thu, 1 May 2008 10:59:37 +0000 Subject: [PATCH] little more on drawing mode (still unfinished) --- .../ClassicModes/DrawGeometryMode.cs | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/Source/BuilderModes/ClassicModes/DrawGeometryMode.cs b/Source/BuilderModes/ClassicModes/DrawGeometryMode.cs index da7150ac..cc646454 100644 --- a/Source/BuilderModes/ClassicModes/DrawGeometryMode.cs +++ b/Source/BuilderModes/ClassicModes/DrawGeometryMode.cs @@ -92,6 +92,9 @@ namespace CodeImp.DoomBuilder.BuilderModes.Editing this.basemode = General.Map.Mode; points = new List(); + // No selection in this mode + General.Map.Map.ClearAllSelected(); + // We have no destructor GC.SuppressFinalize(this); } @@ -128,6 +131,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Editing // Disenagaging public override void Disengage() { + MapSet map = General.Map.Map; base.Disengage(); Cursor.Current = Cursors.AppStarting; @@ -137,10 +141,33 @@ namespace CodeImp.DoomBuilder.BuilderModes.Editing // Make undo for the draw General.Map.UndoRedo.CreateUndo("line draw", UndoGroup.None, 0); - // MOO + // STEP 1: Create the new geometry + List newverts = new List(); + List newlines = new List(); + List mergeverts = new List(); + List nonmergeverts = new List(map.Vertices); + Vertex v1 = map.CreateVertex((int)points[0].pos.x, (int)points[0].pos.y); + newverts.Add(v1); + if(points[0].stitch) mergeverts.Add(v1); else nonmergeverts.Add(v1); + for(int i = 1; i < points.Count; i++) + { + Vertex v2 = map.CreateVertex((int)points[i].pos.x, (int)points[i].pos.y); + newverts.Add(v2); + if(points[i].stitch) mergeverts.Add(v2); else nonmergeverts.Add(v2); + Linedef ld = map.CreateLinedef(v1, v2); + ld.Selected = true; + newlines.Add(ld); + v1 = v2; + } + // STEP 2: Merge the new geometry + foreach(Vertex v in mergeverts) v.Selected = true; + map.StitchGeometry(mergeverts, nonmergeverts); + + // STEP 3: Make sectors where possible + // Update cached values - General.Map.Map.Update(); + map.Update(); // Map is changed General.Map.IsChanged = true; @@ -321,14 +348,14 @@ namespace CodeImp.DoomBuilder.BuilderModes.Editing { // Aligned to grid p.pos = General.Map.Grid.SnappedToGrid(mousemappos); - p.stitch = false; + p.stitch = snaptonearest; return p; } else { // Normal position p.pos = mousemappos; - p.stitch = false; + p.stitch = snaptonearest; return p; } }