UG工程图给自由尺寸按尺寸段添加尺寸公差

    函数UF_DRF_ask_dimension_text和UF_DRF_ask_dim_info都能获取尺寸的值,网上有作者提到两者之间有区别,后者在有附加文本的时候仅提取附加文本,我两个函数都使用了一下,代码及结果如下,UG工程图参考上篇图示。对比结果,UF_DRF_ask_dimension_text更适合提取尺寸值。我们可以通过尺寸值所在的尺寸段,按HB5800为自由尺寸自动添加不同的公差。原理就是用函数UF_DRF_ask_object_preferences( tagObj, mpi, mpr, radius_value, diameter_value )来设置公差,其中mpi[6]用来设置公差,=4为等值双向公差,=5不等值双向公差,=6单向上公差 =7单向下公差 =1无公差。mpr[24] 用来设置上公差值,mpr[25] 设置下公差值。下面以长度尺寸为例(即mpi[6]=4:等值双向公差。)代码见第二个代码段


        //遍历所有尺寸
    tag_t object_tag = NULL_TAG;       //尺寸object_tag初始化
    UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_dimension_type, &object_tag);   // 遍历尺寸,获取TAG值
    //打开文件
    int fwl_file = uc4504("C:\\Users\\xiao'fan\\Desktop\\a.txt", 4, 79);

    while (object_tag != NULL_TAG)//循环遍历
        {


        //获取尺寸值 ,方法一  
        char msg[256];          
         int dim_subtype = 0;    //尺寸类型
         double dim_origin[3];    //尺寸坐标点
         UF_DRF_dim_info_p_t    dim_info;
        UF_DRF_ask_dim_info(object_tag, &dim_subtype, dim_origin, &dim_info); 
        uc4524(fwl_file,dim_info->text_info->text->string);//尺寸文本写入TXT文件
      


    /*   //获取尺寸值 ,方法二     
        int num_main_text = 0;
        char** main_text;
        int num_dual_text = 0;
        char** dual_text;
        UF_DRF_ask_dimension_text(object_tag, &num_main_text, &main_text, &num_dual_text, &dual_text);
        uc4524(fwl_file,main_text[0]);//尺寸文本写入TXT文件

     */


        UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_dimension_type, &object_tag);  //再次遍历,获取TAG值
     

    }
         uc4540(fwl_file,0);//关闭文件

为长度尺寸自动添加公差代码如下:

//假定只选择一个对象
    tag_t  *tagObjects;    //选定对象的TAG
    int num_objects = 0;    //选定的对象初始值
    UF_UI_ask_global_sel_object_list(&num_objects, &tagObjects);    //查询选定对象数量级TAG值
    tag_t tagObj = tagObjects[0];     //选定一个尺寸
     
     //获取选定自由尺寸的尺寸值 
      double fwl_chicun;
    int num_main_text = 0;
    char** main_text;
    int num_dual_text = 0;
    char** dual_text;
    UF_DRF_ask_dimension_text(tagObj, &num_main_text, &main_text, &num_dual_text, &dual_text);
    

    //字符串转换为double值
    fwl_chicun = atof(main_text[0]);


   //针对选定的尺寸,确定尺寸段的公差值,更改它的设置

     double fwl_gc;
    int mpi [100] ;
    double mpr [70] ;
    char radius_value [27]; 
    char diameter_value [27] ;
    UF_DRF_ask_object_preferences( tagObj, mpi, mpr, radius_value, diameter_value );

    if ( mpi[6] == 1 )  //mpi[6] = 1 时无公差 
            
      {if (fwl_chicun>0.1&&fwl_chicun<=0.3)
            {fwl_gc=0.05;}
      else if (fwl_chicun>0.3&&fwl_chicun<=0.6)
            fwl_gc=0.1;
      else if (fwl_chicun>0.6&&fwl_chicun<1)
            fwl_gc=0.1;
         else if (fwl_chicun>=1&&fwl_chicun<=3)
            fwl_gc=0.12;
        else if (fwl_chicun>3&&fwl_chicun<=6)
            fwl_gc=0.15;
        else if (fwl_chicun>6&&fwl_chicun<=10)
            fwl_gc=0.18;
        else if (fwl_chicun>10&&fwl_chicun<=18)
            fwl_gc=0.21;
        else if (fwl_chicun>18&&fwl_chicun<=30)
            fwl_gc=0.26;
        else if (fwl_chicun>30&&fwl_chicun<=50)
            fwl_gc=0.31;
        else if (fwl_chicun>50&&fwl_chicun<=80)
            fwl_gc=0.37;
        else if (fwl_chicun>80&&fwl_chicun<=120)
            fwl_gc=0.43;

        else if (fwl_chicun>120&&fwl_chicun<=180)
            fwl_gc=0.5;
        else if (fwl_chicun>180&&fwl_chicun<=250)
            fwl_gc=0.57;
         else if (fwl_chicun>250&&fwl_chicun<=315)
            fwl_gc=0.65;
        else if (fwl_chicun>315&&fwl_chicun<=400)
            fwl_gc=0.7;
        else if (fwl_chicun>400&&fwl_chicun<=500)
            fwl_gc=0.77;
        else if (fwl_chicun>500&&fwl_chicun<=630)
            fwl_gc=0.87;
        else if (fwl_chicun>630&&fwl_chicun<=800)
            fwl_gc=1.00;
        else if (fwl_chicun>800&&fwl_chicun<=1000)
            fwl_gc=1.15;
        else if (fwl_chicun>1000&&fwl_chicun<=1250)
            fwl_gc=1.30;
        else if (fwl_chicun>1250&&fwl_chicun<=1600)
            fwl_gc=1.55;
        else if (fwl_chicun>1600&&fwl_chicun<=2000)
            fwl_gc=1,85;
        else if (fwl_chicun>2000&&fwl_chicun<=2500)
            fwl_gc=2.2;
        else if (fwl_chicun>2500&&fwl_chicun<=3150)
            fwl_gc=2.7;
        mpi[6] = 4 ; //长度尺寸设置公差为双向等值公差
        mpr[24] = fwl_gc ;      //根据尺寸段结果设置公差值
        UF_DRF_set_object_preferences(tagObj, mpi, mpr, radius_value, diameter_value );//对尺寸公差进行设置,从而添加公差
        UF_free(tagObjects);
               }
        else
        {uc1601("尺寸有公差或者尺寸超出范围",1);}

    效果如下:为尺寸135及70添加了公差,并在有公差的情况下再次执行代码时会提示
        

  • 40
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值