Hi,
This works for me:
[CommandMethod("TEST")]
public void Test()
{
var db = Application.DocumentManager.MdiActiveDocument.Database;
using (var btr = (BlockTableRecord)SymbolUtilityServices.GetBlockModelSpaceId(db).Open(OpenMode.ForWrite))
{
foreach (ObjectId id in btr)
{
if ((id.ObjectClass.Name == "AcDbLine"))
{
using (var line = (Line)id.Open(OpenMode.ForWrite))
{
double radius = line.Length / 2.0;
var center = line.GetPointAtDist(radius);
line.Erase();
using (var circle = new Circle(center, Vector3d.ZAxis, radius))
{
btr.AppendEntity(circle);
}
}
}
}
}
}
Anyway, I do not know why you can not or do not want to use a transaction, but instead of a regular transaction, you can use an OpenCloseTransaction which is mainly a wrapper for the Open / Close process used in the upper code.
[CommandMethod("TEST2")]
public void Test2()
{
var db = Application.DocumentManager.MdiActiveDocument.Database;
using (var tr = db.TransactionManager.StartOpenCloseTransaction())
{
var btr = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite);
foreach (ObjectId id in btr)
{
if ((id.ObjectClass.Name == "AcDbLine"))
{
var line = (Line)tr.GetObject(id, OpenMode.ForWrite);
double radius = line.Length / 2.0;
var center = line.GetPointAtDist(radius);
line.Erase();
var circle = new Circle(center, Vector3d.ZAxis, radius);
btr.AppendEntity(circle);
tr.AddNewlyCreatedDBObject(circle, true);
}
}
tr.Commit();
}
}