本文是「Inventor API 进阶」系列第 6 篇。用代码控制零件的颜色、材质和外观——20 篇素材精华,从基础到高级全覆盖。
外观控制的三层概念
层面 |
说明 |
API 对象 |
颜色 |
基本颜色值(RGB) |
Color |
材质 |
物理材质(金属、塑料等) |
Material / MaterialAsset |
外观样式 |
渲染外观(含纹理、反射等) |
RenderingStyle / AppearanceAsset |
基本颜色操作
创建和使用颜色对象
Sub CreateColor()Dim tg As TransientGeometrySet tg = ThisApplication.TransientGeometryDim to As TransientObjectsSet to = ThisApplication.TransientObjects' 创建 RGB 颜色(红色)Dim redColor As ColorSet redColor = to.CreateColor(255, 0, 0)' 创建带透明度的颜色Dim semiRed As ColorSet semiRed = to.CreateColor(255, 0, 0, 0.5) ' 50% 透明度End Sub
设置面的颜色
Sub SetFaceColor()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocument' 假设选中了一个面Dim face As FaceSet face = partDoc.SelectSet.Item(1)' 创建颜色对象Dim myColor As ColorSet myColor = ThisApplication.TransientObjects.CreateColor(0, 255, 0)' 设置面的颜色Dim faceColor As FaceColorSet faceColor = face.SetColor(myColor, False) ' False = 非精确End Sub
颜色样式
Sub ListColorStyles()Dim doc As DocumentSet doc = ThisApplication.ActiveDocumentDim styles As ColorStylesSet styles = doc.StylesManager.ColorStylesDim style As ColorStyleFor Each style In stylesDebug.Print "颜色样式: " & style.Name & _" | R=" & style.Color.Red & _" G=" & style.Color.Green & _" B=" & style.Color.BlueNextEnd Sub
创建自定义颜色样式
Sub CreateCustomColorStyle()Dim doc As DocumentSet doc = ThisApplication.ActiveDocument' 创建新颜色样式Dim newStyle As ColorStyleSet newStyle = doc.StylesManager.ColorStyles.Add("自定义蓝")' 设置颜色值newStyle.Color = ThisApplication.TransientObjects.CreateColor(50, 100, 200)' 设置光泽度等渲染属性newStyle.Shininess = 0.7newStyle.Opacity = 1.0End Sub
材质操作
获取和设置材质
Sub SetMaterial()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 获取材质库中的材质Dim material As MaterialOn Error Resume NextSet material = partDoc.Materials.Item("铝")On Error GoTo 0If material Is Nothing ThenMsgBox "未找到'铝'材质"Exit SubEnd If' 设置零件的材质compDef.Material = materialEnd Sub
列出可用材质
Sub ListMaterials()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim mat As MaterialFor Each mat In partDoc.MaterialsDebug.Print "材质: " & mat.Name & " | 密度: " & mat.DensityNextEnd Sub
更新物理属性
Sub UpdatePhysicalProperties()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocument' 设置材质后更新物理属性Dim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinitioncompDef.Material = partDoc.Materials.Item("钢")' iProperties 中的物理属性不会自动更新' 需要调用以下方法Dim massProp As MassPropertiesSet massProp = compDef.MassPropertiesDebug.Print "质量: " & massProp.MassDebug.Print "体积: " & massProp.VolumeEnd Sub
注意:直接调用
PartDocument.Update不会更新 iProperties 中的物理属性。最可靠的方式是读取 ComponentDefinition.MassProperties。
外观资产(AppearanceAsset)
Sub SetAppearance()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocument' 获取外观资产库Dim appAssets As AssetLibrarySet appAssets = ThisApplication.AssetLibraries.Item( _"{3D0A1F0E-4AA0-4F8C-9E20-9C5D0E1F3B3D}")' 查找外观资产Dim asset As AssetOn Error Resume NextSet asset = appAssets.AppearanceAssets.Item("抛光铜")On Error GoTo 0' 应用外观到零件Dim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinitionIf Not asset Is Nothing ThencompDef.AppearanceAsset = assetEnd IfEnd Sub
面级别的颜色覆盖
Sub OverrideOccurrenceColor()Dim asmDoc As AssemblyDocumentSet asmDoc = ThisApplication.ActiveDocumentDim compDef As AssemblyComponentDefinitionSet compDef = asmDoc.ComponentDefinitionDim occ As ComponentOccurrenceSet occ = compDef.Occurrences.Item(1)' 获取或创建颜色样式Dim colorStyle As ColorStyleSet colorStyle = asmDoc.StylesManager.ColorStyles.Item("红色")' 覆盖 Occurrence 的颜色occ.AppearanceColor = colorStyle.ColorEnd Sub
缩略图控制
Sub SetThumbnailOption()Dim doc As DocumentSet doc = ThisApplication.ActiveDocument' 设置缩略图保存选项' kDefaultThumbnail - 默认(ISO 视图)' kCurrentViewThumbnail - 当前视图' kNoThumbnail - 不保存doc.SetThumbnailSaveOption kCurrentViewThumbnailEnd Sub
保存缩略图为图片文件
public void SaveThumbnail(DrawingDocument doc, string filePath){// 获取文档缩略图IPictureDisp thumbPic = doc.Thumbnail;// 转换为 System.Drawing.Image 并保存// 注意:需要通过剪贴板或临时文件中转// 这在 .NET 中需要额外的 COM 互操作处理// 另一种方式:使用 Export 方法doc.Export(filePath, kJPEGImageFormat);}
实用场景:批量设置零件颜色
Sub BatchSetColor()Dim partDoc As PartDocumentSet partDoc = ThisApplication.ActiveDocumentDim compDef As PartComponentDefinitionSet compDef = partDoc.ComponentDefinition' 创建颜色样式Dim myColor As ColorSet myColor = ThisApplication.TransientObjects.CreateColor(200, 200, 50)' 遍历所有面并设置颜色Dim body As SurfaceBodyFor Each body In compDef.SurfaceBodiesDim face As FaceFor Each face In body.FacesCall face.SetColor(myColor, False)NextNext' 更新显示ThisApplication.ActiveView.UpdateEnd Sub
本篇小结
要点 |
说明 |
颜色对象 |
TransientObjects.CreateColor(R, G, B, 透明度) |
颜色样式 |
StylesManager.ColorStyles,含名称/光泽/透明度 |
面颜色 |
Face.SetColor,支持装配体中的覆盖 |
材质 |
Document.Materials,设置后用 MassProperties 更新 |
物理属性 |
直接读 MassProperties,不依赖 Update |
外观资产 |
AppearanceAsset,支持纹理/反射等高级渲染 |
缩略图 |
SetThumbnailSaveOption 控制保存方式 |


