Liszt 发表于 2011-6-10 17:44:43

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

本帖最后由 Liszt 于 2011-6-10 17:44 编辑

为什么向未激活的dwg文档中 添加实体,可以添加成功,但是看不到它的显示?

代码如下:




public static void Test4()
{
    //新建dwg文档
    string sLocalRoot = Application.GetSystemVariable("LOCALROOTPREFIX") as string;
    string sTemplatePath = sLocalRoot + "Template\\acad.dwt";

    // Create a new drawing to copy the objects to
    DocumentCollection acDocMgr = App.DocumentManager;
    acNewDoc = acDocMgr.Add(sTemplatePath);
    Database acDbNewDoc = acNewDoc.Database;

    //向未激活的文档中添加实体
    foreach (Document doc in acDocMgr)
    {
      if (!doc.IsActive)//未激活
      {
            Database Db = doc.Database;
            //Lock the document
            using (DocumentLock docLock = doc.LockDocument())
            {
                // Start a transaction
                using (Transaction acTrans = Db.TransactionManager.StartTransaction())
                {
                  BlockTable acBlkTbl;
                  BlockTableRecord acBlkTblRec;
                  // Open Model space for write
                  acBlkTbl = acTrans.GetObject(Db.BlockTableId,
                                                 OpenMode.ForRead) as BlockTable;
                  acBlkTblRec = acTrans.GetObject(acBlkTbl,
                                                    OpenMode.ForWrite) as BlockTableRecord;
                  Point3d ptStart, ptEnd;
                  ptStart = new Point3d(0,0,0);
                  ptEnd = new Point3d(100, 100, 100);
                  // Define the new line
                  Line acLine = new Line(ptStart, ptEnd);
                  // Add the line to the drawing
                  acBlkTblRec.AppendEntity(acLine);
                  acTrans.AddNewlyCreatedDBObject(acLine, true);
                  // Commit the changes and dispose of the transaction
                  acTrans.Commit();

                }
            }
      }
    }
}


截图如下:



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

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

      

hmxmylove 发表于 2011-6-10 17:49:25

添加后没有使用刷新的方法,Editor应该有相关的方法。

Liszt 发表于 2011-6-10 20:16:24

回复 hmxmylove 的帖子

用“regen”也不行

hmxmylove 发表于 2011-6-14 10:53:28

另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没有得到解决。

Liszt 发表于 2011-6-14 14:14:26

本帖最后由 Liszt 于 2011-6-14 14:14 编辑

回复 hmxmylove 的帖子

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

Liszt 发表于 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 static/image/common/back.gif
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没 ...

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

浮云丶暖 发表于 2012-2-8 14:55:32

本帖最后由 浮云丶暖 于 2012-2-8 14:56 编辑

hmxmylove 发表于 2011-6-14 10:53 static/image/common/back.gif
另外,程序还在进行过程中,图形的变化不会显示,除非是非模态窗体绘制的图形,这些问题我也遇到过,至今没 ...
页: [1]
查看完整版本: 【多文档】向未激活的dwg文档中添加实体,为什么看不到实体的显示?