Мой метод отбора нужных вставок блока отрабатывает лишь на их части, почему так происходит?Почему бы не запустить код под отладчиком и не посмотреть сколько вставок блоков находит у вас код? GetBlockReferenceIds(true, true) не находит вложенные блоки. Это возможная причина.
Это я пробовал, полное число блоков с нужным именем - 77, с нужной установленной видимостью - 51. Фишка в том, что при фильтрации (удалении блоков с определенной видимостью-отображением) не все они удаляются из коллекции, а почему так происходит (что на это влияет) я никак не пойму. Вложенных блоков у меня нет - только сама вставка блока, получаемая либо копированием ранее вставленного, либо перетаскиванием в окно чертежа. Такие дела.Мой метод отбора нужных вставок блока отрабатывает лишь на их части, почему так происходит?Почему бы не запустить код под отладчиком и не посмотреть сколько вставок блоков находит у вас код? GetBlockReferenceIds(true, true) не находит вложенные блоки. Это возможная причина.
tr.Commit()Полностью с Вами согласен в случае создания объектов/модификации, но в моем случае - простой отбор, это может исказить результат?
Полностью с Вами согласен в случае создания объектов/модификации, но в моем случае - простой отбор, это может исказить результат?Да.
Что можно еще попробовать?Запустить под отладчиком и проверить.
У части блоков масштаб по X отличен от 1.0 - обычно это приводит к тому, что блок уже не рассматривается как динамический. Вполне возможно, что причина в этом.Я думал об этом - в некоторых стоит (-1), но некорректное срабатывание есть и на тех где обычная 1. На приложенном мной скрине как раз такое - scale factors там (1,1,1) но не работает.
Что показала отладка?В том и фишка что ничего: есть 20 вставок блока всего, должно отфильтроваться 9 вставок. По итогу из них 5 отфильтрованы корректно, 4 не попали в фильтр. Они переключены в соответствующее visibility(для всех 9 одно и то же), но в DynamicBlockReferenceProperty приходит другое значение. Почему - я никак не врубаюсь.
В чертеже 77 вставок блока "ManholeRev1". Про какие 20 ты говоришь?Что показала отладка?В том и фишка что ничего: есть 20 вставок блока всего, должно отфильтроваться 9 вставок. По итогу из них 5 отфильтрованы корректно, 4 не попали в фильтр. Они переключены в соответствующее visibility(для всех 9 одно и то же), но в DynamicBlockReferenceProperty приходит другое значение. Почему - я никак не врубаюсь.
Про какие 20 ты говоришь?Мой тестовый пример - я сократил количество вставок чтобы не ходить по всем 77 отладчиком.
Это я пробовал, полное число блоков с нужным именем - 77, с нужной установленной видимостью - 51.На полном файле тестировал сначала
Явно какая-то проблема с блоком, но какая именно - сказать не могу.Как так может быть технически? Если я правильно понимаю принцип работы блоков, то есть описание блока, которое для всех вставок одно и тоже. Как оно может для части вставок работать, а для другой нет? Ведь другого описания блока не существует.
То есть ошибка была в отсутствии break и вместо удаления из коллекции нужно было наоборот добавлять в новую? Верно?Break - не влияло, но должно ускорить обработку. А вот с коллекциями хитрее. Похоже, что удаление из коллекции ids одновременно удаляло и из dynBlockRefs. И соответственно цикл по dynBlockRefs работал неправильно.
Однако вне зависимости от того какая видимость установлена, geometry extents всегда указаны по большему объекту.Попробуй метод BlockReference.GeometryExtentsBestFit(). Мы это здесь обсуждали: https://adn-cis.org/forum/index.php?topic=10562.0