ITPub博客

首页 > Linux操作系统 > Linux操作系统 > parent feature get

parent feature get

原创 Linux操作系统 作者:lxlong19830815 时间:2011-07-19 10:27:03 0 删除 编辑
RemoveUnneededFeaturesInRail()
{
    ProError err;

    // 1. 遍歷所有模腳,查找QUILT_CUT的UDF
    // 2. 查看QUILT_CUT的父特徵
    // 3. 如果其父特徵是PULL_BACK中的特徵,則刪除
    int rail_num(0);
    err = ProArraySizeGet(frt_moldbase.rail_mdls, &rail_num);
    if (err != PRO_TK_NO_ERROR || rail_num < 1)
    {
        return PRO_TK_USER_ABORT;
    }

    char temp[PRO_NAME_SIZE];
    for (int i = 0; i < rail_num; ++i)
    {
        ProGroup *udfs;
        err = ProSolidGroupsCollect((ProSolid)frt_moldbase.rail_mdls[i], &udfs);

        ProName udf_name;
        ProName udf_instance;
        int udf_num(0);

        err = ProArraySizeGet(udfs, &udf_num);
        if (err != PRO_TK_NO_ERROR || udf_num < 1)
        {
            continue;
        }

        for (int j = 0; j < udf_num; ++j)
        {            
            bool is_unneeded_feat(false);

            err = ProUdfNameGet(&udfs[j], udf_name, udf_instance);
            ProWstringToString(temp, udf_name);
            if (stricmp(temp, "QUILT_CUT"))
            {
                continue;
            }

            int udf_feat_num(0);
            ProFeature *udf_feats;
            err = ProGroupFeaturesCollect(&udfs[j], &udf_feats);
            err = ProArraySizeGet(udf_feats, &udf_feat_num);
            if (err != PRO_TK_NO_ERROR || udf_feat_num < 2)
            {
                continue;
            }
                    
            // 第1個特徵是群組頭特徵,第2個特徵是CUTOUT特徵
            int parent_num(0);
            ProExtRefInfo    *parent_infos = NULL;
            err = ProFeatureExternParentsGet(&udf_feats[1], PRO_EXT_GEOM_REF, &parent_infos, &parent_num);
            for (int k = 0; k < parent_num; ++k)
            {
                for (int m = 0; m < parent_infos[k].n_refs; ++m)
                {
                    ProFeature  ref_feat;
                    err = ProExtRefFeatGet(parent_infos[k].ext_refs[m], &ref_feat);
                    if (err != PRO_TK_NO_ERROR)
                    {
                        continue;
                    }

                    ProName ref_feat_owner_name;
                    err = ProMdlNameGet(ref_feat.owner, ref_feat_owner_name);
                    ProWstringToString(temp, ref_feat_owner_name);
                    if (strstr(strupr(temp), "PB") != NULL)
                    {
                        // 此特徵是PULL_BACK中的特徵

                        is_unneeded_feat = true;
                        break;
                    }
                }

                if (is_unneeded_feat)
                {
                    break;
                }
            }
            // 刪除不需要的特徵
            if (is_unneeded_feat)
            {               
                ProFeatureDeleteOptions  deleteopt = PRO_FEAT_DELETE_CLIP;
                err = ProFeatureDelete((ProSolid)frt_moldbase.rail_mdls[i], &udf_feats[1].id, 1, &deleteopt, 1);
            }
           
            err = ProArrayFree((ProArray*)&udf_feats);
        }

        err = ProArrayFree((ProArray*)&udfs);
    }


    return PRO_TK_NO_ERROR;
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25306814/viewspace-702540/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: C++临时对象[转]
请登录后发表评论 登录
全部评论

注册时间:2011-07-19

  • 博文量
    6
  • 访问量
    8760