iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24904|回复: 0
打印 上一主题 下一主题

利用UDF打孔

[复制链接]
跳转到指定楼层
楼主
发表于 2006-9-19 14:36:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
小弟我做一个UG二次开发的小程序,利用udf自定义的通孔特征对板零件打孔。
    首先我做了一个UDF孔特征,这个特征原本只有两个reference(一个起始面,一个中止面),但由于调用UDF孔特征时需要对孔定位(不使用UG本身的定位对话框),所以还需要指定一条孔的轴线(为孔定位一条直线)。所以我在建立通孔自定义特征时添加了一条直线作为特征的第三个reference。
   如图:

c:/aa.bmp
  我在程序中去调用这个UDF的时候,代码如下:
//放置自定义特征
void putHole(char* filename,tag_t pre_part,char* Diameter)
{       
        tag_t part;
        tag_t feature = NULL_TAG;
        UF_PART_load_status_t error_status;
        tag_t m_tFeature = NULL_TAG;
        tag_t m_tUDF = NULL_TAG;
        char *feature_name;//特征的名称
       
       
        tag_t *parents = NULL;
        char **parents_prompt;
        int num_parents;
        tag_t *expression;
        char **expression_prompt;
        int num_expression;
        int ret;

       
        char **new_exp_rhs;
        tag_t prev_work_part;
        tag_t *new_parents = NULL;
        tag_t new_udf_feature;
        int error;

       

        //logical flag;

        UF_PART_open_quiet(filename, &part, &error_status);

        UF_OBJ_cycle_objs_in_part(part,UF_feature_type,&m_tFeature);

        while(m_tFeature!=NULL_TAG)
        {
                UF_MODL_ask_feat_name(m_tFeature,&feature_name);//得到特征的名称
               
                if(!strcmp(feature_name,"smarthole(2)"))
                {
                        m_tUDF = m_tFeature;
                        break;
                }
                UF_OBJ_cycle_objs_in_part(part,UF_feature_type,&m_tFeature);
        }

        ret = UF_MODL_ask_udf_definition(m_tUDF, &parents, &parents_prompt,
        &num_parents, &expression, &expression_prompt, &num_expression);
        //查询该UDF的定义


        new_exp_rhs = (char **)(UF_allocate_memory(sizeof(char *) * num_expression, &error));


       
        for (int i = 0; i < num_expression; i++)
    {
        new_exp_rhs = (char *)(UF_allocate_memory(sizeof(char) * 20, &error));
        strcpy(new_exp_rhs, Diameter);
    }


        UF_ASSEM_set_work_part_quietly(pre_part, &prev_work_part);

        new_parents = (tag_t *)(UF_allocate_memory(sizeof(tag_t) * num_parents, &error));
       

        new_parents[0] = HoleInstance.FirstFace;   //给起始面赋值tag
        new_parents[1] = HoleInstance.LastFace;    //给中止面赋值tag
                     new_parents[2] = HoleInstance.Axis;        //给轴线赋值tag


        //UF_MODL_register_rpo_routine(UF_MODL_udf_rpo_menu);
        UF_MODL_create_instantiated_udf(m_tUDF, "smarthole.cgm", parents,
        new_parents, num_parents, expression, new_exp_rhs, num_expression,
        &new_udf_feature);                       //创建udf
        //UF_CALL(UF_MODL_unregister_rpo_routine());



        UF_free(parents);
    UF_free(new_parents);
    UF_free_string_array(num_parents, parents_prompt);
    UF_free(expression);
    UF_free_string_array(num_expression, expression_prompt);
        UF_free(new_exp_rhs);
}

结果是,如果我不指定轴线则程序可以打孔,我将new_parents[2] = HoleInstance.Axis;后程序则错误,且我不知道为什么错了,请各位论坛元老,大侠指点。感激!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-12-23 22:20 , Processed in 0.012332 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表