Autodesk Inventor API. Первые шаги/Призводные компоненты
Пример: Деталь как производный компонент от сборки
правитьЭто пример из справочной системы Autodesk Inventor.
Сначала процедуры CreateMoldPart и CreateMoldBase создают детали, представляющие собой отливку и заготовку для литейной полуформы.
Затем формируется сама литейная полуформа как производный компонент от сборки, построенной на основе обеих деталей.
Public Sub MoldBaseSample() 'Задаем путь к папке, в которой будут сохраняться файлы деталей Dim sFilePath As String sFilePath = "C:\Temp\" 'Вызов функций, в которых создаются 'деталь изготавливаемой отливки (MoldPart.ipt) и 'базовая деталь полуформы (MoldBase.ipt). Call CreateMoldPart(sFilePath & "MoldPart.ipt") Call CreateMoldBase(sFilePath & "MoldBase.ipt") 'Создание новой детали. 'Она будет производным компонентом от отливки. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) ' Создание определяющего объекта (derived definition) ' производного компонента. Dim oDerivedPartDef As DerivedPartUniformScaleDef Set oDerivedPartDef = oPartDoc.ComponentDefinition. _ ReferenceComponents.DerivedPartComponents. _ CreateUniformScaleDef(sFilePath & "MoldPart.ipt") ' Назначение масштабного множителя oDerivedPartDef.ScaleFactor = 1.1 'В определяющем объекте можно задать и другие 'опции будущей производной детали. 'Установки опций по умолчанию нас устраивают во всех 'случаях, кроме масштабного множителя ScaleFactor. 'Создание производной детали. Call oPartDoc.ComponentDefinition.ReferenceComponents. _ DerivedPartComponents.Add(oDerivedPartDef) 'СОхранить и закрыть производную деталь. Call oPartDoc.SaveAs(sFilePath & "ScaledMoldPart.ipt", False) oPartDoc.Close ' Create a new assembly file to put the mold base and scaled part together. 'Создадим новую сборку. В ней будут собраны вместе деталь и полуформа. Dim oAsmDoc As AssemblyDocument Set oAsmDoc = ThisApplication.Documents.Add(kAssemblyDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kAssemblyDocumentObject)) 'Создание матрицы для определения положения в сборке ее компонентов. 'Вновь созданная матрица исходно является единичной. 'Применение единичной матрицы к вставляемым в сборку компонентам 'приведет к полному совмещению систем координат деталей и сборки. Dim oMatrix As Matrix Set oMatrix = ThisApplication.TransientGeometry.CreateMatrix 'Позиционирование в сборке полуформы. Dim oOcc As ComponentOccurrence Set oOcc = oAsmDoc.ComponentDefinition.Occurrences. _ Add(sFilePath & "MoldBase.ipt", oMatrix) 'Переименуем компонент, чтобы впоследствии его 'идентифицировать. Этот метод не является 'единственным, но он наиболее прост в применении. oOcc.Name = "Mold Base" 'Размещение в сборке отмасштабированной детали Set oOcc = oAsmDoc.ComponentDefinition.Occurrences. _ Add(sFilePath & "ScaledMoldPart.ipt", oMatrix) oOcc.Name = "Mold Part" 'Сохраняем и закрываем сборку. Call oAsmDoc.SaveAs(sFilePath & "MoldSample.iam", False) oAsmDoc.Close 'Создаем новую деталь как производную от сборки 'с вычтьанием тела из полуформы. 'Новая деталь Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) 'Определяющий объект производного компонента - литейной сборки Dim oDerivedAsmDef As DerivedAssemblyDefinition Set oDerivedAsmDef = oPartDoc.ComponentDefinition. _ ReferenceComponents.DerivedAssemblyComponents. _ CreateDefinition(sFilePath & "MoldSample.iam") 'Назначение детали опции вычитания oDerivedAsmDef.Occurrences.Item("Mold Part"). _ InclusionOption = kDerivedSubtractAll ' Create the derived assembly. 'Финал: создание производного компонента от сборки Call oPartDoc.ComponentDefinition.ReferenceComponents. _ DerivedAssemblyComponents.Add(oDerivedAsmDef) End Sub 'MoldBaseSample '-------------------------------------------------------------
'Процедура создает деталь, представляющую собой отливку Private Sub CreateMoldPart(Filename As String) 'Новый документ детали на основе шаблона по умолчанию Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) 'Создание эскиза на базовой плоскости XY системы координат Dim oSketch As PlanarSketch Set oSketch = oPartDoc.ComponentDefinition.Sketches. _ Add(oPartDoc.ComponentDefinition.WorkPlanes(3)) Dim oTG As TransientGeometry Set oTG = ThisApplication.TransientGeometry 'Геометрия, определяющая форму детали. Dim oPoints As ObjectCollection Set oPoints = ThisApplication.TransientObjects.CreateObjectCollection oPoints.Add oTG.CreatePoint2d(-5, 0) oPoints.Add oTG.CreatePoint2d(-4, 3) oPoints.Add oTG.CreatePoint2d(-2, 4) oPoints.Add oTG.CreatePoint2d(0, 3) oPoints.Add oTG.CreatePoint2d(3, 4) oPoints.Add oTG.CreatePoint2d(4, 2) oPoints.Add oTG.CreatePoint2d(5, 0) Dim oSpline As SketchSpline Set oSpline = oSketch.SketchSplines.Add(oPoints) oSpline.FitMethod = kSweetSplineFit Dim oLine As SketchLine Set oLine = oSketch.SketchLines.AddByTwoPoints( _ oSpline.FitPoint(1), _ oSpline.FitPoint(oSpline.FitPointCount)) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid 'Создание тела вращения Call oPartDoc.ComponentDefinition.Features.RevolveFeatures. _ AddFull(oProfile, oLine, kJoinOperation) 'Сохранить и закрыть документ Call oPartDoc.SaveAs(Filename, False) oPartDoc.Close End Sub 'CreateMoldPart '-------------------------------------------------------------
' Процедура создает заготовку литейной полуформы Private Sub CreateMoldBase(Filename As String) 'Новый документ детали на основе шаблона по умолчанию Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, _ ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) 'Создание эскиза на базовой плоскости XY системы координат Dim oSketch As PlanarSketch Set oSketch = oPartDoc.ComponentDefinition.Sketches. _ Add(oPartDoc.ComponentDefinition.WorkPlanes(3)) 'Геометрия, определяющая форму детали. Dim oTG As TransientGeometry Set oTG = ThisApplication.TransientGeometry Call oSketch.SketchLines.AddAsTwoPointRectangle( _ oTG.CreatePoint2d(-6, -5), _ oTG.CreatePoint2d(6, 5)) Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid 'Создание тела выдавливанием Call oPartDoc.ComponentDefinition.Features. _ ExtrudeFeatures.AddByDistanceExtent( _ oProfile, 5, kNegativeExtentDirection, kJoinOperation) 'Сохранить и закрыть документ Call oPartDoc.SaveAs(Filename, False) oPartDoc.Close End Sub 'CreateMoldBase '-------------------------------------------------------------