在cam编程中的设置窗口如下,相切或者对中,而对中其实就是刀具的中心沿着曲线居中,对称居中,所以才叫做对中吧:
具体如何设置呢,我自己在nxopen的代码中搜索,得到:
UF_CALL(UF_PARAM_set_int_value(geometry, UF_PARAM_TOOL_POSITION, UF_PARAM_tool_posi_on_same));
但是操作失败,提示索引不合法,我猜这个函数应该实现类似的功能,但是因为没有范例,自己测试也失败了,所以只能继续寻找解决办法。
直到我看到这篇博文《UG二次开发—CAM—设置程序修剪边界Boundary》,博主提供了详细的设置参数,给了我不少启发,最终在同事的帮助下,总算成功设置了刀具位置。
以下是我成功设置刀具位置的关键代码,供参考:
{
pCam = ivCamFeats[f];
vector<Curve *> vProjectCurves(1);
vProjectCurves = pCam->m_vpCurves;
UF_CAMBND_boundary_data_t boundary_data;
boundary_data.boundary_type = UF_CAM_boundary_type_open;
boundary_data.plane_type = 1;
boundary_data.ignore_chamfers = 1;
boundary_data.ignore_holes = 1;
boundary_data.ignore_islands = 1;
boundary_data.app_data = nullptr;
//修改时间:2023/07/11 ,修改人:autumoon
//修改原因:需要修改刀具位置 相切或者居中
UF_CAMBND_app_data_t *app_data = create_and_init_bnd_app_data(pCam->m_nCurveCamMethod == 0 ? UF_CAM_tool_position_on : UF_CAM_tool_position_tanto);
int curveCount = vProjectCurves.size();
tag_t * curves = new tag_t[curveCount];
std::vector<UF_CAMBND_app_data_t*> vpAppData(curveCount);
for (int j = 0;j < curveCount;++j)
{
curves[j] = vProjectCurves[j]->Tag();
vpAppData[j] = app_data;
}
UF_CALL(UF_CAMBND_append_bnd_from_curve(geometry, UF_CAM_part, curveCount, curves, &boundary_data, &vpAppData[0]));
UF_free(app_data);
app_data = nullptr;
delete[] curves;
curves = nullptr;
}
以上,欢迎交流与讨论。