diff --git a/Source/Core/Geometry/Tools.cs b/Source/Core/Geometry/Tools.cs index 24585b916d5227da06be4db3241a969b63726c25..7ddb2b7be132cbd55316e8b44625dd65e7e899c5 100755 --- a/Source/Core/Geometry/Tools.cs +++ b/Source/Core/Geometry/Tools.cs @@ -1095,11 +1095,16 @@ namespace CodeImp.DoomBuilder.Geometry map.EndAddRemove(); // Filter old lines and vertices by edited area - RectangleF editarea = MapSet.CreateArea(newlines); - editarea = MapSet.IncreaseArea(editarea, mergeverts); - editarea.Inflate(1.0f, 1.0f); - List<Linedef> oldlines = new List<Linedef>(MapSet.FilterByArea(alllines, ref editarea)); - nonmergeverts = new List<Vertex>(MapSet.FilterByArea(nonmergeverts, ref editarea)); + List<Linedef> oldlines = alllines; + + if (General.Settings.MergeGeometryMode != MergeGeometryMode.CLASSIC) + { + RectangleF editarea = MapSet.CreateArea(newlines); + editarea = MapSet.IncreaseArea(editarea, mergeverts); + editarea.Inflate(1.0f, 1.0f); + oldlines = new List<Linedef>(MapSet.FilterByArea(alllines, ref editarea)); + nonmergeverts = new List<Vertex>(MapSet.FilterByArea(nonmergeverts, ref editarea)); + } /***************************************************\ Find a way to close the drawing diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index 1a6fb3a17c2374d2b99a3a2e552c4b957e485076..a8b3fab59e31fea7b5cd55f15a3fcc73059c12c9 100755 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -2182,9 +2182,8 @@ namespace CodeImp.DoomBuilder.Map /// <summary> /// Stitches marked geometry with non-marked geometry. Returns false when the operation failed. /// </summary> - public bool StitchGeometry() { return StitchGeometry(MergeGeometryMode.CLASSIC, false); } //mxd. Compatibility TODO: figure out why this is needed and kill it - public bool StitchGeometry(MergeGeometryMode mergemode) { return StitchGeometry(mergemode, true); } //sphere: Compatibility - public bool StitchGeometry(MergeGeometryMode mergemode, bool fixsectors) + public bool StitchGeometry() { return StitchGeometry(MergeGeometryMode.CLASSIC); } //mxd. Compatibility + public bool StitchGeometry(MergeGeometryMode mergemode) { // Find vertices HashSet<Vertex> movingverts = new HashSet<Vertex>(General.Map.Map.GetMarkedVertices(true)); @@ -2200,7 +2199,9 @@ namespace CodeImp.DoomBuilder.Map RectangleF editarea = CreateArea(movinglines); editarea = IncreaseArea(editarea, movingverts); editarea.Inflate(1.0f, 1.0f); - fixedverts = FilterByArea(fixedverts, ref editarea); + + if (mergemode != MergeGeometryMode.CLASSIC) + fixedverts = FilterByArea(fixedverts, ref editarea); // Join nearby vertices BeginAddRemove(); @@ -2293,7 +2294,7 @@ namespace CodeImp.DoomBuilder.Map } //mxd. Correct sector references - if (fixsectors) + if (mergemode != MergeGeometryMode.CLASSIC) { // Linedefs cache needs to be up to date... Update(true, false); @@ -2310,6 +2311,7 @@ namespace CodeImp.DoomBuilder.Map else { FlipBackwardLinedefs(changedlines); + CorrectOuterSides(new HashSet<Linedef>(changedlines)); } return true; diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs index 86a70d81c435a56f5ab3a52e64dc01e8a061892f..97c07d70e40c1979a06d538e77602a54c5d38239 100755 --- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs @@ -1815,11 +1815,16 @@ namespace CodeImp.DoomBuilder.BuilderModes HashSet<Sidedef> newsides = new HashSet<Sidedef>(General.Map.Map.GetMarkedSidedefs(true)); HashSet<Linedef> oldlines = new HashSet<Linedef>(General.Map.Map.GetMarkedLinedefs(false)); + RectangleF editarea = MapSet.CreateArea(oldlines); + // Determine area in which we are editing - RectangleF editarea = MapSet.CreateArea(General.Map.Map.GetMarkedLinedefs(true)); - editarea = MapSet.IncreaseArea(editarea, General.Map.Map.GetMarkedVertices(true)); - editarea.Inflate(1.0f, 1.0f); - //oldlines = MapSet.FilterByArea(oldlines, ref editarea); + if (General.Settings.MergeGeometryMode != MergeGeometryMode.CLASSIC) + { + editarea = MapSet.CreateArea(General.Map.Map.GetMarkedLinedefs(true)); + editarea = MapSet.IncreaseArea(editarea, General.Map.Map.GetMarkedVertices(true)); + editarea.Inflate(1.0f, 1.0f); + //oldlines = MapSet.FilterByArea(oldlines, ref editarea); + } //mxd. Let's use a blockmap... BlockMap<BlockEntry> blockmap = new BlockMap<BlockEntry>(editarea);