点击查看详细介绍

UF_CURVE_create_spline_thru_pts() 函数的参数解释说明、函数详细用法,以及实例代码演示

misnn 9年前 1836 0

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


函数结构:
UF_CURVE_create_spline_thru_pts
(
int degree,
int periodicity,
int num_points,
UF_CURVE_pt_slope_crvatr_t point_data [ ],
double parameters [ ],
int save_def_data,
tag_t* spline_tag
)

函数说明:
创建从由指定的输入限定的数据的样条曲线UF_CURVE_pt_slope_crvatr_s数据结构(见的说明对于数据项的描述结构)。花键通通过输入点和符合指定的斜坡和曲率。的参数的阵列的长度为非周期性NUM_POINTS曲线和(NUM_POINTS+ 1)为周期性的。与差周期性曲线是,尽管我们知道该曲线的最后点(它与第一点重合),我们不知道的参数范围的曲线。因此,您需要提供的参数最后一点(NUM_POINTS+1),以指定的参数范围曲线。

函数参数:
第1个参数为输入:
输入int 整数型的参数,参数的变量格式为degree,样条曲线的程度

第2个参数为输入:
输入int 整数型的参数,参数的变量格式为periodicity,样条曲线的周期:0 =无期,1 =定期

第3个参数为输入:
输入int 整数型的参数,参数的变量格式为num_points,点和参数在后面的阵列数

第4个参数为输入:
point_data [ ]代表参数变量,UF_CURVE_pt_slope_crvatr_t 为输入参数类型,数据定义点和斜率/曲率控制阵列

第5个参数为输入:
输入double 双精度类型的参数,参数的变量格式为parameters [ ],输入点参数。这是输入点,用户指定的参数,它必须是单调增加(即参数(ⅰ)<用于所有的i参数第(i +1)),但并不需要进行归一化,如果NULL则默认参数 将会被使用。

第6个参数为输入:
输入int 整数型的参数,参数的变量格式为save_def_data,如果save_def_data=1,节约投入与创建的样条曲线定义数据。否则,没有。

第7个参数为输出:
spline_tag代表参数变量,tag_t* 为输出参数类型,创建样条的标签

UF_CURVE_create_spline_thru_pts函数实例代码演示:
执行此示例代码之前,必须打开一个空白部分。
[quote]
#include <stdio.h>
#include <uf_curve.h>
#include <uf.h>
#define NUMBER_POINTS 5
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
if (irc)
{
char messg[133];
printf("%s, line %d: %s\n", file, line, call);
(UF_get_fail_message(irc, messg)) ?
printf(" returned a %d\n", irc) :
printf(" returned error %d: %s\n", irc, messg);
}
return(irc);
}
static void do_ugopen_api(void)
{
/* B-spline parameters */
int degree = 3;
int periodicity = 0;
int num_points = NUMBER_POINTS;
/* Point/slope curve attribute array */
UF_CURVE_pt_slope_crvatr_t point_data[NUMBER_POINTS];
/* Arrays of user's defining point data */
double parameters[NUMBER_POINTS] = {0.00, 0.17, 0.32, 0.45,
1.29};
double points[3*NUMBER_POINTS] = {1.1000, 0.5320, 2.0000,
1.5240, 0.6789, 2.3000,
2.0000, 0.9000, 3.5956,
2.3456, 1.3456, 3.7890,
3.1000, 2.4567, 3.3214};
int slopeTypes[NUMBER_POINTS] = {UF_CURVE_SLOPE_DIR,
UF_CURVE_SLOPE_AUTO,
UF_CURVE_SLOPE_NONE,
UF_CURVE_SLOPE_DIR,
UF_CURVE_SLOPE_VEC};
double slopeVecs[3*NUMBER_POINTS] = {1.2300, 5.0506, 4.0360,
0.0000, 0.0000, 0.0000,
0.0000, 0.0000, 0.0000,
0.5000, 1.0000, 0.5000,
1.0000, -2.0000, 1.0000};
int crvatrTypes[NUMBER_POINTS] = {UF_CURVE_CRVATR_NONE,
UF_CURVE_CRVATR_AUTO_DIR,
UF_CURVE_CRVATR_NONE,
UF_CURVE_CRVATR_VEC,
UF_CURVE_CRVATR_VEC};
double crvatrVecs[3*NUMBER_POINTS] = {0.0000, 0.0000, 0.0000,
1.0000, 2.5780, 5.6700,
0.0000, 0.0000, 0.0000,
1.0000, -1.0000, 1.0000,
-1.0000, -1.0000, -1.0000};
int i, save_def_data = 1;
tag_t spline_tag;
for (i= 0; i<NUMBER_POINTS; i++)
{
point_data[i].point[0] = points[3*i];
point_data[i].point[1] = points[3*i+1];
point_data[i].point[2] = points[3*i+2];
point_data[i].slope_type = slopeTypes[i];
point_data[i].slope[0] = slopeVecs[3*i];
point_data[i].slope[1] = slopeVecs[3*i+1];
point_data[i].slope[2] = slopeVecs[3*i+2];
point_data[i].crvatr_type = crvatrTypes[i];
point_data[i].crvatr[0] = crvatrVecs[3*i];
point_data[i].crvatr[1] = crvatrVecs[3*i+1];
point_data[i].crvatr[2] = crvatrVecs[3*i+2];
}
/* Create B-spline curve */
UF_CALL(UF_CURVE_create_spline_thru_pts(degree,
periodicity,
num_points,
point_data,
parameters,
save_def_data,
&spline_tag));
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int paramLen)
{
if (!UF_CALL(UF_initialize()))
{
do_ugopen_api();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}

Return:
Return code:
return (UF_UNLOAD_IMMEDIATELY);
}




[/quote]

0

最新回复 (0)
请登录后发表新帖