实例:NX二次开发使用链表进行拉伸功能(链表相关功能练习)

一、概述

        在进行批量操作时经常会利用链表进行存放相应特征的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 
#include 
#include 

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();
}

五、运行结果

你可能感兴趣的:(ug二次开发,NX二次开发,链表相关函数的应用)