明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1557|回复: 9

ModelSpace刷新问题

[复制链接]
发表于 2014-10-30 10:36 | 显示全部楼层 |阅读模式
请教各位一个问题:我想通过窗体的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[BlockTableRecord.ModelSpace], 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 | 显示全部楼层
好像是
        Editor ed= dm.MdiActiveDocument.Editor
        ed.UpdateScreen()
 楼主| 发表于 2014-10-30 12:27 | 显示全部楼层
偶尔做做怪 发表于 2014-10-30 11:47
好像是
        Editor ed= dm.MdiActiveDocument.Editor
        ed.UpdateScreen()

还是不行  cad崩溃,显示eNotOpenFileWrite
 楼主| 发表于 2014-10-30 12:56 | 显示全部楼层
是不是和模态窗口有关啊?困扰好几天了
发表于 2014-10-30 13:18 | 显示全部楼层
你的问题和刷新没有关系,代码错了
发表于 2014-10-31 14:30 | 显示全部楼层
给文档加个锁试试。
在  using (Transaction trans = db.TransactionManager.StartTransaction())
            {
             //加入这段代码 using (DocumentLock docLoc = doc.LockDocument())
                 {
                 }
             }
发表于 2014-10-31 14:32 | 显示全部楼层
既然是要进行写入操作,将     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);改成     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
发表于 2014-10-31 15:54 | 显示全部楼层
epwt 发表于 2014-10-31 14:32
既然是要进行写入操作,将     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.F ...

又没有对块表有写入操作,这个不必
发表于 2014-10-31 15:57 | 显示全部楼层
epwt 发表于 2014-10-31 14:30
给文档加个锁试试。
在  using (Transaction trans = db.TransactionManager.StartTransaction())
       ...

1,这不用试试,这肯定要加锁
2,另外还有个问题很严重,polyline 在提交后又进行写操作
发表于 2014-11-2 07:17 来自手机 | 显示全部楼层
既要显示就需提交事务,事务提交就over了,用一个循环体
while using tr … tr.Commit();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-19 09:37 , Processed in 0.460861 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表