ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SOLIDWORKS工程图标注自动化:基于C#二次开发的实战指南

SOLIDWORKS工程图标注自动化:基于C#二次开发的实战指南 简介面向SOLIDWORKS二次开发与工程图自动化需求的工程师该示例演示了通过C#调用SOLIDWORKS SDK基于.NET Framework 4.8环境完成尺寸标注、公差标注、注释添加等一系列工程图自动化操作可替代耗时且易错的手工标注流程适配2022 SP5.0版本。压缩包共115个文件、约1.9MB除项目工程与C#源码外还包含8个dll运行库、18个drwdot工程图模板、7个prtdot零件模板、4个asmdot装配模板以及bmp图片、json配置和缓存文件等辅助材料目录结构清晰适合直接对照学习。已有573人学习下载。通过研读项目代码、模板与配置文件可以掌握SOLIDWORKS API的插件开发思路、标注样式与参数的控制方法并可将其中的模板规范迁移到自己的工程图项目中从而减少重复性操作、统一标注风格提升出图效率与一致性。示例提供了可直接运行的Addin插件与全套模板既有C#基础的工程师可据此快速搭建自己的标注自动化工具。对于需要批量处理大量工程图或统一企业出图标准的技术团队这套示例同样能作为二次开发的基础框架节省从零搭建环境的时间。 干了这么多年机械设计我深有体会——工程图标注是设计流程中最耗时、也最容易出错的环节之一。尤其是上百个零件、尺寸、形位公差、表面粗糙度一个个手动点选放置手指头都能点抽筋眼睛也容易看花。后来接触了SOLIDWORKS二次开发花了不少时间啃API文档、踩坑、调试终于把一个基于C#的工程图标注自动化示例跑通了。效果相当显著以前半小时的标注工作现在几秒就能完成而且标注位置整齐划一。这篇文章我就把这个示例的核心思路、实现细节和踩坑记录完整拆解一遍。内容偏实战涉及C#编程基础和SOLIDWORKS API基础但跟着思路走哪怕你只写过简单宏也大概率能跑通一个可用的自动化标注框架。我能解决什么问题主要是三类一是把工程图里重复的、机械式的注释插入比如技术要求、标题栏信息、属性的标准化填写自动化二是把尺寸、形位公差等标注按预设规则批量生成三是把人工最容易的漏标、错标用代码的逻辑去规避。说白了就是用代码把“重复劳动”变成“一键执行”把“靠经验检查”变成“靠规则校验”。1. 项目整体设计与思路拆解这个项目的核心不是“把某个标注命令录制成宏然后回放”而是要设计一套稳定、可扩展、可维护的标注自动化逻辑。我最初踩的一个大坑就是试图用宏录制去“模拟人工操作”但宏回放对视图缩放、鼠标位置、UI状态极其敏感稍微一动就会崩。所以后面彻底换思路直接调用SOLIDWORKS API绕过UI操作从数据层去读写标注对象。1.1 为什么选择C#而不是VBA或VB.NETSOLIDWORKS官方支持VBA、VB.NET、C#和C。很多老教程都以VBA为主但从工程化角度看,VBA处理复杂逻辑比如泛型集合、字符串处理、与外部数据库交互效率太低维护起来也是噩梦。对比项VBAC#开发调试体验差断点调试困难好Visual Studio完整调试数据结构支持弱基本是数组字典强泛型、LINQ、异步与外部系统集成难易数据库、Web API都方便第三方库引用受限强大NuGet生态部署方式只能在宏环境内可编译为exe/add-in独立运行我最终选择C#还因为一个很实在的理由公司整体开发栈偏向.NET遇到问题时身边能问的同事多网上C#相关的SOLIDWORKS API示例也远比VB.NET丰富。如果你习惯VB语法那VB.NET也可以但后续示例我都以C#给出。1.2 标注自动化的核心架构我把整个自动化过程拆成了五个层次每一层只做一件事连接层获取正在运行的SOLIDWORKS实例或者启动新实例打开工程图文件。数据层从自定义属性CustomProperty、Excel配置表或JSON配置中读取需要标注的内容比如技术要求文本、标题栏字段值、尺寸公差值。对象层用API遍历工程图中的图纸Sheet、视图View、注释Annotation等对象建立“可操作对象清单”。执行层按预先定义的规则在指定位置插入/更新/删除标注对象同时设置字体、字号、图层、线型。校验层检查是否全部插入成功、是否有位置重叠、是否存在未标注项生成日志报告。这套分层不是一上来就设计好的是多次迭代“打补丁”出来的。最开始的版本把所有逻辑揉在一个按钮事件里代码六百多行改一个需求要翻半天而且任何一处抛异常都不容易定位。后来老老实实按分层重构虽然前期花了一些时间但后面再扩展新功能比如增加“标注气泡”模式、支持多图纸就顺畅太多了。1.3 为什么标注的数据要从外部“读入”而不是“写死”新手最容易犯的错误是把所有要标注的内容直接写在代码里。比如string title 技术要求; string content 1. 未注圆角R3\n2. 去除毛刺飞边;这么做当时跑得通但图纸一换就得改代码重新编译。正确做法是把数据源外置代码与数据分离。我最常用的是两种方式Excel配置表适合批量、多型号、需要频繁改参数的项目。比如每张图纸对应的“图号、名称、材料、重量、技术要求模板”都在Excel里维护。SOLIDWORKS自定义属性适合直接在文件内部管理数据。工程图关联的零件模型通常已经填好了自定义属性Part Number、Description、Material、Weight等标注时直接读取天然不会填错。核心原则就一句话代码只负责“怎么标”内容由“数据源”决定。这样换一张图纸、换一批参数只需要改配置文件代码一行不用动。2. 核心细节解析与实操要点这个项目的核心API集中在SolidWorks.Interop.swconst、SolidWorks.Interop.swdocumentmgr等命名空间里。工程图标注主要会用到几个关键对象ModelDoc2文档对象、DrawingDoc工程图文档对象、Sheet图纸、View视图、Annotation注释基类、Note注释文本、Dimension尺寸。2.1 引用的添加与SLDWORKS对象获取在Visual Studio中新建一个Windows Forms项目或者控制台项目我建议Windows Forms因为后续加参数配置界面方便。右键“引用”添加两个核心COM组件SolidWorks.Interop.swconst.dll——常量和枚举定义。SolidWorks.Interop.swdocumentmgr.dll——文档管理接口。还需要通过NuGet安装SolidWorks.Interop.sldworks不同版本包名略有差异也可以直接浏览COM组件里选择“SolidWorks 2023 Type Library”之类的。连接已有的SOLIDWORKS实例我建议用SldWorks的Activator.CreateInstance配合Marshal.GetActiveObject尝试获取获取不到则新启动// 获取正在运行的SOLIDWORKS实例若没有则启动一个新的 SldWorks swApp null; try { swApp Marshal.GetActiveObject(Sldworks.Application) as SldWorks; } catch { Type swType Type.GetTypeFromProgID(Sldworks.Application); swApp (SldWorks)Activator.CreateInstance(swType); swApp.Visible true; } if (swApp null) { MessageBox.Show(无法连接或启动SOLIDWORKS); return; } // 打开工程图 ModelDoc2 swDoc swApp.OpenDoc6( drawingFilePath, (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, , ref err, ref warn); DrawingDoc drawingDoc (DrawingDoc)swDoc;这里有个容易忽略的坑Marshal.GetActiveObject只能获取“本Session”中注册的实例如果你是用管理员权限运行SOLIDWORKS但你的C#程序不是管理员权限会连接失败。最简单的解决办法是两边都非管理员运行两边都管理员运行或者程序中主动再启动一个新实例。我实际使用中更倾向于让程序自动启动SOLIDWORKS并打开指定文件这样环境更可控不受用户当前打开文件的影响。2.2 遍历图纸与视图拿到放置标注的坐标系SOLIDWORKS工程图的坐标系逻辑上有点绕很多新手在这里被卡住。工程图里的每个视图Drawing View都有自己的坐标系而注释Note的锚点位置默认是在图纸空间Paper Space里通过X、Y坐标来定位的单位通常是米API默认返回米而不是毫米这点特别坑稍不留神位置就飞到十万八千里去了。遍历图纸和视图的代码// 遍历所有图纸 int sheetCount drawingDoc.GetSheetCount(); for (int i 1; i sheetCount; i) { drawingDoc.ActivateSheetByPosition(i); Sheet swSheet (Sheet)drawingDoc.GetCurrentSheet(); // 获取当前图纸上的所有视图 object[] viewObjs (object[])drawingDoc.GetViews(); if (viewObjs null) continue; foreach (object viewObj in viewObjs) { View swView (View)viewObj; // 视图名称、位置、比例 string viewName swView.Name; double[] pos (double[])swView.Position; // {x,y} double scale swView.Scale; // 遍历视图包含的注释 object[] annotations (object[])swView.GetAnnotations(); // ... 后续处理 } }提示GetViews()返回的坐标系是图纸空间的全局坐标而View内部还有GetOutline()可以获得视图边界。在自动标注时我一般会先把视图边界和位置读出来然后按“视图上方120mm、右侧80mm”这类相对位置去放注释而不是用绝对的坐标。因为图纸布局经常要调整相对位置能确保视图动了标注也跟着动。2.3 注释Note的插入与格式化插入一个普通文本注释核心方法是InsertAnnotation或AddNote。不同版本API写法有差异我推荐使用InsertAnnotation// 在指定位置插入文本注释位置单位为米 bool insertResult drawingDoc.InsertAnnotation( text, // 注释内容支持\n换行 xPos, // X坐标米 yPos, // Y坐标米 0, // Z坐标 0, // 角度 0, // 无属性链接 宋体, // 字体名称 12, // 字号单位是点注意这里的12不是图纸高度而是字体point size 1, // 粗体1是0否 0, // 斜体1是0否 0, // 下划线1是0否 -1, // 默认颜色 0, // 默认对齐方式 0); // 默认旋转这里要特别注意InsertAnnotation的坐标单位是米不是毫米也不是英寸。工程图里我们习惯用毫米思考所以取坐标时一定要转换。比如你要在视图右上角偏下方相对图纸原点X200mm、Y150mm处放注释需要传入0.2和0.15。至于字体的“字号”注意它和SOLIDWORKS工程图里的“标注字体高度”不是一个概念。工程图模板里标注样式的字体高度通常设为“3.5mm”或“5mm”这个数值表示实际打印到图纸上的字高。但API的InsertAnnotation参数里那个12代表point size点pt和mm的换算关系是1pt 0.3528mm所以如果模板的字体高度是5mm这里pt大约要传14.17。我用了一个辅助函数做转换private int ConvertMmToPt(double mmHeight) { return (int)Math.Round(mmHeight / 0.3528); }字体设置是个精细活。我们的企业模板要求“技术要求”四个字用黑体5mm、加粗下面的条目内容用宋体3.5mm。如果只用InsertAnnotation一次性插入整段文本字体只能统一设成一种做不到局部区分。这种场景有两种方案多次插入Note每个Note单独设置字体再通过Y坐标手动控制行距。插入一个Note后用API遍历它的TextFormat逐行或逐段设置字体属性这个复杂度高一些适合做精细排版。我实际项目里90%的场景用第一种就够了简单、稳定。行距就用固定的行距系数 × 字高比如3.5mm字体行距取1.4倍即4.9mm。2.4 尺寸标注的自动化从模型获取尺寸自动标尺寸比插入文本麻烦不少因为尺寸对象是与模型特征关联的。一个比较直接的思路是遍历模型中的某个特征读取它的尺寸Dimension对象然后将尺寸在指定视图中显示出来。但如果你只是想自动化“标注中心孔直径”、“标注沉孔深度”这种可以直接向指定视图插入“模型项目”// 在指定视图中插入模型项目 bool insertDimResult drawingDoc.InsertModelAnnotations3( 0, // 选项0为默认 (int)swInsertAnnotations_e.swInsertAnnotations_DimSmart, // 智能尺寸 0, 0, false, view, true);InsertModelAnnotations3会把模型里已存在的尺寸全部导入到指定视图中。但这样有一个坑它会一股脑把所有尺寸都导进来注释、参考尺寸、中心线全带上了还要人工筛一遍。如果你要精确控制“哪几个尺寸出现在哪”就需要用Dimension的SetDimPosition和SetDimensionVisible来控制Dimension dim (Dimension)modelDoc.Parameter(D1草图1); dim.SetDimensionVisible(true, view); dim.SetDimPosition(x, y); // 设置尺寸文本的位置这套流程的难点在于需要理解“哪些尺寸被驱动、哪些尺寸是工程图中的标注尺寸”。尺寸有“模型尺寸”和“工程图尺寸”两种身份自动化标注时习惯了输入参数后很容易把这两个概念混淆导致改了一处影响了模型的约束关系。我的建议是如果你只是做“标注自动化”尽量操作工程图尺寸如果确实需要操作模型尺寸一定在事务环境中做好回退。2.5 属性信息的自动读取与写入工程图标题栏里的“图号”、“名称”、“材料”、“重量”、“比例”这些信息强烈建议通过CustomPropertyManager读取。写入标题栏的方式有两种一种是直接把值写到图纸格式Sheet Format中预先定义的“链接属性”里这样标题栏自动更新另一种是代码遍历标题栏中的所有文字Note按“枚举文字内容匹配到对应Tag”然后替换。第一种更干净前提是你的图框模板事先做成了“属性链接到标题栏”。示例代码读取模型自定义属性ModelDoc2 modelDoc swApp.ActiveDoc; String customPropName Material; string valOut ; bool found false; bool res (bool)modelDoc.Extension.GetCustomProperty( customPropName, // 属性名 false, // 不解析表达式 out valOut, // 属性值输出 out found); // 是否找到 if (found) { Console.WriteLine($材料: {valOut}); }如果你需要在工程图里创建或更新标题栏字段比如“重量”是后期计算的可以这样modelDoc.Extension.SetCustomProperty( 重量, // 属性名 false, // 不保留表达式 4.35); // 属性值有个细节自定义属性的名称如果包含中文字符API完全支持但要注意编码。C#工程里源文件保存为UTF-8 with BOM否则中文注释或者中文字符串可能会乱码尤其在VS2022之前的版本里这个坑挺常见的。3. 实操过程与核心环节实现下面我把一个最小可运行的示例串起来。目标打开指定的工程图检查当前图纸上是否存在“技术要求”注释如果不存在则在视图右上角插入一个文本注释最终保存文件并导出PDF。这个场景我用在好几个型号的项目里属于基操中的基操。3.1 准备环境与项目骨架新建Windows Forms项目.NET Framework 4.8或.NET Core 3.1以上都行SOLIDWORKS 2021及以上官方已经支持.NET Core的Add-in但独立exe还是.Net Framework最稳。引用上面的COM组件。在界面放几个控件文件路径文本框浏览按钮、输入参数的区域、一个“开始标注”按钮。引用命名空间using SolidWorks.Interop.sldworks; using SolidWorks.Interop.swconst; using System.Runtime.InteropServices;3.2 高可用连接函数带重试机制我在实际使用中发现SOLIDWORKS API的连接偶发性地会因为“实例正在忙”而失败加个简单的重试机制能提升不少稳定性public static SldWorks ConnectToSolidWorks(int retryCount 5) { SldWorks swApp null; for (int i 0; i retryCount; i) { try { swApp Marshal.GetActiveObject(Sldworks.Application) as SldWorks; break; } catch { Type swType Type.GetTypeFromProgID(Sldworks.Application); swApp (SldWorks)Activator.CreateInstance(swType); swApp.Visible true; System.Threading.Thread.Sleep(1000); } } return swApp; }3.3 核心自动化标注代码下面是完整的一段“在指定视图右侧插入技术要求”的逻辑public void AutoInsertRequirements(DrawingDoc drawingDoc, View targetView, string requirementText) { if (drawingDoc null || targetView null) return; // 1. 拿视图的位置 double[] viewPos (double[])targetView.Position; double viewX viewPos[0]; double viewY viewPos[1]; // 更稳妥的方式是拿视图的外包矩形然后放到其右上角偏移一点 double[] viewBox (double[])targetView.GetOutline(); double xPos Math.Max(viewBox[1] 0.05, viewX 0.06); // viewBox[1]右边界再偏移50mm double yPos viewBox[3] 0.08; // viewBox[3]上边界再偏移80mm // 2. 插入前先检查是否当前图纸已存在同名注释避免重复插入 bool exists false; object[] annotations (object[])drawingDoc.GetActiveSheet().GetAnnotations(); if (annotations ! null) { foreach (object ann in annotations) { Annotation annotation (Annotation)ann; string annText annotation.GetAnnotationText(); if (!string.IsNullOrEmpty(annText) annText.StartsWith(技术要求)) { exists true; break; } } } if (exists) { MessageBox.Show(图纸已存在技术要求注释跳过); return; } // 3. 插入注释 bool ok drawingDoc.InsertAnnotation( requirementText, xPos, yPos, 0, 0, 0, 黑体, ConvertMmToPt(5), 1, 0, 0, -1, 0, 0); if (ok) { // 4. 可以顺手把注释的图层设置一下 Annotation insertedAnn (Annotation)drawingDoc.GetActiveSheet().GetAnnotations()[ drawingDoc.GetActiveSheet().GetAnnotationCount() - 1]; // 也可以设置图层insertedAnn.Layer 注释层; } else { throw new Exception(插入注释失败); } }注意我给这段代码加了两个防御先查重、再插入。实际工作中多次遇到过同一张图纸被运行两次、注释叠在一起的问题。加一个“按内容前缀查重”能有效规避。3.4 保存与导出PDF标注完成后一般建议做两件事保存源文件、导出PDF交付给下游。保存用ModelDoc2::Save3导出PDF用SaveAsModelDoc2 modelDoc drawingDoc as ModelDoc2; // 保存 modelDoc.Save3( (int)swSaveAsOptions_e.swSaveAsOptions_Silent, ref err, ref warn); // 导出PDF string pdfPath Path.ChangeExtension(drawingFilePath, .pdf); bool exportOk modelDoc.SaveAs( pdfPath, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref err, ref warn);导出PDF时有个坑如果文件名已存在SOLIDWORKS可能不会直接覆盖某些版本会弹窗。稳妥的做法是导出前先File.Delete(pdfPath)。3.5 用配置表格驱动的批量标注当图纸数量多了以后纯手工在代码里指定每个文件路径和注释内容也不现实。我的做法是用一个Excel配置文件每一行代表一张图纸列包括图纸文件名图纸路径技术要求模板是否导出PDF是否需要标注重量底座.drwD:\cadfiles\默认模板1是是盖板.drwD:\cadfiles\默认模板2是否程序启动时用Microsoft.Office.Interop.Excel或NPOI商用项目推荐NPOI避免装Office读取Excel然后循环每一行去打开图纸、执行标注、保存、导出PDF。这种方式让我可以一次性批量处理几十张图纸处理完成后只翻看日志而不是一张张人工守着点。这个方案的瓶颈主要在SOLIDWORKS打开文件的速度一张图大概3~8秒不等如果50张图就是几分钟可以接受毕竟换成人工的话是几小时的工作量。4. 常见问题与排查技巧实录这块我得专门写因为遇到的坑太多了。很多问题不是逻辑写错而是SOLIDWORKS API的行为和直觉不符。4.1 崩溃与无响应多半是COM对象没按规矩释放这是最严重也最常见的问题。SOLIDWORKS API大量使用COM接口.NET调完如果不Marshal.ReleaseComObject或FinalReleaseComObject就会导致内存中COM引用计数不断增加最终SOLIDWORKS崩溃或无响应。尤其是循环处理多张图纸时往往到第20张图突然崩掉就是因为前面的对象没释放干净。我的经验是凡是通过GetActiveObject、GetViews、GetAnnotations等获取的对象使用完立即释放。做一个工具方法public static void ReleaseCOM(object obj) { if (obj ! null) { if (Marshal.IsComObject(obj)) { Marshal.FinalReleaseComObject(obj); } } }然后在循环末尾统一释放视图对象、注释对象、Sheet对象等。4.2 为什么GetViews()在某些图纸上返回空我遇到过一次在激活图纸A时调用drawingDoc.GetViews()返回的是空数组。后来排查半天发现当工程图有两张以上图纸时GetViews()默认只返回“当前激活图纸”的视图如果你之前没有ActivateSheetByPosition激活目标图纸可能得到空值或者旧数据。所以接口里明确先激活图纸再取视图而且激活后加一个Application.DoEvents()让UI线程稍微喘口气等界面状态完成刷新再继续。4.3 工程图打开时崩溃模板、字体缺失或显卡驱动问题有网友反馈“SOLIDWORKS打开工程图就崩溃”这不一定是你代码的问题。如果只是自动化程序打开某张特定图纸就崩我排查优先级是这样的手动打开这张图会不会崩如果手动也崩先修文件或环境。手动不崩、自动化崩就看崩溃是不是发生在“打开立即操作”时如果是加延时或DoEvents。如果是字体问题图纸里用了你没装的字体直接把Windows字体补齐。另外一个高频崩溃源是显卡驱动导致的视图刷新问题。SOLIDWORKS工程图打开时触发OpenGL渲染某些显卡驱动版本会导致崩溃。解决方案是临时切换到“软件OpenGL”模式工具 - 选项 - 性能 - 使用软件OpenGL或者在启动时通过注册表强制。这个问题发生频率不高但一旦发生特别坑看起来像程序写错了其实是被渲染驱动坑的。4.4 插入的注释文字显示为乱码或???绝大多数情况下是编码问题但这里的编码问题有两个来源源码文件本身的编码要UTF-8 with BOM。SOLIDWORKS没有正确识别你传入的Unicode字符串。某些API的重载会有MarshalAs(UnmanagedType.BStr)的要求如果你从外部Excel读入的字符串本身就已经乱码比如Excel文件编码不对那程序里看到的就是乱码然后原样插入。排查时先确认变量值本身是否正确再谈API的问题。4.5 坐标位置飞到视图外面的边界情况初次运行时常发现注释跑到图纸区域外或者跑到左上角巨大空格里。原因就是单位换算和坐标系定位搞错了。SOLIDWORKS API中图形区域的坐标有些接口返回“图纸空间”坐标以图纸中心为原点有些返回“视图空间”坐标以视图边界左下角为原点。同一段代码里如果混用了两套坐标系位置就会乱飞。我的经验是所有自动化标注都采用“相对位置”策略——先通过GetOutline()拿到目标视图的边界框然后在左上、右上、下方等固定偏移点偏移量由自己定义放置注释。这样哪怕视图移动了注释也会跟着走不会出界。这里还有个容易被忽视的点GetOutline()返回的坐标单位是米很多模板里视图比例不是1:1比如1:2的视图实际模型在图纸上的显示尺寸是模型尺寸的一半但坐标值返回的是“图纸上实际占用的尺寸”。自动化计算偏移时建议直接以图纸坐标为基准不要乘比例否则就会出现标注位置和视图实际显示对不上。4.6 如何安全地批量处理多张图纸批量处理时每处理完一张图建议强制GC回收并且让出线程一小段时间GC.Collect(); GC.WaitForPendingFinalizers(); System.Threading.Thread.Sleep(300);这套组合拳大幅度减少了长时间运行时内存膨胀的问题。另外在循环里别把所有图纸都打开而不关闭那样SOLIDWORKS内存会暴涨。处理完一张就CloseDoc一张。如果遇到极个别的图纸反复导致崩溃我会在循环里加个try-catch记录失败文件名至少让批量任务能继续跑完回来看日志再修。5. 扩展方向与进阶思路跑通这个标注自动化的框架后后面可以扩展出一系列有价值的应用标注规范性校验遍历所有尺寸检查字体高度是否与模板一致、尺寸线有没有重叠、是否符合企业标准。相当于把“人工审图”变成“自动审图”。BOM表自动更新从模型读取装配体BOM信息自动在工程图指定位置生成或刷新BOM表然后标注序号。批量出图流水线配合CI/CD工具比如在服务端用Automation API做“模型修改后自动出图导出PDF归档”这个在版本发布阶段很实用。与PDM/ERP系统打通通过C#读取PDM中的审批状态或者ERP里的物料编码自动写入图纸自定义属性避免重复录入和人为错误。其中我目前觉得性价比最高的扩展是“标注规范性校验”。它不需要改图纸只需要读数据零风险。比如检查所有注释里的“R角符号”有没有统一写法R还是r、有没有“未注公差按GB/T 1804-m”这类必填项一旦发现不符合规则就直接报错提醒工程师人工确认。还有个小细节做批量任务时建议给程序加一个日志窗口把每一张图纸的处理结果都打出来14:23:01 [OK] D:\cadfiles\底座.drw 标注完成插入注释 3 处导出PDF成功 14:23:08 [SKIP] D:\cadfiles\盖板.drw 已存在“技术要求”跳过 14:23:15 [FAIL] D:\cadfiles\法兰.drw 异常视图获取失败请手动检查这个日志功能前期只花十几分钟但后面排查问题会省下大量时间。机械行业讲究“可追溯”日志就是程序层面的可追溯性。回到自动化标注这件事本身我的体会是做这种二次开发真正值钱的不是把某个操作“自动化”了而是你通过自动化把整个出图流程里所有的不确定性暴露出来了。当初我不做这个项目时以为标注慢是因为手速不够快做完才发现真正的问题在于每个人的标注习惯都不一样字号有人用3.5、有人用5技术要求有人放在左上、有人放在右上表格里文字对齐五花八门。用代码统一规则之后图纸规范了下游车间看图效率也上去了。最后再分享一个我一直在用的小技巧别把程序做成“一次性脚本”而是做成“可配置工具”。哪怕你现在只有三张图纸要做标注也花点心思把参数外置到配置文件或界面里。因为一旦尝到了自动化的甜头后面你会越来越想把更多图纸纳入进来那时候如果代码里写满硬编码就等于把自己锁死了。配置化虽然前期多花一两个小时但后面要改需求或者扩展功能成本能降低一个数量级。本文还有配套的精品资源点击获取
返回列表