SolidWorks二次开发系列入门100篇之97-极点坐标

在这里插入图片描述
什么是极点

一个模型中的极点是指在某个方向上的最高或最低点。在三维模型中,通常有三个方向:x轴、y轴和z轴。因此,在x轴,y轴和z轴的正方向和负方向上,每个模型可能都有两个极点。极点通常是一些锐角或骨刺,可能需要特殊的注意和处理,以确保模型在渲染和动画过程中能够正确地呈现并不出现异常。

这是CSDN的AI回答的,意思应该没错吧,错了找它,别找我。在这里插入图片描述
直接一点就是某个指定方向向量上最远的一个点。

比如下面这个零件,是个斜的,别问我是谁画的在这里插入图片描述

在这里插入图片描述
这个情况下,我们要知道沿这个小圆柱上两个极点的坐标的距离 就是这个方向上的长度。
我猜这就是常规的用于包围盒可能用到的方法。
具体官方说明,请查看这个链接:
GetExtremePoint

但这个是针对某个实体的,所以在获取零件的一些极点时需要遍历实体,再获取每个实体的。
在这里插入图片描述
关键代码就这样了,复杂的我也不会。

		/// <summary>/// 极点坐标的获取/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnExtremePoint_Click(object sender, EventArgs e){SldWorks swApp = Utility.ConnectToSolidWorks();var swModel = (ModelDoc2)swApp.ActiveDoc;Vector3d vector = new Vector3d(new Point3d(0,0,0),new Point3d(1,1,1)).Normalized;//这里是针对零件。if (swModel != null &&swModel.GetType()==(int)swDocumentTypes_e.swDocPART){PartDoc part = (PartDoc)swModel;var vBodies = GetBodyCopies(part);for (int i = 0; i < vBodies.Length; i++){var body = vBodies[i];bool ExtPRes=  body.GetExtremePoint(vector.X,vector.Y,vector.Z,out double OutX,out double OutY,out double OutZ);if (ExtPRes){MessageBox.Show($@"{vector.X},{vector.Y},{vector.Z}->{OutX},{OutY},{OutZ}");}else{MessageBox.Show("未找到极点");}}}//如果是装配体。if (swModel != null && swModel.GetType() == (int)swDocumentTypes_e.swDocASSEMBLY){var vcomps = (object[])(swModel as AssemblyDoc).GetComponents(false);foreach ( var comp in vcomps){var tempComp=comp as Component2;if (tempComp == null) continue;if (tempComp.GetPathName().ToString().ToLower().EndsWith("sldprt")){//把装配中的向量先转到该Comp中var swMathUtility = swApp.IGetMathUtility();var tempTrans = tempComp.Transform2.IInverse();var tempPointInASM1 = new double[3] { 0, 0, 0 };var tempPointInASM2 = new double[3] { vector.X, vector.Y, vector.Z };var mathPointASM1 = (MathPoint)swMathUtility.CreatePoint(tempPointInASM1);var mathPointASM2 = (MathPoint)swMathUtility.CreatePoint(tempPointInASM2);var swMathPtInPart1 = (MathPoint)mathPointASM1.MultiplyTransform(tempTrans);var swMathPtInPart2 = (MathPoint)mathPointASM2.MultiplyTransform(tempTrans);var PointArrayData1 = (double[])swMathPtInPart1.ArrayData;var PointArrayData2 = (double[])swMathPtInPart2.ArrayData;//向量在该Component中Vector3d vectorInPart = new Vector3d(new Point3d(PointArrayData1),new Point3d(PointArrayData2)).Normalized;PartDoc part = (PartDoc)tempComp.IGetModelDoc();if (part != null) {var vBodies = GetBodyCopies(part);for (int i = 0; i < vBodies.Length; i++){var body = vBodies[i];bool ExtPRes = body.GetExtremePoint(vectorInPart.X, vectorInPart.Y, vectorInPart.Z, out double OutX, out double OutY, out double OutZ);if (ExtPRes){MessageBox.Show($@"零件{tempComp.Name2}->方向{vectorInPart.X},{vectorInPart.Y},{vectorInPart.Z}->{OutX},{OutY},{OutZ}(零件中的坐标)");//再转换到装配体中。var tempPointInPart = new double[3] { OutX, OutY, OutZ };var mathPoint= (MathPoint)swMathUtility.CreatePoint(tempPointInPart);var swMathPtInAsm = (MathPoint)mathPoint.MultiplyTransform(tempComp.Transform2);var arrayData = (double[])swMathPtInAsm.ArrayData;MessageBox.Show($@"零件{tempComp.Name2}->方向{vector.X},{vector.Y},{vector.Z}->{arrayData[0]},{arrayData[1]},{arrayData[2]}(装配体)");}else{MessageBox.Show("未找到极点");}}}}}}}

