最近学习NX二次开发发现有一些函数经常使用,俗话说得好,好记性不如烂笔头,现在做一下笔记,帮助理解。
UF_MODL_ask_feat_......所在头文件uf_modl.h
1、UF_MODL_ask_feat_body(通过特征查询体)
概述:通过特征查询体,输出是一个实体类型 (type 70, subtype 0) ,type 70, subtype 0可以通过uf_object_types.h头文件进行查看。该头文件所有NX对象类型和子类型的名称。如下图所示。
适用环境:内部或外部开发
函数解析:
tag_t feature_obj_id Input 特征对象的TAG
tag_t * body_obj_id Output 通过特征找体后得到的的实体对象TAG
实例:通过特征找体,并打印体的TAG值,并对体进行染色(注意直接对特征进行染色时不可以的)
UF_initialize();
//创建块
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_block(Sign, NULL_TAG, Corner_pt, Edge_Len, &BlkTag);
//通过特征找体
tag_t bodyTag = NULL_TAG;
UF_MODL_ask_feat_body(BlkTag, &bodyTag);
//打印实体的TAG值
char msg[256];
sprintf(msg, "%d", bodyTag);
//将实体染为红色
UF_OBJ_set_color(bodyTag, 186);
UF_terminate();
结果:
2、UF_MODL_ask_feat_edges(通过特征查询边)
概述:通过特征查询边,输出是一个实体类型边 (type 70, subtype 3) ,type 70, subtype 3可以通过uf_object_types.h头文件进行查看。该头文件所有NX对象类型和子类型的名称。如下图所示。
适用环境:内部或外部开发
函数解析:
tag_t feature_obj_id Input 特征对象的TAG
uf_list_p_t * object_list Output to UF_*free* 使用链表对边进行收集,注意使用UF_MODL_delete_list()释放空间
实例:通过特征找边,并打印所有边的TAG值
UF_initialize();
//创建块
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_block(Sign, NULL_TAG, Corner_pt, Edge_Len, &BlkTag);
//通过特征找体
tag_t bodyTag = NULL_TAG;
UF_MODL_ask_feat_body(BlkTag, &bodyTag);
//通过特征查询边
uf_list_p_t edgelist = NULL_TAG;
UF_MODL_ask_feat_edges(BlkTag, &edgelist);
//链表操作
int cout;
UF_MODL_ask_list_count(edgelist, &cout); //访问链表数量
tag_t edgwTag = NULL_TAG;
for (int i = 0; i < cout; i++)
{
//打印实体的TAG值
UF_MODL_ask_list_item(edgelist, i, &edgwTag);
char msg[256];
sprintf(msg, "%d", edgwTag);
print(msg);
}
UF_terminate();
结果:
3、UF_MODL_ask_feat_faces(通过特征查询面)
概述:通过特征查询面,输出是一个实体类型面 (type 70, subtype 3) ,type 70, subtype 3可以通过uf_object_types.h头文件进行查看。该头文件所有NX对象类型和子类型的名称。如下图所示。
适用环境:内部或外部开发
函数解析:
tag_t feature_obj_id Input 特征对象的TAG
uf_list_p_t * object_list Output to UF_*free* 使用链表对面进行收集,注意使用UF_MODL_delete_list()释放空间
实例:通过特征找面,并打印所有面的TAG值
UF_initialize();
//创建块
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_block(Sign, NULL_TAG, Corner_pt, Edge_Len, &BlkTag);
//通过特征找体
tag_t bodyTag = NULL_TAG;
UF_MODL_ask_feat_body(BlkTag, &bodyTag);
//通过特征查询边
uf_list_p_t edgelist = NULL_TAG;
UF_MODL_ask_feat_edges(BlkTag, &edgelist);
//通过特征查询面
uf_list_p_t facelist = NULL_TAG;
UF_MODL_ask_feat_faces(BlkTag, &facelist);
//链表操作
int cout;
UF_MODL_ask_list_count(facelist, &cout); //访问链表数量
tag_t faceTag = NULL_TAG;
for (int i = 0; i < cout; i++)
{
//打印实体的TAG值
UF_MODL_ask_list_item(edgelist, i, &faceTag);
char msg[256];
sprintf(msg, "%d", faceTag);
print(msg);
}
UF_terminate();
结果: