NX二次开发将刀轨转曲线

获取选择的程序刀轨和当前加工坐标系,获取刀轨数据点转换到加工坐标系,然后创建样条,创建样条是用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.mzph.cn/diannao/60848.shtml

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

相关文章

Java基础——多线程

1. 线程 是一个程序内部的一条执行流程程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序 2. 多线程 指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09; 2.1. 如何创建多条线程 Java通过java.lang.Thread类的对象…

【React】状态管理之Zustand

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 状态管理之Zustand引言1. Zustand 的核心特点1.1 简单直观的 API1.2 无需 Provi…

虎扑APP数据采集:JavaScript与AJAX的结合使用

引言 虎扑APP的数据采集涉及到前端和后端的交互&#xff0c;其中AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;技术允许在不重新加载整个页面的情况下&#xff0c;与服务器进行数据交换和更新部分网页内容。这种技术使得数据采集过程更加高效和用户友好。然而…

高级数据结构——hash表与布隆过滤器

文章目录 hash表与布隆过滤器1. hash函数2. 选择hash函数3. 散列冲突3.1 负载因子3.2 冲突解决3. STL中的散列表 4. 布隆过滤器4.1 背景1. 应用场景2. 常见的处理场景&#xff1a; 4.2 布隆过滤器构成4.3 原理4.4 应用分析4.5 要点 5. 分布式一致性hash5.1 缓存失效问题 6. 大数…

测试实项中的偶必现难测bug--互斥逻辑异常

问题: 今天线上出了一个很奇怪的问题,看现象和接口是因为数据问题导致app模块奔溃 初步排查数据恢复后还是出现了数据重复的问题,查看后台实际只有一条数据,但是显示在app却出现了两条一模一样的置顶数据 排查: 1、顺着这个逻辑,我们准备在预发复现这个场景,先是cop…

基于Java Web 的家乡特色菜推荐系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读

Is Your Code Generated by ChatGPT Really Correct? Rigorous Evaluation of Large Language Models for Code Generation key word: evaluation framework, LLM-synthesized code, benchmark 论文&#xff1a;https://arxiv.org/pdf/2305.01210.pdf 代码&#xff1a;https:…

SpringBoot集成Dynamo(2)demo

一、dynamo local 1、建表 aws dynamodb create-table --table-name t_user --attribute-definitions AttributeNameuser_account,AttributeTypeS AttributeNameuser_name,AttributeTypeS --key-schema AttributeNameuser_account,KeyTypeHASH AttributeNameuser_name,KeyType…

Godot的开发框架应当是什么样子的?

目录 前言 全局协程还是实例协程&#xff1f; 存档&#xff01; 全局管理类&#xff1f; UI框架&#xff1f; Godot中的异步&#xff08;多线程&#xff09;加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈&#xff0c;主要内容是对我…

Spring Boot框架:电商系统的设计与实现

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网上商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

tensorflow案例6--基于VGG16的猫狗识别(准确率99.8%+),以及tqdm、train_on_batch的简介

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 本次还是学习API和如何搭建神经网络为主&#xff0c;这一次用VGG16去对猫狗分类&#xff0c;效果还是很好的&#xff0c;达到了99.8% 文章目录 1、tqdm…

数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)

1、企业架构现状分析 2、企业架构内容框架 3、企业架构设计方法 3.1 、业务架构设计方法 3.2 、数据架构设计方法 3.3 、应用架构设计方法 3.4 、技术架构设计方法 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言&#xff1a;脚本写成并非一蹴而就&#xff0c;需要不断的调式和修改&#xff0c;这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景&#xff1a;在某些项目中&#xff0c;由于特定的安全或政策要求&#xff0c;不允许连接到你的镜像仓库。然而…

Python学习笔记(1)装饰器、异常检测、标准库概览、面向对象

1 装饰器 装饰器&#xff08;decorators&#xff09;是 Python 中的一种高级功能&#xff0c;它允许你动态地修改函数或类的行为。 装饰器是一种函数&#xff0c;它接受一个函数作为参数&#xff0c;并返回一个新的函数或修改原来的函数。 语法使用 decorator_name 来应用在…

IntelliJ+SpringBoot项目实战(七)--在SpringBoot中整合Redis

Redis是项目开发中必不可少的缓存工具。所以在SpringBoot项目中必须整合Redis。下面是Redis整合的步骤&#xff1a; &#xff08;1&#xff09;因为目前使用openjweb-sys作为SpringBoot的启动应用&#xff0c;所以在openjweb-sys模块的application-dev.yml中增加配置参数&…

【UGUI】Unity 游戏开发:背包系统初始化道具教程

在游戏开发中&#xff0c;背包系统是一个非常常见的功能模块。它允许玩家收集、管理和使用各种道具。今天&#xff0c;我们将通过一个简单的示例来学习如何在 Unity 中初始化一个背包系统。我们将使用 Unity 2021.3.7 版本&#xff0c;并结合 C# 脚本来实现这一功能。 1. 场景…

AI工业大模型报告:体系架构、关键技术与典型应用

研究意义 随着新一代人工智能的发展, 大模型&#xff08;如 GPT-4o 等&#xff09;凭借大规模训练数据、网络参数和算 力涌现出强大的生成能力、泛化能力和自然交互能力, 展现出改变工业世界的巨大潜力. 尽管大模型 已在自然语言等多个领域取得突破性进展, 但其在工业应用中的…

电子电气架构 --- 电动汽车 800V 高压系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

shell编程之变量与引用

目录 深入认识变量什么是变量变量的名称变量数据类型变量的定义自定义变量环境变量位置变量 变量赋值和作用域赋值&#xff1a;变量名变量值read从键盘读入变量值变量和引号变量的作用域变量的运算 深入认识变量 什么是变量 变量是在程序中保存用户数据的一段内存存储空间&am…