Решить несложные по отдельности, но довольно хлопотные в комплексе задачи по масштабированию трехмерной модели под заданный объем позволяет комбинирование штатных функций Autodesk Inventor посредством API.
Вероятно, профессия человека все-таки налагает отпечаток на его образ мыслей — в любой ситуации он способен находить применение своему ремеслу. Например, на какие свершения может подвигнуть сапровца посещение гончарной фабрики?
После экскурсии каждому члену нашей группы достался своеобразный сувенир — собственноручно изготовленный с помощью гончарного круга небольшой горшочек. Дома, критически оценив свое творение, я понял, что даже для хранения меда использовать его будет проблематично. Поэтому, не теряя времени, я превратил горшочек в колобок (благо материал еще не схватился) и поместил его в закрытый полиэтиленовый пакет, а сам направился к компьютеру. Глина с фабрики была очень хорошего качества, поэтому возникла идея разработать в любимой CAD-системе модель и затем воплотить ее в доставшемся по случаю материале. Итак, в проекте Autodesk Inventor был создан примерный прототип, на основе которого я уже хотел было сгенерировать схематичные чертежные виды, как вдруг понял, что совсем забыл о том, что материала в моем распоряжении имеется строго определенное количество. Свойства детали (рис. 1) дали мне информацию о ее теоретическом объеме (V1), а погружение пакета с глиной в мерную банку с водой сообщили мне то значение, на которое я практически должен был ориентироваться (V2). Модель нуждалась в масштабировании, линейный коэффициент для которого (K) можно рассчитать по следующей формуле:
Рис. 1
В Autodesk Inventor имеется несколько путей для изменения размеров модели. На рис. 2 слева приведен вариант использования для этой цели универсальной команды прямого редактирования (Direct Edit), а справа показано изменение масштаба тела, создаваемого в среде свободного моделирования (FreeForm). Оба варианта требуют для выбранной геометрии ввода значения масштабного коэффициента. Причем результат операции будет применен к текущему файлу.
Рис. 2
Мне показалось более удобным представить изначальную модель и ее преобразованный вариант в отдельных файлах. Благо в Inventor есть механизм, позволяющий сравнительно легко это реализовать, используя исходный файл как заимствованный производный компонент. В новой детали при вызове команды Derived Component (Производный компонент) нужно выбрать файл в исходном состоянии, а потом в специальном поле Scale factor указать Коэффициент масштабирования (рис. 3). В результате мы получаем ассоциативно связанную геометрию нужного нам размера. Деталь с заимствованным компонентом можно редактировать, внося изменения в базовую модель, а также добавляя новые конструктивные элементы, например отверстия или сопряжения.
Рис. 3
Все перечисленные способы масштабирования достаточно просты. Относительную трудность представляет только расчет коэффициента (K). Здесь на помощь может прийти API Autodesk Inventor [1], а реализовать несложный инструмент для генерации модели нужного объема можно во встроенной среде разработки VBA (рис. 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
Поскольку результатом работы программы-макроса [2] будет новый файл, то с помощью средств Autodesk Inventor не составит труда подготовить чертеж, в котором можно привести размеры как для исходного, так и для масштабированного варианта. Для этого нужно загрузить соответствующие детали в базовые чертежные виды (рис. 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