Старался в заголовке отразить суть проблемы
Autocad 2015
C#
Есть два файла dwg. в 1 содержатся некие эталонные боки: "блок1", "блок2", "блок3", и т.д.
во 2 файл эти блоки копируются и помещаются в нужные места.
все было замечательно, пока небыло повторов
если надо скопировать блоки: "блок1" и "блок2", "блок3" тогда все ок
но если надо повторы: "блок1", "блок2", "блок1" тогда программа находит первый блок, копирует его, а второй раз его же не находит
будут найдены и скопированы: "блок1", "блок2". Повторение "блок1" - будет пропущен
вот фрагмент с поиском:
// Создаём переменную, в которой будем хранить идентификаторы нужных нам определений блоков
ObjectIdCollection blockIds = new ObjectIdCollection();
using (Transaction t = sourceDb.TransactionManager.StartTransaction())
{
// Открываем таблицу блоков
BlockTable bt = (BlockTable)t.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false);
ObjectId btrIdAux;
for (int i = 0; i< 5; i++)
{
if (bt.Has(myArr[i,2])) // myArr - содержит названия блоков, например myArr[0,2] - "блок1", myArr[1,2] - "блок2"
{
btrIdAux = bt[myArr[i, 2]];
// получаем запись таблицы блоков
BlockTableRecord btr = (BlockTableRecord)t.GetObject(btrIdAux, OpenMode.ForWrite);
btr.Name = myArr[i, 1];
blockIds.Add(btrIdAux);
}
}
// Копируем определения блоков в нужную нам базу данных
IdMapping mapping = new IdMapping();
sourceDb.WblockCloneObjects(blockIds, targetDb.BlockTableId, mapping, behaviour, false);
массив myArr
выглядит примерно так
myArr[0,2] - "блок1",
myArr[1,2] - "блок2"
myArr[2,2] - "блок3",
myArr[3,2] - "блок1"
проверка на наличие нужного блока в 12 строчке, и при указанном массиве
myArr[0,2] - "блок1",
myArr[1,2] - "блок2"
myArr[2,2] - "блок3", - будет скопирован,
myArr[3,2] - "блок1" - будет пропущен
никак не могу понять почему if (bt.Has(myArr[i,2])) не видит повторы ?