刚入门的时候写的了,仅供新手了解函数用法!(NX10以后NXopen就可以直接读取刀路信息了)

int count=0;
tag_p_t objects=NULL_TAG;
tag_t setup_tag;
UF_SETUP_ask_setup( &setup_tag);
UF_UI_ONT_ask_selected_nodes(&count,&objects);
if (count!=1)
{
uc1601("选择一个程序或程序组",1);
UF_terminate ();
return;
}
tag_t initial_wcs;
tag_t wcs_value;
logical  is_group=TRUE;
tag_p_t oprea_list=NULL_TAG;
UF_CSYS_ask_wcs(&initial_wcs);
UF_NCGROUP_is_group(objects[0], &is_group );
if( is_group == TRUE ) 
{
if (count==0)
{
uc1601("程序组为空",1);
UF_terminate ();
return;
}
UF_NCGROUP_ask_member_list(objects[0],&count,&oprea_list);
UF_PARAM_ask_tag_value(oprea_list[0],UF_PARAM_MCS,&wcs_value);
}
else
{
UF_PARAM_ask_tag_value(objects[0],UF_PARAM_MCS,&wcs_value);
}
UF_CSYS_set_wcs(wcs_value);

UF_CAM_preferences_t  number; 
UF_CAM_ask_cam_preferences ( &number );
number.clsf_decimal_place=5;
UF_CAM_set_cam_preferences ( &number );
char path_char[133]="D:\\tmpcls.cls";
UF_SETUP_generate_clsf( setup_tag,objects[0],"CLSF_STANDARD", path_char, UF_SETUP_OUTPUT_UNITS_OUTPUT_DEFINED );

FILE *fp=fopen(path_char,"r");
char fchar[256];
if(fp==0)
{
uc1601("转换失败",1);
UF_terminate ();
return;
}
string fbuf;
tag_t  line;
double point_one[ 3 ]={0,0,0},point_two[ 3 ]={0,0,0},point_three[ 3 ]={0,0,0},point_mid[ 3 ]={0,0,0};
UF_CURVE_line_t line_coords;
double xa=0,ya=0,za=0,xc=0,yc=0,zc=0,rr=0,radius;
double tolerance=0.01;
double magnitude;
double one_vec[3]={0,0,0},two_vec[3]={0,0,0};
int k1=-1,k2=-1,k3=-1,k4=-1,k5=-1,k6=-1,k7=-1,k8=-1,create_flag=1,is_parallel=0,arc_ero=0;

while (1)
{
if (fgets(fchar,256,fp)==NULL)
{
break;
}
fbuf=fchar;
if (fbuf.compare(0,4,"GOTO")==0)
{
k1=k2=k3=k4=k5=k6=k7=k8=-1;
k1=fbuf.find('/',0);
k2=fbuf.find(',',k1+1);
k3=fbuf.find(',',k2+1);
k4=fbuf.find(',',k3+1);

point_one[0]=atof(fbuf.substr(k1+1,k2-k1-1).c_str());
point_one[1]=atof(fbuf.substr(k2+1,k3-k2-1).c_str());
if (k4==string::npos)
{
point_one[2]=atof(fbuf.substr(k3+1,fbuf.length()).c_str());
}
else
{
point_one[2]=atof(fbuf.substr(k3+1,k4-k3-1).c_str());
}
UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,point_one,UF_CSYS_ROOT_COORDS ,point_one);
break;
}
}
while (1)
{
if (fgets(fchar,256,fp)==NULL)
{
break;
}
fbuf=fchar;
if (fbuf.compare(0,4,"GOTO")==0)
{
k1=k2=k3=k4=k5=k6=k7=k8=-1;
k1=fbuf.find('/',0);
k2=fbuf.find(',',k1+1);
k3=fbuf.find(',',k2+1);
k4=fbuf.find(',',k3+1);

point_two[0]=atof(fbuf.substr(k1+1,k2-k1-1).c_str());
point_two[1]=atof(fbuf.substr(k2+1,k3-k2-1).c_str());
if (k4==string::npos)
{
point_two[2]=atof(fbuf.substr(k3+1,fbuf.length()).c_str());
}
else
{
point_two[2]=atof(fbuf.substr(k3+1,k4-k3-1).c_str());
}
UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,point_two,UF_CSYS_ROOT_COORDS ,point_two);

for (int k=0;k<3;k++)
{
line_coords.start_point[k]=point_one[k];
line_coords.end_point[k]=point_two[k];
}
UF_CURVE_create_line(&line_coords,&line);
for (int k=0;k<3;k++)
{
point_one[k]=point_two[k];
}
}

