我想在绘图区域显示实体作为用户的预览,然后如果用户接受该程序,则将实体添加到数据库或进行一些修改。
如果我可以在提交事务之前出现实体,我习惯使用事务并提交实体出现的事务
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
int i = poly2TxtSetting.currentFormat.IndexFormat.startWith;
List<ObjectId> ListTextId = new List<ObjectId>();
List<ObjectId> ListPointId = new List<ObjectId>();
foreach (var po in Points)
{
i += poly2TxtSetting.currentFormat.IndexFormat.step;
DBText dtext = new DBText();
dtext.TextString = i.tostring();
dtext.Position = po;
dtext.SetDatabaseDefaults();
DBPoint point = new DBPoint(po);
btr.AppendEntity(dtext);
tr.AddNewlyCreatedDBObject(dtext, true);
btr.AppendEntity(point);
tr.AddNewlyCreatedDBObject(point, true);
}
tr.Commit();
}
答案 0 :(得分:2)
如果要在AutoCAD模型空间中显示模型,可以选择两种方法。
1)将其插入数据库。 2)将其添加到Transient Manager中。
我认为你需要的是第二选择。
搜索瞬态图形。
请查看以下可帮助您的代码。
Solid3d solid=new Solid(0);
solid.CreateSphere(10);
TransientManager.CurrentTransientManager.AddTransient(solid, TransientDrawingMode.Main, 128, new IntegerCollection());
这将在半径= 10;
的原点上显示球体答案 1 :(得分:1)
您可以等待图形冲洗:
tr.TransactionManager.QueueForGraphicsFlush();
然后提示输入,以便用户有时间查看更新:
PromptKeywordOptions pko = new PromptKeywordOptions("\nKeep Changes?");
pko.AllowNone = true;
pko.Keywords.Add("Y");
pko.Keywords.Add("N");
pko.Keywords.Default = "Y";
PromptResult pkr = ed.GetKeywords(pko);
if (pkr.StringResult == "Y") {
tr.Commit();
} else {
tr.Abort();
}
此link提供了使用此技术的示例应用程序。