提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 1、前言
- 2、在UG NX中创建一些测试对象
- 3、查询这些对象的继承关系
- 3、基于C++创建的方法
- 3.1 头文件
- 3.2 声明删除对象的方法
- 3.3 定义删除对象的方法
- 3.4 填写调用代码
- 4、测试结果
1、前言
在上一篇博客UG NX二次开发(C#)-删除对象中,我们介绍了删除对象的方法,本文我们介绍一下C++开发的删除对象的方法,其实二者采用的方法是大致相同的。
2、在UG NX中创建一些测试对象
如下图所示,我们在UG NX中创建两条直线、一个基准坐标系、一个长方体、一个基于其中一条直线拉伸的片体、一个基准平面、一个草图、一个基于操作的拉伸对象。
3、查询这些对象的继承关系
通常查看,这些对象都是基于TaggedObject的,所以通过构造删除TaggedObject的方法来实现。
3、基于C++创建的方法
3.1 头文件
根据选择的不同,其所需要的头文件有所不同,以上对象删除时需要的头文件为:
#include <uf_defs.h>
#include <NXOpen/NXException.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/DatumCollection.hxx>
#include <NXOpen/DatumPlane.hxx>
#include <NXOpen/Features_AssociativeLine.hxx>
#include <NXOpen/Features_Block.hxx>
#include <NXOpen/Features_DatumCsys.hxx>
#include <NXOpen/Features_Extrude.hxx>
#include <NXOpen/Features_FeatureCollection.hxx>
#include <NXOpen/Features_SketchFeature.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/Sketch.hxx>
#include <NXOpen/TaggedObject.hxx>
#include <NXOpen/Update.hxx>
3.2 声明删除对象的方法
void DeteleSelectObjects(std::vector<TaggedObject*> taggedObjects);
3.3 定义删除对象的方法
我们这是用UFCurve类来测试这个功能的,所以其构造方法如下:
void UFCurve::DeteleSelectObjects(std::vector<TaggedObject*> taggedObjects)
{
NXOpen::Session::UndoMarkId markId1;
markId1 = theSession->SetUndoMark(NXOpen::Session::MarkVisibilityInvisible, "Delete");
theSession->UpdateManager()->ClearErrorList();
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddObjectsToDeleteList(taggedObjects);
NXOpen::Session::UndoMarkId id1;
id1 = theSession->NewestVisibleUndoMark();
int nErrs2;
nErrs2 = theSession->UpdateManager()->DoUpdate(id1);
theSession->DeleteUndoMark(markId1, NULL);
}
3.4 填写调用代码
//------------------------------------------------------------------------------
// Do something
//------------------------------------------------------------------------------
void UFCurve::do_it()
{
std::vector< NXOpen::TaggedObject * > any_objs = select_any_objects();
DeteleSelectObjects(any_objs);
}
//------------------------------------------------------------------------------
// Entry point(s) for unmanaged internal NXOpen C/C++ programs
//------------------------------------------------------------------------------
// Explicit Execution
extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
try
{
// Create NXOpen C++ class instance
UFCurve *theUFCurve;
theUFCurve = new UFCurve();
theUFCurve->do_it();
delete theUFCurve;
}
catch (const NXException& e1)
{
UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
}
catch (const exception& e2)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
}
catch (...)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
}
}
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
select_any_objects()的定义为:
//------------------------------------------------------------------------------
// Selection any objects
//------------------------------------------------------------------------------
std::vector< NXOpen::TaggedObject * > UFCurve::select_any_objects()
{
NXString message("Select any objects:");
NXString title("Select objects");
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
bool include_features = 0;
bool keep_highlighted = 0;
std::vector< NXOpen::TaggedObject * > objectArray;
// Select any object array
Selection::Response res = selmgr->SelectTaggedObjects(
message, title, scope, include_features,
keep_highlighted, objectArray );
return objectArray;
}
4、测试结果