ModelSpace刷新问题
请教各位一个问题:我想通过窗体的button键添加一个多段线,逐个顶点进行添加,我希望每添加一个顶点就在modelspace能看到多段线的变化,我该怎么做? 一下是我的代码 但是总是显示eLockViotation.谁可以帮我看看,谢谢!我的窗口是模态窗口private void btn_Click(object sender, EventArgs e)
{
Polyline polyline = new Polyline();
using (Transaction trans = db.TransactionManager.StartTransaction())
{
ObjectId entId;//用于返回添加到模型空间中的实体ObjectId
//以读方式打开块表
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
//以写方式打开模型空间块表记录.
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt, OpenMode.ForWrite);
entId = btr.AppendEntity(polyline);//将多段线对象的信息添加到块表记录中
trans.AddNewlyCreatedDBObject(polyline, true);//把对象添加到事务处理中
trans.Commit();//提交事务处理
}
//循环给多段线添加顶点 ,每添加一个就更新一下变化
for (int i = 0; i < 10; i++)
{
polyline.AddVertexAt(i, new Point2d(11 * i, 10 + i), 0, 0, 0);
Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen();
}
}
好像是
Editor ed= dm.MdiActiveDocument.Editor
ed.UpdateScreen() 偶尔做做怪 发表于 2014-10-30 11:47 static/image/common/back.gif
好像是
Editor ed= dm.MdiActiveDocument.Editor
ed.UpdateScreen()
还是不行cad崩溃,显示eNotOpenFileWrite 是不是和模态窗口有关啊?困扰好几天了 你的问题和刷新没有关系,代码错了 给文档加个锁试试。
在using (Transaction trans = db.TransactionManager.StartTransaction())
{
//加入这段代码 using (DocumentLock docLoc = doc.LockDocument())
{
}
} 既然是要进行写入操作,将 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);改成 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite); epwt 发表于 2014-10-31 14:32 static/image/common/back.gif
既然是要进行写入操作,将 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.F ...
又没有对块表有写入操作,这个不必 epwt 发表于 2014-10-31 14:30 static/image/common/back.gif
给文档加个锁试试。
在using (Transaction trans = db.TransactionManager.StartTransaction())
...
1,这不用试试,这肯定要加锁
2,另外还有个问题很严重,polyline 在提交后又进行写操作 既要显示就需提交事务,事务提交就over了,用一个循环体
while using tr … tr.Commit();
页:
[1]