乐筑天下

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

【多文档】向未激活的dwg文档中添加实体,为什么看不到实体的显示?

[复制链接]

1

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2011-6-10 17:44:00 | 显示全部楼层 |阅读模式
为什么向未激活的dwg文档中 添加实体,可以添加成功,但是看不到它的显示?
代码如下:
  1. [CommandMethod("t4")]
  2. public static void Test4()
  3. {
  4.     //新建dwg文档
  5.     string sLocalRoot = Application.GetSystemVariable("LOCALROOTPREFIX") as string;
  6.     string sTemplatePath = sLocalRoot + "Template\\acad.dwt";
  7.     // Create a new drawing to copy the objects to
  8.     DocumentCollection acDocMgr = App.DocumentManager;
  9.     acNewDoc = acDocMgr.Add(sTemplatePath);
  10.     Database acDbNewDoc = acNewDoc.Database;
  11.     //向未激活的文档中添加实体
  12.     foreach (Document doc in acDocMgr)
  13.     {
  14.         if (!doc.IsActive)//未激活
  15.         {
  16.             Database Db = doc.Database;
  17.             //Lock the document
  18.             using (DocumentLock docLock = doc.LockDocument())
  19.             {
  20.                 // Start a transaction
  21.                 using (Transaction acTrans = Db.TransactionManager.StartTransaction())
  22.                 {
  23.                     BlockTable acBlkTbl;
  24.                     BlockTableRecord acBlkTblRec;
  25.                     // Open Model space for write
  26.                     acBlkTbl = acTrans.GetObject(Db.BlockTableId,
  27.                                                  OpenMode.ForRead) as BlockTable;
  28.                     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  29.                                                     OpenMode.ForWrite) as BlockTableRecord;
  30.                     Point3d ptStart, ptEnd;
  31.                     ptStart = new Point3d(0,0,0);
  32.                     ptEnd = new Point3d(100, 100, 100);
  33.                     // Define the new line
  34.                     Line acLine = new Line(ptStart, ptEnd);
  35.                     // Add the line to the drawing
  36.                     acBlkTblRec.AppendEntity(acLine);
  37.                     acTrans.AddNewlyCreatedDBObject(acLine, true);
  38.                     // Commit the changes and dispose of the transaction
  39.                     acTrans.Commit();
  40.                 }
  41.             }
  42.         }
  43.     }
  44. }

截图如下:

1miq5l1bsv1.png

1miq5l1bsv1.png


在Drawing2.dwg中已经加入了直线,但是无法显示..只有保存Drawing2.dwg,关闭后再次打开才看得到。
如何能够在加入实体之后立刻就能看到?(注:加入实体(如直线)时Drawing2.dwg已打开但是未激活)
        
回复

使用道具 举报

3

主题

20

帖子

4

银币

初来乍到

Rank: 1

铜币
32
发表于 2011-6-10 17:49:00 | 显示全部楼层
添加后没有使用刷新的方法,Editor应该有相关的方法。
回复

使用道具 举报

1

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2011-6-10 20:16:00 | 显示全部楼层
回复
用“regen”也不行
回复

使用道具 举报

3

主题

20

帖子

4

银币

初来乍到

Rank: 1

铜币
32
发表于 2011-6-14 10:53:00 | 显示全部楼层
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没有得到解决。
回复

使用道具 举报

1

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2011-6-14 14:14:00 | 显示全部楼层

回复
命令执行完了也不能显示,实体肯定是加入数据库了,但是没有显示,除非先保存dwg再打开这个dwg才可以看到。不知道是API本身的bug,还是没有调用必要的方法进行刷新,用CAD自带的regen命令也不行...
回复

使用道具 举报

1

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2011-6-14 15:44:00 | 显示全部楼层
好吧,没人知道么?
自己找到了:
只加了一句话
Autodesk.AuoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase = Db;
放在
Database Db = doc.Database;
后面
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2012-2-8 14:54:00 | 显示全部楼层

郁闷了一下午,这个问题终于找到了,图形的生成或者变化在程序中如果包含在USING事务处理的过程中,则只有当END using 的时候,程序对图形所作的所有生成或者变化的结果才在屏幕上显示。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 21:13 , Processed in 0.538265 second(s), 69 queries .

© 2020-2025 乐筑天下

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