文章目录
- 1、前言
- 2、在UG NX创建多个体对象
- 3、用UF_OBJ_cycle_all来创建一个新的方法
- 4、测试结果
- 4.1 用UF_OBJ_cycle_objs_in_part()结果
- 4.2 用 UF_OBJ_cycle_all()结果
- 5、结论
1、前言
在前面的一篇博客中,我们介绍了用UF_OBJ_cycle_objs_in_part遍历对象,后面我们用UF_OBJ_cycle_all这个方法来测试,发现还是UF_OBJ_cycle_objs_in_part比较准确些,具体为什么暂时还不清楚,如果有懂的请告知,不胜感激。
2、在UG NX创建多个体对象
其是包括了六个体:三个长方体和三个圆柱体。
3、用UF_OBJ_cycle_all来创建一个新的方法
方法的名称为:
void GetAllNXObjectsByUFun(int type,int *count,std::vector<Body*>*bodies);
其定义如下:
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);
}
}
UF_OBJ_cycle_objs_in_part(workPart->Tag(),type,&solidTag);
}
/* solidTag = UF_OBJ_cycle_all(workPart->Tag(), 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;
}
此代码中用了两种UFun函数,注释的为UF_OBJ_cycle_all,我们对这两个分别测试:
4、测试结果
4.1 用UF_OBJ_cycle_objs_in_part()结果
结论:正确读取的六个体对象
4.2 用 UF_OBJ_cycle_all()结果
此时,出现了7个体对象,第一个对象为:
0获取的体JournalIdentifier = HANDLE R-535
这个怎么来的,我还不是很清楚,读取其Tag_t还是有的。
5、结论
对于变量读取对象,还是建议用UF_OBJ_cycle_objs_in_part()这个函数。