так как у нас бывают огромные сборки.На сколько большие?
Для работы используется AddIn или внешний exe-файл?
На сколько большие?
Работать будет с помощью внешнего exe.Вот потому и медленно работает рекурсия, и параллельные потоки нельзя запустить, потому как инвентор однопоточный
До AddIn я еще не эволюционировал.Надо всё таки как то эволюционировать. Большие объёмы данных обязывают.
Может обратиться к ComponentDefinition.BOM чтоб как то по оптимальнее выудить данныеВнутренним подсчетом материалов, предусмотренным инвентором пользоваться не планируется. Наша концепция построения спецификации изначально это исключает.
Dim oOccs As ComponentOccurrencesEnumerator
oOccs = oAsmDef.Occurrences.AllReferencedOccurrences(oDoc)
MessageBox.Show(oOccs.Count)
ComponentOccurrence.Joints не могу разобраться, что оно значитЭто точно не то что надо, это привязки
Это точно не то что надо, это привязкиПонял, спасибо, Михаил. Полезно однако бывает иметь английскую версию продукта ))
Лично я это делаю так: сначала считаю элементы, потом произвожу обработку.Каким образом вы их считаете?
В одном случае я использую рекурсивную функцию для получения состава изделия...Не могли бы пояснить, как вы осуществляете это?
... а в другом считаю количество компонентов кодом, который представил в ответе №7. Все зависит от целей.Ответ №7 не подходит для нашей задачи, так как нам надо подсчитать вхождения данного уровня модели, а AllReferencedOccurrences считает на всех уровнях подсборок.
Ну я имею ввиду, что хочу найти какой-то более элегантный и быстрый способ.Может при событии сохранения сборок просто вписывать нужные данные в атрибуты о самой сборке. А потом не шерстить эту сборку, а просто считать уже готовые данные.
Может при событии сохранения сборок просто вписывать нужные данные в атрибуты о самой сборке. А потом не шерстить эту сборку, а просто считать уже готовые данные.Идея интересная, только у нас сборки обычно являются сборочными узлами: то есть на них делается чертеж. Соответственно при оформлении узла из нескольких сборок, программа будет распознавать, что внутрь подсборок лезть не надо, и будет определять их как 1 позицию с общей массой и ссылкой на номер чертежа. А вот для оформления "сборочных чертежей" нужна будет информация по вхождениям в них. Конечно, при построении изделия можно научить программу записывать данные внутрь атрибутов, сборки, как вы и посоветовали, но это может повлечь ошибки. Всегда ведь есть вероятность, что программа не сможет сделать узел необходимой итоговой конфигурации, и придется что-то добавить руками, тогда информация внутри атрибутов станет некорректной.
у и всё таки AddIn в помощь.Храню это вариант как джокер )