← Inbox

C3D-0466 · New 22X17 layout with SS_BLOCK_22X17 attached 260904 done

Import the 22x17 title block from SS_BLOCK_22X17.dwg, create layout 22X17, and insert the block (with attributes) into its paperspace.

Script file
C3D-0466.cs
Target
260904 - 920 W Sandtown Rd SW.dwg · model space
Author
claude
Approved
yes · auto-auth
Timeout
60s

C# payload


string path=@"C:\Users\sanja\OneDrive\_SurveyDisco\SS_BLOCK_22X17.dwg";
// 1) find the block name in the source
string blkName=null;
using(var src=new Database(false,true)){
    src.ReadDwgFile(path,System.IO.FileShare.Read,true,null);
    using(var stx=src.TransactionManager.StartTransaction()){
        var bt=(BlockTable)stx.GetObject(src.BlockTableId,OpenMode.ForRead);
        foreach(ObjectId bid in bt){ var b=(BlockTableRecord)stx.GetObject(bid,OpenMode.ForRead); if(b.Name.ToUpper().Contains("22X17")&&!b.IsLayout){ blkName=b.Name; } }
        stx.Commit();
    }
    if(blkName==null){ Log("NO 22X17 BLOCK IN SOURCE"); return; }
    Log("source block: "+blkName);
    // 2) import the block definition into current db
    ObjectId destBlkId=Db.Insert(blkName, src, true);
    Log("imported block def id null? "+destBlkId.IsNull);
}
// 3) create the new layout
var lmgr=LayoutManager.Current;
string dest="22X17";
if(lmgr.GetLayoutId(dest).IsNull){ lmgr.CreateLayout(dest); Log("created layout "+dest); } else Log("layout "+dest+" exists, reusing");
var layId=lmgr.GetLayoutId(dest);
var lay=(Layout)Tx.GetObject(layId,OpenMode.ForRead);
var ps=(BlockTableRecord)Tx.GetObject(lay.BlockTableRecordId,OpenMode.ForWrite);
// 4) insert the block reference at 0,0 into that layout paperspace
var bt2=(BlockTable)Tx.GetObject(Db.BlockTableId,OpenMode.ForRead);
string bn=null; foreach(ObjectId bid in bt2){ var b=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead); if(b.Name.ToUpper().Contains("22X17")&&!b.IsLayout) bn=b.Name; }
var br=new BlockReference(Point3d.Origin, bt2[bn]);
ps.AppendEntity(br); Tx.AddNewlyCreatedDBObject(br,true);
// append attribute refs from defs
var bdef=(BlockTableRecord)Tx.GetObject(bt2[bn],OpenMode.ForRead);
foreach(ObjectId eid in bdef){ var ad=Tx.GetObject(eid,OpenMode.ForRead) as AttributeDefinition; if(ad==null||ad.Constant) continue; var ar=new AttributeReference(); ar.SetAttributeFromBlock(ad, br.BlockTransform); ar.TextString=ad.TextString; br.AttributeCollection.AppendAttribute(ar); Tx.AddNewlyCreatedDBObject(ar,true); }
Log("inserted 22X17 block into layout, handle="+br.Handle);
lmgr.CurrentLayout=dest;
Ed.Regen();

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260711 - 281 Maranatha Trail, Lawrenceville, GA 30045, USA\260711 - 281 Maranatha Trail R2.dwg
Message
Executed C3D-0466 (0 entities touched).
Entities
Duration
424 ms
Civil 3D
25.0.0.0

Log

NO 22X17 BLOCK IN SOURCE

Notes

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

No notes yet.