diff --git a/commands/CmdE.c b/commands/CmdE.c index 3e7422db..7be73fe8 100644 --- a/commands/CmdE.c +++ b/commands/CmdE.c @@ -607,7 +607,7 @@ CmdErase(w, cmd) TxCommand *cmd; { Rect editRect, areaReturn; - TileTypeBitMask mask; + TileTypeBitMask mask, errorLayersForErasure, activeLayersForErasure; extern int cmdEraseCellsFunc(); windCheckOnlyWindow(&w, DBWclientID); @@ -643,10 +643,21 @@ CmdErase(w, cmd) if (TTMaskIsZero(&mask)) return; - TTMaskAndMask(&mask, &DBActiveLayerBits); + /* Split the mask into active and error layers. This restores */ + /* functionality lost since magic version 7.1. Modified by BIM */ + /* (Iain McNally) 8/18/2018 */ + + TTMaskAndMask3(&activeLayersForErasure, &mask, &DBActiveLayerBits); + TTMaskClearMask3(&errorLayersForErasure, &mask, &DBAllButSpaceAndDRCBits); /* Erase paint. */ - DBEraseValid(EditCellUse->cu_def, &editRect, &mask, 0); + DBEraseValid(EditCellUse->cu_def, &editRect, &activeLayersForErasure, 0); + + /* Erase error layers if selected. */ + if (!TTMaskIsZero(&errorLayersForErasure)) + { + DBEraseMask(EditCellUse->cu_def, &editRect, &errorLayersForErasure); + } /* Erase labels. */ areaReturn = editRect; diff --git a/database/DBpaint2.c b/database/DBpaint2.c index f4cae492..1254c022 100644 --- a/database/DBpaint2.c +++ b/database/DBpaint2.c @@ -335,7 +335,11 @@ DBEraseMask(cellDef, rect, mask) { TileType t; - for (t = DBNumTypes - 1; t >= TT_SELECTBASE; t--) + /* Corrected to restore erasing of error layers, which is */ + /* functionality lost since magic version 7.1. Modified by */ + /* BIM 8/18/2018 */ + + for (t = DBNumTypes - 1; t >= TT_PAINTBASE; t--) if (TTMaskHasType(mask, t)) DBErase(cellDef, rect, t); }