C3D-HEROBLAYER · TRACT B hero layer (bold on sheet B only) done
Reset SS-BOUNDARY TRACT B entity LW to default; copy boundary onto new SS-HERO TRACT B @0.35mm; freeze that layer in sheet A's VP so bold shows on B only. Nothing else touched.
C# payload
// Per-sheet hero layer for TRACT B (no VP lineweight override; layers + per-VP freeze).
// 1) reset SS-BOUNDARY TRACT B polyline lineweight -> ByLayer (stop the both-sheets bold bleed)
// 2) create layer SS-HERO TRACT B @ 0.35mm; copy the B boundary polyline onto it (bold via layer)
// 3) freeze SS-HERO TRACT B in sheet "22X17 A" viewport so the bold shows on B only
// Nothing else touched. Reversible.
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Colors;
var db = Db;
const string SRC = "SS-BOUNDARY TRACT B";
const string HERO = "SS-HERO TRACT B";
// ensure hero layer exists at 0.35mm, blue (color 5, matching TRACT B)
using (var tr = db.TransactionManager.StartTransaction())
{
var lt=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForWrite);
ObjectId hid;
if(lt.Has(HERO)) hid=lt[HERO];
else {
var ltr=new LayerTableRecord{ Name=HERO };
ltr.Color=Color.FromColorIndex(ColorMethod.ByAci,5);
hid=lt.Add(ltr); tr.AddNewlyCreatedDBObject(ltr,true);
}
var hl=(LayerTableRecord)tr.GetObject(hid,OpenMode.ForWrite);
hl.LineWeight=LineWeight.LineWeight035; // hero bold standard
hl.IsFrozen=false; hl.IsOff=false;
tr.Commit();
}
int reset=0, copied=0;
using (var tr = db.TransactionManager.StartTransaction())
{
var ms=(BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForWrite);
// collect source polylines first
var srcIds=new List<ObjectId>();
foreach(ObjectId id in ms){ var e=tr.GetObject(id,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if(e is Polyline && string.Equals(e.Layer,SRC,StringComparison.OrdinalIgnoreCase)) srcIds.Add(id); }
foreach(var id in srcIds)
{
var pl=(Polyline)tr.GetObject(id,OpenMode.ForWrite);
pl.LineWeight=LineWeight.ByLineWeightDefault; // back to ByLayer-ish (stop entity override)
reset++;
// copy onto hero layer
var clone=(Polyline)pl.Clone();
clone.Layer=HERO;
clone.LineWeight=LineWeight.ByLayer; // bold comes from the hero layer (0.35)
ms.AppendEntity(clone);
tr.AddNewlyCreatedDBObject(clone,true);
copied++;
}
tr.Commit();
}
Log($"reset SRC lineweight={reset}, copied to '{HERO}'={copied}");
// freeze SS-HERO TRACT B in sheet 22X17 A's viewport (show bold on B only)
using (var tr = db.TransactionManager.StartTransaction())
{
var lt=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForRead);
var heroId = lt.Has(HERO)?lt[HERO]:ObjectId.Null;
var ld=(DBDictionary)tr.GetObject(db.LayoutDictionaryId,OpenMode.ForRead);
foreach(DBDictionaryEntry e in ld)
{
var lay=(Layout)tr.GetObject(e.Value,OpenMode.ForRead);
if(!string.Equals(lay.LayoutName,"22X17 A",StringComparison.OrdinalIgnoreCase)) continue;
foreach(ObjectId vid in lay.GetViewports())
{
var vp=tr.GetObject(vid,OpenMode.ForWrite) as Viewport;
if(vp==null||vp.Number==1) continue;
if(heroId!=ObjectId.Null){ vp.FreezeLayersInViewport(new[]{heroId}.AsEnumerable().GetEnumerator()); Log($"[22X17 A] froze {HERO} in VP#{vp.Number}"); }
}
}
tr.Commit();
}
Log($"DONE. TRACT B hero on '{HERO}' @0.35mm, visible on sheet B, frozen in sheet A. SRC lineweight reset. Nothing else touched.");
Result
Log
reset SRC lineweight=1, copied to 'SS-HERO TRACT B'=1 [22X17 A] froze SS-HERO TRACT B in VP#-1 [22X17 A] froze SS-HERO TRACT B in VP#-1 DONE. TRACT B hero on 'SS-HERO TRACT B' @0.35mm, visible on sheet B, frozen in sheet A. SRC lineweight reset. Nothing else touched.
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.