C#AutoCAD Get块和带计数的动态块

C#AutoCAD Get块和带计数的动态块,c#,autocad,C#,Autocad,我试图从我的画和实际计数中得到所有的块和动态块。但是我有一个奇怪的问题,每个区块的计数比预期的多1个。要获得正常块引用的计数,我需要计算重复项。但是对于动态块,我得到了实际的计数 var blockCount=anonymousBtr.GetBlockReferenceId(true,true).Count;   我为普通区块所做的尝试: 有没有办法得到所有的积木和计数??在我放弃之前,我已经试了三天了。。。。也许有人能帮我。 谢谢这里有一种使用Linq的方法 public void

我试图从我的画和实际计数中得到所有的块和动态块。但是我有一个奇怪的问题,每个区块的计数比预期的多1个。要获得正常块引用的计数,我需要计算重复项。但是对于动态块,我得到了实际的计数 var blockCount=anonymousBtr.GetBlockReferenceId(true,true).Count;   我为普通区块所做的尝试:

有没有办法得到所有的积木和计数??在我放弃之前,我已经试了三天了。。。。也许有人能帮我。
谢谢

这里有一种使用Linq的方法

    public void ListBlocks()
    {
        var doc = Application.DocumentManager.MdiActiveDocument;
        var db = doc.Database;
        var ed = doc.Editor;

        using (var tr = db.TransactionManager.StartOpenCloseTransaction())
        {
            var modelSpace = (BlockTableRecord)tr.GetObject(
                SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);

            var brclass = RXObject.GetClass(typeof(BlockReference));

            var blocks = modelSpace
                .Cast<ObjectId>()
                .Where(id => id.ObjectClass == brclass)
                .Select(id => (BlockReference)tr.GetObject(id, OpenMode.ForRead))
                .GroupBy(br => ((BlockTableRecord)tr.GetObject(
                    br.DynamicBlockTableRecord, OpenMode.ForRead)).Name);

            foreach (var group in blocks)
            {
                ed.WriteMessage($"\n{group.Key}: {group.Count()}");
            }
            tr.Commit();
        }
    }
public void ListBlocks()
{
var doc=Application.DocumentManager.MdiActiveDocument;
var db=文档数据库;
var ed=文档编辑器;
使用(var tr=db.TransactionManager.StartOpenCloseTransaction())
{
var modelSpace=(BlockTableRecord)tr.GetObject(
SymbolUtilityServices.GetBlockModelSpaceId(db)、OpenMode.ForRead);
var brclass=RXObject.GetClass(typeof(BlockReference));
var blocks=modelSpace
.Cast()
.Where(id=>id.ObjectClass==brclass)
.Select(id=>(BlockReference)tr.GetObject(id,OpenMode.ForRead))
.GroupBy(br=>((BlockTableRecord)tr.GetObject(
br.DynamicBlockTableRecord,OpenMode.ForRead)).Name);
foreach(块中的var组)
{
ed.WriteMessage($“\n{group.Key}:{group.Count()}”);
}
tr.Commit();
}
}

这里有一种使用Linq的方法

    public void ListBlocks()
    {
        var doc = Application.DocumentManager.MdiActiveDocument;
        var db = doc.Database;
        var ed = doc.Editor;

        using (var tr = db.TransactionManager.StartOpenCloseTransaction())
        {
            var modelSpace = (BlockTableRecord)tr.GetObject(
                SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);

            var brclass = RXObject.GetClass(typeof(BlockReference));

            var blocks = modelSpace
                .Cast<ObjectId>()
                .Where(id => id.ObjectClass == brclass)
                .Select(id => (BlockReference)tr.GetObject(id, OpenMode.ForRead))
                .GroupBy(br => ((BlockTableRecord)tr.GetObject(
                    br.DynamicBlockTableRecord, OpenMode.ForRead)).Name);

            foreach (var group in blocks)
            {
                ed.WriteMessage($"\n{group.Key}: {group.Count()}");
            }
            tr.Commit();
        }
    }
public void ListBlocks()
{
var doc=Application.DocumentManager.MdiActiveDocument;
var db=文档数据库;
var ed=文档编辑器;
使用(var tr=db.TransactionManager.StartOpenCloseTransaction())
{
var modelSpace=(BlockTableRecord)tr.GetObject(
SymbolUtilityServices.GetBlockModelSpaceId(db)、OpenMode.ForRead);
var brclass=RXObject.GetClass(typeof(BlockReference));
var blocks=modelSpace
.Cast()
.Where(id=>id.ObjectClass==brclass)
.Select(id=>(BlockReference)tr.GetObject(id,OpenMode.ForRead))
.GroupBy(br=>((BlockTableRecord)tr.GetObject(
br.DynamicBlockTableRecord,OpenMode.ForRead)).Name);
foreach(块中的var组)
{
ed.WriteMessage($“\n{group.Key}:{group.Count()}”);
}
tr.Commit();
}
}
    public void ListBlocks()
    {
        var doc = Application.DocumentManager.MdiActiveDocument;
        var db = doc.Database;
        var ed = doc.Editor;

        using (var tr = db.TransactionManager.StartOpenCloseTransaction())
        {
            var modelSpace = (BlockTableRecord)tr.GetObject(
                SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);

            var brclass = RXObject.GetClass(typeof(BlockReference));

            var blocks = modelSpace
                .Cast<ObjectId>()
                .Where(id => id.ObjectClass == brclass)
                .Select(id => (BlockReference)tr.GetObject(id, OpenMode.ForRead))
                .GroupBy(br => ((BlockTableRecord)tr.GetObject(
                    br.DynamicBlockTableRecord, OpenMode.ForRead)).Name);

            foreach (var group in blocks)
            {
                ed.WriteMessage($"\n{group.Key}: {group.Count()}");
            }
            tr.Commit();
        }
    }