本文是「Inventor API 进阶」系列第 5 篇。用代码创建拉伸、旋转、阵列——掌握特征 API,你就掌握了参数化设计的钥匙。
特征 API 的核心逻辑
-
选择轮廓(Profile) -
选择输出类型(实体/曲面) -
选择操作方式(添加/切削/相交) -
定义范围(距离/贯通/到面) -
设置拔模角度
草图是特征的基础
Sub CreateSketchAndProfile()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 在 XY 工作平面上创建草图Dim sketch As PlanarSketchSet sketch = compDef.Sketches.Add( _compDef.WorkPlanes.Item(3)) ' XY 平面' 获取 TransientGeometry 用于创建点Dim tg As TransientGeometrySet tg = ThisApplication.TransientGeometry' 画一个矩形Dim rectLines As SketchEntitiesCall sketch.SketchLines.AddAsTwoPointRectangle( _tg.CreatePoint2d(0, 0), _tg.CreatePoint2d(5, 3))End Sub
' 获取草图的轮廓Dim profile As ProfileSet profile = sketch.Profiles.AddForSolid
创建拉伸特征
Sub CreateExtrude()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 假设已有草图和轮廓Dim sketch As PlanarSketchSet sketch = compDef.Sketches.Item(1)Dim profile As ProfileSet profile = sketch.Profiles.AddForSolid' 定义拉伸参数Dim extrudeDef As ExtrudeDefinitionSet extrudeDef = compDef.Features.ExtrudeFeatures.CreateExtrudeDefinition( _profile, _kJoinOperation) ' 添加操作' 设置距离extrudeDef.SetDistanceExtent "10 mm", kPositiveExtentDirection)' 创建拉伸特征Dim extrude As ExtrudeFeatureSet extrude = compDef.Features.ExtrudeFeatures.Add(extrudeDef)End Sub
拉伸操作方式
枚举 |
说明 |
kJoinOperation |
添加(合并到已有实体) |
kCutOperation |
切削(从已有实体移除) |
kIntersectOperation |
相交 |
kNewSolidOperation |
新实体 |
范围类型
' 距离范围extrudeDef.SetDistanceExtent "10 mm", kPositiveExtentDirection' 贯通范围extrudeDef.SetThroughAllExtent kPositiveExtentDirection' 到面范围extrudeDef.SetToExtent targetFace' 从到范围(两面之间)extrudeDef.SetFromToExtent startFace, endFace
创建旋转特征
Sub CreateRevolve()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinitionDim sketch As PlanarSketchSet sketch = compDef.Sketches.Item(1)Dim profile As ProfileSet profile = sketch.Profiles.AddForSolid' 获取旋转轴(草图中的中心线)Dim axisAxis As SketchLineSet axisAxis = sketch.SketchLines.Item(1)' 创建旋转定义Dim revolveDef As RevolveDefinitionSet revolveDef = compDef.Features.RevolveFeatures.CreateRevolveDefinition( _profile, _axisAxis, _kJoinOperation)' 设置角度范围(360度)revolveDef.SetAngleExtent "360 deg", kPositiveExtentDirection)' 创建旋转特征Dim revolve As RevolveFeatureSet revolve = compDef.Features.RevolveFeatures.Add(revolveDef)End Sub
创建圆角特征
Sub CreateFillet()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 创建圆角定义Dim filletDef As FilletDefinitionSet filletDef = compDef.Features.FilletFeatures.CreateFilletDefinition' 选择要倒圆角的边Dim edge As EdgeSet edge = compDef.SurfaceBodies.Item(1).Edges.Item(1)' 添加到圆角集合并设置半径Call filletDef.FilletSet.Add(edge, "3 mm", False)' 创建圆角特征Dim fillet As FilletFeatureSet fillet = compDef.Features.FilletFeatures.Add(filletDef)End Sub
特征的修改与抑制
修改特征参数
Sub ModifyFeatureParameter()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 获取拉伸特征Dim extrude As ExtrudeFeatureSet extrude = compDef.Features.ExtrudeFeatures.Item(1)' 修改距离extrude.Definition.SetDistanceExtent "20 mm", kPositiveExtentDirection)' 更新模型partDoc.UpdateEnd Sub
抑制/解除抑止特征
Sub SuppressFeature()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 抑制特征Dim feat As FeatureSet feat = compDef.Features.Item(1)feat.Suppressed = TrueEnd Sub
遍历特征树
Sub ListAllFeatures()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinitionDim feat As FeatureFor Each feat In compDef.FeaturesDebug.Print "名称: " & feat.Name & _" | 类型: " & feat.Type & _" | 抑制: " & feat.SuppressedNextEnd Sub
检测几何变化
Sub CheckGeometryChange()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 获取当前几何版本号Dim version As Longversion = compDef.ModelGeometryVersionDebug.Print "当前几何版本: " & version' 每次模型变化后,版本号会改变End Sub
几何对象操作
获取面和边
Sub AccessFacesAndEdges()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 遍历实体Dim body As SurfaceBodyFor Each body In compDef.SurfaceBodiesDebug.Print "实体: " & body.Name' 遍历面Dim face As FaceFor Each face In body.FacesDebug.Print " 面: " & face.FaceTypeNext' 遍历边Dim edge As EdgeFor Each edge In body.EdgesDebug.Print " 边: " & edge.EdgeTypeNextNextEnd Sub
面的几何信息
Sub GetFaceGeometry()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocument' 假设选中了一个面Dim face As FaceSet face = partDoc.SelectSet.Item(1)' 获取面的参数范围Dim eval As SurfaceEvaluatorSet eval = face.EvaluatorDim paramRange As Box2dSet paramRange = eval.ParamRangeRectDebug.Print "参数范围: U=[" & paramRange.MinPoint.X & ", " & paramRange.MaxPoint.X & "]"' 获取等参曲线(用于分析面的形状)Dim isoCurves As ObjectCollectionSet isoCurves = eval.GetIsoCurve(paramRange.MinPoint.X, True)End Sub
本篇小结
要点 |
说明 |
草图 |
用 Sketches.Add 创建,AddAsTwoPointRectangle 画矩形 |
Profile |
Profiles.AddForSolid / AddForSurface |
拉伸 |
ExtrudeFeatures.CreateExtrudeDefinition + Add |
旋转 |
RevolveFeatures.CreateRevolveDefinition + Add |
圆角 |
FilletDefinition.FilletSet.Add + Add |
范围 |
SetDistanceExtent / SetThroughAllExtent / SetToExtent |
抑制 |
Feature.Suppressed = True |
几何版本 |
ModelGeometryVersion 检测几何变化 |
面和边 |
SurfaceBody.Faces / .Edges 遍历 |


