Перебор вхождений.

Автор Тема: Перебор вхождений.  (Прочитано 6943 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xzenter

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
    • xzenter.com
  • Skype: xzenter
Re: Перебор вхождений.
« Ответ #15 : 24-05-2019, 13:47:54 »
Лично я это делаю так: сначала считаю элементы, потом произвожу обработку.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Перебор вхождений.
« Ответ #16 : 24-05-2019, 13:49:25 »
Лично я это делаю так: сначала считаю элементы, потом произвожу обработку.
Каким образом вы их считаете?
В программировании я новичок...но ненадолго! ;)

Оффлайн xzenter

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
    • xzenter.com
  • Skype: xzenter
Re: Перебор вхождений.
« Ответ #17 : 24-05-2019, 14:08:38 »
В одном случае я использую рекурсивную функцию для получения состава изделия, а в другом считаю количество компонентов кодом, который представил в ответе №7. Все зависит от целей.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Перебор вхождений.
« Ответ #18 : 24-05-2019, 14:13:41 »
В одном случае я использую рекурсивную функцию для получения состава изделия...
Не могли бы пояснить, как вы осуществляете это?
... а в другом считаю количество компонентов кодом, который представил в ответе №7. Все зависит от целей.
Ответ №7 не подходит для нашей задачи, так как нам надо подсчитать вхождения данного уровня модели, а AllReferencedOccurrences считает на всех уровнях подсборок.
В программировании я новичок...но ненадолго! ;)

Оффлайн xzenter

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
    • xzenter.com
  • Skype: xzenter
Re: Перебор вхождений.
« Ответ #19 : 24-05-2019, 14:36:11 »
Если не надо заходить в подсборки, то данное правило (iLogic) поможет перебрать все компоненты на данном уровне. Если нужно зайти в подсборки, то нужно использовать рекурсию. Подсчитать элементы можно, например, просуммировав однотипные элементы.

Код - vb.net [Выбрать]
  1. Dim oAsmDoc As AssemblyDocument
  2. oAsmDoc = ThisApplication.ActiveDocument
  3.  
  4. Dim Occurrences As ComponentOccurrences
  5. Occurrences=oAsmDoc.ComponentDefinition.Occurrences
  6.  
  7. Dim oOcc As ComponentOccurrence
  8. For Each oOcc In Occurrences
  9. MessageBox.Show(oOcc.ReferencedDocumentDescriptor.ReferencedFileDescriptor.FullFileName)
  10. Next

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Перебор вхождений.
« Ответ #20 : 24-05-2019, 15:14:32 »
Спасибо за ваш ответ. Но смотрите, например у меня 100 вхождение в сборке, все уникальные (то есть разные детали). Я перебрал уже 99, проверил, куда-то сохранил. Дошел до 100. Мне ведь необходимо 99 раз сравнить путь к файлу (ссылку на документ или имя - вариантов много), чтобы понять, что 100-ая деталь уникальна. Ну то есть для 100 деталей это не то чтобы большая проблема, а если их будет десятки тысяч? Ну я имею ввиду, что хочу найти какой-то более элегантный и быстрый способ. Мне почему-то казалось, что внутри программы уже должны была быть информация, сколько раз элемент представлен в коллекции Occurrences текущего уровня модели, чтобы не считать его количество, а сразу взять итоговое число. 
В программировании я новичок...но ненадолго! ;)

Оффлайн xzenter

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
    • xzenter.com
  • Skype: xzenter
Re: Перебор вхождений.
« Ответ #21 : 24-05-2019, 15:38:57 »
Возможно, эту информацию можно вытянуть из представления BOM сборки. В свое время от этого варианта отказался, так как работаю с разными уровнями детализации, а в этом случае в BOM отображается некорректное количество.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Перебор вхождений.
« Ответ #22 : 24-05-2019, 16:21:48 »
Ну я имею ввиду, что хочу найти какой-то более элегантный и быстрый способ.
Может при событии сохранения сборок просто вписывать нужные данные в атрибуты о самой сборке. А потом не шерстить эту сборку, а просто считать уже готовые данные.
Ну и всё таки AddIn в помощь

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Перебор вхождений.
« Ответ #23 : 24-05-2019, 16:37:03 »
Может при событии сохранения сборок просто вписывать нужные данные в атрибуты о самой сборке. А потом не шерстить эту сборку, а просто считать уже готовые данные.
Идея интересная, только у нас сборки обычно являются сборочными узлами: то есть на них делается чертеж. Соответственно при оформлении узла из нескольких сборок, программа будет распознавать, что внутрь подсборок лезть не надо, и будет определять их как 1 позицию с общей массой и ссылкой на номер чертежа. А вот для оформления "сборочных чертежей" нужна будет информация по вхождениям в них. Конечно, при построении изделия можно научить программу записывать данные внутрь атрибутов, сборки, как вы и посоветовали, но это может повлечь ошибки. Всегда ведь есть вероятность, что программа не сможет сделать узел необходимой итоговой конфигурации, и придется что-то добавить руками, тогда информация внутри атрибутов станет некорректной.

у и всё таки AddIn в помощь.
Храню это вариант как джокер )
В программировании я новичок...но ненадолго! ;)