← Inbox

C3D-AFINAL · TRACT A hero from real polyline + move A bearings done

Clear bad hero A geom; copy real SS-BOUNDARY TRACT A polyline (840') to SS-HERO TRACT A @0.35; move A bearings to SS-HERO TRACT A ANNO. Bold on sheet A only.

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

C# payload

// TRACT A hero, done right using the real polyline the user added (SS-BOUNDARY TRACT A, 840', h=216AD).
// 1) clear the bad 192' geometry on SS-HERO TRACT A
// 2) copy the real SS-BOUNDARY TRACT A polyline onto SS-HERO TRACT A @0.35 (ByLayer, closed)
// 3) move A's ParcelSegmentLabel bearings (on/near that polyline) to SS-HERO TRACT A ANNO
// SS-HERO TRACT A stays frozen in sheet B's VP (bold on sheet A only). Nothing else touched.
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.Civil.DatabaseServices;

var db = Db;
const string SRC="SS-BOUNDARY TRACT A";
const string A_HERO="SS-HERO TRACT A";
const string A_ANNO="SS-HERO TRACT A ANNO";

var aSamples=new List<Point2d>();

// 1) clear old hero A geometry + 2) copy real boundary
int cleared=0, copied=0;
using (var tr=db.TransactionManager.StartTransaction())
{
    var ms=(BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForWrite);
    var toErase=new List<ObjectId>(); ObjectId srcId=ObjectId.Null;
    foreach(ObjectId id in ms){ var e=tr.GetObject(id,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
        if(e==null) continue;
        if(string.Equals(e.Layer,A_HERO,StringComparison.OrdinalIgnoreCase)) toErase.Add(id);
        else if(e is Polyline && string.Equals(e.Layer,SRC,StringComparison.OrdinalIgnoreCase)) srcId=id;
    }
    foreach(var id in toErase){ var e=(Autodesk.AutoCAD.DatabaseServices.Entity)tr.GetObject(id,OpenMode.ForWrite); e.Erase(); cleared++; }

    if(srcId!=ObjectId.Null){
        var src=(Polyline)tr.GetObject(srcId,OpenMode.ForRead);
        for(int i=0;i<src.NumberOfVertices;i++){ var v=src.GetPoint3dAt(i); aSamples.Add(new Point2d(v.X,v.Y)); }
        var clone=(Polyline)src.Clone();
        clone.Layer=A_HERO; clone.LineWeight=LineWeight.ByLayer; clone.Closed=true;
        ms.AppendEntity(clone); tr.AddNewlyCreatedDBObject(clone,true); copied++;
    } else Log("SS-BOUNDARY TRACT A polyline not found");
    tr.Commit();
}
Log($"cleared old hero A={cleared}, copied real boundary={copied}, aVerts={aSamples.Count}");

// densify A boundary samples along segments for accurate label matching
var dense=new List<Point2d>();
for(int i=0;i<aSamples.Count;i++){ var a=aSamples[i]; var b=aSamples[(i+1)%aSamples.Count];
    for(int k=0;k<=20;k++){ double t=k/20.0; dense.Add(new Point2d(a.X+(b.X-a.X)*t, a.Y+(b.Y-a.Y)*t)); } }

// 3) move A bearings to A ANNO
int moved=0;
if(dense.Count>0){
    using var tr=db.TransactionManager.StartTransaction();
    var ms=(BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForRead);
    double dA(Point2d p)=>dense.Min(q=>p.GetDistanceTo(q));
    var ids=new List<ObjectId>();
    foreach(ObjectId id in ms){ var e=tr.GetObject(id,OpenMode.ForRead);
        if(!(e is ParcelSegmentLabel ps)) continue;
        Point2d loc; try{loc=new Point2d(ps.LabelLocation.X,ps.LabelLocation.Y);}catch{continue;}
        if(dA(loc)<=40) ids.Add(id);
    }
    foreach(var id in ids){ var w=(Autodesk.AutoCAD.DatabaseServices.Entity)tr.GetObject(id,OpenMode.ForWrite); w.Layer=A_ANNO; moved++; }
    tr.Commit();
}
Log($"moved A bearings to {A_ANNO}: {moved}");
Log("DONE. TRACT A real boundary bold on SS-HERO TRACT A @0.35 (sheet A only); A bearings on A 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-AFINAL (0 entities touched).
Entities
Duration
386 ms
Civil 3D
25.0.0.0

Log

cleared old hero A=1, copied real boundary=1, aVerts=5
moved A bearings to SS-HERO TRACT A ANNO: 7
DONE. TRACT A real boundary bold on SS-HERO TRACT A @0.35 (sheet A only); A bearings on A ANNO.

Notes

What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.

No notes yet.