2217231767 发表于 2026-6-1 15:08:26

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);

不小明我们不约 发表于 2026-6-4 07:47:52

需要的是这个吗,不是的话截个图发下吧

f3634861 发表于 2026-6-4 08:41:39

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);

2217231767 发表于 2026-6-4 09:14:21

不小明我们不约 发表于 2026-6-4 07:47
需要的是这个吗,不是的话截个图发下吧

您好,是这个边界驱动

2217231767 发表于 2026-6-4 09:15:20

不小明我们不约 发表于 2026-6-4 07:47
需要的是这个吗,不是的话截个图发下吧

您好,是这个边界驱动

不小明我们不约 发表于 2026-6-4 10:02:23

我把代码部分修改了下,增加了一些分配内存的功能,关键是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);

2217231767 发表于 2026-6-4 12:35:32

不小明我们不约 发表于 2026-6-4 10:02
我把代码部分修改了下,增加了一些分配内存的功能,关键是UF_CAMBND_append_bnd_from_curve这里改成了UF_CA ...

设置成功了, 太感谢了.
页: [1]
查看完整版本: UG可变轮廓铣, 设置边界驱动应该使用哪个函数?