前言
本系列文章主要讲解NXOpen UF API(简称ufun函数)的使用,之前看教学视频大都建议用ufun进行开发,这里西门子官方还专门给了一套系列文章来讲,说明官方也是特别推崇ufun。
本人从事二开也有一段时间了,我的二开启蒙师父就特别喜欢用NXOpen API,用他的话来说“年少不知nxopen好,错把ufun当成宝”,其实就我个人而言,还是喜欢NXOPEN+ufun联合开发。
一、小节概要
1、背景知识引用
样条曲线的概念:
样条曲线是指利用指定的若干个点拟合出的多项式曲线,样条曲线采用的是近似的拟合方法,但可以很好的满足工程需求,因此得到广泛的应用。
2、知识点提取
1)theUfSession的初始化
2)通过StreamWriter记录日志
3)创建样条曲线相关ufun方法
4)计算样条曲线的拐点信息
二、需求分析
1、效果图
2、需求分解
1)创建样条曲线相关ufun方法
2)计算样条曲线的拐点信息
三、程序分析
1、源码所在位置
UGOPEN\SampleNXOpenApplications\.NET\NXOpenExamples\EX_Curve_CreateSpline
2、主要功能分析
1)创建样条曲线相关ufun方法
int i, k, curve_cnt=0;
Tag curve_array;
char[] buf= new char[UF_OBJ_NAME_LEN+1];
String newnam= new String(buf);
int num_infpts;
double[] range={0.0, 100.0};
double[] inf_pts;
double[] proj_matrx={ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0,0.0, 0.0, 1.0};
int knot1_fix, knot2_fix, pole1_fix, pole2_fix;
double[] bc1_knots = {-3.0/8.0, -2.0/8.0, -1.0/8.0, 0.0, 1.0/8.0,
2.0/8.0, 3.0/8.0, 4.0/8.0, 5.0/8.0, 6.0/8.0,
7.0/8.0, 1.0, 9.0/8.0, 10.0/8.0, 11.0/8};
double[] bc1_poles = { 2.0, 0.0, 0.0, 1.0,
4.0, 0.0, 0.0, 1.0,
3.5, 2.0, 0.0, 1.0,
6.0, 6.0, 0.0, 1.0,
2.0, 3.5, 0.0, 1.0,
0.0, 4.0, 0.0, 1.0,
0.0, 2.0, 0.0, 1.0,
0.0, 0.0, 0.0, 1.0,
2.0, 0.0, 0.0, 1.0,
4.0, 0.0, 0.0, 1.0,
3.5, 2.0, 0.0, 1.0 };
double[] bc2_knots = {0.0, 0.0, 0.0, 1.0/3.0,
2.0/3.0, 1.0, 1.0, 1.0};
double[] bc2_poles = {0.0, 0.0, 1.0, 1.0,
1.0, 2.0, 1.0, 1.0,
0.625, 0.0, 0.25, 0.25,
4.0, 2.0, 1.0, 1.0,
5.0, 0.0, 1.0, 1.0 };
theUfSession.Modl.CreateSpline(11,4,bc1_knots,bc1_poles,out curve_array,out knot1_fix,out pole1_fix);
创建样条曲线参数初始化:
1、nc 极点
2、kc 未知
3、bc1_knots 极点+阶数
4、bc1_poles 阵列控制点
5、curve_array 样条曲线tag
6、knot1_fix 结固定状态 0 =未执行修正,1 =结固定序列
7、pole1_fix 极点修正状态 0 =没有执行修正,1 =极点阵列固定
2)计算样条曲线的拐点信息并输出
theUfSession.Curve.AskCurveInflections(curve_array,proj_matrx,range,out num_infpts,out inf_pts);
if (num_infpts > 0)
{
w.WriteLine("There are {0} inflection points for UFCurve {1}\n",num_infpts, i+1);
for(k = 0; k < (num_infpts * 4); k++)
{
w.WriteLine("inf_pts[{0}] = {1}\n", k, inf_pts[k]);
}
}