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

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

难点在如何获得创建的基准面的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);

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值