NX二次开发(UFUN)-获得偏置基准面到创建块的最小距离使用函数UF_MODL_ask_minimum_dist

本文讲述了在SolidWorks中,如何通过UF_MODL_ask_feat_object等函数获取创建的偏置基准面到块的最小距离,涉及feature和object的区别,以及动态内存管理。作者强调了寻找和使用特定功能函数的挑战,特别是对指针和动态内存分配的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  获得偏置基准面到创建块的最小距离:

难点在如何获得创建的基准面的tag,

创建的偏置基准面为feature特征,不能直接使用它的tag去查询距离,

这一步找函数费了很大劲,一直在兜圈子,通过这个过程也更加清楚了feature和object的区别

所以后面才知道要用UF_MODL_ask_feat_object函数去实现,

对于查询距离这个函数很好实现。

另外对于指针的指针也更加清楚了,使用起来就是不清楚数据长度时用的,可以实现动态分配

后面使用数据直接就同数组关联在一起了。

通过这个案例,更清楚了如何去搜寻对应功能的函数,以及如何实现这个函数。这也是ufun的难点和费事的地方,这需要反复去读帮助里的信息,一定要有耐心,一条路不行就要换其他的路径。

接下来要实现:创建体的包容块,面的包容面?对比二者大小以做后续的筛选。

距离代码实现如下:(1创建块,2创建偏置基准面,3查询块和基准面距离)

    UF_FEATURE_SIGN sign1;
    tag_t block_tag;
    block_tag = NULL_TAG;
    tag_t body_tag = NULL_TAG;
    double corner_point1[3] = { 0.0, 0.0, 0.0 };
    char* edge_len[3] = { "200.0", "100.0","100.0" };
    sign1 = UF_NULLSIGN;
    tag_t blk_tag1 = NULL_TAG; // 现在是指针类型
    //创建块
    UF_MODL_create_block(sign1, block_tag, corner_point1, edge_len, &blk_tag1); // 不再需要取地址符号

    //遍历面
    UF_MODL_ask_feat_body(blk_tag1, &body_tag);//获得块的标识号,通过特征获得

    uf_list_p_t face_list;//定义链表变量
    UF_MODL_create_list(&face_list);//初始化链表
    UF_MODL_ask_body_faces(body_tag, &face_list);//通过体特征获得面的链表


    //获得基准面到体的距离,变量创建及初始化
    
    double douPointOnObj1[3] = { 0 };//对象1上的点
    double douPointOnObj2[3] = { 0 };//对象2上的点
    double douDis = 0.0;
    
    //创建偏置基准面
    
    tag_t tagObj1 = body_tag, tagObj2 ;


    int pt_select[3] = { 0,0,-1 };
    double reference_point[3] = { 0,0,0 };
    char * angle_string = "0"; char * offset_string = "201.0";
    int num_dplanes = 1;
        
    tag_t dplane_tag[2];
    tag_t object_tags[3];
    object_tags[2] = NULL_TAG;
    object_tags[1] = NULL_TAG;
    int i = 0;//面链表的序号值
    tag_t current_face = NULL_TAG;
    UF_MODL_ask_list_count(face_list, &i);//获得面组的总数量
    
        UF_MODL_ask_list_item(face_list, 0, &current_face);//获得具体面的标识号

        tag_t face_tag = current_face;
        object_tags[0] = current_face;
        UF_OBJ_set_color(face_tag, 1);//设定面颜色
        /*char buf[256];
        sprintf(buf, "已选择的整数变量的值为%d\n", face_tag);
        uc1601(buf, 1);*/
        UF_MODL_create_relative_dplane
        (
            1,
            object_tags,
            pt_select,
            0,
            NULL,
            NULL,
            offset_string,
            &num_dplanes,
            dplane_tag
        );
        //获得基准面的tag
        int n_eids;
        tag_t *  eids;
        UF_MODL_ask_feat_object
        (
            dplane_tag[0],
            &n_eids,
            & eids
        );    
    tagObj2 = eids[0];
    UF_MODL_ask_minimum_dist(tagObj1, tagObj2, 0, NULL, 0, NULL,
        &douDis, douPointOnObj1, douPointOnObj2);
    char buf1[256];
    sprintf(buf1, "体到新建基准面的最小距离为%f\n", douDis);
    uc1601(buf1, 1);
    


    // 释放内存
    UF_MODL_delete_list(&face_list);
    UF_free(eids);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值