UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler

news2025/3/4 7:26:59

 列文章目录

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer

UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection

UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler


 列文章目录

文章目录

前言

一、知识点提取

二、案例需求分析

三、程序分析

总结


前言

        随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。

        然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。


一、知识点提取

本案例主要实现了对边的倒角功能,主要知识点如下:

1)选择边功能的实现

2)执行边倒角操作

二、案例需求分析

1、效果图

2、需求分解

1)选择边功能的实现

2)执行边倒角操作

三、程序分析

1、源码所在目录

UGOPEN\SampleNXOpenApplications\C++\Selection_UIStyler

2、主要功能分析  

1)选择边功能的实现

// Get the selection handle
SelectionHandle selectH;
selectH = changeDialog.GetSelectionHandle();
NXOpen.Selection.MaskTriple[] selectionMask_array = new NXOpen.Selection.MaskTriple[1];
NXOpen.Selection.MaskTriple selectionMask_arrayElem;
selectionMask_arrayElem.Type = NXOpen.UF.UFConstants.UF_solid_type;
selectionMask_arrayElem.Subtype = NXOpen.UF.UFConstants.UF_solid_edge_subtype;
selectionMask_arrayElem.SolidBodySubtype = NXOpen.UF.UFConstants.UF_UI_SEL_FEATURE_ANY_EDGE;
selectionMask_array[0] = selectionMask_arrayElem;
//Following sets the Selection mask for Edge
theUI.SelectionManager.SetSelectionMask(selectH, NXOpen.Selection.SelectionAction.ClearAndEnableSpecific, selectionMask_array);
//Following sets the Selection and Filter callbacks which are invoked during selection
theUI.SelectionManager.SetTaggedObjectSelectionCallbacks(selectH, filterTaggedObject_cb, taggedObjectSelection_cb);
changeToggle6.ItemValue = true;
changeStr0.ItemValue = "5.0";
changeLabel1.SetLabel("Select Edges (0)");

1、通过方法theUI.SelectionManager.SetSelectionMask()设置过滤器,限制只能选择边

2、通过filterTaggedObject_cb()进行逻辑上的限制,selectedObject.ToString().Contains("Edge")

3、通过taggedObjectSelection_cb()选择回调方法,每当选定边的所有标记存储在哈希表中,并显示已选择边数量

 2)执行边倒角操作

Part workPart = theSession.Parts.Work;
Part displayPart = theSession.Parts.Display;
Session.UndoMarkId markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start");
NXOpen.Features.Feature nullFeatures_Feature = null;
NXOpen.Features.EdgeBlendBuilder edgeBlendBuilder1 = workPart.Features.CreateEdgeBlendBuilder(nullFeatures_Feature);
theSession.SetUndoMarkName(markId1, "Edge Blend");
ScCollector scCollector1 = workPart.ScCollectors.CreateCollector();
NXOpen.Features.Block block1 = (NXOpen.Features.Block)workPart.Features.FindObject("BLOCK(1)");
Edge[] seedEdges1 = new Edge[htEdges.Count];
IDictionaryEnumerator en = htEdges.GetEnumerator();
int EdgeIndex = 0;
while(en.MoveNext())
{
    Edge edgeVar = (Edge)en.Value;;
    seedEdges1[EdgeIndex] = edgeVar;
    EdgeIndex += 1;
}

EdgeMultipleSeedTangentRule edgeMultipleSeedTangentRule2 = workPart.ScRuleFactory.CreateRuleEdgeMultipleSeedTangent(seedEdges1, 0.5, true);
SelectionIntentRule[] rules2 = new SelectionIntentRule[1];
rules2[0] = edgeMultipleSeedTangentRule2;
scCollector1.ReplaceRules(rules2, false);
Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Edge Blend");
//Following can set the Tolerance for Edge Blend.
edgeBlendBuilder1.Tolerance = changeReal6.ItemValue;
edgeBlendBuilder1.AllInstancesOption = false;
//Following can set the Remove Self Intersection option for the Edge Blend.
edgeBlendBuilder1.RemoveSelfIntersection = changeToggle6.ItemValue;
edgeBlendBuilder1.ConvexConcaveY = false;
edgeBlendBuilder1.RollOverSmoothEdge = true;
edgeBlendBuilder1.RollOntoEdge = true;
edgeBlendBuilder1.MoveSharpEdge = true;
edgeBlendBuilder1.OverlapOption = NXOpen.Features.EdgeBlendBuilder.Overlap.AnyConvexityRollOver;
edgeBlendBuilder1.BlendOrder = NXOpen.Features.EdgeBlendBuilder.OrderOfBlending.ConvexFirst;
edgeBlendBuilder1.SetbackOption = NXOpen.Features.EdgeBlendBuilder.Setback.SeparateFromCorner;

