C3D-HEROA · TRACT A hero + A/B ANNO layers + move B bearings done
Create SS-HERO TRACT A/A ANNO/B ANNO @0.35; move B's 9 bearings to B ANNO; copy A parcel boundary to A hero; freeze A hero in sheet B VP (bold on A only).
C# payload
// TRACT A hero + ANNO layers, and move TRACT B bearings to B ANNO.
// 1) create SS-HERO TRACT A ANNO + SS-HERO TRACT B ANNO (0.35 hero layers, blue)
// 2) move B's 9 ParcelSegmentLabels onto SS-HERO TRACT B ANNO
// 3) build TRACT A hero boundary best-effort: explode parcel A, take the largest Polyline/curve set,
// copy onto SS-HERO TRACT A @0.35, freeze it in sheet 22X17 B's VP (bold on A only)
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
var db = Db;
const string A_LAYER="SS-BOUNDARY TRACT A";
const string A_HERO="SS-HERO TRACT A";
const string A_ANNO="SS-HERO TRACT A ANNO";
const string B_ANNO="SS-HERO TRACT B ANNO";
string[] B_BEARINGS={"20CFD","2103E","21078","2107A","2107B","2107C","2107D","2107E","2107F"};
ObjectId EnsureHero(string name)
{
using var tr=db.TransactionManager.StartTransaction();
var lt=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForWrite);
ObjectId id;
if(lt.Has(name)) id=lt[name];
else { var ltr=new LayerTableRecord{Name=name}; ltr.Color=Color.FromColorIndex(ColorMethod.ByAci,5); id=lt.Add(ltr); tr.AddNewlyCreatedDBObject(ltr,true); }
var l=(LayerTableRecord)tr.GetObject(id,OpenMode.ForWrite);
l.LineWeight=LineWeight.LineWeight035; l.IsFrozen=false; l.IsOff=false;
tr.Commit();
return id;
}
EnsureHero(A_HERO); EnsureHero(A_ANNO); EnsureHero(B_ANNO);
Log("created/updated hero layers: SS-HERO TRACT A, A ANNO, B ANNO");
// 2) move B bearings to B ANNO
int moved=0;
using (var tr=db.TransactionManager.StartTransaction())
{
var ms=(BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForRead);
foreach(ObjectId id in ms){
var e=tr.GetObject(id,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if(e==null) continue;
if(B_BEARINGS.Contains(e.Handle.ToString(),StringComparer.OrdinalIgnoreCase)){
var w=(Autodesk.AutoCAD.DatabaseServices.Entity)tr.GetObject(id,OpenMode.ForWrite);
w.Layer=B_ANNO; moved++;
}
}
tr.Commit();
}
Log($"moved B bearings to {B_ANNO}: {moved}");
// 3) TRACT A hero boundary best-effort from parcel explode
int copied=0;
using (var tr=db.TransactionManager.StartTransaction())
{
var ms=(BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForWrite);
var cdoc=CivilDocument.GetCivilDocument(db);
foreach(ObjectId sid in cdoc.GetSiteIds()){var site=(Site)tr.GetObject(sid,OpenMode.ForRead);
foreach(ObjectId pid in site.GetParcelIds()){var p=(Parcel)tr.GetObject(pid,OpenMode.ForRead);
if(!string.Equals(p.Layer,A_LAYER,StringComparison.OrdinalIgnoreCase))continue;
var col=new DBObjectCollection(); try{p.Explode(col);}catch{}
foreach(Autodesk.AutoCAD.DatabaseServices.DBObject o in col){
if(o is Curve cv){
var clone=(Curve)cv.Clone();
clone.Layer=A_HERO; clone.LineWeight=LineWeight.ByLayer;
ms.AppendEntity(clone); tr.AddNewlyCreatedDBObject(clone,true); copied++;
}
}
}}
tr.Commit();
}
Log($"copied A boundary curves to {A_HERO}: {copied}");
// freeze SS-HERO TRACT A in sheet 22X17 B's VP (bold on A only)
using (var tr=db.TransactionManager.StartTransaction())
{
var lt=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForRead);
var aId=lt.Has(A_HERO)?lt[A_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 B",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(aId!=ObjectId.Null){ vp.FreezeLayersInViewport(new[]{aId}.AsEnumerable().GetEnumerator()); Log($"[22X17 B] froze {A_HERO} in VP#{vp.Number}"); }
}}
tr.Commit();
}
Log("DONE. A hero @0.35 (bold on sheet A only), A/B ANNO layers created, B bearings moved to B ANNO.");
Result
Log
created/updated hero layers: SS-HERO TRACT A, A ANNO, B ANNO moved B bearings to SS-HERO TRACT B ANNO: 9 copied A boundary curves to SS-HERO TRACT A: 1 [22X17 B] froze SS-HERO TRACT A in VP#-1 [22X17 B] froze SS-HERO TRACT A in VP#-1 DONE. A hero @0.35 (bold on sheet A only), A/B ANNO layers created, B bearings moved to B ANNO.
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.