news 2026/6/23 4:40:57

Inventor 二次开发从入门到精通(4)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Inventor 二次开发从入门到精通(4)

4.1 Application 对象:Inventor 的入口

Application对象是 Inventor API 的根对象,所有操作都从这里开始。其核心功能包括:

  • 管理文档(创建、打开、保存、关闭);
  • 访问用户界面(功能区、命令、对话框);
  • 提供几何工具(创建点、向量、矩阵等);
  • 控制 Inventor 的运行状态(可见性、自动更新等)。
4.1.1 获取 Application 对象的两种方式
方式 1:连接已运行的 Inventor 实例
private Application GetInventorApp() { Application invApp = null; try { // 尝试连接已运行的Inventor invApp = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"); } catch (Exception ex) { // 若未运行,抛出异常或启动新实例 throw new Exception("未找到运行的Inventor实例:" + ex.Message); } return invApp; }
方式 2:启动新的 Inventor 实例
private Application StartInventorApp() { Application invApp = null; try { // 获取Inventor的类型 Type invType = Type.GetTypeFromProgID("Inventor.Application"); // 创建实例 invApp = (Application)Activator.CreateInstance(invType); // 显示界面 invApp.Visible = true; // 禁用自动更新(提升性能) invApp.ScreenUpdating = false; } catch (Exception ex) { throw new Exception("启动Inventor失败:" + ex.Message); } return invApp; }
4.1.2 Application 对象的常用属性和方法
属性 / 方法功能
ActiveDocument获取当前激活的文档
Documents获取文档集合
TransientGeometry获取几何工具对象,用于创建点、向量等
UserInterfaceManager获取用户界面管理器
ScreenUpdating设置是否启用屏幕更新
Quit()退出 Inventor

4.2 文档的基本操作

4.2.1 创建新文档

Inventor 支持创建多种类型的文档,通过Documents.Add()方法实现:

// 创建零件文档 Document partDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject); // 创建装配体文档 Document assyDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kAssemblyDocumentObject); // 创建工程图文档 Document drawDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kDrawingDocumentObject); // 创建表达视图文档 Document presentationDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kPresentationDocumentObject);

4.2 文档的基本操作

4.2.1 创建新文档

Inventor 支持创建多种类型的文档,通过Documents.Add()方法实现:

// 创建零件文档 Document partDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject); // 创建装配体文档 Document assyDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kAssemblyDocumentObject); // 创建工程图文档 Document drawDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kDrawingDocumentObject); // 创建表达视图文档 Document presentationDoc = _inventorApp.Documents.Add(DocumentTypeEnum.kPresentationDocumentObject);
4.2.2 打开现有文档

使用Documents.Open()方法打开本地文档:

// 定义文档路径 string docPath = @"D:\InventorFiles\Sample.part"; // 打开文档(只读模式) Document doc = _inventorApp.Documents.Open(docPath, false);

注意:路径需使用绝对路径,且需保证文件存在,否则会抛出异常。

4.2.3 保存文档

文档的保存分为Save()(保存当前文档)和SaveAs()(另存为):

// 保存当前文档 _inventorApp.ActiveDocument.Save(); // 另存为新文件 string newPath = @"D:\InventorFiles\NewSample.part"; _inventorApp.ActiveDocument.SaveAs(newPath, false);
4.2.4 关闭文档

使用Document.Close()方法关闭文档,可指定是否保存更改:

// 关闭文档并保存更改 _inventorApp.ActiveDocument.Close(true); // 关闭文档不保存更改 _inventorApp.ActiveDocument.Close(false);
4.2.5 遍历所有打开的文档
foreach (Document doc in _inventorApp.Documents) { string info = $"文档名称:{doc.DisplayName},类型:{doc.DocumentType}"; _inventorApp.UserInterfaceManager.MessageBox.Show(info); }

4.3 几何对象的创建与操作

Inventor 的TransientGeometry对象提供了创建临时几何对象的方法,这些对象不存储在文档中,仅用于计算和建模。

4.3.1 点(Point)的创建
// 创建三维点 Point p1 = _inventorApp.TransientGeometry.CreatePoint(10, 20, 30); // 创建二维点(Z坐标为0) Point p2 = _inventorApp.TransientGeometry.CreatePoint(50, 50, 0); // 获取点的坐标 double x = p1.X; double y = p1.Y; double z = p1.Z;
4.3.2 向量(Vector)的创建与运算
// 创建向量 Vector v1 = _inventorApp.TransientGeometry.CreateVector(1, 0, 0); Vector v2 = _inventorApp.TransientGeometry.CreateVector(0, 1, 0); // 向量相加 Vector v3 = v1.Add(v2); // 向量点乘 double dot = v1.DotProduct(v2); // 向量叉乘 Vector cross = v1.CrossProduct(v2); // 向量归一化 v1.Normalize();
4.3.3 矩阵(Matrix)的创建与变换

矩阵用于实现几何对象的平移、旋转、缩放等变换:

// 创建单位矩阵 Matrix matrix = _inventorApp.TransientGeometry.CreateMatrix(); // 平移变换(沿X轴移动10) matrix.SetTranslation(_inventorApp.TransientGeometry.CreateVector(10, 0, 0)); // 旋转变换(绕Z轴旋转90度) matrix.SetRotation(_inventorApp.TransientGeometry.CreateVector(0, 0, 1), Math.PI / 2);

4.4 参数的管理与修改

参数是 Inventor 参数化建模的核心,通过 API 可实现参数的创建、修改和查询。

4.4.1 访问现有参数
PartDocument partDoc = (PartDocument)_inventorApp.ActiveDocument; // 获取参数集合 Parameters paramsCollection = partDoc.ComponentDefinition.Parameters; // 通过名称访问尺寸参数 ModelParameter lengthParam = (ModelParameter)paramsCollection["Length"]; // 修改参数值 lengthParam.Value = 150; // 通过类型筛选参数 foreach (Parameter param in paramsCollection) { if (param.Type == ParameterTypeEnum.kModelParameter) { _inventorApp.UserInterfaceManager.MessageBox.Show($"参数名:{param.Name},值:{param.Value}"); } }
4.4.2 创建新参数
// 创建模型参数(长度) ModelParameter newParam = partDoc.ComponentDefinition.Parameters.ModelParameters.Add( "Width", // 参数名 UnitTypeEnum.kMillimeterLengthUnits, // 单位 80 // 初始值 ); // 创建用户参数(整数) UserParameter userParam = partDoc.ComponentDefinition.Parameters.UserParameters.AddByValue( "Count", // 参数名 5, // 初始值 UnitTypeEnum.kIntegerUnits // 单位 );

4.5 事务的高级使用

事务可用于批量操作的管理,支持嵌套和撤销 / 重做:

// 创建父事务 Transaction parentTrans = _inventorApp.TransactionManager.CreateTransaction(partDoc, "批量创建特征"); parentTrans.Start(); // 创建子事务 Transaction childTrans1 = _inventorApp.TransactionManager.CreateTransaction(partDoc, "创建拉伸"); childTrans1.Start(); // 执行拉伸创建操作 childTrans1.End(); Transaction childTrans2 = _inventorApp.TransactionManager.CreateTransaction(partDoc, "创建孔"); childTrans2.Start(); // 执行孔创建操作 childTrans2.End(); // 提交父事务 parentTrans.End(); // 撤销父事务(会同时撤销子事务) // parentTrans.Undo(); // 重做父事务 // parentTrans.Redo();
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 22:09:26

手艺人札记:在开源系统中重塑技术的温度

长久以来,技术被谈论为一种近乎冷酷的建造艺术:架构、性能、工具链。然而,在我的旅程中,一次深刻的转变发生了——技术成长对我而言,逐渐从建造摩天大楼,转向了修复与塑造一件拥有生命力的器物。这一切&…

作者头像 李华
网站建设 2026/6/23 10:42:03

5种方法彻底解决番茄小说离线下载难题

5种方法彻底解决番茄小说离线下载难题 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否经历过这样的尴尬场景:地铁信号断断续续,正看到精彩章节却无法加载&…

作者头像 李华
网站建设 2026/6/23 18:38:51

Cider音乐播放器终极指南:跨平台Apple Music体验全解析

Cider音乐播放器终极指南:跨平台Apple Music体验全解析 【免费下载链接】Cider A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind. 🚀 项目地址: https://gitcode.com/gh_mi…

作者头像 李华
网站建设 2026/6/23 18:38:48

力扣刷题:最大子数组和

题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1:输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出…

作者头像 李华
网站建设 2026/6/23 18:39:19

⭐力扣刷题:岛屿数量

题目: 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,…

作者头像 李华