知秋189 2024-04-11 13:53 采纳率: 0%
浏览 48

parasolid中的PK_BCURVE_create函数调用失败,错误类型931

parasolid中的PK_BCURVE_create函数调用失败,错误类型931,无论怎么更改PK_BCURVE_sf_s的参数错误类型都是931,问题出在哪里?

void parasolid_BCurve()
{
    PK_BCURVE_sf_s* bcurve_sf = new PK_BCURVE_sf_s();

    bcurve_sf->degree = 2;
    bcurve_sf->n_vertices = 8;
    bcurve_sf->vertex_dim = 2;
    bcurve_sf->is_rational = PK_LOGICAL_false;
    bcurve_sf->vertex = new double[bcurve_sf->n_vertices * bcurve_sf->vertex_dim] {
        1.0, 1.0, // P0
            2.0, 2.0, // P1
            3.0, 2.0, // P2
            4.0, 1.5, // P3
            5.0, 2.0, // P4
            6.0, 2.5, // P5
            7.0, 2.0, // P6
            8.0, 1.5, // P7
    };

    bcurve_sf->form = PK_BCURVE_form_arbitrary_c;
    bcurve_sf->n_knots = 11;
    bcurve_sf->knot = new double[bcurve_sf->n_knots] { 0, 0, 0, 1, 2, 3, 4, 4, 5, 5, 5};
    bcurve_sf->knot_mult = new int[bcurve_sf->n_knots] { 3, 3, 3, 1, 1, 1, 2, 2, 3, 3, 3};
    bcurve_sf->knot_type = PK_knot_uniform_c;
    bcurve_sf->is_periodic = PK_LOGICAL_false;
    bcurve_sf->is_closed = PK_LOGICAL_false;
    bcurve_sf->self_intersecting = PK_self_intersect_false_c;

    PK_BCURVE_t bcurve;
    PK_ERROR_code_t error = PK_BCURVE_create(bcurve_sf, &bcurve);
    if (error != PK_ERROR_no_errors) {
        std::cout << "Error creating B-spline curve." << std::endl;
    }
    delete[] bcurve_sf->vertex;
    delete[] bcurve_sf->knot;
}


```

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-11 13:53
    关注

    引自免费微信小程序:皆我百晓生

    在检查您的代码后,我发现了一个潜在的问题:您为PK_BCURVE_sf_s结构体分配了内存,但在创建B样条曲线之后,并没有释放这个内存。这可能导致某些情况下资源泄露。虽然这不是导致错误类型931的直接原因,但它是一个良好的编程习惯。

    此外,根据 Parasolid 的文档,错误类型931通常表示“无效的参数”。这可能意味着在创建B样条曲线时提供的数据不正确或不符合规范。在这种情况下,我们需要仔细检查所有输入参数是否符合要求。

    首先,让我们确保正确地清理内存。然后,我们可以逐步调试每个关键参数,看看是否有任何不符合规范的地方。下面是修改后的代码,包括清理内存的部分以及添加了一些输出语句用于调试:

    #include <iostream>
    
    // ...其他必要的头文件...
    
    void parasolid_BCurve()
    {
        PK_BCURVE_sf_s* bcurve_sf = new PK_BCURVE_sf_s();
    
        bcurve_sf->degree = 2;
        bcurve_sf->n_vertices = 8;
        bcurve_sf->vertex_dim = 2;
        bcurve_sf->is_rational = PK_LOGICAL_false;
        bcurve_sf->vertex = new double[bcurve_sf->n_vertices * bcurve_sf->vertex_dim] {
            1.0, 1.0, // P0
            2.0, 2.0, // P1
            3.0, 2.0, // P2
            4.0, 1.5, // P3
            5.0, 2.0, // P4
            6.0, 2.5, // P5
            7.0, 2.0, // P6
            8.0, 1.5, // P7
        };
    
        bcurve_sf->form = PK_BCURVE_form_arbitrary_c;
        bcurve_sf->n_knots = 11;
        bcurve_sf->knot = new double[bcurve_sf->n_knots] { 0, 0, 0, 1, 2, 3, 4, 4, 5, 5, 5};
        bcurve_sf->knot_mult = new int[bcurve_sf->n_knots] { 3, 3, 3, 1, 1, 1, 2, 2, 3, 3, 3};
        bcurve_sf->knot_type = PK_knot_uniform_c;
        bcurve_sf->is_periodic = PK_LOGICAL_false;
        bcurve_sf->is_closed = PK_LOGICAL_false;
        bcurve_sf->self_intersecting = PK_self_intersect_false_c;
    
        PK_BCURVE_t bcurve;
        PK_ERROR_code_t error = PK_BCURVE_create(bcurve_sf, &bcurve);
    
        if (error == PK_ERROR_no_errors)
        {
            std::cout << "B-spline curve created successfully." << std::endl;
        }
        else
        {
            std::cout << "Error creating B-spline curve: " << error << std::endl;
        }
    
        // 调试打印参数
        std::cout << "Degree: " << bcurve_sf->degree << std::endl;
        std::cout << "Number of vertices: " << bcurve_sf->n_vertices << std::endl;
        std::cout << "Vertex dimension: " << bcurve_sf->vertex_dim << std::endl;
        std::cout << "Is rational: " << (bcurve_sf->is_rational ? "true" : "false") << std::endl;
        std::cout << "Vertices: ";
        for (int i = 0; i < bcurve_sf->n_vertices * bcurve_sf->vertex_dim; ++i)
        {
            std::cout << bcurve_sf->vertex[i] << " ";
        }
        std::cout << std::endl;
    
        // ... 打印更多参数 ...
    
        delete[] bcurve_sf->vertex;
        delete[] bcurve_sf->knot;
        delete bcurve_sf;
    }
    
    int main()
    {
        parasolid_BCurve();
        return 0;
    }
    

    运行这段代码并观察输出,尤其是打印的参数部分,看看是否有任何异常或不符合预期的地方。如果有任何疑问,可以继续提供反馈,以便进一步分析和解决这个问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月11日