WebBNR_YII2021_RU_728x90_1021
2 - 2021

Масштабирование по заказу

Александр Стремнев, к.т.н., доцент кафедры информационных технологий Белгородского государственного технологического университета им. В.Г. Шухова
Александр Стремнев, к.т.н., доцент кафедры информационных технологий Белгородского государственного технологического университета им. В.Г. Шухова

Решить несложные по отдельности, но довольно хлопотные в комплексе задачи по масштабированию трехмерной модели под заданный объем позволяет комбинирование штатных функций Autodesk Inventor посредством API.

Вероятно, профессия человека все-таки налагает отпечаток на его образ мыслей — в любой ситуации он способен находить применение своему ремеслу. Например, на какие свершения может подвигнуть  сапровца посещение гончарной фабрики?

После экскурсии каждому члену нашей группы достался своеобразный сувенир — собственноручно изготовленный с помощью гончарного круга небольшой горшочек. Дома, критически оценив свое творение, я понял, что даже для хранения меда использовать его будет проблематично. Поэтому, не теряя времени, я превратил горшочек в колобок (благо материал еще не схватился) и поместил его в закрытый полиэтиленовый пакет, а сам направился к компьютеру. Глина с фабрики была очень хорошего качества, поэтому возникла идея разработать в любимой CAD-системе модель и затем воплотить ее в доставшемся по случаю материале. Итак, в проекте Autodesk Inventor был создан примерный прототип, на основе которого я уже хотел было сгенерировать схематичные чертежные виды, как вдруг понял, что совсем забыл о том, что материала в моем распоряжении имеется строго определенное количество. Свойства детали (рис. 1) дали мне информацию о ее теоретическом объеме (V1), а погружение пакета с глиной в мерную банку с водой сообщили мне то значение, на которое я практически должен был ориентироваться (V2). Модель нуждалась в масштабировании, линейный коэффициент для которого (K) можно рассчитать по следующей формуле:

Рис. 1

Рис. 1

В Autodesk Inventor имеется несколько путей для изменения размеров модели. На рис. 2 слева приведен вариант использования для этой цели универсальной команды прямого редактирования (Direct Edit), а справа показано изменение масштаба тела, создаваемого в среде свободного моделирования (FreeForm). Оба варианта требуют для выбранной геометрии ввода значения масштабного коэффициента. Причем результат операции будет применен к текущему файлу.

Рис. 2

Рис. 2

Мне показалось более удобным представить изначальную модель и ее преобразованный вариант в отдельных файлах. Благо в Inventor есть механизм, позволяющий сравнительно легко это реализовать, используя исходный файл как заимствованный производный компонент. В новой детали при вызове команды Derived Component (Производный компонент) нужно выбрать файл в исходном состоянии, а потом в специальном поле Scale factor указать Коэффициент масштабирования (рис. 3). В результате мы получаем ассоциативно связанную геометрию нужного нам размера. Деталь с заимствованным компонентом можно редактировать, внося изменения в базовую модель, а также добавляя новые конструктивные элементы, например отверстия или сопряжения.

Рис. 3

Рис. 3

Все перечисленные способы масштабирования достаточно просты. Относительную трудность представляет только расчет коэффициента (K). Здесь на помощь может прийти API Autodesk Inventor [1], а реализовать несложный инструмент для генерации модели нужного объема можно во встроенной среде разработки VBA (рис. 4).

Рис. 4

Рис. 4

Программный код, добавляемый в Module1 проекта VBA для файла исходной детали, представлен в Листинге 1. Структура программы следующая. Сначала определяется объем имеющейся модели. Затем пользователю дается возможность ввести желаемый объем (при этом используется принятая в Inventor по умолчанию единица измерения — кубические сантиметры). Далее создается новый файл детали. В него в качестве заимствованного компонента добавляется базовая модель, для которой автоматически рассчитывается коэффициент масштабирования.

Листинг 1

Sub my_scaled_model ()

' Считывание объема исходной детали

Dim VolumeStart As Double

Dim oInitialPartDocument As PartDocument

Set oInitialPartDocument = ThisApplication.ActiveDocument

Dim oMassProps As MassProperties

Set oMassProps = oInitialPartDocument. _

        ComponentDefinition.MassProperties

VolumeStart = oMassProps.Volume

' Ввод желаемого объема детали

Dim VolumeFinish As Double, value As Variant

Do

value = InputBox("Set the result volume, cm^3")

Loop While Not (IsNumeric(value))

VolumeFinish = value

' Создание нового файла для масштабированной детали

Dim oPartDoc As PartDocument

Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _

        ThisApplication.FileManager.GetTemplateFile _

        (kPartDocumentObject, kMetricSystemOfMeasure))

' Вставка в новый файл исходной детали как заимствованной

Dim oDerivedPartDef As DerivedPartUniformScaleDef

Set oDerivedPartDef = oPartDoc.ComponentDefinition. _

        ReferenceComponents. DerivedPartComponents. _

        CreateUniformScaleDef(sFilePath)

' Задание масштабного коэффициента

oDerivedPartDef.ScaleFactor = (VolumeFinish / VolumeStart) ^ (1 / 3)

Call oPartDoc.ComponentDefinition.ReferenceComponents. _

        DerivedPartComponents.Add(oDerivedPartDef)

End Sub

Для получения модели необходимого объема пользователю достаточно запустить программу (Macros) из вкладки Tools (Инструменты) — рис. 5.

Рис. 5

Рис. 5

Поскольку результатом работы программы-макроса [2] будет новый файл, то с помощью средств Autodesk Inventor не составит труда подготовить чертеж, в котором можно привести размеры как для исходного, так и для масштабированного варианта. Для этого нужно загрузить соответствующие детали в базовые чертежные виды (рис. 6).

Рис. 6

Рис. 6

Теперь, когда документация готова, можно приступить к реализации проекта если не в металле, то хотя бы в… глине.

Полезные ссылки:

Autodesk Knowledge Network: Derived Parts and Assemblies API Sample //
http://help.autodesk.com/view/INVNTOR/2018/ENU/?guid=GUID-FEFB5004-5414-4370-BDD4-C6841A05AF76

Проект масштабирования файла детали с исходными кодами //
https://yadi.sk/d/r2xdrlwj7my5Ww