acdxxx177 发表于 2015-12-26 20:16:00

怎么样通过块名获得在模型空间下的BlockReference

如果在BlockTable下可以通过BlockTable[块名]和BlockTable.has(块名)来获取块操作
但是在模型空间下是BlockTableRecord类型
在不知道块的objectId,怎么样通过块名来获取块呢,或者不用foreach来获取objectId
如果用foreach的话,感觉对象实体太多的话,会造成速度慢吧,所以除了foreach还有没有其他方法

guohq 发表于 2015-12-26 21:39:00

BlockTableRecord.GetBlockReferenceIds

guohq 发表于 2015-12-26 21:40:00

其实遍历一下也无所谓,花不了多少时间

acdxxx177 发表于 2015-12-27 21:01:00


我按下面这些代码写,一个都找不到啊,何解??

      public void selAll() {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
         //开启事务
            using (Transaction transaction = db.TransactionManager.StartTransaction())
            {
                //打开块表
                BlockTable bt = transaction.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                //打开模型空间块表记录
                BlockTableRecord modelspace = transaction.GetObject(bt, OpenMode.ForRead) as BlockTableRecord;
                ObjectIdCollection objidcoll =modelspace.GetBlockReferenceIds(true, true);
                ed.WriteMessage("\n共有{0}个",objidcoll.Count);
                foreach (ObjectId item in objidcoll)
                {
                  Entity ent = (Entity)transaction.GetObject(item, OpenMode.ForRead);
                  ed.WriteMessage("\n名字有:{0}",ent.BlockName);
                }
            }
      }

guohq 发表于 2015-12-29 11:52:00

ObjectIdCollection objidcoll =modelspace.GetBlockReferenceIds(true, true);模型空间是一个特殊的块,只有一个。你可以换其它的块试一下。

ivde 发表于 2015-12-29 18:39:00

modelspace是不会被blockreference引用的
页: [1]
查看完整版本: 怎么样通过块名获得在模型空间下的BlockReference