NX二次开发将刀轨转曲线

news2024/11/18 0:58:08

获取选择的程序刀轨和当前加工坐标系,获取刀轨数据点转换到加工坐标系,然后创建样条,创建样条是用UG录制的代码,有更好的方法欢迎交流学习一下。 

 void CreateCurve()
 {
     tag_t setup_tag;
     UF_SETUP_ask_setup(&setup_tag);
     int count = 0;
     tag_t* objects;
     UF_UI_ONT_ask_selected_nodes(&count, &objects);
     if (count != 1)
     {
         uc1601("选择一个程序或程序组", 1);
         return;
     }
     tag_t initial_wcs;
     tag_t wcs_value;
     logical  is_group = TRUE;
     tag_p_t oprea_list = NULL_TAG;
     UF_CSYS_ask_wcs(&initial_wcs);
     UF_NCGROUP_is_group(objects[0], &is_group);
     if (is_group == TRUE)
     {
         if (count == 0)
         {
             uc1601("程序组为空", 1);
             return;
         }
         UF_NCGROUP_ask_member_list(objects[0], &count, &oprea_list);
         UF_PARAM_ask_tag_value(oprea_list[0], UF_PARAM_MCS, &wcs_value);
     }
     else
     {
         UF_PARAM_ask_tag_value(objects[0], UF_PARAM_MCS, &wcs_value);
     }
     tag_t matrix_tag;
     double origin[3];
     UF_CSYS_ask_csys_info(wcs_value, &matrix_tag, origin);
     UF_CSYS_ask_matrix_values(matrix_tag,Matrix);
     UF_CSYS_set_wcs(wcs_value);
     UF_CAM_preferences_t  number;
     UF_CAM_ask_cam_preferences(&number);
     number.clsf_decimal_place = 5;
     UF_CAM_set_cam_preferences(&number);
     char path_char[133] = "D:\\tmpcls.cls";
     UF_SETUP_generate_clsf(setup_tag, objects[0], "CLSF_STANDARD", path_char, UF_SETUP_OUTPUT_UNITS_OUTPUT_DEFINED);
     FILE* fp = fopen(path_char, "r");
     char fchar[256];
     if (fp == 0)
     {
         uc1601("转换失败", 1);
         return;
     }
     string fbuf;
     int k1 = -1, k2 = -1, k3 = -1, k4 = -1,k5=-1,k6=-1,k7=-1,k8=-1;
     bool isStart = false;
     char msg[256];
     UF_OBJ_ask_name(objects[0],msg);
     vector<Point3d>points;
     while (1)
     {
         
         if (fgets(fchar, 256, fp) == NULL)
         {
             break;
         }
         fbuf = fchar;
         if (strstr(fbuf.c_str(), msg))
         {
             isStart = true;
             points.clear();
             continue;
         } 
         if (!isStart)
         {
             continue;
         }
         
         if (fbuf.compare(0, 4, "GOTO") == 0)
         {
             k1 = k2 = k3 = k4 =k5=k6=k7=k8=-1;
             k1 = fbuf.find('/', 0);
             k2 = fbuf.find(',', k1 + 1);
             k3 = fbuf.find(',', k2 + 1);
             k4 = fbuf.find(',', k3 + 1);
             k5 = fbuf.find(',', k4 + 1);
             k6 = fbuf.find(',', k5 + 1);
             k7 = fbuf.find(',', k6 + 1);
             k8 = fbuf.find(',', k7 + 1);
             double point1[3] = { 0,0,0 };
             double point2[3] = { 0,0,0 };
             point1[0] = atof(fbuf.substr(k1 + 1, k2 - k1 - 1).c_str());
             point1[1] = atof(fbuf.substr(k2 + 1, k3 - k2 - 1).c_str());
             if (k4 == string::npos)
             {
                 point1[2] = atof(fbuf.substr(k3 + 1, fbuf.length()).c_str());
             }
             else
             {
                 point1[2] = atof(fbuf.substr(k3 + 1, k4 - k3 - 1).c_str());
             }
    
             UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS, point1, UF_CSYS_ROOT_COORDS, point1);
             UF_CSYS_map_point(UF_CSYS_ROOT_COORDS, point1, UF_CSYS_WORK_COORDS, point1);
             Point3d point_3d1(point1[0],point1[1],point1[2]);
             points.push_back(point_3d1);
         }
     }
     UF_CSYS_set_wcs(initial_wcs);
     CreateSpline(points);
 }
 
 tag_t  CreateSpline(vector<Point3d>points)
 {
     
     if (Spline_tag!=NULL)
     {
         UF_OBJ_delete_object(Spline_tag);
         Spline_tag = NULL;
     }
     if (points.size() == 0)
     {
         return Spline_tag;
     }
     if (points.size() ==1)
     {
         double point[3] = { points[0].X,points[0].Y,points[1].Z };
         UF_CURVE_create_point(point, &Spline_tag);
         return Spline_tag;
     }
     try
     {
         Session* theSession = Session::GetSession();
         Part* workPart(theSession->Parts()->Work());
         Part* displayPart(theSession->Parts()->Display());

         NXObject* nullNXObject(NULL);


         Features::StudioSplineBuilderEx* studioSplineBuilderEx1;
         studioSplineBuilderEx1 = workPart->Features()->CreateStudioSplineBuilderEx(nullNXObject);

         Point3d origin1(0.0, 0.0, 0.0);
         Vector3d normal1(0.0, 0.0, 1.0);
         Plane* plane1;
         plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);

         studioSplineBuilderEx1->SetDrawingPlane(plane1);

         Point3d origin2(0.0, 0.0, 0.0);
         Vector3d normal2(0.0, 0.0, 1.0);
         Plane* plane2;
         plane2 = workPart->Planes()->CreatePlane(origin2, normal2, SmartObject::UpdateOptionWithinModeling);

         studioSplineBuilderEx1->SetMovementPlane(plane2);

         studioSplineBuilderEx1->OrientExpress()->SetReferenceOption(GeometricUtilities::OrientXpressBuilder::ReferenceWcsDisplayPart);


         studioSplineBuilderEx1->SetMatchKnotsType(Features::StudioSplineBuilderEx::MatchKnotsTypesNone);

         studioSplineBuilderEx1->OrientExpress()->SetAxisOption(GeometricUtilities::OrientXpressBuilder::AxisPassive);

         studioSplineBuilderEx1->OrientExpress()->SetPlaneOption(GeometricUtilities::OrientXpressBuilder::PlanePassive);
         studioSplineBuilderEx1->SetDegree(1);
         for (int i = 0; i < points.size(); i++)
         {
             Point* point1;
             point1 = workPart->Points()->CreatePoint(points[i]);
             Features::GeometricConstraintData* geometricConstraintData1;
             geometricConstraintData1 = studioSplineBuilderEx1->ConstraintManager()->CreateGeometricConstraintData();
             geometricConstraintData1->SetPoint(point1);
             studioSplineBuilderEx1->ConstraintManager()->Append(geometricConstraintData1);
         }
         NXObject* nXObject1;
         nXObject1 = studioSplineBuilderEx1->Commit();
         studioSplineBuilderEx1->Destroy();
         if (nXObject1)
         {
             Features::Feature* feature1 = dynamic_cast<Features::Feature*>(nXObject1);
             vector<NXObject*>vec = feature1->GetEntities();
             if (!vec.empty())
             {
                 Spline_tag = vec[0]->Tag();
               
             }
         }

         return Spline_tag;
     }
     catch (const std::exception&)
     {
         return Spline_tag;
     }
 }

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

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

