利用ufun对部件进行操作(新建、打开、保存、另存、关闭等)

2023-12-31 18:52

本文主要是介绍利用ufun对部件进行操作(新建、打开、保存、另存、关闭等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

        在NX二次开发中我们常常会用到新建、打开、保存、另存为和关闭命令,这些函数一般放在UF_part.h头文件下,下面针对以上有关功能结合案例进行说明。

二、功能函数结合案例说明

2.1新建文件+创建块+保存功能

1)NXOpenC++代码

#include <uf_defs.h>
#include <NXOpen/NXException.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/Builder.hxx>
#include <NXOpen/FileNew.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx>//初始化
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());Menu: 文件(F)->新建(N)...
//创建一个新文件
NXOpen::FileNew *fileNew1;
fileNew1 = theSession->Parts()->FileNew();
//调用模版文件并配置相关参数
fileNew1->SetTemplateFileName("model-plain-1-mm-template.prt");
fileNew1->SetApplicationName("ModelTemplate");
fileNew1->SetUnits(NXOpen::Part::UnitsMillimeters);
fileNew1->SetTemplateType(NXOpen::FileNewTemplateTypeItem);
//设置创建文件的名字
fileNew1->SetNewFileName("C:\\Users\\NINGMEI\\Desktop\\part\\model2.prt");
fileNew1->SetMakeDisplayedPart(true);//设置控制是否将新文件作为显示部件的属性
fileNew1->SetDisplayPartOption(NXOpen::DisplayPartOptionAllowAdditional);//设置显示部件选项
//创建并销毁
NXOpen::NXObject *nXObject1;
nXObject1 = fileNew1->Commit();
fileNew1->Destroy();//创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
double Corner_pt[3] = { 0.0, 0.0, 0.0 };//设置原点
char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);//保存SaveComponentsTrue保存修改后的部件;CloseAfterSaveFalse用于指定部分保存后是否应关闭。
NXOpen::PartSaveStatus *partSaveStatus1;
partSaveStatus1 = workPart->Save(NXOpen::BasePart::SaveComponentsTrue, NXOpen::BasePart::CloseAfterSaveFalse);delete partSaveStatus1;

2)NXOpenC代码

#include <uf_part.h>UF_initialize();
tag_t partTAG = NULL_TAG;
//第二个参数1为工制,2为英制
UF_PART_new("C:\\Users\\NINGMEI\\Desktop\\part\\model2.prt", 1, &partTAG);
//切换到建模模块
theSession->ApplicationSwitchImmediate("UG_APP_MODELING");//创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
double Corner_pt[3] = { 0.0, 0.0, 0.0 };//设置原点
char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);//保存
UF_PART_save();UF_terminate();

注意:唐康林老师的视频中也讲到UF_PART_new函数只是在基本环境中建立,需要添加theSession->ApplicationSwitchImmediate("UG_APP_MODELING")切换到建模环境中。

2.2关闭文件

1)NXOpenC++代码

//删除文件
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());NXOpen::PartCloseResponses *partCloseResponses1;
partCloseResponses1 = theSession->Parts()->NewPartCloseResponses();workPart->Close(NXOpen::BasePart::CloseWholeTreeTrue, NXOpen::BasePart::CloseModifiedUseResponses, partCloseResponses1);workPart = NULL;
displayPart = NULL;
delete partCloseResponses1;
/*
//将内存中的下一个文件进行显示
NXOpen::Part *part1(dynamic_cast<NXOpen::Part *>(theSession->Parts()->FindObject("asm-20-BASE")));
NXOpen::PartLoadStatus *partLoadStatus1;
NXOpen::PartCollection::SdpsStatus status1;
status1 = theSession->Parts()->SetActiveDisplay(part1, NXOpen::DisplayPartOptionAllowAdditional, NXOpen::PartDisplayPartWorkPartOptionUseLast, &partLoadStatus1);workPart = theSession->Parts()->Work(); // asm-20-BASE
displayPart = theSession->Parts()->Display(); // asm-20-BASE
delete partLoadStatus1;
*/

2)NXOpenC代码

UF_initialize();//仅关闭当前显示部件界面
//tag_t partTag1 = UF_PART_ask_display_part();//关闭当前显示部件界面
//int scope = 1;//关闭部件和组件
//int mode = 1;
//UF_PART_close(partTag1, scope, mode);//关闭所有窗口
UF_PART_close_all();UF_terminate();

存在的问题如图1所示,如果打开多个文件时,关闭一个后应该将下一个作为工作部件显示在窗口中,下图可以明显的看出不对,在参考录制的代码时的思路是查找内存中的文件名,然后将其作为工作部件进行显示,很显然我们在开发功能模块时不可能知道下一个文件是什么,我想应该遍历内存中的名字,将下一个文件进行显示。

2.3保存和另存为文件

1)NXOpenC++代码

//另存为
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());NXOpen::PartSaveStatus *partSaveStatus1;
partSaveStatus1 = workPart->SaveAs("C:\\Users\\NINGMEI\\Desktop\\asm1.prt");delete partSaveStatus1;//保存SaveComponentsTrue保存修改后的部件;CloseAfterSaveFalse用于指定部分保存后是否应关闭。
NXOpen::PartSaveStatus *partSaveStatus1;
partSaveStatus1 = workPart->Save(NXOpen::BasePart::SaveComponentsTrue, NXOpen::BasePart::CloseAfterSaveFalse);delete partSaveStatus1;

2)NXOpenC代码

//保存
UF_PART_save();
//另存为
UF_PART_save_as("C:\\Users\\NINGMEI\\Desktop\\asm1.prt");

这篇关于利用ufun对部件进行操作(新建、打开、保存、另存、关闭等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/556881

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(