当前位置: 首页 > news >正文

C# SolidWorks二次开发-实战1,找文件名不同实体相同的零件。

在这里插入图片描述
在这里插入图片描述

今天这篇文章话题来源于群里的聊天,在讨论有些插件功能的开发原理。

如标题,今天讲的是如何查找零件文件名不一样,但实际可能是同一个东西的办法。

- 题外话
熟悉Solidworks的人都知道,Solidworks有一个比较零件或者特征不同点的工具(专业版本才能用,免费版当然不限制)。
在这里插入图片描述
而且还有Api
在这里插入图片描述
具体的我之前的文件间讲过:https://blog.csdn.net/zengqh0314/article/details/106012670

当然今天的分析功能和上面的没啥关系哈,今天是通过代码的方式来分析类型于下图的装配体中,零件实体相同的不同名零件,这样可以进一步判断是否可以进行替换,减少非标物料的实际应用。
下图里的三个圆是同一零件生衍生出来的在这里插入图片描述
从肉眼看是一样的,但当零件很多的时候。或者说是借用别人的装配体的时候,相似的零件不能判断是否一样。
当前有人会想着重量,体积,重心等一样也可以判断是一样的。我之前也这么干过,但是不太准确。大概是没啥问题。

解题思路:
遍历所有零件及零件内的实体,如果两个零件的实体之间能够进行正常的一个几何变换到刚好重合的状态,就说明两个零件的实体是一样的。也可以认为这两个零件是一样的。就这是所谓的不同文件名但长一样的零件。
最关键的api方法就是GetCoincidenceTransform2
在这里插入图片描述
具体的例子我就不讲了。

所以,要比较两个零件是否一样的,我们需要拿到零件对应的实体。再去用这个方法判断一下,是否能直接直接空间几何的变化后保持一致。

           var swApp = Connect.GetRunningSolidWorks();  //连接可以nuget上搜索Paine ,找到对应的引用。var swModel=swApp.IActiveDoc2;var KeepComp = swModel.ISelectionManager.GetSelectedObjectsComponent3(1, -1);var MoveComp = swModel.ISelectionManager.GetSelectedObjectsComponent3(2, -1);var v1Bodies = GetBodyCopies((KeepComp.IGetModelDoc() as PartDoc));var v2Bodies = GetBodyCopies((MoveComp.IGetModelDoc() as PartDoc));if (v1Bodies.Length==1 && v2Bodies.Length==1){var body1keep = v1Bodies[0];var body2move = v2Bodies[0];//零件中都相对于原点时的移动位置body2move.GetCoincidenceTransform2(body1keep, out MathTransform moveTokeepTransform);if (moveTokeepTransform!=null){MessageBox.Show(@"两零件实体相同!");                 }else{MessageBox.Show(@"两零件不同!");return;}}

上面就是关键的代码了,当然实际 应用中还可以做很多不同的事情 ,比如,零件的自动替换工作。
上面代码中用到了一个复制零件实体的功能。

        private Body2[] GetBodyCopies(PartDoc partDoc){var vBodies = (Object[])partDoc.GetBodies2((int)swBodyType_e.swAllBodies, true);Body2[] newBodies = new Body2[vBodies.Length];for (int i = 0; i < vBodies.Length; i++){var swBody2 = (Body2)vBodies[i];newBodies[i] = (Body2)swBody2.Copy();}return newBodies;}

而且还可能 需要判断 一些其它看不见的信息,比如质量 材质等其它信息。

我们来看下执行结果 :
在这里插入图片描述

在这里插入图片描述

有了这个判断 的结果 ,要达到第一个图插件的目的,就需要遍历所有不同的零件文件,进行统一的比较。再将结果分组实现即可。

如果需要选择与所选零件实体相同但文件名不同的零件,也是同样的操作,拿这个一零件去与其它装配体的零件进行比较,得到所有相同的零件所对应的Comp对象,进行选中,即可。

上面的代码我会单独保存出来,下次再上传。

相关文章:

  • Jenkins 2.479.1安装和邮箱配置教程
  • 机器学习算法03:聚类算法
  • 鸿蒙 HarmonyOS - SideBarContainer 组件自学指南
  • Redis 插入中文乱码键
  • AR-HUD 光波导方案优化难题待解?OAS 光学软件来破局
  • 直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
  • 无缝转换!冶金级DEVICENET转EtherCAT网关,稳定可靠扛得住!
  • Centos7系统下脚本一键部署LAMP环境
  • Idea 配置 Maven 环境
  • AAOS系列之(七) --- AudioRecord录音逻辑分析(一)
  • Java并发
  • RocketMQ 死信队列(DLQ)实战:原理 + 开发 + 运维 + 架构应用指南
  • 从Java的Jvm的角度解释一下为什么String不可变?
  • 【SpringCache 提供的一套基于注解的缓存抽象机制】
  • Arduino学习-跑马灯
  • Visual studio 中.sln/.vcxproj/.vcxproj.filters和.vcxproj.user文件的作用
  • dify账号与基础模型配置
  • 比较云计算的四种部署模式:哪个是最佳选择?
  • DeepSeek 赋能数字人直播带货:技术革新重塑电商营销新生态
  • 【OpenHarmony】【交叉编译】使用gn在Linux编译3568a上运行的可执行程序
  • 网站专栏建设方案/自媒体有哪些平台
  • 万网网站建设方案书/济宁网站建设
  • 合肥网站设计goz/无代码建站
  • 成都企业管理培训/五种关键词优化工具
  • 广东省优质高职院校建设网站/线上推广方式有哪些
  • 龙华网站建设服务/新网店怎么免费推广