一、概述
在进行批量操作时经常会利用链表进行存放相应特征的TAG值,以便后续操作,最常见的就是拉伸功能。这里我们以拉伸功能为例子进行说明。
二、常用链表相关函数
UF_MODL_create_list 创建一个链表,并返回链表的头指针。
UF_MODL_put_list_item 插入元素到链表中,不检验对象是否重复,或者已经存在。
UF_MODL_ask_list_count 获取链表对象数量,从头开始遇到NULL_Tag结束。
UF_MODL_ask_list_item 查询链表对象标识,给个位子返回标识
UF_MODL_delete_list_item 删除列表的对象,给一个tag就可以删除链表的对象。
UF_MODL_delete_list 删除整个链表,释放内存。
三、实现的功能
1、创建四条直线
2、根据四条直线创建拉伸特征
3、查询链表中的数量
4、删除链表中的第一个对象
5、查询删除后的链表数量
6、查询删除后链表的第一个对象TAG值
四、代码分析
//用户定义
#include <uf_ui.h>
#include <uf_curve.h>
#include <uf_modl.h>
void MyClass::do_it()
{
// TODO: add your code here
UF_initialize();
//创建一条直线
UF_CURVE_line_t line1,line2,line3,line4;
tag_t line1TAG[4];
line1.start_point[0] = 0.0;
line1.start_point[1] = 0.0;
line1.start_point[2] = 0.0;
line1.end_point[0] = 10.0;
line1.end_point[1] = 0.0;
line1.end_point[2] = 0.0;
UF_CURVE_create_line(&line1, &line1TAG[0]);
line2.start_point[0] = 10.0;
line2.start_point[1] = 0.0;
line2.start_point[2] = 0.0;
line2.end_point[0] = 10.0;
line2.end_point[1] = 10.0;
line2.end_point[2] = 0.0;
UF_CURVE_create_line(&line2, &line1TAG[1]);
line3.start_point[0] = 10.0;
line3.start_point[1] = 10.0;
line3.start_point[2] = 0.0;
line3.end_point[0] = 0.0;
line3.end_point[1] = 10.0;
line3.end_point[2] = 0.0;
UF_CURVE_create_line(&line3, &line1TAG[2]);
line4.start_point[0] = 0.0;
line4.start_point[1] = 10.0;
line4.start_point[2] = 0.0;
line4.end_point[0] = 0.0;
line4.end_point[1] = 0.0;
line4.end_point[2] = 0.0;
tag_t line4TAG = NULL_TAG;
UF_CURVE_create_line(&line4, &line1TAG[3]);
//链表操作
uf_list_p_t objectslist = NULL;
UF_MODL_create_list(&objectslist);//创建链表
for (int i = 0; i < 4; i++)
{
UF_MODL_put_list_item(objectslist, line1TAG[i]);//放置链表
}
//创建拉伸
char *taper_angle = "0";//抜模
char * limit[2] = { "0.0", "20.0" };//拉伸高度
double point[3] = { 0.0,0.0,0.0 };//已经弃用
double direction[3] = { 0.0,0.0,1.0 };//矢量方向
UF_FEATURE_SIGN sign = UF_NULLSIGN;
uf_list_t *features = NULL;
UF_MODL_create_extruded2(objectslist, taper_angle, limit, point, direction, sign, &features);
//访问链表数量
int cout;
UF_MODL_ask_list_count(objectslist, &cout);
char msg[256];
sprintf(msg, "%d", cout);
uc1601(msg, 1);
//删除链表中的第一个
UF_MODL_delete_list_item(&objectslist, line1TAG[0]);
int cout1;
UF_MODL_ask_list_count(objectslist, &cout1);
char msg1[256];
sprintf(msg1, "%d", cout1);
uc1601(msg1, 1);
tag_t object = NULL_TAG;
UF_MODL_ask_list_item(objectslist, 1, &object);
char msg2[256];
sprintf(msg2, "%d", object);
uc1601(msg2, 1);
UF_MODL_create_list(&objectslist);//删除链表
UF_terminate();
}
五、运行结果