相关文章

js识别二维码

需要下载的js文件&#xff1a;https://download.csdn.net/download/impossible1994727/90001718https://download.csdn.net/download/impossible1994727/90001718 或者直接复制也行&#xff1a; var _aa {}; _aa._ab function (f, e) { var d qrcode.width; var b qrcode…

电子应用产品设计方案-11:全自动智能全屋智能系统设计方案

一、设计目标 打造便捷、舒适、安全且节能的全屋智能环境。 二、系统组成 1. 智能灯光系统 - 在客厅、卧室、厨房、卫生间等各处安装智能灯具&#xff0c;可通过手机 APP、语音控制实现开关、调光调色。如客厅设置多种场景模式&#xff0c;如“观影模式”&#xff08;灯光…

现代密码学|古典密码学例题讲解|AES数学基础(GF(2^8)有限域上的运算问题)| AES加密算法

文章目录 古典密码凯撒密码和移位变换仿射变换例题多表代换例题 AES数学基础&#xff08;GF&#xff08;2^8&#xff09;有限域上的运算问题&#xff09;多项式表示法 | 加法 | 乘法X乘法模x的四次方1的乘法 AES加密算法初始变换字节代换行移位列混合轮密钥加子密钥&#xff08…

【idea】更换快捷键

因为个人习惯问题需要把快捷键替换一下。我喜欢用CTRLD删除一下&#xff0c;用CTRLY复制一样。恰好这两个快捷键需要互换一下。 打开file——>setting——>Keymap——>Edit Actions 找到CTRLY并且把它删除 找到CTRLD 并且把它删除 鼠标右键添加CTRLY 同样操作在Delet…

关于强化学习的一份介绍

