[ CommandMethod( "BackCrash" ) ]
public void HatchBackCrash() {
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
BlockTable bt;
using ( Transaction trans = db.TransactionManager.StartTransaction() ) {
bt = trans.GetObject( db.BlockTableId, OpenMode.ForRead, false, true ) as BlockTable;
moveHatchBack( trans, bt[ "*MODEL_SPACE" ], true );
trans.Abort();
}
}
public static void moveHatchBack ( Transaction aTrans, ObjectId aBtrId, bool aRemoveAssoc ) {
DBObject obj;
DrawOrderTable dot;
BlockTableRecord btr;
Hatch hat;
ObjectIdCollection hatIds = new ObjectIdCollection();
btr = aTrans.GetObject( aBtrId, OpenMode.ForRead, false, false ) as BlockTableRecord;
foreach ( ObjectId oid in btr ) {
if ( oid.IsErased || oid.IsNull || oid.IsEffectivelyErased || !oid.IsValid ) continue;
obj = aTrans.GetObject( oid, OpenMode.ForRead, false, false ) as Hatch;
if ( obj == null ) continue;
hatIds.Add( oid );
hat = obj as Hatch;
if ( aRemoveAssoc && hat.Associative ) {
hat.UpgradeOpen();
hat.Associative = false;
hat.DowngradeOpen();
}
}
if ( hatIds.Count > 0 ) {
dot = aTrans.GetObject( btr.DrawOrderTableId, OpenMode.ForWrite, false, false ) as DrawOrderTable;
dot.MoveToBottom( hatIds );
// dot.MoveToTop( hatIds );
dot.DowngradeOpen();
}
hatIds.Dispose();
}