购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
函数结构:UF_MODL_create_surf_from_cloud( int point_cnt, double cloud [ ] [ 3 ], double csys_matrix [ 2 ] [ 3 ], double bnd_corners [ 4 ] [ 3 ], int U_degree, int V_degree, int U_patches, int V_patches, int corner_switch, double * average_error, double * max_error, int * max_error_index, tag_t * surface_tag) 函数说明:
创建使用现有的点列表的B面。点可能以任何顺序出现。必须有足够的积分来定义一个表面与请求的程度和补丁和点应覆盖指定的边界内的区域。表面的边界,投影到规定的X-Y平面,形成的四边形。所述边界可以由指定可选bnd_corners参数。这些点,投射到指定坐标系的X-Y平面必须形成凸四边形。该点的顺序确定的U和V方向所得的表面。如果该指针bnd_corners为NULL,边界是包围在指定的X-Y浊点最小的矩形平面。表面的U方向是与X方向对齐和表面的V方向与Y方向对齐。在X-Y平面可以由可选csys_matrix指定参数。如果csys_matrix为NULL,则使用绝对X-Y平面。在所有情况下,假定在Z方向为大致垂直于从观察时,表面和表面一定不能含糊这个方向发展。法线Z1,Z2,Z3,和其它可接受的载体都产生相同的最佳配合表面。然而,锌产生显着不同的表面。其他不正确的载体产生不同的结果,没有可以接受的。当这种情况发生时,系统无法检测。
函数参数:
第1个参数为输入:
输入int 整数型的参数,参数的变量格式为point_cnt,云阵列中的点数。
第2个参数为输入:
输入double 双精度类型的参数,参数的变量格式为cloud [ ] [ 3 ],点的数组[point_cnt] [3]。该点可以以任何顺序出现。必须有足够的点来定义所请求的顺序的一个表面上的它们应该涵盖以下指定的范围内的区域。分不应该代表一个表面,在表面的法线方向不明确的。
第3个参数为输入:
输入double 双精度类型的参数,参数的变量格式为csys_matrix [ 2 ] [ 3 ],方向 - X-Y载体,表面的U-V的方向与这些X-Y载体。表面必须在Z方向明确。如果该指针为NULL,则绝对的数据的X-Y-Z被使用。
第4个参数为输入:
输入double 双精度类型的参数,参数的变量格式为bnd_corners [ 4 ] [ 3 ],边界的角 - 4点规定的表面的角落。所得表面边界,投射到X-Y平面,上述规定,在这些点上的投影该平面形成具有角部的四边形。表面谎言的在一个方向上的U方向大致与第一和第三线段和与2n个和第4对准的V方向对准。如果该指针为NULL,四边形是在指定的X-Y平面的输入数据的最大最小框。
第5个参数为输入:
输入int 整数型的参数,参数的变量格式为U_degree,期望的程度在U方向所产生的表面。有效值为1到24。
第6个参数为输入:
输入int 整数型的参数,参数的变量格式为V_degree,期望的程度在V方向将所得的表面。有效值为1到24。
第7个参数为输入:
输入int 整数型的参数,参数的变量格式为U_patches,在生成的曲面的U方向所需补丁的数量。
第8个参数为输入:
输入int 整数型的参数,参数的变量格式为V_patches,在所得表面的V方向所需的补丁的数量。
第9个参数为输入:
输入int 整数型的参数,参数的变量格式为corner_switch,当前未使用。
第10个参数为输出:
输出double * 双精度类型的参数,参数的变量格式为average_error,的平均距离,在Z方向上,所有的输入点和所得的表面之间。
第11个参数为输出:
输出double * 双精度类型的参数,参数的变量格式为max_error,的最大距离,在Z方向上,所有的输入点和所得的表面之间。
第12个参数为输出:
输出int * 整数型的参数,参数的变量格式为max_error_index,序列号,云阵列,其中,最大误差(max_error)发生点,内。
第13个参数为输出:
surface_tag代表参数变量,tag_t * 为输出参数类型,对生成的曲面对象标识符。
UF_MODL_create_surf_from_cloud函数实例代码演示:
下面的例子需要一个空白的,开放的一部分。该代码创建从16分的表面。
[quote]
#include <stdio.h>
#include <uf.h>
#include <uf_modl.h>
#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)
{
int pnt_cnt = 16;
int u_degree = 3, v_degree = 3;
int u_patches = 1, v_patches = 1;
int corner_switch = 0;
int max_err_index;
double average_error, max_error;
tag_t surface_tag = NULL_TAG;
static double mtx[2][3] = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0} };
static double cloud_pnts[][3]=
{ { 2200.0, 548.0, 1472.0 }, { 1400.0, 1168.0, 1213.0 },
{ 1000.0, 285.0, 1377.0 }, { 1000.0, 1107.0, 1154.0 },
{ 1000.0, -254.0, 950.0 }, { 2200.0, 951.0, 1462.0 },
{ 1400.0, -353.0, 1049.0 }, { 1800.0, 605.0, 1388.0 },
{ 1400.0, 222.0, 1550.0 }, { 1800.0, -426.0, 1121.0 },
{ 2200.0, 207.0, 1750.0 }, { 1800.0, 1007.0, 1406.0 },
{ 1800.0, 259.0, 1655.0 }, { 1400.0, 649.0, 1301.0 },
{ 2200.0, -479.0, 1175.0 }, { 1000.0, 704.0, 1167.0 } };
UF_CALL(UF_MODL_create_surf_from_cloud( pnt_cnt,
cloud_pnts,
mtx,
NULL,
u_degree,
v_degree,
u_patches,
v_patches,
corner_switch,
&average_error,
&max_error,
&max_err_index,
&surface_tag ));
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
if (!UF_CALL(UF_initialize()))
{
do_ugopen_api();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
[/quote]