Пример создания модели детали
Создание вида детали
Особенности эскизирования
Профили
Доступ к эскизам
Элементы тела (Features)
Рабочие элементы (Work Features)
Граничное представление тела (Boundary Representation, B-Rep)
Контрольные задания
Пример создания модели детали
В этой теме рассматриваются примеры создания модели детали на языке VBA. Чтобы использовать Inventor API, Вы должны познакомиться с объектами, которые он предоставляет, и понять, как получить желаемый объект. Структура API отражена через так называемую объектную модель.
Ниже VBA код демонстрирует создание простого объемного тела, состоящего из блока с карманом.
Public Sub DrawBlockWithPocket() ' Create a new part document, using the default part template. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.GetTemplateFile(kPartDocumentObject)) ' Set a reference to the component definition. Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) ' Set a reference to the transient geometry object. Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry ' Draw a 4cm x 3cm rectangle with the corner at (0,0) Dim oRectangleLines As SketchEntitiesEnumerator Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(0, 0), _ oTransGeom.CreatePoint2d(4, 3)) ' Create a profile. Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid ' Create a base extrusion 1cm thick. Dim oExtrude As ExtrudeFeature Set oExtrude = _ oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _ oProfile, 1, kNegativeExtentDirection, kJoinOperation) Dim oFrontFace As Face Set oFrontFace = oExtrude.StartFaces.Item(1) Set oSketch = oCompDef.Sketches.AddWithOrientation(oFrontFace, _ oCompDef.WorkAxes.Item(1), True, True, oCompDef.WorkPoints(1)) ' Determine where in sketch space the point (0.5,0.5,0) is. Dim oCorner As Point2d Set oCorner = oSketch.ModelToSketchSpace(oTransGeom.CreatePoint(0.5, 0.5, 0)) ' Create the interior 3cm x 2cm rectangle for the pocket. Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oCorner, oTransGeom.CreatePoint2d(oCorner.X + 3, oCorner.Y + 2)) ' Create a profile. Set oProfile = oSketch.Profiles.AddForSolid ' Create a pocket .25 cm deep. Set oExtrude = _ oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _ oProfile, 0.25, kNegativeExtentDirection, kCutOperation) End Sub
Проектирование трехмерных объектов в Autodesk Inventor начинается с построения двумерного эскиза (Sketch). Эскиз – плоскость с 2d системой координат для задания на ней геометрических примитивов, которые будут использоваться для определения трехмерных объектов.
В интерактивном режиме Вы обычно указываете плоский примитив (рабочую плоскость или плоскую поверхность) как вход и эскиз автоматически создается. В отличие от пользователя, который работает визуально с системой и может легко видеть и реагировать на ориентацию по умолчанию, в программе необходимо явно контролировать ориентацию эскиза.
Последовательность создания модели детали в программе через элементы extrusion (выдавливание) отражена на рисунках.
Деталь (Part) состоит из двух элементов extrusion (Features): один, чтобы создать основной блок и другой, чтобы создать карман. Для элементов extrusion создаются профили для выдавливания, каждый в своем эскизе.
Все плоские эскизы документа детали «живут» в коллекции Sketches объекта PartComponentDefinition . Коллекция эскизов поддерживает два метода, чтобы создать эскиз(более подробно см. ссылку).
Для эскиза 1 используется метод Sketches.Add, который не обеспечивает контроль над ориентацией. Эскиз унаследует ориентацию и начало координат от рабочей плоскости XY – это одна из трех плоскостей в коллекции WorkPlanes, которые изначально существуют в каждом документе part.
Создание следующего эскиза становится более интересным. Важно управлять его ориентацией и началом, так чтобы координаты правильно определяли положение прямоугольника. Метод AddWithOrientation позволяет при создании эскиза определять его ориентацию при помощи 6 аргументов:
- Первый аргумент определяет поверхность, которая получена непосредственно от предыдущего элемента.
- Второй аргумент определяет ось X. В этой программе системная рабочая ось X поступает на вход.
- Третий аргумент определяет, или направление оси X эскиза будет в том же самом направлении как примитив, обеспеченный, как второй аргумент.
- Четвертый аргумент определяет, является ли определяемая ось осью X или Y.
- Пятый аргумент определяет начало эскиза. В этой программе начало рабочей системы координат является началом эскиза.
- Шестой необязательный логический аргумент определяет, должны ли грани входной поверхности быть скопированы на эскиз (как делалось бы это при создании эскиза в интерактивном режиме).
Кроме эскизов через объект класса PartComponentDefinition обеспечивается рабочая геометрия. Она создается только средствами API, служит для вспомогательных построений и совершенно скрыта от конечного пользователя – она не видна на экране и никак не отображается в дереве построений модели.
В программе также используются объект класса TransientGeometry. Этот класс предназначен для решения через API комплекса математических задач, преимущественно геометрических. Объекты вспомогательной геометрии создаются посредством вызовов соответствующих методов объекта TransientGeometry и чрезвычайно широко используются в Autodesk Inventor API. В отличие от большинства других геометрических объектов API, эти объекты не имеют средств визуального отображения. Чаще всего, это абстрактные математические объекты-посредники, предназначенные для управления объектами “реальной” геометрии Inventor.
Профили представляют замкнутые области, ограниченные на эскизе примитивами. На одном эскизе может быть определено несколько профилей, каждый из которых может использоваться для определения формы.
Создание вида детали
Вид – 2D представление 3D модели. API Inventor позволяет программно создавать виды (Drawing Views) и манипулировать ими на листах чертежей (drawing sheet). Виды могут быть масштабированы, на них можно отображать сечения детали и т.д. Кроме этого, API поддерживает через объект DrawingViewEvents событие OnViewUpdate, чтобы вид обновлялся при изменении модели, связанной с ним в проекте.
Ниже программный код демонстрирует создание в документе чертежа вид (проекцию) детали. Программный код моделирования этой детали был рассмотрен выше.
Public Sub DrawPart() Dim oDrawingDoc As DrawingDocument Set oDrawingDoc = ThisApplication.ActiveDocument Dim oSheet As Sheet Set oSheet = oDrawingDoc.Sheets.Item(1) Dim oPoint1 As Point2d Set oPoint1 = ThisApplication.TransientGeometry.CreatePoint2d(5#, 25#) Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open("c:\temp\part.ipt", False) Dim oView1 As DrawingView Set oView1 = oSheet.DrawingViews.AddBaseView(oPartDoc, _ oPoint1, 1#, kBottomViewOrientation, kHiddenLineDrawingViewStyle) Call oPartDoc.Close(True) End Sub
API обеспечивает функциональность, относящуюся к видам на чертеже, через коллекцию объектов DrawingViews.
В рассматриваемом примере сначала получаем объект oSheet – лист, на котором необходимо поместить вид. Положение вида определяется точкой с координатами X=5 и Y=25. Невидимые линии добавляются к объекту oView1, используя вид kBottomViewOrientation для детали открытого файла part.ipt. После этого part файл закрывается.
Особенности эскизирования
Некоторые из концепций эскизов в интерактивном режиме немного отличны от концепций эскизов при использовании API. Когда эскиз определяется интерактивно, Вы имеете возможности контроля геометрических условий размещения примитивов. При использовании API эти условия необходимо определять явно.
Как пример, посмотрим на рисунок.
Чтобы определить такой профиль на эскизе интерактивно от Вас требуется – четыре щелчка мышкой (clicks) и одна протяжка (drag).
Давайте более внимательно рассмотрим то, что фактически происходило в течение этого процесса.
- Чтобы создать линию 1, Вы щелкаете мышью, чтобы определить начальную точку. Пока Вы перемещаете мышь, Inventor показывает глиф, подсказывая, что линия будет горизонтальной. После повторного щелчка мышью определяется вторая точка и ограничение «горизонтальность» автоматически применяется.
- Заканчивая линию 1, Вы начинаете линию 2, при этом ограничение «Совпадение» между конечной и начальной точками предполагается. Когда Вы двигаете мышь, Inventor подсказывает, что линия 2 будет перпендикулярной к линии 1. Когда выполняете щелчок мышью, автоматически применяется ограничение «Перпендикулярность».
- Дуга 3 создается перетаскиванием (dragging) мыши от конца линии 2. После того, как линия 3 создается, автоматически применяются ограничения совпадения между точками и касания к линии 2.
- Отрезок 4 начинается там, где закончилась дуга 3. Используя глиф, Inventor уведомляет Вас, что линия касательная к дуге и параллельна линии 1. После щелчка, чтобы определить линию 4, автоматически применяются ограничения совпадения, касания и параллельности.
- Отрезок 5 начинается там, где заканчивается отрезок 4. После щелчка автоматически применяются ограничения совпадения между точками линий 1 и 4 , а также ограничение параллельности с линией 2.
Итак, четыре clicks, и один drag мышки обеспечили создание 5 объектов эскиза (sketch entities) и 11 ограничений (constraints). Теперь давайте посмотрим на тот же самый процесс с точки зрения API.
Public Sub DrawSketchLine() ' Check to make sure a sketch is open. If Not TypeOf ThisApplication.ActiveEditObject Is PlanarSketch Then MsgBox "A sketch must be active." Exit Sub End If ' Set a reference to the active sketch. Dim oSketch As PlanarSketch Set oSketch = ThisApplication.ActiveEditObject ' Set a reference to the transient geometry collection. Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry Dim oCoord1 As Point2d Set oCoord1 = oTransGeom.CreatePoint2d(0, 0) Dim oCoord2 As Point2d Set oCoord2 = oTransGeom.CreatePoint2d(120, 0) Dim oLines(1 To 4) As SketchLine Set oLines(1) = oSketch.SketchLines.AddByTwoPoints(oCoord1, oCoord2) Set oCoord1 = oTransGeom.CreatePoint2d(120, 20) Set oLines(2) = oSketch.SketchLines.AddByTwoPoints(oLines(1).EndSketchPoint, oCoord1) Set oCoord1 = oTransGeom.CreatePoint2d(70, 20) Set oCoord2 = oTransGeom.CreatePoint2d(70, 70) Dim oArc As SketchArc Set oArc = oSketch.SketchArcs.AddByCenterStartEndPoint(oCoord1, oLines(2).EndSketchPoint, oCoord2) Set oCoord1 = oTransGeom.CreatePoint2d(0, 70) Set oLines(3) = oSketch.SketchLines.AddByTwoPoints(oArc.EndSketchPoint, oCoord1) Set oLines(4) = oSketch.SketchLines.AddByTwoPoints(oLines(1).StartSketchPoint, oLines(3).EndSketchPoint) Call oSketch.GeometricConstraints.AddHorizontal(oLines(1)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(1), oLines(2)) Call oSketch.GeometricConstraints.AddTangent(oLines(2), oArc) Call oSketch.GeometricConstraints.AddTangent(oLines(3), oArc) Call oSketch.GeometricConstraints.AddParallel(oLines(1), oLines(3)) Call oSketch.GeometricConstraints.AddParallel(oLines(4), oLines(2)) End Sub
Если Вы взгляните в online help, то увидите, что метод AddByTwoPoints объекта SketchLines берет две точки, чтобы определить отрезок.
AddByTwoPoints(StartPoint As Object, EndPoint As Object) As SketchLine
Обратите внимание, что тип объекта, ожидаемого как вход для точек, определен как «Объект». Это позволяет Вам вводить объект Point2d или использовать существующий объект SketchPoint. При определении местоположения объектов эскиза используются координаты на эскизе, они определяются через объекты Point2d. Эти объекты не определяют графическую точку, а только лишь координаты в 2d пространстве. Когда Вы используете объект Point2d на входе, то сначала создается в этом месте SketchPoint, а затем линия присоединяется к точке эскиза с ограничением coincident (совпадение). В случае, когда SketchPoint является входной, линия прикладывается непосредственно к входной точке эскиза, используя ограничение «Совпадение».
При создании объектов эскиза через API отсутствует возможность ввода ограничений (за исключением ограничения совпадения, когда Вы используете точку эскиза как вход). Поэтому Вы должны явно создавать геометрические ограничения перпендикулярности, параллельности и касания.
Ограничения можно воспринимать, как правила, которые регулируют положение, наклон, стык, размеры и отношения между геометрией эскиза. Inventor API имеет набор объектов ограничений, которые могут быть применены к эскизам.
Профили
Другое важное понятие, которое явно не определяется через пользовательский интерфейс – концепция профилей. Эскиз по существу только контейнер для 2d объектов и связывающих их ограничений. Сам эскиз не определяет связанные наборы объектов, которые могут использоваться для определения формы. Эта информация определена профилями. Например, Вы можете создать эскиз из 3-х окружностей. Перед созданием элемента extrude нужно определить профиль. В интерактивном режиме он определяется через перемещение мыши в пределах различных закрытых областей и clicking. Любая комбинация следующих форм на эскизе может использоваться, чтобы определить профиль.
В API профиль – объект, который Вы должны создать явно, чтобы обеспечить вход для создания тел или поверхностей. Определение профиля всегда связывается со специфическим эскизом и, по существу, добавляет топологическую информацию к эскизу. Программный код ниже демонстрирует, как это может быть реализовано для нашего примера.
Public Sub SketchProfileControl() ' Create a new part document, using the default part template. Dim oPartDoc As PartDocument Set oPartDoc = _ ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile _ (kPartDocumentObject)) Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry Dim oCircle1 As SketchCircle Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 6) Dim oCircle2 As SketchCircle Set oCircle2 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 4) Dim oCircle3 As SketchCircle Set oCircle3 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 2) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid Dim oProfPath As ProfilePath For Each oProfPath In oProfile If oProfPath.Item(1).SketchEntity Is oCircle2 Then oProfPath.AddsMaterial = True ElseIf oProfPath.Item(1).SketchEntity Is oCircle3 Then oProfPath.AddsMaterial = False Else oProfPath.Delete End If Next Dim oExtrudeDef As ExtrudeDefinition Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kJoinOperation) Call oExtrudeDef.SetDistanceExtent(1, kNegativeExtentDirection) Dim oExtrude As ExtrudeFeature Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) oSketch.Visible = True End Sub
Выбор нужного профиля из замкнутых областей, сформированных на одном эскизе, регулируется свойством AddsMaterial объекта oProfPath. При этом значение свойства (True или False) имеет смысл только для внутренних областей. Если True, то материалом заполняется область внутри окружности вплоть до следующей окружности, у которой значение свойства AddsMaterial = False. Ниже приведен фрагмент программы для 5 окружностей:
Dim oCircle1 As SketchCircle Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(2, 5), 5) Dim oCircle2 As SketchCircle Set oCircle2 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 4) Dim oCircle3 As SketchCircle Set oCircle3 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 3) Dim oCircle4 As SketchCircle Set oCircle4 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 2) Dim oCircle5 As SketchCircle Set oCircle5 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(5, 5), 1) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid Dim oProfPath As ProfilePath For Each oProfPath In oProfile If oProfPath.Item(1).SketchEntity Is oCircle1 Then oProfPath.AddsMaterial = False ElseIf oProfPath.Item(1).SketchEntity Is oCircle2 Then oProfPath.AddsMaterial = False ElseIf oProfPath.Item(1).SketchEntity Is oCircle3 Then oProfPath.AddsMaterial = True ElseIf oProfPath.Item(1).SketchEntity Is oCircle4 Then oProfPath.AddsMaterial = False Else oProfPath.Delete End If Next
На рисунках показаны результаты для концентричных окружностей и со сдвигом внешней окружности oCircle1. Внутренняя окружность oCircle5 не рассматривается как профиль, поскольку для нее применяется метод oProfPath.Delete.
Доступ к эскизам
Много программ, которые имеют дело с эскизами, не обязательно создают эскиз, а лишь получают доступ к нему.
Типовой код ниже иллюстрирует проверку, активен ли эскиз и, если он активен, устанавливается ссылка на него. Определить, или эскиз активен, можно, используя свойство ActiveEditObject приложения. Это свойство возвращает объект, который является в настоящее время активным для редактирования (это может быть любой из различных типов документа или эскиз). Если эскиз не активен, появляется сообщение, что эскиз должен быть активен.
If Not TypeOf ThisApplication.ActiveEditObject Is Sketch Then MsgBox "A sketch must be active." Exit Sub End If ' Set a reference to the active sketch. Dim oSketch As Sketch Set oSketch = ThisApplication.ActiveEditObject
Объект-коллекция Sketches обеспечивает доступ ко всем существующим эскизам в документе. Через него Вы можете получить любой существующий эскиз и, если Вы знаете его имя, то можете получить доступ к нему непосредственно через использование метода Item коллекции Sketches. Например, код ниже проводит итерацию через все эскизы в документе и печатает их имена.
Dim oSketch As Sketch For Each oSketch in oPartDoc.ComponentDefinition.Sketches Debug.Print "Sketch: " & oSketch.Name Next
Код ниже устанавливает ссылку на эскиз по имени «Sketch2». Если эскиз по имени «Sketch2» не существует в документе part, запрос Item потерпит неудачу. По сообщению можно узнать причину этой ошибки.
' Enable error trapping On Error Resume Next Dim oSketch As Sketch Set oSketch in oPartDoc.ComponentDefinition.Sketches.Item("Sketch2") If Err Then Err.Clear MsgBox "A sketch named ""Sketch2"" does not exist." End If ' Turn off error trapping On Error Goto 0
Элементы тела (Features)
Термин “Feature” может сбить с толку, поскольку означает отличительную особенность чего-либо. В 3D параметрическом моделировании на него ссылаются, чтобы выделить этапы построения модели из особенностей (элементов).
Модель представляет собой результат создания последовательности элементов. Интересно отметить, что в связи с иерархическим характером модели, изменение элементов часто приводит к изменениям в части модели, которая состоит из других элементов. Так применение или модификация простого элемента может иметь далеко идущие последствия, возможно, вызывая значительные изменения во внешнем виде модели.
Типичным примером элемента (Feature) есть выдавливание (Extrusion). Кроме него есть еще много типов элементов, которые генерируют твердые тела из эскизов или профилей. Некоторые элементы создаются путем модифицирования существующих твердых тел – например, фаски и сопряжения. Inventor поддерживает список элементов (и соответствующих им параметров), которые могут быть легко изменены. При этом вся модель пересчитывается с учетом изменений.
Ниже показан фрагмент диаграммы объектной модели для элементов детали.
Объект PartComponentDefinition обеспечивает доступ к коллекции елементов PartFeatures, которые могут быть применены для детали. В свою очередь, PartFeatures содержит коллекции конкретных типов элементов применяемых для детали.
Ниже приводится пример программного кода, в котором пошагово создается твердое тело выдавливанием треугольного профиля.
Public Sub Features () Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oPartDoc As PartDocument Set oPartDoc = oApp.Documents.Add(kPartDocumentObject, oApp.GetTemplateFile(kPartDocumentObject)) Dim oSketch As PlanarSketch Set oSketch = oPartDoc.ComponentDefinition.Sketches.Add(oPartDoc.ComponentDefinition.WorkPlanes.Item(3)) Dim oTG As TransientGeometry Set oTG = oApp.TransientGeometry Dim oSkPnts As SketchPoints Set oSkPnts = oSketch.SketchPoints Call oSkPnts.Add(oTG.CreatePoint2d(0, 0), False) Call oSkPnts.Add(oTG.CreatePoint2d(1, 0), False) Call oSkPnts.Add(oTG.CreatePoint2d(1, 1), False) Dim oLines As SketchLines Set oLines = oSketch.SketchLines Dim oLine(1 To 3) As SketchLine Set oLine(1) = oLines.AddByTwoPoints(oSkPnts(1), oSkPnts(2)) Set oLine(2) = oLines.AddByTwoPoints(oSkPnts(2), oSkPnts(3)) Set oLine(3) = oLines.AddByTwoPoints(oSkPnts(3), oSkPnts(1)) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid Dim oExtFeature As ExtrudeFeature Set oExtFeature = oPartDoc.ComponentDefinition.Features.ExtrudeFeatures.AddByDistanceExtent _ (oProfile, 1#, kSymmetricExtentDirection, kJoinOperation) oApp.ActiveView.Fit End Sub
Следующий пример демонстрирует создание твердого тела путем вращения профиля вокруг оси:
Public Sub Tor() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oPartDoc As PartDocument Set oPartDoc = oApp.Documents.Add(kPartDocumentObject, oApp.GetTemplateFile(kPartDocumentObject)) Dim oSketch As PlanarSketch Set oSketch = oPartDoc.ComponentDefinition.Sketches.Add(oPartDoc.ComponentDefinition.WorkPlanes.Item(3)) Dim oTG As TransientGeometry Set oTG = oApp.TransientGeometry Dim oSkPnts As SketchPoints Set oSkPnts = oSketch.SketchPoints Call oSkPnts.Add(oTG.CreatePoint2d(0, 0), False) Call oSkPnts.Add(oTG.CreatePoint2d(1, 1), False) Call oSkPnts.Add(oTG.CreatePoint2d(1, 0), False) Dim oLines As SketchLines Set oLines = oSketch.SketchLines Dim oLine As SketchLine Set oLine = oLines.AddByTwoPoints(oSkPnts(1), oSkPnts(2)) Dim oCircs As SketchCircles Set oCircs = oSketch.SketchCircles Dim oCirc As SketchCircle Set oCirc = oCircs.AddByCenterRadius(oSkPnts(3), 0.5) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid Dim oRevFeature As RevolveFeature Set oRevFeature = oPartDoc.ComponentDefinition.Features.RevolveFeatures.AddFull _ (oProfile, oLine, kJoinOperation) oApp.ActiveView.Fit End Sub
Рабочие элементы (Work Features)
Рабочие элементы используются для вспомогательных построений, когда имеющейся геометрии модели недостаточно для создания или размещения компонентов. К числу рабочих элементов относятся:
- рабочие точки (WorkPoint);
- рабочие оси (WorkAxis);
- рабочие плоскости (WorkPlane).
Для каждого вида рабочих элементов в API предусмотрены соответствующие коллекции – WorkPoints, WorkAxes и WorkPlanes.
В диалоговом режиме вся необходимая для создания рабочей геометрии информация извлекается из типов выделенных объектов, из их взаимного расположения и из последовательности, в которой они были выделены пользователем. Подобная информация разработчику API не предоставляется. Поэтому в базовые объекты рабочих элементов (точка, ось, плоскость) введен промежуточный определяющий объект (definition object), однозначно описывающий контекст рождения элемента. Например, для создания рабочей точки (WorkPoint) как точки пересечения трех плоскостей используется определяющий объект ThreePlanesWorkPointDef. Этот подвид рабочих точек создается вызовом метода AddByThreePlanes коллекции WorkPoints с тремя плоскостями в качестве аргументов.
При задании аргументов API обычно предоставляет некоторую свободу. Рабочие элементы могут размещаться с использованием прямоугольных и круговых массивов, к ним применимы операции зеркального отображения. Чтобы выяснить, не является ли элемент частью массива (а значит, не может индивидуально редактироваться), у объектов WorkAxis, WorkPoint и WorkPlane имеется метод IsPatternElement.
Особенностью коллекций рабочих элементов WorkPoints, WorkAxes, WorkPlanes является то, что они НИКОГДА не бывают пустыми. По умолчанию каждая из них содержит точку начала координат, базовые оси или базовые рабочие плоскости. Например, в коллекции WorkAxes всегда первые три элемента являются базовыми рабочими осями X, Y, и Z с номерами 1, 2 и 3, соответственно.
Следующий программный код создает 2 рабочие точки, рабочую ось и рабочую плоскость.
Public Sub WorkFeatures() Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oPartCompDef As PartComponentDefinition Set oPartCompDef = oPartDoc.ComponentDefinition Dim oTrans As TransientGeometry Set oTrans = ThisApplication.TransientGeometry Dim oPnt As Point Set oPnt = oTrans.CreatePoint(2, 3, 4) Dim oWorkPoint1 As WorkPoint Set oWorkPoint1 = oPartCompDef.WorkPoints.AddFixed(oPnt, False) Dim oWorkPoint2 As WorkPoint Set oPnt = oTrans.CreatePoint(0, 0, 0) Set oWorkPoint2 = oPartCompDef.WorkPoints.AddFixed(oPnt, False) Dim oWorkAxis As WorkAxis Set oWorkAxis = oPartCompDef.WorkAxes.AddByTwoPoints(oWorkPoint1, oWorkPoint2, False) Dim oWorkPlane As WorkPlane Set oWorkPlane = oPartCompDef.WorkPlanes.AddByLinePlaneAndAngle _ (oWorkAxis, oPartCompDef.WorkPlanes.Item("YZ Plane"), 45, False) oWorkPlane.Name = "MyFirstWorkPlane" End Sub
Метод AddByLinePlaneAndAngle создает рабочую плоскость, проходящую через заданную прямую Line под углом Angle к указанной плоскости Plane.
Граничное представление тела (Boundary Representation, B-Rep)
Твердое тело в Инвенторе представлено описанием границ этого тела (Boundary Representation, B-Rep). Структура данных B-Rep является описанием совокупности связанных поверхностей, формирующих внешнюю границу объема тела. И хотя модель представляется нам твердотельной (мы можем что-нибудь из нее вырезать, определить весовые характеристики, проводить расчеты и иные характерные для твердых тел операции), в действительности это лишь набор поверхностей. Связность поверхностей относится к области топологии, и в модели B-Rep для этих задач предусмотрены необходимые инструменты. Диаграмма объектной модели BRep показана на рисунке.
На рисунке ниже приведена простая модель твердого тела, которая будет использована для иллюстрации B-Rep концепций.
Поверхности
С точки зрения API твердое тело описывается объектом SurfaceBody. Несмотря на то, что в его имени присутствует слово «поверхность» (“Surface”), объект SurfaceBody является обобщенным объектом, представляющим любой высокоуровневый объект B-Rep, включая и твердые, и поверхностные тела. Основное отличие твердотельной модели заключается в том, что она формируется замкнутой совокупностью поверхностей. Каждая ограничивающая тело поверхность в объекте SurfaceBody представлена объектом Face (грань). Как видно из рисунка ниже, в нашем примере границы тела сформированы восемью гранями. Объект Face поддерживает грани произвольной геометрии, независимо от их формы.
Ребра и вершины
Для формирования твердотельной модели недостаточно иметь ограничивающие тело поверхности. Важно, чтобы они были связанными между собой. Контакт между гранями описывается объектом Edge (ребро) и геометрически представлен некоторой кривой. Каждая грань «знает» ограничивающие ее ребра, и каждое ребро «знает», какие две грани оно соединяет. Другим полезным для программиста элементом топологии являются замкнутые контуры (loop). В объектной модели API они представлены объектом EdgeLoop. В общем случае замкнутый контур формируется группой последовательно соединенных ребер. На рисунке ниже одна грань имеет границы в виде двух замкнутых контуров. Внутренний контур в центре грани сформирован из одного круглого ребра. Внешний контур состоит из четырех прямолинейных рёбер. Замкнутые контуры образуют границы граней.
Другим распространенным объектом B-Rep является объект Vertex (вершина). Вершины существуют на концах любого ребра и описывают точки контакта между ребрами. Всякое ребро «знает» вершины на своих концах, и всякая вершина «знает», какие ребра в этой вершине соединены.
Объект FaceShell
Еще одним, хотя и не слишком часто применяемым объектом B-Rep, является FaceShell. В Inventor вполне возможна ситуация, когда тело (solid) оказывается состоящим более чем из одной части. Пример такого тела приведен на рисунке.
Тело слева состоит из одной части. Справа то же тело разделилось на две части в результате увеличения диаметра центрального отверстия. Несмотря на то, что визуально модель оказалась разделенной надвое, с точки зрения API она по-прежнему остается моделью одного тела и представлена одним объектом SurfaceBody. Однако, каждый «осколок» представлен своим собственным объектом FaceShell. Большинство деталей имеют лишь один объект FaceShell, но, как видим, их может быть и больше. Другим примером может служить полый шар, сформированный двумя концентрическими сферическими поверхностями. В целом шар является одним телом и представлен одним объектом SurfaceBody, но внешняя и внутренняя сферические поверхности имеют свои собственные объекты FaceShell. Если в таком шаре просверлить отверстие, которое соединит внешнюю и внутреннюю сферы, то грани объединятся, и останется только один объект FaceShell.
Просмотр BRep иерархии с помощью объекта SurfaceEvaluator
Ниже приведен программный код, в котором с помощью объекта SurfaceEvaluator просматривается BRep иерархия документа детали, определяя местонахождение всех плоских граней. Затем определяется центр каждой грани, в который добавляется эскизная точка.
Public Sub BRep () Dim oPartDef As PartComponentDefinition Set oPartDef = ThisApplication.ActiveDocument.ComponentDefinition Dim oSurfaceBody As SurfaceBody Dim oFace As Face For Each oSurfaceBody In oPartDef.SurfaceBodies For Each oFace In oSurfaceBody.Faces If oFace.SurfaceType = kPlaneSurface Then Dim oEval As SurfaceEvaluator Set oEval = oFace.Evaluator Dim oRange As Box2d Set oRange = oEval.ParamRangeRect Dim params(0 To 1) As Double params(0) = oRange.MinPoint.X + (oRange.MaxPoint.X - oRange.MinPoint.X) * 0.5 params(1) = oRange.MinPoint.Y + (oRange.MaxPoint.Y - oRange.MinPoint.Y) * 0.5 Dim cenPt() As Double oEval.GetPointAtParam params, cenPt Dim oPoint As Point Set oPoint = ThisApplication.TransientGeometry.CreatePoint(cenPt(0), cenPt(1), cenPt(2)) Dim oSketch As PlanarSketch Set oSketch = oPartDef.Sketches.Add(oFace) Dim oPoint2D As Point2d Set oPoint2D = oSketch.ModelToSketchSpace(oPoint) Dim oSkPnt As SketchPoint Set oSkPnt = oSketch.SketchPoints.Add(oPoint2D) End If Next Next End Sub
Контрольные задания
Задание 1
Разработать VBA приложения для создания деталей автомобиля: ось, колесо и корпус. Размеры деталей указаны на чертеже.
Размеры на чертеже указаны в мм, как это принято в стандартах . Размеры в документе Inventor по умолчанию указываются в см, т.е., на чертеже размер 100 (длина оси), в документе Inventor он соответствует 1000 (100 см) . В Inventor можно явно указывать размерность, обрамляя число с размерностью в кавычки «100 мм». При выполнении заданий в программах будем использовать размерные числа, которые взяты непосредственно из чертежей (без указания размерности).
При выполнении задания обратите внимание на то, чтобы детали на чертеже были расположены в соответствии с их положением на сборке.
При разработке приложений используйте фрагменты программ, которые наиболее близки по содержанию к заданию.
Последовательность выполнения задания
Начните с разработки приложений для деталей ось (Axle) и колесо (Wheel). Для этих деталей по содержанию наиболее близка программа из раздела Профили. Также рекомендуется ознакомиться с описанием программ из разделов Пример создания модели детали и Элементы тела (Features).
Разработку приложения для детали корпус (Body) начните с создания основы тела (без пазов и выпуклостей). Фрагмент кода для создания основы профиля корпусной детали (Body) берется из приложения в разделе Особенности эскизирования. Как выдавливается профиль отражено в приложении из раздела Элементы тела (Features).
В основании корпусной детали на угловых ребрах размещены цилиндрические пазы для совмещения с осями колесных пар. Профили окружностей для этих пазов создаются на том же эскизе, что и основной профиль. К центрам окружностей применяется ограничения совпадения (Coincident) с нижними угловыми точками основного профиля корпусной детали.
Выдавливание цилиндров реализуется аналогично с созданием основы тела, но при этом в методе ExtrudeFeatures.AddByDistanceExtent вместо константы kJoinOperation используется константа kCutOperation. Перед выдавливанием необходимо подавить основной профиль методом oProfPath.Delete (см. приложение из раздела Профили). Если этого не выполнить, то вместе с цилиндрами вырезается и созданная перед этим основа тела.
В центральной точке задней грани корпуса расположен штырь для крепления запасного колеса. Он выполняется выдавливанием профиля окружности, созданного на эскизе в задней грани корпуса. Для поиска нужной грани и выбора центральной точки на ней можно использовать фрагменты программы Просмотр BRep иерархии с помощью объекта SurfaceEvaluator. Для создания эскиза на грани, размещения на ней профиля окружности и затем выдавливания штыря можно использовать фрагменты программы из раздела Пример создания модели детали.
Задание 2
Разработать программное приложение для создания пространственной модели детали в соответствии с вариантом задания. При этом обеспечить возможность контроля геометрических условий при формировании эскиза. Разработать приложение для создания чертежа детали на основе пространственной модели (см. Создание вида детали).
Примеры программной реализации приводятся ниже:
Пример 1. Моделирование детали для варианта №7
Public Sub Model() 'Создать новый документ детали, используя шаблон за умолчанием. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) 'Установить ссылку на определение компонента. Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition 'Создать новый эскиз на рабочей плоскости X-Y. Поскольку он создается 'на одной из рабочих плоскостей мы знаем его ориентацию, и 'положение начальной точки(0,0,0) в пространстве модели. Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) 'Установить ссылку на объект вспомогательной геометрии Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry ' создать прямоугольник 64х34 Dim oRectangleLines As SketchEntitiesEnumerator Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(-32, -17), _ oTransGeom.CreatePoint2d(32, 17)) 'Создать профиль (из прямоугольника) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid ' Создать экструзию (ExtrudeFeature) с толщиной 54. Dim oExtrudeDef As ExtrudeDefinition Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kJoinOperation) Call oExtrudeDef.SetDistanceExtent(54, kPositiveExtentDirection) Dim oExtrude As ExtrudeFeature Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) ' Получить грань экструзии для создания нового эскиза. Dim oFrontFace As Face Set oFrontFace = oExtrude.StartFaces.Item(1) 'Создать новый эскиз на этой грани методом, который 'контролирует его ориентацию Set oSketch = oCompDef.Sketches.AddWithOrientation(oFrontFace, _ oCompDef.WorkAxes.Item(1), True, True, oCompDef.WorkPoints(1)) ' Определяем в пространстве эскиза точку. Dim oCorner As Point2d Set oCorner = oSketch.ModelToSketchSpace(oTransGeom.CreatePoint(-15, 15, 0)) 'Создать прямоугольник 44 х 48 Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(-22, -24), _ oTransGeom.CreatePoint2d(22, 24)) 'Создать профиль (из прямоугольника) Set oProfile = oSketch.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 38 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kJoinOperation) Call oExtrudeDef.SetDistanceExtent(38, kNegativeExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) 'Создать новый эскиз и окружность в нем радиусом 22 Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(2)) Dim oCircle1 As SketchCircle Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius( _ oTransGeom.CreatePoint2d(0, 38), 22) 'Создать профиль (из окружности) Set oProfile = oSketch.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 48 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kJoinOperation) Call oExtrudeDef.SetDistanceExtent(48, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) ' Создать новый эскиз и окружность в нем радиусом 14 Set oSketch2 = oCompDef.Sketches.Add(oCompDef.WorkPlanes(2)) Dim oCircle2 As SketchCircle Set oCircle2 = oSketch2.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 38), 14) Set oProfile = oSketch2.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 48. Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kCutOperation) Call oExtrudeDef.SetDistanceExtent(48, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) 'Создать эскиз и прямоугольник 32*14 Set oSketch3 = oCompDef.Sketches.Add(oCompDef.WorkPlanes(2)) Dim oRectangleLines1 As SketchEntitiesEnumerator Set oRectangleLines1 = oSketch3.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(-16, 0), _ oTransGeom.CreatePoint2d(16, 14)) Set oProfile = oSketch3.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 48 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kCutOperation) Call oExtrudeDef.SetDistanceExtent(48, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) 'Создать новый эскиз и окружность радиусом 10 в нем Set oSketch4 = oCompDef.Sketches.Add(oCompDef.WorkPlanes(1)) Dim oCircle3 As SketchCircle Set oCircle3 = oSketch4.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 38), 10) Set oProfile = oSketch4.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 64 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kCutOperation) Call oExtrudeDef.SetDistanceExtent(64, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) ' Создать новый эскиз и прямоугольник в нем 20*6. Set oSketch5 = oCompDef.Sketches.Add(oCompDef.WorkPlanes(1)) Dim oRectangleLines2 As SketchEntitiesEnumerator Set oRectangleLines2 = oSketch5.SketchLines.AddAsTwoPointRectangle( _ oTransGeom.CreatePoint2d(-10, 0), _ oTransGeom.CreatePoint2d(10, 6)) Set oProfile = oSketch5.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 64 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kCutOperation) Call oExtrudeDef.SetDistanceExtent(64, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) 'Создать новый эскиз и 2 симметричных окружности радиусом 10 в нем Set oSketch6 = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) Dim oCircle4 As SketchCircle Set oCircle4 = oSketch6.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(-25, 0), 4) Dim oCircle5 As SketchCircle Set oCircle5 = oSketch6.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(25, 0), 4) Set oProfile = oSketch6.Profiles.AddForSolid 'Создать экструзию (ExtrudeFeature) с толщиной 110 Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kCutOperation) Call oExtrudeDef.SetDistanceExtent(110, kSymmetricExtentDirection) Set oExtrude = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) ThisApplication.ActiveView.Fit End Sub
Пример 2. Моделирование детали для варианта №19
Public Sub Model() Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(1)) Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry Dim oCoord1 As Point2d Set oCoord1 = oTransGeom.CreatePoint2d(0, 0) Dim oCoord2 As Point2d Set oCoord2 = oTransGeom.CreatePoint2d(74, 0) Dim oLines(1 To 5) As SketchLine Set oLines(1) = oSketch.SketchLines.AddByTwoPoints(oCoord1, oCoord2) Set oCoord1 = oTransGeom.CreatePoint2d(74, 28) Set oLines(2) = oSketch.SketchLines.AddByTwoPoints(oLines(1).EndSketchPoint, oCoord1) Set oCoord1 = oTransGeom.CreatePoint2d(34, 28) Set oLines(3) = oSketch.SketchLines.AddByTwoPoints(oLines(2).EndSketchPoint, oCoord1) Set oCoord1 = oTransGeom.CreatePoint2d(0, 20) Set oLines(4) = oSketch.SketchLines.AddByTwoPoints(oLines(3).EndSketchPoint, oCoord1) Set oLines(5) = oSketch.SketchLines.AddByTwoPoints(oLines(4).EndSketchPoint, oLines(1).StartSketchPoint) Call oSketch.GeometricConstraints.AddHorizontal(oLines(1)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(1), oLines(2)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(2), oLines(3)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(3), oLines(5)) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid Dim oExtFeature As ExtrudeFeature Set oExtFeature = oPartDoc.ComponentDefinition.Features.ExtrudeFeatures.AddByDistanceExtent _ (oProfile, 42#, kSymmetricExtentDirection, kJoinOperation) Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) Set oCoord1 = oTransGeom.CreatePoint2d(15, 39) Set oCoord2 = oTransGeom.CreatePoint2d(15, 69) Set oLines(1) = oSketch.SketchLines.AddByTwoPoints(oCoord1, oCoord2) Set oCoord1 = oTransGeom.CreatePoint2d(-15, 69) Set oLines(2) = oSketch.SketchLines.AddByTwoPoints(oLines(1).EndSketchPoint, oCoord1) Set oCoord1 = oTransGeom.CreatePoint2d(-15, 39) Set oLines(3) = oSketch.SketchLines.AddByTwoPoints(oLines(2).EndSketchPoint, oCoord1) Set oLines(4) = oSketch.SketchLines.AddByTwoPoints(oLines(3).EndSketchPoint, oLines(1).StartSketchPoint) Set oLines(5) = oSketch.SketchLines.AddByTwoPoints(oLines(1).StartSketchPoint, oLines(3).StartSketchPoint) Set oCoord1 = oLines(5).Geometry.MidPoint Call oSketch.GeometricConstraints.AddVertical(oLines(1)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(1), oLines(2)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(2), oLines(3)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(3), oLines(4)) Set oProfile = oSketch.Profiles.AddForSolid Set oExtFeature = oPartDoc.ComponentDefinition.Features.ExtrudeFeatures.AddByDistanceExtent _ (oProfile, 48#, kPositiveExtentDirection, kJoinOperation) Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) Dim oCircle1 As SketchCircle Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius(oLines(5).Geometry.MidPoint, 10) Set oCoord1 = oTransGeom.CreatePoint2d(6, 7) Set oCoord2 = oTransGeom.CreatePoint2d(6, 27) Set oLines(1) = oSketch.SketchLines.AddByTwoPoints(oCoord1, oCoord2) Set oCoord1 = oTransGeom.CreatePoint2d(-6, 27) Set oLines(2) = oSketch.SketchLines.AddByTwoPoints(oLines(1).EndSketchPoint, oCoord1) Set oCoord1 = oTransGeom.CreatePoint2d(-6, 7) Set oLines(3) = oSketch.SketchLines.AddByTwoPoints(oLines(2).EndSketchPoint, oCoord1) Set oLines(4) = oSketch.SketchLines.AddByTwoPoints(oLines(3).EndSketchPoint, oLines(1).StartSketchPoint) Call oSketch.GeometricConstraints.AddVertical(oLines(1)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(1), oLines(2)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(2), oLines(3)) Call oSketch.GeometricConstraints.AddPerpendicular(oLines(3), oLines(4)) Set oProfile = oSketch.Profiles.AddForSolid Set oExtFeature = oPartDoc.ComponentDefinition.Features.ExtrudeFeatures.AddByDistanceExtent _ (oProfile, 48#, kPositiveExtentDirection, kCutOperation) Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(2)) Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 0), 15) Call oSketch.GeometricConstraints.AddGround(oCircle1) Set oCircle1 = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 38), 6) Call oSketch.GeometricConstraints.AddGround(oCircle1) Set oProfile = oSketch.Profiles.AddForSolid Set oExtFeature = oPartDoc.ComponentDefinition.Features.ExtrudeFeatures.AddByDistanceExtent _ (oProfile, 74#, kPositiveExtentDirection, kCutOperation) End Sub
Полезные ссылки
Autodesk Inventor API. Первые шаги
Автор: Николай Свирневский