//Following sets the value for Blend Radius.
int csIndex1 = edgeBlendBuilder1.AddChainset(scCollector1, changeStr0.ItemValue);
NXOpen.Features.Feature feature1 = edgeBlendBuilder1.CommitFeature();
theSession.DeleteUndoMark(markId2, null);
edgeBlendBuilder1.Destroy();
htEdges.Clear();
changeLabel1.SetLabel("Select Edges (0)");

1、通过EdgeBlendBuilder类,完成边倒角的操作,支持一次多个边倒角

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

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

相关文章

大数据期末总结

文章目录一、这学期分别接触了Linux,hadoop,hbase,hive1、Linux2、Hadoop3、hbase4、hive二、总结一、这学期分别接触了Linux,hadoop,hbase,hive 1、Linux Linux是一款安全性十分良好的操作系统。不仅有用…

前端监控与前端埋点方案

前端监控与前端埋点方案 https://blog.csdn.net/sinat_36521655/article/details/114650138 ​ 用户行为数据可以通过前端数据监控的方式获得,除此之外,前端还需要实现**性能监控和异常监控。**性能监控包括首屏加载时间、白屏时间、http请求时间和htt…

软件设计师

1.在项目初期的需求并不明确,需要不断同用户进行交流与沟通,分布获取功能要求,在这种情况要采用敏捷开发方法最适合,比如极限编程 2.设计模式包括:创建型,结构型,行为型三大类别。 创建型模式…

UnRaid添加镜像源加速应用安装的正确方法

文章目录0、前言1、寻找适合你网络的最优镜像源1.1、首先点击下图示红框处进入UnRaid的终端1.2、输入如下代码检测每一个镜像源的速度:2、更改镜像源方法2.1、修改Go文件方法2.2、用户自定义脚本方式2.2.1、安装User Scripts插件2.2.2、在User Scripts插件中添加更改…

【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测

文章目录1. 自动驾驶实战:基于Paddle3D的点云障碍物检测1.1 环境信息1.2 准备点云数据1.3 安装Paddle3D1.4 模型训练1.5 模型评估1.6 模型导出1.7 模型部署效果1. 自动驾驶实战:基于Paddle3D的点云障碍物检测 项目地址——自动驾驶实战:基于P…

已经拍好的视频怎么加水印?视频加水印方法大分享

现在不管是网课视频,还是一些视频博主自制的vlog,我们都可以在这些视频里面看到水印,它不仅可以防止他人盗用视频,还可以作为自己形象的宣传,吸引流量。不过现在还是有很多小伙伴不知道怎么给视频添加水印。别急&#…

js将图片url转化为base64

将以下代码复制封装于xxx.js文件中&#xff0c;放置在项目文件夹utiles下 /*** 把url转换为 canvas对象* param url 网络图片地址必须服务器设置允许跨域* returns {Promise<any>}*/ export default function urlToCanvas (url) {return new Promise((resolve) > {var…

2022卡塔尔世界杯 | 我与足球的爱恨情仇

超燃世界杯&#xff0c;决战卡塔尔⚽我与足球在生活上的交集一、小学二、中学三、大学&#x1f4bb;我与足球在技术上的碰撞一、与足球有关的题目训练二、使用Java代码做一个足球小游戏&#x1f3c6;2022卡塔尔世界杯冠军 —— 阿根廷yyds一、球队比赛过程二、热门球员介绍三、…

小学生C++编程基础 课程6(共9题)

Go C编程 第1课 神奇的魔笔 Go C编程 第1课 神奇的魔笔_dllglvzhenfeng的博客-CSDN博客_goc编程作品 GoC2018下册 第2课&#xff08;C画图&#xff09; GoC2018下册 第2课&#xff08;C画图&#xff09;_dllglvzhenfeng的博客-CSDN博客 Go C 编程 第3课 魔法自动机 Go C 编程…

C++:类和对象:继承

