UG
OpenAPI关于曲线绘制的资料网上并不多,凑巧最近有人来询问UG二次开发画样条曲线该怎么弄,顺带自己琢磨了一下,以以下方式能够正常绘制NURBS曲线,主要用到如下函数:
int
UF_CURVE_create_spline
(
UF_CURVE_spline_p_t
spline_data
tag_p_t spline_tag
int * num_states
UF_CURVE_state_p_t * states
)
1、首先要增加几个用于输出的变量
tag_t tag_spline;
//曲线标识
//下面两个反正是用于输出的,生成状态之类的变量,不用多考虑
int nStates;
UF_CURVE_state_p_t
states;
2、接下来可以定义曲线数据了,主要是结构体UF_CURVE_spline_t
UF_CURVE_spline_t
spline_data;
spline_data.is_rational
= 1; //是否接受权值
double dknots[10] = {
0,0,0,0,0.333,0.667,1,1,1,1 }; //节点向量
spline_data.knots =
dknots;
spline_data.num_poles =
6; //控制点个数
spline_data.order = 4;
//阶数
//这两个字面意思是起始和终止参数,但不太明确具体含义,还是由于NURBS理论研究不够深入
spline_data.start_param
= 0;
spline_data.end_param =
1;
//控制点数组,123号位为控制点坐标,4号位为该控制点权值
double dPoles[6][4] = {
{-56,-50,28,1} , {-10,2,23,1} , {24,75,71,1} , {92,130,27,1} ,
{136,234,76,1} ,{178,298,123,1} };
spline_data.poles =
dPoles;
3、调用绘制样条曲线函数
int nRet =
UF_CURVE_create_spline(&spline_data , &tag_spline ,
&nStates , &states); //构建曲线
4、释放要求释放的变量
UF_free(states);
以这个方式可以绘制出NURBS曲线,但这个函数的使用要求深入理解NURBS理论,如果某些数据定义有问题,是不能绘制出曲线的。还是需要先好好看一下NURBS曲线的理论,节点,控制点,阶数的定义及相互之间的关系等等。
加载中,请稍候......