UG可变轮廓铣, 设置边界驱动应该使用哪个函数?
你好, 请问二次开发中, 可变轮廓铣, 如何设置边界驱动,下面是我写的代码, message返回信息是 Object is not the desired type 应该如何加进去int count = 0;
tag_t *objects = NULL;
UF_UI_ONT_ask_selected_nodes(&count, &objects);
int count1 =1;
tag_t curves = {45219};
UF_CAMBND_boundary_data_t boundary_data;
boundary_data.boundary_type = UF_CAM_boundary_type_closed;
boundary_data.plane_type = 1;
boundary_data.material_side = UF_CAM_material_side_in_left;
boundary_data.origin = 0.0;
boundary_data.origin = 0.0;
boundary_data.origin = 0.0;
boundary_data.matrix = 1.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 1.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 1.0;
boundary_data.ignore_holes = 0;
boundary_data.ignore_islands = 0;
boundary_data.ignore_chamfers = 0;
boundary_data.app_data = NULL;
UF_CAMBND_app_data_t app_data;
app_data.has_stock = 0;
app_data.has_tolerances = 0;
app_data.has_feedrate = 0;
app_data.has_blank_distance = 0;
app_data.has_tool_position = 0;
UF_CAMBND_app_data_p_t dates = &app_data;
int err = UF_CAMBND_append_bnd_from_curve(objects, UF_CAM_drive, count1, curves,&boundary_data, &dates);
char message;
UF_get_fail_message(1345005, message);
lw->Open();
lw->WriteFullline(message);
UF_free(objects);
需要的是这个吗,不是的话截个图发下吧 int count = 0;
tag_t *objects = NULL;
UF_UI_ONT_ask_selected_nodes(&count, &objects);
lw->Open();
if (count <= 0 || objects == NULL)
{
lw->WriteLine("No CAM operation selected.");
return;
}
tag_t oper_tag = objects;
// 检查 CAM 对象类型
int cam_type = 0;
int cam_subtype = 0;
int cam_err = UF_CAM_ask_object_type(oper_tag, &cam_type, &cam_subtype);
if (cam_err != 0)
{
char message;
UF_get_fail_message(cam_err, message);
lw->WriteLine(message);
UF_free(objects);
return;
}
char info;
sprintf(info, "CAM object type = %d, subtype = %d", cam_type, cam_subtype);
lw->WriteLine(info);
// 注意:这里的 45219 必须是曲线 tag,不能是边、面或其他对象
int count1 = 1;
tag_t curves = { 45219 };
// 检查曲线对象类型
int obj_type = 0;
int obj_subtype = 0;
UF_OBJ_ask_type_and_subtype(curves, &obj_type, &obj_subtype);
sprintf(info, "Curve object type = %d, subtype = %d", obj_type, obj_subtype);
lw->WriteLine(info);
// 初始化 boundary_data
UF_CAMBND_boundary_data_t boundary_data;
boundary_data.boundary_type = UF_CAM_boundary_type_closed;
boundary_data.plane_type = 1;
boundary_data.material_side = UF_CAM_material_side_in_left;
boundary_data.origin = 0.0;
boundary_data.origin = 0.0;
boundary_data.origin = 0.0;
boundary_data.matrix = 1.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 1.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 0.0;
boundary_data.matrix = 1.0;
boundary_data.ignore_holes = 0;
boundary_data.ignore_islands = 0;
boundary_data.ignore_chamfers = 0;
boundary_data.app_data = NULL;
// 初始化 app_data
UF_CAMBND_app_data_t app_data;
app_data.has_stock = 0;
app_data.has_tolerances = 0;
app_data.has_feedrate = 0;
app_data.has_blank_distance = 0;
app_data.has_tool_position = 0;
UF_CAMBND_app_data_p_t app_data_ptr = &app_data;
/*
关键点:
对于可变轮廓铣,调用前需要确认该操作的 Drive Method 已经是 Boundary Drive。
否则 UF_CAM_drive 边界可能无法加进去。
*/
int err = UF_CAMBND_append_bnd_from_curve(
oper_tag,
UF_CAM_drive,
count1,
curves,
&boundary_data,
&app_data_ptr
);
if (err != 0)
{
char message;
UF_get_fail_message(err, message);
lw->WriteLine("UF_CAMBND_append_bnd_from_curve failed:");
lw->WriteLine(message);
}
else
{
lw->WriteLine("Append drive boundary successfully.");
}
UF_free(objects);
不小明我们不约 发表于 2026-6-4 07:47
需要的是这个吗,不是的话截个图发下吧
您好,是这个边界驱动 不小明我们不约 发表于 2026-6-4 07:47
需要的是这个吗,不是的话截个图发下吧
您好,是这个边界驱动 我把代码部分修改了下,增加了一些分配内存的功能,关键是UF_CAMBND_append_bnd_from_curve这里改成了UF_CAM_trim,不是UF_CAM_drive,我测试了下问题不大
int count1 =2;
int ErrCode;
tag_t* Curve_list = NULL;
Curve_list = (tag_t*)UF_allocate_memory(count1 * sizeof(tag_t), &ErrCode);
Curve_list = 34254;
Curve_list = 34253;
UF_DISP_set_highlight(34253,1);
UF_CAMBND_boundary_data_p_t boundary_data;
boundary_data = (UF_CAMBND_boundary_data_p_t) UF_allocate_memory(sizeof(UF_CAMBND_boundary_data_t), &ErrCode);
boundary_data->boundary_type = UF_CAM_boundary_type_open;
boundary_data->plane_type = 1;
boundary_data->material_side = UF_CAM_material_side_in_left;
boundary_data->origin = 0.0;
boundary_data->origin = 0.0;
boundary_data->origin = 0.0;
boundary_data->matrix = 1.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 1.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 0.0;
boundary_data->matrix = 1.0;
boundary_data->ignore_holes = 0;
boundary_data->ignore_islands = 0;
boundary_data->ignore_chamfers = 0;
boundary_data->app_data = NULL;
UF_CAMBND_app_data_p_t*AppData;
AppData = (UF_CAMBND_app_data_p_t *)UF_allocate_memory( count1* sizeof(UF_CAMBND_app_data_p_t ), &ErrCode);
UF_CAMBND_app_data_p_t app_data;
app_data = (UF_CAMBND_app_data_p_t ) UF_allocate_memory(sizeof(UF_CAMBND_app_data_p_t ), &ErrCode);
app_data->has_stock = 0;
//app_data->has_cut_stock = 0;
app_data->has_tolerances = 0;
app_data->has_feedrate = 0;
//app_data->has_offset = 0;
//app_data->has_avoidance_type = 0;
app_data->has_blank_distance = 0;
app_data->has_tool_position = 0;
AppData = app_data;
AppData = app_data;
//int err = UF_CAMGEOM_append_items(objects, UF_CAM_drive, count1, Curve_list,AppData);
int err = UF_CAMBND_append_bnd_from_curve(objects, UF_CAM_trim, count1, Curve_list,boundary_data, AppData);
char message;
UF_get_fail_message(err, message);
uc1601(message,1);
UF_free(boundary_data);
UF_free(AppData); 不小明我们不约 发表于 2026-6-4 10:02
我把代码部分修改了下,增加了一些分配内存的功能,关键是UF_CAMBND_append_bnd_from_curve这里改成了UF_CA ...
设置成功了, 太感谢了.
页:
[1]