在这篇文章中&#xff0c;我将介绍与强化学习有关的一些东西&#xff0c;具体包括相关概念、k-摇臂机、强化学习的种类等。 一、基本概念 所谓强化学习就是去学习&#xff1a;做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作&#xff0c;而是必须通…

通过JS删除当前域名中的全部COOKIE教程

有时候需要通过JS来控制一下网站的登录状态&#xff0c;就例如:网站登出功能&#xff0c;我们可以直接通过JS将所有COOKIE删除&#xff0c;COOKIE删除之后&#xff0c;网站自然也就退出了。 那么今天我就给大家分享一段JS的函数&#xff0c;通过调用这段函数就可以实现删除COO…

【Mysql】Mysql的多表查询---多表联合查询(上)

1、介绍 多表查询就是同时查询两个或者两个以上的表&#xff0c;因为有的时候&#xff0c;用户在查看数据的时候&#xff0c;需要显示的数据来自多张表&#xff0c;多表查询有以下分类&#xff1a; &#xff08;1&#xff09;交叉连接查询&#xff08;产生笛卡尔积&#xff0…

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中&#xff0c;华为一直以其卓越的技术和创新力引领着行业的发展。近日&#xff0c;华为Mate 70系列手机的发布会正式定档在11月26日&#xff0c;这一消息引发了众多科技爱…

计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

vxe-grid table 校验指定行单元格的字段,只校验某个列的字段

Vxe UI vue vxe-table 中校验表格行是非常简单的&#xff0c;只需要配置好校验规则&#xff0c;然后调用 validate 方法就可以自动完成校验&#xff0c;但是由于项目淡色特殊需求&#xff0c;在某个单元格的值修改后需要对另一个列的值就行校验&#xff0c;这个时候又不需要全部…

记录大学Linux运维上机考试题目和流程

备注&#xff1a;今年的Linux操作系统考试已经全部结束&#xff0c;仅作为一个记录和留念 前提&#xff1a;配置环回网卡和环境和nat网卡 1、搭建dns服务器 2、Apache和http服务 3、搭建postfix邮件服务器实现邮件发送 4、搭建vsftpdFTP服务器实现文件上传 题目如下&…

2024-11-16-机器学习方法:无监督学习(1) 聚类(上)

文章目录 机器学习方法&#xff1a;无监督学习&#xff08;1&#xff09; 聚类&#xff08;上&#xff09;1. 聚类的基本概念1.1 聚类的概念1.2 聚类的功能1.3 聚类的算法 2. 相似度或距离2.1 闵可夫斯基距离2.2 相关系数2.3 夹角余弦 3 类或簇3.1 类的特征 4 类与类之间的距离…

kafka和Flume的整合

目录 一、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 1、在我的flume的conf文件夹下&#xff0c;有个myconf文件夹&#xff1a; 2、 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf 3、测试 二、kafka作为Sink 【数据从别的地方抽取到kafka里…

打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…

MySQL 8.4.3 Windows绿色安装与主从配置

下载 下载安装包链接&#xff1a; https://dev.mysql.com/downloads/mysql/ 安装配置 假设解压后的目录为C:\mysql-8.4.3-winx64 将C:\mysql-8.4.3-winx64\bin 加入path环境变量在C:\mysql-8.4.3-winx64中创建data文件夹在C:\mysql-8.4.3-winx64中创建my.ini文件 [mysqld]…

文件的简单操作

路径&#xff1a; 代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include <errno.h>int main() {/** 打开文件* FILE *fopen(const char *pathname, const char *mode);*///以追加的方式打开文件FILE* fp fopen("a.txt", &…

【网络】什么是交换机?switch

交换机&#xff08;Switch&#xff09;意为“开关”&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备。以下是关于交换机的详细解释&#xff1a; 一、交换机的基本定义 功能&#xff1a;交换机能为接入交换机的任意两个网络节点提供独享的电信号通路&am…

1 图的搜索 奇偶剪枝

图论——图的搜索_Alex_McAvoy的博客-CSDN博客 语雀版本 1 深度优先搜索DFS 1. 从图中某个顶点 v0 出发&#xff0c;首先访问 v0 2. 访问结点 v0 的第一个邻接点&#xff0c;以这个邻接点 vt 作为一个新节点&#xff0c;访问 vt 所有邻接点&#xff0c;直到以 vt 出发的所有节…

【Linux庖丁解牛】—Linux基本指令(下)!

目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 ​编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器&#xff0c;其作用是在指定的文件中过滤出包含你指定字符串的内容&#xff0c;…

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time 一、分析数据二、详细分析2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解释2.2 分析和总结 一、分析数据 二、详细分析 2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解…