Below is a simple example of drawing Circle in a closed file.
When drawing receive an error <eWrongDatabase>. This is a bug, I can not, or so thought of Autodesk?
I use AUtocad2010.
Sorry for my english!!!
[CommandMethod("DrawCircleToFile", CommandFlags.Session)]
public static void DrawCircleToFile()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
using (DocumentLock doclock = doc.LockDocument()) {
Database NewDB = GetDataBaseFromFile("C:\\Тест.dwg");
DrawCircle(new Point3d(0, 0, 0), NewDB);
NewDB.Dispose();
}
}
//Получает Database файла
private static Database GetDataBaseFromFile(string FileName)
{
Database NewDB = new Database(false, true);
NewDB.ReadDwgFile(FileName, FileOpenMode.OpenForReadAndWriteNoShare, false, null);
return NewDB;
}
//тупо рисует окружность в пространстве модели
private static void DrawCircle(Point3d Center, Database Db)
{
Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
Circle Pcirc = new Circle(Center, normal, 100.0);
Pcirc.SetDatabaseDefaults();
// Dim CircId As New ObjectId ' = ObjectId.Null
// CreateNewLayer(LayerName, Drawing.Color.Yellow, 2, LineWeight.LineWeight200, False, Db)
using (Transaction acTrans = Db.TransactionManager.StartTransaction())
{
//Во первых - нужно обязательно приводить к типу BlockTable, иначе получим ошибку компиляции
BlockTable bt = (BlockTable) acTrans.GetObject(Db.BlockTableId, OpenMode.ForRead, false, true);
//Во вторых - помимо того, что должно быть приведение, объекту bt параметр должен передаваться в квадратных, а не в круглых скобках иначе опять же - ошибка компиляции
BlockTableRecord btr = (BlockTableRecord)acTrans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false, true);
Pcirc.Layer = "0";
btr.AppendEntity(Pcirc);
acTrans.AddNewlyCreatedDBObject(Pcirc, true);
acTrans.Commit();
}
}