kids 发表于 2014-10-30 10:36:18

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();
            }
      }




偶尔做做怪 发表于 2014-10-30 11:47:37

好像是
      Editor ed= dm.MdiActiveDocument.Editor
      ed.UpdateScreen()

kids 发表于 2014-10-30 12:27:34

偶尔做做怪 发表于 2014-10-30 11:47 static/image/common/back.gif
好像是
      Editor ed= dm.MdiActiveDocument.Editor
      ed.UpdateScreen()

还是不行cad崩溃,显示eNotOpenFileWrite

kids 发表于 2014-10-30 12:56:53

是不是和模态窗口有关啊?困扰好几天了

sieben 发表于 2014-10-30 13:18:48

你的问题和刷新没有关系,代码错了

epwt 发表于 2014-10-31 14:30:53

给文档加个锁试试。
在using (Transaction trans = db.TransactionManager.StartTransaction())
            {
             //加入这段代码 using (DocumentLock docLoc = doc.LockDocument())
               {
               }
             }

epwt 发表于 2014-10-31 14:32:46

既然是要进行写入操作,将   BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);改成   BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);

sieben 发表于 2014-10-31 15:54:05

epwt 发表于 2014-10-31 14:32 static/image/common/back.gif
既然是要进行写入操作,将   BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.F ...

又没有对块表有写入操作,这个不必

sieben 发表于 2014-10-31 15:57:03

epwt 发表于 2014-10-31 14:30 static/image/common/back.gif
给文档加个锁试试。
在using (Transaction trans = db.TransactionManager.StartTransaction())
       ...

1,这不用试试,这肯定要加锁
2,另外还有个问题很严重,polyline 在提交后又进行写操作

ivde 发表于 2014-11-2 07:17:29

既要显示就需提交事务,事务提交就over了,用一个循环体
while using tr … tr.Commit();
页: [1]
查看完整版本: ModelSpace刷新问题