这就是结果,要注意的是这个点不一定是你想要的中心点或者什么点,但它一定是这个方向上的极点之一。(因为这边是一个平面)
在这里插入图片描述

所以如果我们读取反方向的,圆顶那边,基本上就是唯一的了。只有最顶部。
接近于0,0,0

在这里插入图片描述

在这里插入图片描述

说明功能正常,这个办法还有助于标总长总宽这种类型的,在工程图中可能需要做辅助点,具体的我就不再解释了
本系列课程源码 https://gitee.com/painezeng/CSharpAndSolidWorks

希望大家点赞收藏,还有什么来的。。。
在这里插入图片描述

对,给钱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

C# XML文档相关操作

C# 创建XML文档 XML文档知识点创建XML文档向XML中追加读取XML文档读取带属性的XML文档删除节点 XML文档知识点 XML 是可扩展的标记语言 XML:用来存储数据 注意点&#xff1a;XML是严格区分大小写的&#xff0c;XML标签也是成对出现的 XML文档有且只能有一个根节点&#xff1b;…

根据URL批量下载文件并压缩成zip文件

根据url批量下载图片或者视频&#xff0c;只需要将图片的url和名称放到数组对象即可&#xff0c;例如&#xff1a; let fileArr [{fvUrl:https://image.xuboren.com/image/2023/07/26/1410829074764cdbaa4314a084eb749e.jpg,fvName: 图片名称},{fvUrl:https://image.xuboren.…

Hive数据仓库

数据仓库概念与起源发展由来 数仓概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面相分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持…

git-版本控制器

集中式版本控制工具&#xff08;不常用&#xff09; 版本库集中于中央服务器&#xff0c;team要联网才能工作&#xff08;下载代码&#xff09; SVN CVS 分布式版本控制工具 每个电脑上都有一个完整的版本库&#xff0c;工作时无需联网&#xff0c;可以把修改推送给其他人来…

java(Collection类)

文章目录 Collection接口继承树Collection接口及方法判断删除其它 Iterator(迭代器)接口迭代器的执行原理 foreach循环Collection子接口1&#xff1a;ListList接口特点List接口方法List接口主要实现类&#xff1a;ArrayListList的实现类之二&#xff1a;LinkedListList的实现类…

Pytorch个人学习记录总结 10

目录 优化器 优化器 官方文档地址&#xff1a;torch.optimhttps://pytorch.org/docs/stable/optim.html Debug过程中查看的grad所在的位置&#xff1a; model --> Protected Atributes --> _modules --> ‘model’ --> Protected Atributes --> _modules -…

unity 使用Vuforia扫描物体( ModelTarget 模型目标)

1、下载vuforia插件vufora 2、下载模型生成器Model Target Generator 3、将vuforia插件导入到unity &#xff0c;我使用的unity是2021版本&#xff0c;导出插件时&#xff0c;只显示有两个文件&#xff0c;导入后&#xff0c;会有一个弹框 让更新插件&#xff0c;点击updata&am…

浅谈微服务异步解决方案

导言 异步是一种设计思想&#xff0c;不是设计目的&#xff0c;因此不要为了异步而异步&#xff0c;要有所为&#xff0c;有所不为。 异步不是『银弹』&#xff0c; 避免试图套用一个『异步框架』解决所有问题&#xff0c; 需要根据不同的业务特点或要求&#xff0c;选择合适的…

【数据结构】_5.栈

