mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-25 21:31:14 +00:00
Restore classic pasting mode quirks & undo some optimizations for it to fix bugs
This commit is contained in:
parent
3c176d2178
commit
1415309079
3 changed files with 26 additions and 14 deletions
|
@ -1095,11 +1095,16 @@ namespace CodeImp.DoomBuilder.Geometry
|
||||||
map.EndAddRemove();
|
map.EndAddRemove();
|
||||||
|
|
||||||
// Filter old lines and vertices by edited area
|
// Filter old lines and vertices by edited area
|
||||||
|
List<Linedef> oldlines = alllines;
|
||||||
|
|
||||||
|
if (General.Settings.MergeGeometryMode != MergeGeometryMode.CLASSIC)
|
||||||
|
{
|
||||||
RectangleF editarea = MapSet.CreateArea(newlines);
|
RectangleF editarea = MapSet.CreateArea(newlines);
|
||||||
editarea = MapSet.IncreaseArea(editarea, mergeverts);
|
editarea = MapSet.IncreaseArea(editarea, mergeverts);
|
||||||
editarea.Inflate(1.0f, 1.0f);
|
editarea.Inflate(1.0f, 1.0f);
|
||||||
List<Linedef> oldlines = new List<Linedef>(MapSet.FilterByArea(alllines, ref editarea));
|
oldlines = new List<Linedef>(MapSet.FilterByArea(alllines, ref editarea));
|
||||||
nonmergeverts = new List<Vertex>(MapSet.FilterByArea(nonmergeverts, ref editarea));
|
nonmergeverts = new List<Vertex>(MapSet.FilterByArea(nonmergeverts, ref editarea));
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************\
|
/***************************************************\
|
||||||
Find a way to close the drawing
|
Find a way to close the drawing
|
||||||
|
|
|
@ -2182,9 +2182,8 @@ namespace CodeImp.DoomBuilder.Map
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stitches marked geometry with non-marked geometry. Returns false when the operation failed.
|
/// Stitches marked geometry with non-marked geometry. Returns false when the operation failed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool StitchGeometry() { return StitchGeometry(MergeGeometryMode.CLASSIC, false); } //mxd. Compatibility TODO: figure out why this is needed and kill it
|
public bool StitchGeometry() { return StitchGeometry(MergeGeometryMode.CLASSIC); } //mxd. Compatibility
|
||||||
public bool StitchGeometry(MergeGeometryMode mergemode) { return StitchGeometry(mergemode, true); } //sphere: Compatibility
|
public bool StitchGeometry(MergeGeometryMode mergemode)
|
||||||
public bool StitchGeometry(MergeGeometryMode mergemode, bool fixsectors)
|
|
||||||
{
|
{
|
||||||
// Find vertices
|
// Find vertices
|
||||||
HashSet<Vertex> movingverts = new HashSet<Vertex>(General.Map.Map.GetMarkedVertices(true));
|
HashSet<Vertex> movingverts = new HashSet<Vertex>(General.Map.Map.GetMarkedVertices(true));
|
||||||
|
@ -2200,6 +2199,8 @@ namespace CodeImp.DoomBuilder.Map
|
||||||
RectangleF editarea = CreateArea(movinglines);
|
RectangleF editarea = CreateArea(movinglines);
|
||||||
editarea = IncreaseArea(editarea, movingverts);
|
editarea = IncreaseArea(editarea, movingverts);
|
||||||
editarea.Inflate(1.0f, 1.0f);
|
editarea.Inflate(1.0f, 1.0f);
|
||||||
|
|
||||||
|
if (mergemode != MergeGeometryMode.CLASSIC)
|
||||||
fixedverts = FilterByArea(fixedverts, ref editarea);
|
fixedverts = FilterByArea(fixedverts, ref editarea);
|
||||||
|
|
||||||
// Join nearby vertices
|
// Join nearby vertices
|
||||||
|
@ -2293,7 +2294,7 @@ namespace CodeImp.DoomBuilder.Map
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd. Correct sector references
|
//mxd. Correct sector references
|
||||||
if (fixsectors)
|
if (mergemode != MergeGeometryMode.CLASSIC)
|
||||||
{
|
{
|
||||||
// Linedefs cache needs to be up to date...
|
// Linedefs cache needs to be up to date...
|
||||||
Update(true, false);
|
Update(true, false);
|
||||||
|
@ -2310,6 +2311,7 @@ namespace CodeImp.DoomBuilder.Map
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FlipBackwardLinedefs(changedlines);
|
FlipBackwardLinedefs(changedlines);
|
||||||
|
CorrectOuterSides(new HashSet<Linedef>(changedlines));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1815,11 +1815,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
HashSet<Sidedef> newsides = new HashSet<Sidedef>(General.Map.Map.GetMarkedSidedefs(true));
|
HashSet<Sidedef> newsides = new HashSet<Sidedef>(General.Map.Map.GetMarkedSidedefs(true));
|
||||||
HashSet<Linedef> oldlines = new HashSet<Linedef>(General.Map.Map.GetMarkedLinedefs(false));
|
HashSet<Linedef> oldlines = new HashSet<Linedef>(General.Map.Map.GetMarkedLinedefs(false));
|
||||||
|
|
||||||
|
RectangleF editarea = MapSet.CreateArea(oldlines);
|
||||||
|
|
||||||
// Determine area in which we are editing
|
// Determine area in which we are editing
|
||||||
RectangleF editarea = MapSet.CreateArea(General.Map.Map.GetMarkedLinedefs(true));
|
if (General.Settings.MergeGeometryMode != MergeGeometryMode.CLASSIC)
|
||||||
|
{
|
||||||
|
editarea = MapSet.CreateArea(General.Map.Map.GetMarkedLinedefs(true));
|
||||||
editarea = MapSet.IncreaseArea(editarea, General.Map.Map.GetMarkedVertices(true));
|
editarea = MapSet.IncreaseArea(editarea, General.Map.Map.GetMarkedVertices(true));
|
||||||
editarea.Inflate(1.0f, 1.0f);
|
editarea.Inflate(1.0f, 1.0f);
|
||||||
//oldlines = MapSet.FilterByArea(oldlines, ref editarea);
|
//oldlines = MapSet.FilterByArea(oldlines, ref editarea);
|
||||||
|
}
|
||||||
|
|
||||||
//mxd. Let's use a blockmap...
|
//mxd. Let's use a blockmap...
|
||||||
BlockMap<BlockEntry> blockmap = new BlockMap<BlockEntry>(editarea);
|
BlockMap<BlockEntry> blockmap = new BlockMap<BlockEntry>(editarea);
|
||||||
|
|
Loading…
Reference in a new issue