Создаем правило в iLogic для замены компонента.

Хочу показать простое, но очень полезное правило iLogic, которым пользуюсь каждый день для замены одних компонентов на другие. Данное правило позволяет легко производить замену необходимого количества компонентов в сборке. Правило работает по следующему принципу: необходимо последовательно выделить те детали или сборки, которые мы хотим заменить и последним выбрать тот компонент, на который мы хотим заменить. После чего нажать кнопку выполнения правила.

Замена компонентов в сборке

Код с комментариями для освоения.

' Получаем активный документ.
Dim asmDoc As AssemblyDocument
asmDoc = ThisApplication.ActiveDocument

' Получаем коллекцию выделенных элементов.
Dim selSet As SelectSet
selSet = asmDoc.SelectSet

' Выходим если коллекция пуста.
If selSet.Count = 0 Then
	MessageBox.Show("Должна быть выделена деталь или подсборка")
	Return
End If

' Создаем транзакцию для отмены.
Dim oTransaction As Transaction
oTransaction = ThisApplication.TransactionManager.StartTransaction(asmDoc, "Замена компонента")

Try
	' Получаем последний выбранный компонент (конкретное вхождение в сборке) в коллекции выделенных компонентов.
	' Данный компонент будет заменять предыдущие компоненты.
	Dim LastCompOcc As ComponentOccurrence
	LastCompOcc = selSet.Item(selSet.Count)

	' Перебираем по очереди все выбранные нами компоненты в коллекции.
	For Each CurrentCompOcc As ComponentOccurrence In selSet

		' Заменяем компонент на "последний выбранный".
		CurrentCompOcc.Replace(LastCompOcc.Definition.Document.fullfilename, False)

		' Если текущий компонент является последним, то покидаем перебор.
		If CurrentCompOcc Is LastCompOcc Then
			Exit For
		End If

	Next

	' Завершаем транзакцию отмены.
	oTransaction.End

Catch ex As Exception
	' В случае непредвиденной ошибки сбрасываем транзакцию отмены.
	oTransaction.Abort

	' Выводим сообщений об ошибке.
	MessageBox.Show(ex.ToString(), "Произошла ошибка!")

	Return

End Try

В коде используется менеджер транзакций. Это необходимо для того, чтобы иметь возможность за одну отмену действий (CTRL+Z) отменять все изменения, вызванные правилом.
В данном коде нет проверок на тип открытого документа и нет проверок на тип выделенных компонентов. За обработку некоторых ошибок отвечает блок Try-Catch, который прерывает транзакцию в случае неудачи и выводит сообщение с информацией об ошибке.