if (fbuf.compare(0,6,"CIRCLE")==0)
{
k1=k2=k3=k4=k5=k6=k7=k8=-1;
k1=fbuf.find('/');
k2=fbuf.find(',',k1+1);
k3=fbuf.find(',',k2+1);
k4=fbuf.find(',',k3+1);
k5=fbuf.find(',',k4+1);
k6=fbuf.find(',',k5+1);
k7=fbuf.find(',',k6+1);
k8=fbuf.find(',',k7+1);

point_three[0]=atof(fbuf.substr(k1+1,k2-k1-1).c_str());
point_three[1]=atof(fbuf.substr(k2+1,k3-k2-1).c_str());
point_three[2]=atof(fbuf.substr(k3+1,k4-k3-1).c_str());

UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,point_three,UF_CSYS_ROOT_COORDS ,point_three);
radius=atof(fbuf.substr(k7+1,k8-k7-1).c_str());

if (fgets(fchar,256,fp)==NULL)
{
break;
}
fbuf=fchar;
if (fbuf.compare(0,4,"GOTO")==0)
{
int k1,k2,k3,k4;
string x,y,z;
k1=fbuf.find('/',0);
k2=fbuf.find(',',k1+1);
k3=fbuf.find(',',k2+1);
k4=fbuf.find(',',k3+1);

point_two[0]=atof(fbuf.substr(k1+1,k2-k1-1).c_str());
point_two[1]=atof(fbuf.substr(k2+1,k3-k2-1).c_str());
if (k4==string::npos)
{
point_two[2]=atof(fbuf.substr(k3+1,fbuf.length()).c_str());
}
else
{
point_two[2]=atof(fbuf.substr(k3+1,k4-k3-1).c_str());
}
UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS,point_two,UF_CSYS_ROOT_COORDS ,point_two);
}
UF_VEC3_sub(point_one,point_three,one_vec);
UF_VEC3_sub(point_two,point_three,two_vec);
UF_VEC3_add(one_vec,two_vec,point_mid);
UF_VEC3_unitize(point_mid,tolerance,&magnitude,point_mid);

point_mid[0]=point_three[0]+radius*point_mid[0];
point_mid[1]=point_three[1]+radius*point_mid[1];
point_mid[2]=point_three[2]+radius*point_mid[2];

UF_VEC3_is_parallel(one_vec,two_vec,tolerance,&is_parallel);
if (is_parallel==1)
{
arc_ero=1;
for (int k=0;k<3;k++)
{
point_one[k]=point_two[k];
}
}
else
{
UF_CURVE_create_arc_thru_3pts(create_flag,point_one,point_mid ,point_two,&line);
for (int k=0;k<3;k++)
{
point_one[k]=point_two[k];
}
}
}
}
fclose(fp);
uc4561(path_char,0);
UF_CSYS_set_wcs(initial_wcs);
if (arc_ero==1)
{
uc1601("部分圆弧大于π,转换失败",1);
}

