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

article/2025/7/27 19:17:57

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

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

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

- 题外话
熟悉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对象,进行选中,即可。

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


http://www.hkcw.cn/article/bdcrGBcOWj.shtml

相关文章

ES5时代的残党(被ES6淘汰的JS写法)

近年来&#xff0c;JavaScript语言经历了翻天覆地的变化。ES6(ECMAScript 2015)的发布标志着JavaScript进入了现代化时代&#xff0c;带来了大量新特性和更优雅的写法。但时至今日&#xff0c;许多开发者仍然固守着ES5时代的老旧模式&#xff0c;这不仅使代码显得过时&#xff…

【Python】4.字典和文件

文章目录 一、字典1、字典是什么&#xff1f;2、创建字典3、查找 key4、新增/修改元素5、删除元素6、遍历字典元素7、取出所有 key 和 value8、合法的 key 类型小结 二、文件1、文件是什么&#xff1f;2、文件路径3、文件操作1&#xff09;打开文件2&#xff09;关闭文件3&…

物流项目第十一期(智能调度之分配快递员)

本项目专栏&#xff1a; 物流项目_Auc23的博客-CSDN博客 整体核心业务流程 关键流程说明&#xff1a; 用户下单后&#xff0c;会产生取件任务&#xff0c;该任务也是由调度中心进行调度的订单转运单后&#xff0c;会发送消息到调度中心&#xff0c;在调度中心中对相同节点的运…

React 项目中封装 Excel 导入导出组件:技术分享与实践

文章目录 前言一、为什么需要封装 Excel 组件&#xff1f;二、技术选型三、核心实现1. 安装依赖2. 封装Excel导出3. 封装导入组件 &#xff08;UploadExcel&#xff09; 总结 前言 在 React 项目中&#xff0c;处理 Excel 文件的导入和导出是常见的业务需求。无论是导出报表数…

用calibredrv提取版图中指定类型cell,保留位置信息并输出新的gds

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 现在有一个gds,其中的bump位置信息是我们需要的,如何从现有的gds中提取我们需要的部分呢? 需要用到工具calibredrv,如果数量少,可以用图形界面操作,方法如下: 01 打开gds calibredrv -m inp…

iOS 使用CocoaPods 添加Alamofire 提示错误的问题

Sandbox: rsync(59817) deny(1) file-write-create /Users/aaa/Library/Developer/Xcode/DerivedData/myApp-bpwnzikesjzmbadkbokxllvexrrl/Build/Products/Debug-iphoneos/myApp.app/Frameworks/Alamofire.framework/Alamofire.bundle把这个改成 no 2 设置配置文件

Python基本运算符

White graces&#xff1a;个人主页 &#x1f439;今日诗词:相恨不如潮有信&#xff0c;相思始觉海非深&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; 目录 &#x1f9ee; Pyt…

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: 80端口被占用

Nginx启动报错&#xff1a;nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 这个报错代表80端口被占用 先查看占用80的端口 netstat -aon | findstr :80 把它杀掉&#xff0c;强…

vscode命令行debug

vscode命令行debug 一般命令行debug会在远程连服务器的时候用上&#xff0c;命令行debug的本质是在执行时暴露一个监听端口&#xff0c;通过进入这个端口&#xff0c;像本地调试一样进行。 这里提供两种方式&#xff1a; 直接在命令行中添加debugpy&#xff0c;适用于python…

(笔记+作业)第五期书生大模型实战营---L1G2000 OpenCompass 评测书生大模型实践

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QdhEwaIINietCak3Y1dcdbLJn3e 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…

激光雷达的强度像和距离像误差与噪声分析(1)2025.5.30

激光雷达的强度像和距离像在测量过程中可能受到多种误差和噪声的影响&#xff0c;这些因素既包括硬件本身的物理特性&#xff0c;也涉及环境条件和算法处理等外部因素。以下是主要误差类型、噪声来源及其关键影响因素的综合分析&#xff1a; 一、强度像的误差与噪声 能量信号…

uboot移植之IOMUX介绍

本章节主要讲&#xff0c;如何将NXP官方i.MX6ULL EVK评估板的uboot源码移植适配到ELF 1开发板。本身uboot的作用就是启动内核&#xff0c;只要能成功启动内核&#xff0c;uboot使命便已完成。但是从开发调试的角度来讲&#xff0c;有时候我们需要在uboot阶段使用一些外设接口方…

3DMAX+Photoshop教程:将树木和人物添加到户外建筑场景中的方法

在本教程中&#xff0c;我将向您展示如何制作室外场景。我不会详细解释每一个细节&#xff0c;而是想快速概述一下我的方法。 在本教程中&#xff0c;我使用了一个相对简单的3D模型&#xff0c;并向您展示了在一些高质量纹理的帮助下可以做什么。此外&#xff0c;我将向您展示…

n8n 中文系列教程_25.在n8n中调用外部Python库

在n8n中使用Python处理复杂任务时&#xff0c;内置的Code节点由于运行在沙盒环境中&#xff0c;无法直接调用外部Python库&#xff08;如pandas、requests等&#xff09;&#xff0c;限制了工作流的扩展能力。本文将介绍一种持久化解决方案&#xff1a;通过Docker挂载目录虚拟环…

STM32单片机简介

1.基本情况 STM32单片机正如其名是32位微控制器&#xff0c;相较于51单片机的8位微控制器&#xff0c;性能会更好&#xff0c;但学习难度也会提高。 在stm32单片机中内核时核心部分&#xff0c;是ARM公司设计的&#xff0c;其在stm32单片机中占据极为重要的地位。(程序指令的…

安全帽目标检测

安全帽数据集 这里我们使用的安全帽数据集是HelmentDetection&#xff0c;这是一个公开数据集&#xff0c;里面包含5000张voc标注格式的图像&#xff0c;分为三个类别&#xff0c;分别是 0: head 1: helmet 2: person 安全帽数据集下载地址、 我们将数据集下载后&#xff0c…

气镇阀是什么?

01、阀门介绍&#xff1a; 油封机械真空泵的压缩室上开一小孔&#xff0c;并装上调节阀&#xff0c;当打开阀并调节入气量&#xff0c;转子转到某一位置&#xff0c;空气就通过此孔掺入压缩室以降低压缩比&#xff0c;从而使大部分蒸汽不致凝结而和掺入的气体一起被排除泵外起此…

1,QT的编译教程

目录 整体流程&#xff1a; 1&#xff0c;新建project文件 2,编写源代码 3&#xff0c;打开QT的命令行窗口 4&#xff0c;生成工程文件&#xff08;QT_demo.pro&#xff09; 5&#xff0c;生成Make file 6&#xff0c;编译工程 7&#xff0c;运行编译好的可执行文件 整体…

Linux操作系统 使用共享内存实现进程通信和同步

共享内存使用 //main.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <sys/shm.h> #include <string.h> int main() {int shmidshmget((key_t)1234,256,IPC_CREAT|0600);assert(shmid!-1);…

力扣HOT100之动态规划:322. 零钱兑换

这道题和上一道题279.完全平方数的套路是完全一样的&#xff0c;但是这道题不需要我们自己生成物品列表&#xff0c;函数的输入中已经给出了&#xff0c;但是这道题有一个坑&#xff0c;就是我们在初始化dp数组的时候&#xff0c;所有的位置不应该赋值为INT_MAX&#xff0c;因为…