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