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

发布时间:2023年12月31日

一、概述

????????在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");

文章来源:https://blog.csdn.net/weixin_47753171/article/details/135316112
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。