← Inbox

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).

Script file
C3D-HEROA.cs
Target
260619 - 3625 Stonewall Tell Rd.dwg · model space
Author
claude
Approved
yes · auto-auth
Timeout
60s

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

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260619 - 3625 Stonewall Tell Rd, Atlanta, GA 30349, USA\260619 - 3625 Stonewall Tell Rd.dwg
Message
Executed C3D-HEROA (0 entities touched).
Entities
Duration
475 ms
Civil 3D
25.0.0.0

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.