明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1999|回复: 7

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

[复制链接]
发表于 2011-6-10 17:44:43 | 显示全部楼层 |阅读模式
本帖最后由 Liszt 于 2011-6-10 17:44 编辑

为什么向未激活的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. }


截图如下:



在Drawing2.dwg中已经加入了直线,但是无法显示..只有保存Drawing2.dwg,关闭后再次打开才看得到。

如何能够在加入实体之后立刻就能看到?(注:加入实体(如直线)时Drawing2.dwg已打开但是未激活)

        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-6-10 17:49:25 | 显示全部楼层
添加后没有使用刷新的方法,Editor应该有相关的方法。
 楼主| 发表于 2011-6-10 20:16:24 | 显示全部楼层
回复 hmxmylove 的帖子

用“regen”也不行
发表于 2011-6-14 10:53:28 | 显示全部楼层
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没有得到解决。
 楼主| 发表于 2011-6-14 14:14:26 | 显示全部楼层
本帖最后由 Liszt 于 2011-6-14 14:14 编辑

回复 hmxmylove 的帖子

命令执行完了也不能显示,实体肯定是加入数据库了,但是没有显示,除非先保存dwg再打开这个dwg才可以看到。不知道是API本身的bug,还是没有调用必要的方法进行刷新,用CAD自带的regen命令也不行...
 楼主| 发表于 2011-6-14 15:44:21 | 显示全部楼层
好吧,没人知道么?
自己找到了:
只加了一句话
Autodesk.AuoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase = Db;

放在

Database Db = doc.Database;

后面
发表于 2012-2-8 14:54:41 | 显示全部楼层
hmxmylove 发表于 2011-6-14 10:53
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没 ...

郁闷了一下午,这个问题终于找到了,图形的生成或者变化在程序中如果包含在USING事务处理的过程中,则只有当END using 的时候,程序对图形所作的所有生成或者变化的结果才在屏幕上显示。
发表于 2012-2-8 14:55:32 | 显示全部楼层
本帖最后由 浮云丶暖 于 2012-2-8 14:56 编辑
hmxmylove 发表于 2011-6-14 10:53
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没 ...

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

本版积分规则

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

GMT+8, 2024-11-25 19:31 , Processed in 0.173648 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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