目录 1. 概念 2. 栈的使用 2.1 方法 2.2 示例 3. 栈的模拟实现 4. 栈的应用场景 4.1 题目1&#xff1a;不可能的出栈序列 4.2 题目2&#xff1a;逆序打印单链表 4.3 题目3&#xff1a;逆波兰表达式求值 4.4 题目4&#xff1a;括号匹配 4.5 题目5&#xff1a;栈的压入…

mysql月统计数据,没有的填充为0

要按时间戳字段按月份分组查询记录表&#xff0c;可以使用DATE_FORMAT函数将时间戳字段格式化为年月格式&#xff0c;然后将结果按照该字段进行分组。 SELECT a.month month,ifnull(b.count, 0) count FROM (SELECT 1 month UNION ALL SELECT 2 month UNION ALL SELECT 3 mont…

Day04-作业(MavenSpringBootWeb入门)

作业1&#xff1a;创建maven工程并配置相关依赖&#xff0c;完成如下需求 需求&#xff1a; 创建三个maven工程&#xff0c;projectA/projectB/projectC&#xff0c;在同一个idea窗口打开 三个maven工程设置依赖&#xff0c;关系入下图所示 作业2&#xff1a;基于SpringBoot…

走进人工智能|自动驾驶 开启智能出行新时代

前言 自动驾驶&#xff0c;也被称为无人驾驶或自动驾驶汽车&#xff0c;是指能够在没有人类干预的情况下自主地感知环境、决策和控制车辆行驶的技术和系统。 文章目录 前言主题发展趋势自动驾驶等级L0级自动驾驶L1级别自动驾驶L2级别自动驾驶L3级别自动驾驶L4级别自动驾驶L5级…

MySQL 在CentOS下安装

yum安装 1、yum源安装 yum install mariadb-server2、启动MySQL服务 systemctl start mariadb3、查看运行状态 systemctl status mariadb4、设置初始密码 mysql -u rootuse mysql;update user set passwordpassword("root")where userroot;flush privileges;e…

【LeetCode】5. 最长回文串

题目链接 文章目录 1. 思路讲解2. 代码实现 1. 思路讲解 与求回文子串思路差别不大 在做这道题目之前&#xff0c;可以先做一下另一道回文子串的题目&#xff0c;如果会了那道求回文子串的题目&#xff0c;这道题基本上也就会了。 回文子串的题解在这里 它也就是求出每一个回…

音乐节《迷笛音乐节》游玩感

上周&#xff0c;去了烟台&#xff0c;参加音乐节&#xff0c;以前从未参加过&#xff0c;所以趁着本周六周日双休的时候&#xff0c;去游玩了一次。&#xff08;1&#xff09;一种新奇体验 对于自己来说&#xff0c;参加音乐节还是一种新奇的体验的&#xff0c;也是疫情放开了…

苍穹外卖day09——历史订单模块(用户端)+订单管理模块(管理端)

查询历史订单——需求分析与设计 产品原型 业务规则 分页查询历史订单 可以根据订单状态查询 展示订单数据时&#xff0c;需要展示的数据包括&#xff1a;下单时间、订单状态、订单金额、订单明细&#xff08;商品名称、图片&#xff09; 接口设计 查询历史订单——代码开…

ChatGPT在法律行业的市场潜力

​ChatGPT现在已经成为我们的文字生成辅助工具、搜索引擎助手&#xff0c;许多体验过它的朋友会发现对它越来越依赖&#xff0c;并将其逐渐融入到自己的日常工作、生活。但有一点值得注意&#xff1a;这种人工智能除了技术可行、经济价值可行还要与相关规范即人类普遍的价值观念…

所有集群启动的命令

所有集群启动的命令 查询所有节点启动Hadoop集群(Yarn模式)关闭Hadoop集群Spark&#xff08;local模式&#xff09;启动Spark集群standalone模式(不用了)关闭standalone模式HA下的standalone模式关闭HA-standalone模式Yarn模式&#xff08;重点&#xff09; 关闭Spark集群启动f…

python_day16_设计模式

“”“单例模式”“” “”“工厂模式”“” class Person:passclass Worker(Person):passclass Student(Person):passclass Teacher(Person):passclass Factory:def get_person(self, p_type):if p_type w:return Worker()elif p_type s:return Student()else:return Te…