获取装配约束信息简单,但是获取约束的几何信息就相对麻烦
- 首先遍历模型的特征获得所有特征类型为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);
结果如下: