文章目录
- 1、前言
- 2、在UG NX中创建多个体
- 3、创建UF_OBJ_cycle_objs_in_part的使用函数
- 3.1 首先声明函数:
- 3.2定义函数代码
- 3.3 函数调用代码
- 3.4 测试结果
1、前言
UG NX二次开发中,比如体、面、边等,在NXOpen中可以通过Collection来实现,但是采用遍历对象的方式也能实现,这就要需要UF_OBJ_cycle_objs_in_part的函数。本文就介绍一下这个方法的使用。
2、在UG NX中创建多个体
打开UG NX软件,在UG NX视图区创建多个特征,如下图所示:
这个三维模型中,包含了三个长方体和三个圆柱体。
3、创建UF_OBJ_cycle_objs_in_part的使用函数
3.1 首先声明函数:
void GetAllNXObjectsByUFun(int type,int *count,std::vector<Body*>*bodies);
3.2定义函数代码
void UFModel::GetAllNXObjectsByUFun(int type, int *count, std::vector<Body*>* bodies)
{
*count= 0;
tag_t solidTag = NULL_TAG;
int num = 0;
workPart = theSession->Parts()->Work();
bodies->clear();
UF_OBJ_cycle_objs_in_part(workPart->Tag(),type,&solidTag);
while (solidTag!=NULL_TAG)
{
int type1;
int subType;
UF_OBJ_ask_type_and_subtype(solidTag, &type1, &subType);
if (type1 == UF_solid_type)
{
if (subType == UF_solid_body_subtype)
{
num++;
NXObject* nXObject(dynamic_cast<NXObject*>(NXObjectManager::Get(solidTag)));
Body* body(dynamic_cast<Body*>(workPart->Bodies()->FindObject(nXObject->JournalIdentifier())));
bodies->push_back(body);
}
}
solidTag = UF_OBJ_cycle_all(workPart->Tag(), solidTag);
}
*count = num;
}
3.3 函数调用代码
void UFModel::do_it()
{
int type = UF_solid_type;
int count = 0;
std::vector<Body*>bodies;
GetAllNXObjectsByUFun(type,&count,&bodies);
lw->Open();
for (int i = 0; i < bodies.size(); i++) {
Body *body = bodies[i];
char st1[133];
int tagInt = (int)body->Tag();
sprintf_s(st1,"%d获取的体JournalIdentifier = %s\n",i, body->JournalIdentifier().GetLocaleText());
lw->WriteLine(st1);
}
}
生成dll,并用NXOpen执行来测试:
3.4 测试结果
所有体对象都被读取出来了。