获得solidworks 3d零件的包围框 长宽高 boundingbox c#

张开发
2026/4/14 1:09:20 15 分钟阅读

分享文章

获得solidworks 3d零件的包围框 长宽高 boundingbox c#
usingSystem;usingSolidWorks.Interop.sldworks;usingSolidWorks.Interop.swconst;namespacetools{/// summary/// 零件尺寸工具类 - 用于获取零件的长宽高尺寸/// /summarypublicclassPartDimensionHelper{/// summary/// 获取零件的边界框尺寸长、宽、高/// /summary/// param namepartDoc零件文档对象/param/// returns包含长、宽、高的元组 (length, width, height)单位为毫米/returnspublicstatic(doublelength,doublewidth,doubleheight)GetPartDimensions(PartDocpartDoc){try{if(partDocnull){Console.WriteLine(错误零件文档为空);return(0,0,0);}// 使用 GetPartBox 方法获取边界框// 参数 true 表示返回用户单位通常是米false 表示系统单位objectboxObjpartDoc.GetPartBox(true);if(boxObjnull){Console.WriteLine(警告无法获取零件边界框);return(0,0,0);}double[]boxArray(double[])boxObj;if(boxArraynull||boxArray.Length6){Console.WriteLine(警告边界框数据格式不正确);return(0,0,0);}// boxArray 包含 [Xmin, Ymin, Zmin, Xmax, Ymax, Zmax]// 计算长宽高单位已经是用户单位通常是米需要转换为毫米doublelengthMath.Abs(boxArray[3]-boxArray[0])*1000.0;// X方向doublewidthMath.Abs(boxArray[4]-boxArray[1])*1000.0;// Y方向doubleheightMath.Abs(boxArray[5]-boxArray[2])*1000.0;// Z方向return(Math.Round(length,2),Math.Round(width,2),Math.Round(height,2));}catch(Exceptionex){Console.WriteLine($获取零件尺寸时出错{ex.Message});return(0,0,0);}}/// summary/// 根据零件名称获取零件文档并返回其尺寸/// /summary/// param nameswAppSolidWorks应用程序对象/param/// param namepartName零件名称不含路径和扩展名/param/// returns包含长、宽、高的元组 (length, width, height)单位为毫米/returnspublicstatic(doublelength,doublewidth,doubleheight)GetPartDimensionsByName(SldWorksswApp,stringpartName){try{if(swAppnull||string.IsNullOrEmpty(partName)){Console.WriteLine(错误参数无效);return(0,0,0);}// 尝试查找已打开的文档ModelDoc2modelDocnull;// 遍历所有打开的文档查找匹配的零件object[]docs(object[])swApp.GetDocuments();foreach(objectdocObjindocs){ModelDoc2doc(ModelDoc2)docObj;if(doc!nulldoc.GetType()(int)swDocumentTypes_e.swDocPART){stringdocTitleSystem.IO.Path.GetFileNameWithoutExtension(doc.GetTitle());if(docTitle.Equals(partName,StringComparison.OrdinalIgnoreCase)){modelDocdoc;break;}}}// 如果没有找到已打开的文档尝试从文件系统查找if(modelDocnull){// 这里可以添加从文件系统查找零件的逻辑Console.WriteLine($警告未找到已打开的零件 {partName});return(0,0,0);}PartDocpartDoc(PartDoc)modelDoc;returnGetPartDimensions(partDoc);}catch(Exceptionex){Console.WriteLine($根据名称获取零件尺寸时出错{ex.Message});return(0,0,0);}}}}

更多文章