TheSwamp
Code Red => .NET => Topic started by: csharpbird on November 17, 2011, 09:41:10 PM
-
[CommandMethod("Test")]
public static void Test()
{
Document doc=Application.DocumentManager.MdiActiveDocument;
Database db=doc.Database;
Editor ed=doc.Editor;
using (Transaction trans=db.TransactionManager.StartTransaction())
{
BlockTable bt=(BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
List<BlockTableRecord> btrs=new List<BlockTableRecord>();
foreach (var id in bt)
{
BlockTableRecord btr=(BlockTableRecord)trans.GetObject(id, OpenMode.ForRead);
if (btr.HasPreviewIcon)
{
btrs.Add(btr);
}
}
Table tb=new Table();
tb.Position = Point3d.Origin;
tb.NumColumns = 2;
tb.NumRows = btrs.Count + 2;
tb.SetRowHeight(3);
tb.SetColumnWidth(15);
tb.TableStyle = db.Tablestyle;
tb.SetTextString(0, 0, "Blocks");
tb.SetTextString(1, 0, "Name");
tb.SetTextString(1, 1, "Preview");
int i=2;
foreach (var btr in btrs)
{
tb.SetTextString(i, 0, btr.Name);
tb.SetBlockTableRecordId(i, 1, btr.ObjectId, true);
i++;
}
tb.GenerateLayout();
BlockTableRecord model=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
model.AppendEntity(tb);
trans.AddNewlyCreatedDBObject(tb, true);
trans.Commit();
}
}
When running the codes,AutoCAD will throw an exception:
(http://)
-
Can you post a drawing where this fails? I don't have 2008, but 2009's API should be the same and it works fine in a test 2009 dwg.
-
I test the code using db_samp.dwg under the AutoCAD's sample folder.
-
OK, the code fails when you add a block to the table which contains attributes. If I add code to omit btr's whose HasAttributes properties is true then it works without error.
So I tested some code I've been using to create legends for some time with this drawing. It, too, fails in the same manner. But I was pretty sure it worked with attributed blocks in other drawings. Further testing says I must not have tested this in 2009 (most of my coding is done in 2010) because the same code (mine) works fine in 2010.
-
Here's a link to Kean's blog from a few years ago. Look down in the comments where this problem was discussed.
http://through-the-interface.typepad.com/through_the_interface/2007/06/creating_an_aut_1.html