NX/UG二次开发—CAM—刀轨转曲线(支持圆弧和直线)相关推荐

  1. NX/UG二次开发—CAM—用户自定义刀轨(UDOP)+ 螺旋铣用例教程 + 源码

    用户定义刀轨是指:在需要一种无法由标准制造处理器完成的加工方法时,使用NX以外的处理器生成刀具路径的操作.这可能是你自己的或第三方的代码.入口函数udop.以下是程序框架,可以往里面添加你的代码 ex ...

  2. NX/UG二次开发—CAM—获取加工环境下所有程序组、刀具组、加工坐标系并输出名称

    以下代码为CAM所有程序组.刀具组.加工坐标系并输出名称 源文件在群共享文件中.(QQ群:1023204977)

  3. NX/UG二次开发—CAM—获取程式的刀具、加工坐标系、加工方法

    tag_t oper=null; tag_t group; UF_OPER_ask_cutter_group(oper,&group);//获取程式的刀具 tag_t oper=null; t ...

  4. NX/UG二次开发—CAM—设置平面铣程序的切削底面(Floor)

  5. NX/UG二次开发创建曲面偏置体

    NX/UG二次开发--创建曲面偏置体 创建曲面偏置体 1.曲面偏置 创建曲面偏置体 这里介绍了一种对模型曲面进行偏置来获得偏置体的方法. 1.曲面偏置 void OffsetFace(tag_t fa ...

  6. NX/UG二次开发—调用NX内部函数实现功能汇总(部分只有标题)

    1.调用NX自身功能并返回开发工具界面UIFW_create_command: 2.C++与C#开发的dll互相调用且可以传参: 3.NX进度条的创建.显示.删除MT_create_progress_ ...

  7. NX/UG二次开发—菜单—ACTIONS的应用

    NX二次开发菜单打开网站,打开程序,打开文件夹响应.以下是常用的几种方式,实际上如果你熟悉DOS命令,BAT的话基本上想要打开什么程序都可以! (1)网站的打开:   ACTIONS "st ...

  8. NX/UG二次开发—装配—克隆相关知识总结

    一.克隆部件或装配-七步法: 1. UF_CLONE_initialise 初始化克隆操作     2. UF_CLONE_add_assembly/UF_CLONE_add_part添加装配/部件文 ...

  9. NX/UG二次开发环境配置方法—史上最详细版(以NX11.0和Visual Studio 2017为例)

    一.前言 本人之前在用NX12.0以及Visual Studio 2017进行NX二次开发时,进行过开发环境的配置,当时也遇到了一点问题,好在最后解决了.最近由于项目需求,我卸载了NX12.0,重装了 ...

  10. ug nx/open二次开发cam部分之刀具的创建

    简单说一下思路,参见http://www.360doc.com/content/14/0928/11/7378868_412936842.shtml 1.首先是初始化uf_initialize UF_ ...

最新文章

  1. ubuntu samba 安装
  2. Jetson Nano 改成国内源(中科大源)
  3. Django在admin.py中设置date_hierarchy时报错
  4. python时间减法_干!一张图整理了 Python 所有内置异常
  5. HTTP系列学习(笔记一):一文带你详解HTTP协议
  6. JEECG开源社区, 成立了微信二次开发项目,欢迎有兴趣朋友参与
  7. 聊聊研读论文有哪些经验之谈?
  8. JavaScript面向对象编程理解
  9. 沈是计算机专业考研分数线,计算机#2017年东北大学计算机考研究生分数线_计算机考研究生复试分数线...
  10. 极客大学架构师训练营 系统架构 高并发 高可用 垂直伸缩 水平伸缩 第7课 听课总结
  11. 进销存excel_超实用Excel完整进销存管理系统,多功能实现,轻松套用赶GET
  12. GB2312、BIG5、GBK、GB18030简介
  13. Linux命令:grep -v grep的作用 使用场景
  14. chrome手机版怎么扫描二维码_照片扫描仪软件手机版-照片扫描仪手机版官网版下载v3.2.0...
  15. mysql的auto_increment报错1467
  16. 奇安信行业安全研究中心
  17. 情感分析论文中涉及的数据
  18. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代
  19. 理性行为理论和计划行为理论
  20. Marvell 88NV1120固态硬盘简易开卡攻略

热门文章

  1. WPS简历模板的图标怎么修改_官方发福利一起来薅羊毛啦!教你免费领WPS会员
  2. 找简历模板过程中的碎碎念
  3. python socks代理 命令行_python socks5 代理无法使用
  4. Js关于光标对象与定位插入图片
  5. 用cmd命令行下载github中的工程文件
  6. 计算机没有无线网卡驱动程序,电脑上没有光驱怎么安装无线网卡驱动 - 驱动管家...
  7. logo语言编程介绍
  8. 《薄世宁医学通识讲义》笔记
  9. LoadRunner教程(22)-LoadRunner C语言脚本
  10. LoadRunner教程(12)-LoadRunner IP欺骗