• 编辑并打印部件族信息


    UFUN在获取部件族信息时,不太方便通过行和列名获取某个属性的值,经过研究,发现必须通过UF_FAM_ask_attribute_data变相获取,经过测试,封装了两个函数UF_FAM_print_table和UF_FAM_edit_value,分别用来打印部件族信息和编辑属性值,代码如下:

    bool UF_FAM_edit_value(tag_t part, int row, const char* title, const char* value)
    {
        if ((NULL_TAG == part) || (NULL == title) || (0 > row))
        {
            return false;
        }
    
        int family_count;
        tag_p_t families = NULL_TAG;
        UF_PART_ask_families(part, &family_count, &families);
    
        for (int i = 0; i < family_count; ++i)
        {
            tag_t family = *(families+i);
            UF_FAM_family_data_t family_data = {0};
            UF_FAM_ask_family_data(family, &family_data);
    
            int attribute_index = -1;
            for (int j = 0; j < family_data.attribute_count; j++)
            {
                tag_t attr = *(family_data.attributes + j);
                UF_FAM_attribute_data_t data = {0};
    
                UF_FAM_ask_attribute_data(attr, &data);
                if (0 == strcmp(data.name, title))
                {
                    UF_FAM_free_attribute_data(&data);
                    attribute_index = j;
                    break;
                }
                UF_FAM_free_attribute_data(&data);
            }
    
            if (row < family_data.member_count)
            {
                UF_FAM_member_data_t member_data = {0};
                UF_FAM_ask_member_row_data(family, row, &member_data);
    
                if (attribute_index >= 0)
                {
                    UF_free(*(member_data.values + attribute_index));
                    int error_code;
                    *(member_data.values + attribute_index) = (char*)UF_allocate_memory(((unsigned int)strlen(value) + 1) *sizeof(char), &error_code);
                    strcpy(*(member_data.values + attribute_index), value);
                    UF_FAM_edit_member(family, row, &member_data);
                    UF_FAM_free_member_data(&member_data);
                }
            }
    
            UF_FAM_free_family_data(&family_data);
        }
        
        UF_MODL_update();
        return true;
    }
    
    
    void UF_FAM_print_table(tag_t part)
    {
        if (NULL_TAG == part)
        {
            return ;
        }
    
        int count;
        tag_p_t familiesTag = NULL_TAG;
        UF_PART_ask_families(part, &count, &familiesTag);
        UF_FAM_family_data_t data = {0};
    
        for (int i = 0; i < count; ++i)
        {
            tag_t familyTag = *(familiesTag+i);
            UF_FAM_ask_family_data(familyTag, &data);
            for (int j = 0; j < data.member_count; j++)
            {
                UF_FAM_member_data_t member_data = {0};
                UF_FAM_ask_member_row_data(familyTag, j, &member_data);
    
                for (int k = 0; k < data.attribute_count; k++)
                {
                    tag_t attrTag = *(data.attributes + k);
                    UF_FAM_attribute_data_t attrValue = {0};
                    UF_FAM_ask_attribute_data(attrTag, &attrValue);
                    printf("%s:%s	",attrValue.name, *(member_data.values + k));
                    
                    UF_FAM_free_attribute_data(&attrValue);
                }
    
                putchar('
    ');
                UF_FAM_free_member_data(&member_data);
            }
    
            UF_FAM_free_family_data(&data);
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        /* Initialize the API environment */
        if( UF_CALL(UF_initialize()) ) 
        {
            /* Failed to initialize */
            return 0;
        }
        UF_PART_load_status_t status = {0};
        tag_t prt = NULL_TAG;
        UF_PART_open("C:\TEMP\gb.prt", &prt, &status);
        UF_FAM_print_table(prt);
        UF_FAM_edit_value(prt, 3, "备注", "abcd");
        cout << "***********************" << endl;
        UF_FAM_print_table(prt);
        
        /* Terminate the API environment */
        UF_CALL(UF_terminate());
        return 0;
    }

    测试结果:

    成功将第三行,“备注”属性的值改过来了

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    POJ 3904 Sky Code (容斥原理)
    HDU 4334 Trouble (暴力)
    UVA 10325 The Lottery( 容斥原理)
    HDU 2841 Visible Trees 数论+容斥原理
    UVA11806-Cheerleaders(容斥原理+二进制)
    HDU1695 GCD (欧拉函数+容斥原理)
    HDU 5651 xiaoxin juju needs help (组合数)
    最大子矩阵和 51Nod 1051 模板题
    最大子段和 模板题 51Nod 1049
    51Nod 1006 最长公共子序列Lcs问题 模板题
  • 原文地址:https://www.cnblogs.com/kuaixue/p/13719255.html
Copyright © 2020-2023  润新知