乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 184|回复: 9

ModelSpace刷新问题

[复制链接]

13

主题

34

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2014-10-30 10:36:00 | 显示全部楼层 |阅读模式
请教各位一个问题:我想通过窗体的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..ApplicationServices.Application.UpdateScreen();
            }
        }
回复

使用道具 举报

8

主题

34

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2014-10-30 11:47:00 | 显示全部楼层
好像是
        Editor ed= dm.MdiActiveDocument.Editor
        ed.UpdateScreen()
回复

使用道具 举报

13

主题

34

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2014-10-30 12:27:00 | 显示全部楼层

还是不行  cad崩溃,显示eNotOpenFileWrite
回复

使用道具 举报

13

主题

34

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2014-10-30 12:56:00 | 显示全部楼层
是不是和模态窗口有关啊?困扰好几天了
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-10-30 13:18:00 | 显示全部楼层
你的问题和刷新没有关系,代码错了
回复

使用道具 举报

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2014-10-31 14:30:00 | 显示全部楼层
给文档加个锁试试。
在  using (Transaction trans = db.TransactionManager.StartTransaction())
            {
             //加入这段代码 using (DocumentLock docLoc = doc.LockDocument())
                 {
                 }
             }
回复

使用道具 举报

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2014-10-31 14:32:00 | 显示全部楼层
既然是要进行写入操作,将     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);改成     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-10-31 15:54:00 | 显示全部楼层

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

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2014-10-31 15:57:00 | 显示全部楼层

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

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2014-11-2 07:17:00 | 显示全部楼层
既要显示就需提交事务,事务提交就over了,用一个循环体
while using tr … tr.Commit();
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-28 23:05 , Processed in 2.658330 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表