Загрузка данных


Порядок работы:

Пользователь открывает главную сборку SOLIDWORKS.

В главной сборке пользователь выбирает управляющий размер. Например, этот размер сейчас равен:

text

4400 mm
Не снимая выделения, с зажатым Ctrl пользователь выбирает в дереве именно ту подсборку, длину которой необходимо изменить.
То есть перед запуском макроса выделены два объекта:

text

Размер = 4400 mm
+
Нужная подсборка
Пользователь запускает макрос.

Макрос проверяет, что активный документ является сборкой, и считывает выделенные объекты.

Из выбранного размера он получает:

text

L = 4400 mm
Из второго выделенного объекта получает конкретный экземпляр подсборки, который нужно изменить.

Из полученной длины макрос формирует имя конфигурации:
text

L_4400
Если размер будет 3500 мм:

text

L_3500
Если 1250 мм:

text

L_1250
Макрос получает файл выбранной подсборки .SLDASM.
При этом обрабатывается именно выбранная пользователем подсборка. Остальные подсборки верхней сборки не должны переключаться на новую конфигурацию.

В выбранной подсборке макрос ищет конфигурацию:
text

L_4400
Если такой конфигурации ещё нет — создаёт её.

Если она уже существует — новую конфигурацию с таким же именем не создаёт, а использует существующую.

Макрос активирует в подсборке:
text

L_4400
В подсборке макрос находит управляющий размер:
text

D1@LENGHT
Макрос устанавливает этому размеру:
text

4400 mm
То есть результат внутри подсборки должен быть:

text

Configuration: L_4400
D1@LENGHT:     4400 mm
Очень важно: изменение должно относиться только к нужной конфигурации.
Например, если в этом же файле существуют:

text

L_1000
L_3333
L_4400
после работы макроса должно остаться:

text

L_1000 -> D1@LENGHT = 1000
L_3333 -> D1@LENGHT = 3333
L_4400 -> D1@LENGHT = 4400
Макрос не должен превращать все существующие конфигурации в 4400.

После изменения размера макрос перестраивает подсборку.

Макрос проверяет, что фактический D1@LENGHT в L_4400 действительно стал 4400 мм.

Макрос сохраняет файл подсборки.

Далее макрос возвращается к главной сборке и говорит именно выбранному экземпляру подсборки использовать:

text

L_4400
То есть:

text

SelectedSubassembly.ReferencedConfiguration = L_4400
Если в главной сборке есть другие экземпляры этой же подсборки, например:

text

Подсборка-1 -> L_1000
Подсборка-2 -> L_3333
Подсборка-3 -> L_4400
и пользователь выбрал только Подсборка-3, первые две должны остаться без изменений.

Макрос перестраивает главную сборку и сохраняет её.

После этого начинается обработка деталей внутри выбранной подсборки.

Макрос получает непосредственные компоненты:

text

Деталь 1
Деталь 2
Деталь 3
...
Названия деталей значения не имеют.

Макрос не должен быть привязан к названиям вроде «Профиль», «Прижим» или «Крышка».

Для первой детали макрос получает её файл .SLDPRT.

В детали макрос ищет конфигурацию с тем же именем:

text

L_4400
Если её нет — создаёт.

Если она уже существует — использует существующую.

Макрос активирует:
text

L_4400
именно в этой детали.

В детали макрос находит:
text

D1@LENGHT
Макрос устанавливает:
text

D1@LENGHT = 4400 mm
То есть новая конфигурация первой детали становится:

text

Configuration: L_4400
D1@LENGHT:     4400 mm
Макрос перестраивает эту деталь.
Все операции детали, которые зависят от эскиза LENGHT, должны пересчитаться уже от новой оси длиной 4400 мм.

Например:

text

D1@LENGHT = 4400
        |
        v
перестроение эскиза
        |
        v
перестроение зависимых операций
        |
        v
готовая деталь длиной 4400
Макрос проверяет фактическое значение D1@LENGHT.
Если всё правильно:

text

Expected = 4400
Actual   = 4400
деталь считается успешно обработанной.

Макрос сохраняет файл детали .SLDPRT.

Затем макрос переключает экземпляр этой детали внутри подсборки на:

text

L_4400
То есть теперь подсборка использует новую конфигурацию детали.

После этого макрос переходит ко второй детали и выполняет точно те же действия:
text

найти/создать L_4400
        ->
активировать L_4400
        ->
найти D1@LENGHT
        ->
установить 4400
        ->
перестроить
        ->
проверить
        ->
сохранить
        ->
назначить компоненту L_4400
То же самое выполняется для третьей, четвёртой и всех остальных непосредственных деталей подсборки.

Если внутри выбранной подсборки встречается ещё одна вложенная подсборка, текущая версия её не обрабатывает. Она пропускается с записью в отчёт.

После обработки всех деталей выбранная подсборка должна выглядеть примерно так:

text

SUB -> L_4400
|
+-- Profile -> L_4400
|      D1@LENGHT = 4400
|
+-- Clamp -> L_4400
|      D1@LENGHT = 4400
|
+-- Cover -> L_4400
       D1@LENGHT = 4400
Теперь макрос ещё раз активирует в подсборке:
text

L_4400
и выполняет её перестроение.

Это нужно потому, что внутри неё уже изменились конфигурации деталей.

Макрос сохраняет подсборку со всеми назначенными конфигурациями деталей.

После этого макрос возвращается к главной сборке.

Выбранная подсборка должна по-прежнему использовать:

text

L_4400
Макрос выполняет финальное перестроение главной сборки.

Макрос сохраняет главную сборку.

В результате должно получиться:

text

MAIN ASSEMBLY

Selected subassembly
    |
    +-- L_4400
         |
         +-- D1@LENGHT = 4400
         |
         +-- Part 1 -> L_4400
         |     D1@LENGHT = 4400
         |
         +-- Part 2 -> L_4400
         |     D1@LENGHT = 4400
         |
         +-- Part 3 -> L_4400
               D1@LENGHT = 4400
Остальные подсборки главной сборки не должны измениться.
Например, до запуска было:

text

Sub-1 -> L_1000
Sub-2 -> L_3333
Sub-3 -> L_2500
Пользователь выбрал Sub-2 и размер 4400.

После макроса должно быть:

text

Sub-1 -> L_1000
Sub-2 -> L_4400
Sub-3 -> L_2500
То есть макрос работает с конкретным выбранным экземпляром, а не переключает все одинаковые подсборки одновременно.

Аналогичное правило действует для существующих конфигураций самих файлов. Создание L_4400 не должно уничтожать или изменять размеры в:
text

L_1000
L_2000
L_3333
Каждая конфигурация должна хранить собственное значение D1@LENGHT.

В самом конце макрос показывает отчёт:
text

DONE L_4400

SUB : 4400 mm -> L_4400

Profile-3 : 4400 mm -> L_4400
Clamp-4 : 4400 mm -> L_4400
Cover-2 : 4400 mm -> L_4400
Значения в отчёте должны читаться уже после установки размера и перестроения. То есть отчёт показывает не просто то, что макрос пытался записать, а фактическое значение D1@LENGHT.

Если какая-то деталь не обработана, вместо ложного успешного результата должна быть показана причина, например: