Im пытается получить все блоки и динамические блоки из моего чертежа и фактического количества. Но у меня есть странная проблема, когда граф каждого блока на 1 больше, чем ожидалось. Чтобы получить счетчик нормальных BlockReferences, считающих Duplicates. Но для динамических блоков im получается фактический счет с 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);
}
}
}
, что им пытаются для динамических блоков, где им получать счетчик с варом 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;
}
Есть ли способ, чтобы получить все блоки и там граф ??? Я перед тем, как сдаться, я пробовал все в течение 3 дней. Может быть, кто-то может мне помочь. Спасибо