明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2453|回复: 7

插入块之后为什么不能用增强属性编辑器打开?

[复制链接]
发表于 2010-9-7 21:29:00 | 显示全部楼层 |阅读模式
 大侠们,我在代码中将一个外部DWG图纸的块插入到当前图纸中,但是插入之后再当前图纸中双击块是打开“编辑块定义”这个对话框,如何能让我双击之后打开的是“增强属性编辑器”这个对话框呢?

PS:这个块是定义好属性的,打开外部DWG图纸就可以用 增强属性编辑器 打开

下面是我插入块的代码

public void AddBlockRef(double bx, double by, double bz)
        {
            Autodesk.AutoCAD.ApplicationServices.Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;

            Point3d point = new Point3d(bx, by, bz);

            using (Database db = new Database(false, false))
            {
                using (Transaction trans = doc.TransactionManager.StartTransaction())
                {
                    BlockTable bt = (BlockTable)trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
                    BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    //读取块
                    string blockFile = @"d:\arx\bplead_title.dwg";
                    string blockName = "BPLEAD_TITLE";
                    db.ReadDwgFile(blockFile, System.IO.FileShare.Read, true, null);
                    ObjectId blockId = doc.Database.Insert(blockName, db, false);
                    using (BlockReference br = new BlockReference(point, blockId))
                    {
                        btr.AppendEntity(br);
                        trans.AddNewlyCreatedDBObject(br, true);
                    }
                    trans.Commit();
                }
            }

           
            //return blockId;//返回创建的块的对象Id
        }
发表于 2010-9-7 21:31:00 | 显示全部楼层
块参照的属性集合还是要用代码生成的,不会自动加的
 楼主| 发表于 2010-9-7 21:33:00 | 显示全部楼层
大侠,我看过你好多帖子,灰常有帮助,想不到你在啊,能指点一下吗
发表于 2010-9-7 21:38:00 | 显示全部楼层

这里的AppendAttribToBlock函数

 楼主| 发表于 2010-9-7 21:47:00 | 显示全部楼层
 BlockRefJig jig = new BlockRefJig(blkref, AppendAttribToBlock(blkref, atts));
 674.             jig.SetPromptCounter(0);
 675.             PromptResult res = CadHelper.Editor.Drag(jig);
 676.             if (res.Status == PromptStatus.OK)
 677.             {
 678.                 jig.SetPromptCounter(1);
 679.                 res = CadHelper.Editor.Drag(jig);
 680.                 if (res.Status == PromptStatus.OK)
 681.                 {
 682.                     return id;
 683.                 }
 684.             }
 685.             blkref.Erase();

在这里面调用你说的这个方法的? 看不太明白呀,哪个方法是实现这个的?  详细点说一下吧,嘿嘿,多谢
发表于 2010-9-7 21:54:00 | 显示全部楼层
  1.         public Dictionary<AttributeDefinition, AttributeReference> AppendAttribToBlock(BlockReference blkref, List<string> atts)
  2.         {
  3.             BlockTableRecord blkdef = (BlockTableRecord)m_Transaction.GetObject(blkref.BlockTableRecord, OpenMode.ForRead);
  4.             int i = 0;
  5.             if (blkdef.HasAttributeDefinitions)
  6.             {
  7.                 Dictionary<AttributeDefinition, AttributeReference> attribs = new Dictionary<AttributeDefinition, AttributeReference>();
  8.                 foreach (ObjectId id in blkdef)
  9.                 {
  10.                     DBObject ent = GetObject(id, OpenMode.ForRead);
  11.                     if (ent is AttributeDefinition)
  12.                     {
  13.                         AttributeDefinition attdef = (AttributeDefinition)ent;
  14.                         AttributeReference attref = new AttributeReference();
  15.                         attref.SetAttributeFromBlock(attdef, blkref.BlockTransform);
  16.                         if (i < atts.Count)
  17.                             attref.TextString = atts[i];
  18.                         else
  19.                             attref.TextString = attdef.TextString;
  20.                         i++;
  21.                         blkref.AttributeCollection.AppendAttribute(attref);
  22.                         m_Transaction.AddNewlyCreatedDBObject(attref, true);
  23.                         attribs.Add(attdef, attref);
  24.                     }
  25.                 }
  26.                 return attribs;
  27.             }
  28.             return null;
  29.         }
复制代码
 楼主| 发表于 2010-9-7 21:57:00 | 显示全部楼层
好,我去试试,多谢,有不明白的在请教您!
 楼主| 发表于 2010-9-7 22:09:00 | 显示全部楼层
  1.          public void AppendAttribToBlock(BlockReference blkref, List<string> atts)
  2.          {
  3.              Autodesk.AutoCAD.ApplicationServices.Document doc = Application.DocumentManager.MdiActiveDocument;
  4.              Transaction trans = doc.TransactionManager.StartTransaction();
  5.              BlockTableRecord blkdef = (BlockTableRecord)trans.GetObject(blkref.BlockTableRecord, OpenMode.ForRead);
  6.              int i = 0;
  7.              if (blkdef.HasAttributeDefinitions)
  8.              {
  9.                  Dictionary<AttributeDefinition, AttributeReference> attribs = new Dictionary<AttributeDefinition, AttributeReference>();
  10.                  foreach (ObjectId id in blkdef)
  11.                  {
  12.                      DBObject ent = trans.GetObject(id, OpenMode.ForRead,false);
  13.                      if (ent is AttributeDefinition)
  14.                      {
  15.                          AttributeDefinition attdef = (AttributeDefinition)ent;
  16.                          AttributeReference attref = new AttributeReference();
  17.                          attref.SetAttributeFromBlock(attdef, blkref.BlockTransform);
  18.                          if (i < atts.Count)
  19.                              attref.TextString = atts[i];
  20.                          else
  21.                              attref.TextString = attdef.TextString;
  22.                          i++;
  23.                          blkref.AttributeCollection.AppendAttribute(attref);
  24.                          trans.AddNewlyCreatedDBObject(attref, true);
  25.                          attribs.Add(attdef, attref);
  26.                      }
  27.                  }
  28.              }
  29.          }
复制代码
大侠,这是我修改的类,但是部署了报错~

致命错误:Unhandled Access Violation Reading 0x0004 Exception at 645ad340h

能帮忙看看吗,哪出问题了~

file:///C:/Users/Nemo/AppData/Local/Temp/moz-screenshot.png

file:///C:/Users/Nemo/AppData/Local/Temp/moz-screenshot-1.png

file:///C:/Users/Nemo/AppData/Local/Temp/moz-screenshot-2.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 00:37 , Processed in 0.173314 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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