0
我试图从我的绘图和实际计数获取所有块和动态块。但即时通讯有一个奇怪的问题,其中每个块的计数比预期多1。即时计数重复的正常BlockReferences的计数。但是对于动态块即时获取实际的计数 var blockCount = anonymousBtr.GetBlockReferenceIds(true,true).Count; 什么即时试图为正常块段: C#AutoCAD获取块和动态块计数
public static void GetShelfBlock() {
var acDoc = Application.DocumentManager.MdiActiveDocument;
var acDb = acDoc.Database;
var dataCollection = new List<DataModel>();
using (var tr = acDb.TransactionManager.StartTransaction()) {
try {
var entClass = RXObject.GetClass(typeof(Entity));
var modelSpaceId = SymbolUtilityServices.GetBlockModelSpaceId(acDb);
var modelSpace = (BlockTableRecord)tr.GetObject(modelSpaceId, OpenMode.ForRead);
foreach (var id in modelSpace) {
if (!id.ObjectClass.IsDerivedFrom(entClass)) {
continue;
}
var ent = (Entity)tr.GetObject(id, OpenMode.ForRead);
if (!ent.GetType().ToString().Contains(typeof(BlockReference).Name)) {
continue;
}
var reference = ent as BlockReference;
if (reference == null) {
continue;
}
var blockReference = reference;
if (CheckPattern(blockReference.Name)) {
dataCollection.Add(PrepareShelfObject(blockReference));
}
}
tr.Commit();
tr.Dispose();
dataCollection.AddRange(GetDynamicBlocks(SearchPatterns));
if (dataCollection.Count > 0) {
Serialize(dataCollection, DataType.Regale);
}
}
catch (Exception ex) {
acDoc.Editor.WriteMessage(ex.Message);
}
}
}
什么即时试图为那里即时得到使用var blockCount计数动态块= anonymousBtr.GetBlockReferenceIds(true, true).Count;
public static List<DataModel> GetDynamicBlocks() {
var db = Application.DocumentManager.MdiActiveDocument.Database;
var dynamicBlockList = new List<DataModel>();
var tempList = new List<object>();
using (var trans = db.TransactionManager.StartTransaction()) {
var bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
foreach (var btrId in bt) {
var btr = (BlockTableRecord)trans.GetObject(btrId, OpenMode.ForRead);
if (!btr.IsDynamicBlock) {
continue;
}
var anonymousIds = btr.GetAnonymousBlockIds();
var dynBlockRefs = new ObjectIdCollection();
foreach (ObjectId anonymousBtrId in anonymousIds) {
var anonymousBtr = (BlockTableRecord)trans.GetObject(anonymousBtrId, OpenMode.ForRead);
var blockRefIds = anonymousBtr.GetBlockReferenceIds(true, true);
foreach (ObjectId id in blockRefIds) {
dynBlockRefs.Add(id);
}
}
if (searchPattern.Any(btr.Name.StartsWith)) {
dynamicBlockList.Add(PrepareDynObject(btr));
}
}
trans.Commit();
trans.Dispose();
}
return dynamicBlockList;
}
有没有办法让所有的块并有计数?在放弃之前,我现在试了三天......也许有人可以帮助我。 谢谢