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.
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
Log
NO 22X17 BLOCK IN SOURCE
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.