ProError CSDMdlMachFeaMinSizeCheck::GeoFeaVisitAction(ProFeature *pFeature, ProError status, ProAppData data) { FeaMinSizeVisitData& VisitData = *(FeaMinSizeVisitData*)data; double dProp = VisitData.dMinSizeRatio; ProSolid CheckedSolid; status = ProFeatureSolidGet(pFeature, &CheckedSolid); double dMdlMaxSize; GetSolidMaxSize(CheckedSolid, dMdlMaxSize); vector<vector<double>>arrValues; status = ProFeatureGeomitemVisit(pFeature,PRO_SURFACE, FeaMinSizeGeomitemVisitAction, NULL,&arrValues); int nPointCount = (int)arrValues.size(); vector<double>arrDimValuesL; vector<double>arrDimValuesW; vector<double>arrDimValuesH; if (nPointCount == 0) { return PRO_TK_NO_ERROR; } for (int i = 0; i < nPointCount; i++) { arrDimValuesL.push_back(arrValues[i][0]); arrDimValuesW.push_back(arrValues[i][1]); arrDimValuesH.push_back(arrValues[i][2]); } double BoundValueL[2]; double BoundValueW[2]; double BoundValueH[2]; GetMaxMinValues(arrDimValuesL, BoundValueL); GetMaxMinValues(arrDimValuesW, BoundValueW); GetMaxMinValues(arrDimValuesH, BoundValueH); vector<double>arrDimValues; arrDimValues.push_back(BoundValueL[0] - BoundValueL[1]); arrDimValues.push_back(BoundValueW[0] - BoundValueW[1]); arrDimValues.push_back(BoundValueH[0] - BoundValueH[1]); if ((arrDimValues[0]/dMdlMaxSize) < dProp && (arrDimValues[1]/dMdlMaxSize) < dProp && (arrDimValues[2]/dMdlMaxSize) < dProp) { VisitData.nFeaMinSizeResultType = CHECK_RESULT_INVALID_VALUE; int nErrorSize = (int)VisitData.arrFeaMinSizeErrorIDs.GetSize(); if (0 != nErrorSize) { for (int k=0; k<nErrorSize; k++) { if (VisitData.arrFeaMinSizeErrorIDs[k] == (*pFeature).id) return PRO_TK_NO_ERROR; } } VisitData.arrFeaMinSizeErrorIDs.Add((*pFeature).id); } return PRO_TK_NO_ERROR; }
/*====================================================================*\ FUNCTION : ProUtilFeatureDump() PURPOSE : To write a decription of a feature to a text file \*====================================================================*/ void ProUtilFeatureDump( ProModelitem *feature, FILE *fp) { ProError status; ProSolid owner; ProAsmcomppath path; ProModelitem modelitem; int n_children, c, n_parents, p; ProPatternStatus pstatus; ProGrppatternStatus gpstatus; ProFeatStatus fstatus; ProGroupStatus gstatus; ProSelection selection; char model_name[PRO_NAME_SIZE], model_type[PRO_NAME_SIZE]; int m; ProFeattype ftype; char ftype_str[PRO_NAME_SIZE]; int *children_ids, *parents_ids; ProBoolean is_nc_seq; ProWVerstamp stamp; char* p_stamp_string; /*--------------------------------------------------------------------*\ Check the feature owner \*--------------------------------------------------------------------*/ status = ProModelitemMdlGet(feature, (ProMdl *) &owner); TEST_CALL_REPORT("ProModelitemMdlGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProUtilModelnameGet((ProMdl*)&owner, model_name, model_type); ProTKFprintf(fp,"Owner : %s.%s\n", model_name, model_type); /*--------------------------------------------------------------------*\ Check the feature owner \*--------------------------------------------------------------------*/ status = ProFeatureSolidGet(feature, &owner); TEST_CALL_REPORT("ProFeatureSolidGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProUtilModelnameGet((ProMdl*)&owner, model_name, model_type); ProTKFprintf(fp,"Sld Owner : %s.%s\n", model_name, model_type); /*--------------------------------------------------------------------*\ Get the list of children of the selected feature \*--------------------------------------------------------------------*/ status = ProFeatureChildrenGet(feature, &children_ids, &n_children); TEST_CALL_REPORT("ProFeatureChildrenGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, "Children : "); for(c=0; c<n_children; c++) ProTKFprintf(fp,"%d ", children_ids[c]); ProTKFprintf(fp,"\n"); /*--------------------------------------------------------------------*\ Get the list of parents of the selected feature \*--------------------------------------------------------------------*/ status = ProFeatureParentsGet(feature, &parents_ids, &n_parents); TEST_CALL_REPORT("ProFeatureParentsGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, "Parents : "); for(p=0; p<n_parents; p++) ProTKFprintf(fp,"%d ", parents_ids[p]); ProTKFprintf(fp,"\n"); /*--------------------------------------------------------------------*\ Get the version stamp of the specified feature \*--------------------------------------------------------------------*/ status = ProVerstampAlloc( &stamp ); TEST_CALL_REPORT("ProVerstampAlloc()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); status = ProFeatureVerstampGet( feature, &stamp ); TEST_CALL_REPORT("ProFeatureVerstampGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); status = ProVerstampStringGet( stamp, &p_stamp_string ); TEST_CALL_REPORT("ProVerstampStringGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf( fp,"Version stamp: %s\n", p_stamp_string ); status = ProVerstampStringFree( &p_stamp_string ); TEST_CALL_REPORT("ProVerstampStringFree()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); status = ProVerstampFree( &stamp ); TEST_CALL_REPORT("ProVerstampFree()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ Get the feature status \*--------------------------------------------------------------------*/ status = ProFeatureStatusGet(feature, &fstatus); TEST_CALL_REPORT("ProFeatureStatusGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, "FEATURE STATUS "); switch(fstatus) { case PRO_FEAT_INVALID: ProTKFprintf(fp, "Invalid\n"); break; case PRO_FEAT_ACTIVE: ProTKFprintf(fp, "Active\n"); break; case PRO_FEAT_INACTIVE: ProTKFprintf(fp, "Inactive\n"); break; case PRO_FEAT_FAMTAB_SUPPRESSED: ProTKFprintf(fp, "Famtab suppressed\n"); break; case PRO_FEAT_SIMP_REP_SUPPRESSED: ProTKFprintf(fp,"Simprep suppressed\n"); break; case PRO_FEAT_PROG_SUPPRESSED: ProTKFprintf(fp,"Pro/PROGRAM suppressed\n"); break; case PRO_FEAT_SUPPRESSED: ProTKFprintf(fp, "Suppressed\n"); break; case PRO_FEAT_UNREGENERATED: ProTKFprintf(fp, "Unregenerated\n"); break; default: ProTKFprintf(fp, "**UNKNOWN**\n"); break; } /*--------------------------------------------------------------------*\ Get the group status of the feature \*--------------------------------------------------------------------*/ status = ProFeatureGroupStatusGet( feature, &gstatus ); TEST_CALL_REPORT("ProFeatureGroupStatusGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, "GROUP STATUS "); switch(gstatus) { case PRO_GROUP_INVALID: ProTKFprintf(fp, "Invalid\n"); break; case PRO_GROUP_NONE: ProTKFprintf(fp, "None\n"); break; case PRO_GROUP_MEMBER: ProTKFprintf(fp, "Group member\n"); break; default: ProTKFprintf(fp, "**UNKNOWN**\n"); break; } /*--------------------------------------------------------------------*\ Get the pattern status of the feature \*--------------------------------------------------------------------*/ status = ProFeaturePatternStatusGet(feature, &pstatus); TEST_CALL_REPORT("ProFeaturePatternStatusGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); status = ProFeatureGrppatternStatusGet(feature, &gpstatus); TEST_CALL_REPORT("ProFeatureGrppatternStatusGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, "PATTERN STATUS "); switch(pstatus) { case PRO_PATTERN_LEADER: ProTKFprintf(fp, "Leader of a feature pattern\n"); break; case PRO_PATTERN_MEMBER: ProTKFprintf(fp, "Member of a feature pattern\n"); break; default: break; } switch(gpstatus) { case PRO_GRP_PATTERN_LEADER: ProTKFprintf(fp, "Leader of a group pattern\n"); break; case PRO_GRP_PATTERN_MEMBER: ProTKFprintf(fp, "Member of a group pattern\n"); break; case PRO_GRP_PATTERN_NONE: if (pstatus == PRO_PATTERN_NONE) ProTKFprintf(fp, "Not a pattern member\n"); break; default: break; } /*--------------------------------------------------------------------*\ Get elements info. \*--------------------------------------------------------------------*/ ProUtilFeatureElementsDump( feature, fp); /*--------------------------------------------------------------------*\ Find whether the feature is an NC sequence \*--------------------------------------------------------------------*/ status = ProFeatureIsNcseq(feature, &is_nc_seq); if ( is_nc_seq == PRO_B_TRUE ) ProTKFprintf(fp, "Feature is an NC Sequence\n"); TEST_CALL_REPORT("ProFeatureIsNcseq()", "ProUtilFeatureDump()", PRO_TK_NO_ERROR, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ Find out whether the feature is created in an assembly \*--------------------------------------------------------------------*/ status = ProFeatureSelectionGet(feature, &selection); TEST_CALL_REPORT("ProFeatureSelectionGet()", "ProUtilFeatureDump()", status, ((status != PRO_TK_NO_ERROR) && (status != PRO_TK_BAD_CONTEXT) && (status != PRO_TK_E_NOT_FOUND))); if(!(status == PRO_TK_BAD_CONTEXT)) if(status == PRO_TK_E_NOT_FOUND) { ProTKFprintf(fp,"ASSEMBLY REFERENCES :\n"); ProTKFprintf(fp," (Assembly is not in session)\n"); } else if(status == PRO_TK_NO_ERROR) { ProTKFprintf(fp,"ASSEMBLY REFERENCES :\n"); status = ProSelectionAsmcomppathGet(selection, &path); TEST_CALL_REPORT("ProSelectionAsmcomppathGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); status = ProSelectionModelitemGet(selection, &modelitem); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ Assembly name \*--------------------------------------------------------------------*/ ProUtilModelnameGet((ProMdl*)&path.owner, model_name, model_type); ProTKFprintf(fp," Owning model : %s.%s\n", model_name, model_type); /*--------------------------------------------------------------------*\ Feature id and type \*--------------------------------------------------------------------*/ status = ProFeatureTypeGet(&modelitem, &ftype); TEST_CALL_REPORT("ProFeatureTypeGet()", "ProUtilFeatureDump()", status, status != PRO_TK_NO_ERROR); ProUtilFeattypeStr(ftype, ftype_str); ProTKFprintf(fp," Feature : %d, type %s\n", modelitem.id, ftype_str); /*--------------------------------------------------------------------*\ Component id table \*--------------------------------------------------------------------*/ if (path.table_num > 0) { ProTKFprintf(fp," comp_id_table "); for(m=0; m<path.table_num; m++) ProTKFprintf(fp,"%d", path.comp_id_table[m]); ProTKFprintf(fp, "\n"); } } }