在做一刀轨编辑工具时,大家希望实现类似NX刀轨编辑中选择刀路的功能,以下我罗列了几种目前外挂里使用的几种方式,自己也做了一些对比:
涉及一些运算时间,参考电脑配置(内存32G,CPUi9-12950HX)
1、刀路转成曲线,使用曲线或类选择器:
这个方法相对可实现性比较强,操作安全,都可以采用开放的API,但对于刀路遍历是在NX11之后的版本提供的,因此低版本还需要使用dll导出函数去做迭代和编辑。
其次,对于大刀路,几十万或上百万根刀路,使用UFUN函数转换成曲线,非常慢。测试30万根刀路用UFUN创建,大约38s左右,包括设置曲线颜色。采用PK函数创建,创建大约2s,显示和设置大约6s,总计9s左右,速度勉强接受。
!!!注意PK创建曲线,直线的区间是长度,圆弧的区间是角度。
2、创建UF_machining_pathindex_type对象,使用类选择器
使用PTHDSP_create_index创建的对象,然后将类选择控件设置选择UF_machining_pathindex_type类型,然后可以实现选择刀路。如果PTHDSP_create_index中的参数采用单根创建,对于刀轨数量多的程序速度依然很慢,但会比UFUN函数快很多。class UGS::CamUI::PathDisplay创建刀路很快,组数自定义,如果设置成1,速度也很慢,用class UGS::CamUI::PathDisplay创建显示的刀路,对于直线与圆弧相切的刀路,会默认成一根刀路进行选择,无法拆分。这种存在一个问题,如果优先选择程序,再打开对话框创建index,类选择控件会出现选择不灵敏的问题。
3、使用刀路选择控件UGS::CamUI::PathSelection
http://t.csdnimg.cn/k0dHahttp://t.csdnimg.cn/k0dHa
参考上面连接,需要将控件先配置到block ui模块,然后按正常制作对话框流程制作。这个对话框稍微特殊,需要用代码初始化一些属性,否则无法使用,具体属性参考如下:
UGS::CamUI::PathSelection
"m_pathOwner" "m_selectHeadIndex" "m_toolPath" "m_appendMode"
UGS::CamUI::PathDisplay
"m_toolPath"
此控件,官方资料几乎为零,很多都是对象的内存传参,使用机制和方法需要不断摸索,导致各种BUG不断。其次,在创建显示刀路,内部一般默认500根刀路一组,刀路选择控件可以自动按单根刀路选择,导致选择多根后,选择控件显示的数量与实际发生不一致。
以上三种方案,是目前我结合一些外挂测试的的几种方法,总体来说,推荐第一种,虽然牺牲了一些速度,但在创建之后,速度和安全性均比较稳定。第二中方案和第三种就属于单纯炫技操作了,自己摸索,不推荐使用,还需结合工具开发周期和使用目的。