前言&#xff1a; 继承时面向对象额三大特性之一&#xff1a; 在面向对象中&#xff0c;有些类与类之间存在特殊关系&#xff0c;下级别的类除了拥有上一级别的共性&#xff0c;还有自己的特性&#xff0c;这个时候我们就需要考虑利用继承的技术减重复代码。 1&#xff1a;继承…

Redisson分布式锁

Redisson分布式锁 Redisson 是什么&#xff1f; Redisson是一个Java库&#xff0c;它为Redis服务器提供分布式和可扩展的Java对象和服务&#xff08;Set、Multimap、SortedSet、Map、Lock、Semaphore、CountDownLatch、Publish/Subscribe、Bloom filter等&#xff09;。它允许…

工控安全-S7协议

文章目录一、西门子PLC系统构成二、S7协议结构三、TPKT协议四、COTP协议4.1 COTP连接包4.2 COTP功能包五、S7Comm协议5.1 头(Header)5.2 作业请求(Job)和确认数据响应(Ack_Data)5.2.1 建立通信(Setup communication [0xF0])5.2.2 读取值(Read Var [0x04])5.2.2.1 当PDU为JOB时5…

redis之分片集群

0. 前言 在海量的数据面前&#xff0c;单个 redis 实例的能力是有限的&#xff0c;无可能无限增大的内存&#xff0c;所以必须要构建分片集群&#xff0c;来横向拓展来支持保存更多的数据。 1. 分片集群是什么&#xff1f; 分片集群主要是将 redis 的数据划分成多份&#xf…

BHG Mall 聚焦消费者需求,“超级宠粉节”缔造营销新高度

“如何读懂消费者&#xff1f;”处在行业关键转型期的购物中心&#xff0c;面临着这一待解的难题。 有哪些业态、品牌、商品让消费者着迷又上瘾&#xff1f;购物中心需要培养和消费者之间的默契&#xff0c;购物中心不仅要引领消费趋势、满足消费需求&#xff0c;还要深度融入…

Java+SSM宠物销售网站(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下&#xff1a; 后台框架&#xff1a;Spring、SpringMVC、MyBatis UI界面&#xff1a;JSP、jQuery 数据库&#xff1a;MySQL 该系统主要分为前台和后台两大功能模块&#xff0c;共包含两个角色&#xff1a;用户、管理员。 具体的系统功能如…

高分子PEG:DBCO-PEG-OPSS,OPSS-PEG-DBCO,二苯并环辛烯PEG邻吡啶二硫

【产品描述】 DBCO-PEG-OPSS中DBCO试剂可以自动标记叠氮化物修饰的生物分子&#xff0c;而不需要使用有毒的铜催化剂。聚乙二醇化可以提高多肽和蛋白质的溶解性和稳定性&#xff0c;降低其免疫原性。它还可以抑制带电分子与修饰表面的非特定结合。西安凯新生物科技有限公司点击…

html5:notification(浏览器通知)

一、notification简介 Web Notifications是HTML5 的一个特性&#xff0c;目前我知道的有谷歌浏览器和windows edge对它进行了支持&#xff0c;用于向用户配置和显示桌面通知。 二、notification方法 2.1静态方法 这些方法仅在 Notification 对象中有效。 Notification.requ…

5 种有效的电子邮件营销技巧可增加您的转化率

关键词&#xff1a;电子邮件营销、转化率 电子邮件营销是一种非常常见的策略&#xff0c;可以将客户吸引到您的网站并增加转化率。 由于如此普遍&#xff0c;消费者平均每天会收到 78 封新电子邮件。您的电子邮件周围充满了噪音。 那么&#xff0c;您可以做些什么来让您的电子邮…

架构师必读 —— 逻辑模型(10)

以零基础思考摆脱障碍 我们已养成了惰性思考及在其延伸下不断堆叠的思考习惯。 因为以往的方式未出现过重大错误&#xff0c;所以总以为会万无一失。 但是&#xff0c;如果用堆叠式思考方式继续沿用上一年度的做法的话&#xff0c;不管过多少年也很难破旧立新。有时我们有必要重…

第3章 管理端(Vue)布局面的设计实现

1 导入“element-plus&#xff1a;Icon”组件 1.1“element-plus&#xff1a;Icon” 组件导入命令&#xff1a; npm install element-plus/icons-vue 1.2“element-plus&#xff1a;Icon” 组件配置&#xff1a; import { createApp } from vue//在vue-cli4&#xff08;4.5.…