Proe Creo 二次开发之模型装配--获得装配约束

获取装配约束信息简单,但是获取约束的几何信息就相对麻烦

  • 首先遍历模型的特征获得所有特征类型为PRO_FEAT_COMPONENT的特征,    ProAsmcompConstraintsGet()//获取模型约束数组
ProAsmcompconstraintTypeGet//!<获取约束类型
//!<获取约束参照信息
ProAsmcompconstraintAsmreferenceGet 
ProAsmcompconstraintCompreferenceGet 
//约束状态
ProAsmcompconstraintAttributesGet
//!<判断该装配子件是否欠约束
status = ProAsmcompIsUnderconstrained

//根据不同的约束类型获取约束信息
//获得约束设置的特征
status = ProSelectionModelitemGet (asm_constr, &asmfeat);
//获得特征的名称
status = ProSelectionModelitemGet (asm_constr, &cfeat);
根据类型获得不同信息
    switch (cfeat.type)
    {
    case PRO_AXIS:
        {
            status = ProAxisInit((ProSolid)cfeat.owner,cfeat.id, &p_axis); //!<获取轴信息
            status = ProAxisToGeomitem((ProSolid)cfeat.owner, p_axis, &pgoitem);//!<获得几何信息
        
            strname = NORMALAXIS ;
            strlast = STANDAXIS;
        }
        break;
    case PRO_SURFACE:
        {
            status = ProSurfaceInit((ProSolid)cfeat.owner,cfeat.id, &p_surface);//!<获取平面
            status = ProSurfaceToGeomitem((ProSolid)cfeat.owner, p_surface, &pgoitem);//!<获得几何信息
            
            strname = NORMALSURFACE;
            strlast = STANDSURFACE;
        }
        break;
    case PRO_EDGE :
    case PRO_POINT:
    case PRO_CSYS:
    case PRO_EDGE_START:
    case PRO_EDGE_END:

        status = ProEdgeInit((ProSolid)cfeat.owner,cfeat.id, &p_edge);//!<获取边
        status = ProEdgeToGeomitem((ProSolid)cfeat.owner, p_edge, &pgoitem);//!<获得几何信息
        strname = NORMALPOINT;
        break;   
    default:
        return PRO_TK_NO_ERROR;
        break;
    }

//!<获得产生该几何项的特征
status = ProGeomitemFeatureGet( &pgoitem,&p_feature);
//!获取该特征名称,存在一些特殊字符
  先用 ProModelitemNameGet();
  如果失败则用下面函数获取
  status = ProModelitemDefaultnameGet(p_feature, name);
//获取该特征的类型名称
    ProName  featname;
    status = ProFeatureTypenameGet(&p_feature,featname);

//!<获取特征的number
    status = ProFeatureNumberGet(&p_feature, &featuernumber);


名称这里有些混乱,尝试后这样处理
//!<如果iteam与featurename相同则为基准信息
status = ProWstringCompare(itemname,featuername,PRO_VALUE_UNUSED, &iequal);
    if(0 == iequal)
    {
        strtype=_T("");
        StrCpyW(featuername, featname);
    }
    else
    {
        strtype = strname;
    }
//!拼装信息
    strline.Format(_T("%s:%s%s:F%d(%s)"), mdlname, itemname, strtype, featuernumber, featuername); 

结果如下:

Proe Creo 二次开发之模型装配--获得装配约束_第1张图片

你可能感兴趣的:(proe二次开发)