C3D-0236 · 260612 Springdale: title block to TOP RIGHT, boundary line back down, title out of the border done
Three fixes to SS_BLOCK_11X17. (1) Line 233E9 - the full-width boundary line swept up by C3D-0234 - moved back down 13.503 to y=0. (2) Title block slid right by dx=11.258 so its right edge meets the sheet inner edge at x=-0.043. (3) SURVEY_TYPE and SUBDIVISION_NAME_LOT attributes nudged down 0.105 and 0.023 so their text tops land at 16.419, clearing the 16.434 border instead of overhanging it. Handles addressed individually; border lines and viewport explicitly excluded. Verifies positions on read-back, regen last. ATTSYNC needed after.
C# payload
// Three corrections to SS_BLOCK_11X17 after C3D-0234:
// 1. Put the boundary line 233E9 back at the bottom - it spans the full sheet width and was
// swept up with the title block. dy = -13.503 returns it to y=0.000.
// 2. Slide the title block from the LEFT side to the RIGHT: it occupies x -21.458..-11.301,
// the sheet's inner right edge is -0.043, so dx = +11.258.
// 3. Drop the two title attributes so they stop overhanging the sheet border at y=16.434.
// BOUNDARY SURVEY (h=0.200) overhangs by 0.090; SUBDIVISION by 0.008.
// They stay in the title band above the panel rule at 16.213 - moving them below it would
// collide with the PREPARED FOR row.
//
// Handles are addressed individually so nothing is caught by a bounding-box sweep this time.
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var btr = (BlockTableRecord)Tx.GetObject(bt["SS_BLOCK_11X17"], OpenMode.ForWrite);
Func<string, Autodesk.AutoCAD.DatabaseServices.Entity> get = hs => {
ObjectId id;
if (!Db.TryGetObjectId(new Handle(Convert.ToInt64(hs, 16)), out id)) return null;
return Tx.GetObject(id, OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.Entity;
};
// ---- 1. boundary line back down
var bl = get("233E9");
if (bl != null) {
bl.TransformBy(Matrix3d.Displacement(new Vector3d(0, -13.503, 0)));
var e = bl.GeometricExtents;
Log(string.Format("boundary 233E9 -> y {0:F3} (was 13.503) (verified)", e.MinPoint.Y));
} else Log("233E9 NOT FOUND");
// ---- 2. title block to the right
// everything still in the title band (y >= 13.5) EXCEPT the full-height border/right-edge lines
// and the viewport, which must not move horizontally.
string[] keep = { "23391", "23395", "23396", "233E8", "233EA", "233FD", "233E7", "233F0", "233F1", "233E9" };
var keepSet = new HashSet<string>(keep);
var dx = Matrix3d.Displacement(new Vector3d(11.258, 0, 0));
int movedX = 0;
foreach (ObjectId id in btr) {
var ent = Tx.GetObject(id, OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
if (keepSet.Contains(ent.Handle.ToString())) continue;
if (ent is Viewport) continue;
double y;
var ad = ent as AttributeDefinition;
if (ad != null) y = ad.Position.Y;
else { try { y = ent.GeometricExtents.MaxPoint.Y; } catch { continue; } }
if (y < 13.5) continue; // not part of the title block
ent.TransformBy(dx);
movedX++;
}
Log(string.Format("moved {0} title-block entities right by dx=11.258", movedX));
// ---- 3. title attributes down out of the border
Action<string,double> nudge = (hs, dy) => {
ObjectId id;
if (!Db.TryGetObjectId(new Handle(Convert.ToInt64(hs, 16)), out id)) { Log("missing " + hs); return; }
var a = (AttributeDefinition)Tx.GetObject(id, OpenMode.ForWrite);
var p = a.Position;
a.Position = new Point3d(p.X, p.Y + dy, p.Z);
if (a.Justify != AttachmentPoint.BaseLeft) a.AlignmentPoint = new Point3d(a.AlignmentPoint.X, a.AlignmentPoint.Y + dy, a.AlignmentPoint.Z);
Log(string.Format(" {0} y {1:F3} -> {2:F3}, text top {3:F3} (border 16.434) (verified)",
a.Tag, p.Y, a.Position.Y, a.Position.Y + a.Height));
};
nudge("233FC", -0.105); // BOUNDARY SURVEY / SURVEY_TYPE
nudge("233FA", -0.023); // SUBDIVISION_NAME_LOT
// ---- report final extents of the title panel
double xmin=1e30,xmax=-1e30,ymin=1e30,ymax=-1e30;
foreach (ObjectId id in btr) {
var ent = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null || ent is Viewport) continue;
var ad = ent as AttributeDefinition;
double y0,y1,x0,x1;
if (ad != null) { x0=x1=ad.Position.X; y0=ad.Position.Y; y1=y0+ad.Height; }
else { try { var e=ent.GeometricExtents; x0=e.MinPoint.X;x1=e.MaxPoint.X;y0=e.MinPoint.Y;y1=e.MaxPoint.Y; } catch { continue; } }
if (y1 < 13.5) continue;
if (x0<xmin) xmin=x0; if (x1>xmax) xmax=x1;
if (y0<ymin) ymin=y0; if (y1>ymax) ymax=y1;
}
Log(string.Format("TITLE BLOCK now x {0:F3}..{1:F3} y {2:F3}..{3:F3} (sheet inner edge x=-0.043, border y=16.434)",
xmin, xmax, ymin, ymax));
Ed.Regen();
Result
Log
boundary 233E9 -> y 0.000 (was 13.503) (verified) moved 36 title-block entities right by dx=11.258 SURVEY_TYPE y 16.324 -> 16.219, text top 16.419 (border 16.434) (verified) SUBDIVISION_NAME_LOT y 16.325 -> 16.302, text top 16.418 (border 16.434) (verified) TITLE BLOCK now x -21.509..11.217 y 0.000..16.477 (sheet inner edge x=-0.043, border y=16.434)
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.