ProError CSDMdl505PolarCheck::CsyVisitAction(ProCsys pCsy, ProError status, ProAppData pData) { UNUSED_ALWAYS(status); int nCsyID = -1; ProCsysIdGet(pCsy, &nCsyID); CsysPolarVisitData &visitData = *((CsysPolarVisitData *)pData); ProGeomitem item; ProCsysToGeomitem(ProMdlToSolid(visitData.pMdl), pCsy, &item); ProName nameFea; ProModelitemNameGet(&item, nameFea); CString strCsysName = nameFea; if (visitData.bCheck1) { if (CompareWildCard(L"CS_*_X1", strCsysName) || CompareWildCard(L"CS_*_GA1", strCsysName)) { visitData.strCsyName = strCsysName.Left(strCsysName.GetLength()-1) + L"2"; // 检索成对的坐标系 visitData.bCheck1 = FALSE; if (ProSolidCsysVisit(ProMdlToSolid(visitData.pMdl), CsyVisitAction, NULL, pData) == PRO_TK_USER_ABORT) { visitData.arrID1.Add(nCsyID); visitData.arrCsysName.Add(strCsysName.Left(strCsysName.GetLength()-1)); } } } else { if (strCsysName.CompareNoCase(visitData.strCsyName) == 0) { visitData.bCheck1 = TRUE; visitData.arrID2.Add(nCsyID); return PRO_TK_USER_ABORT; } } return PRO_TK_NO_ERROR; }
//特征访问函数 ProError CSDMdlAttrFeaSystemCheck::FeatureNameVisit(ProFeature* pFeature, ProError status,ProAppData app_data) { status; ProName feaName; ProModelitemNameGet(pFeature, feaName); if (CString(feaName).CompareNoCase(L"no_name") == 0) { ProModelitemDefaultnameGet(pFeature, feaName); } // 处理规则值 NameFeaVisitData &visitData=*(NameFeaVisitData*)app_data; CString strFeaNameCheckType;// 类型 CString strCheckContent;// 具体规则内容 CString strCheckedFeaName=feaName;// proName转换成cstring类型 strFeaNameCheckType =visitData.strFeaNameCheckType;// 找到include or not include strCheckContent = visitData.strCheckContent;// 当前设定的规则值 strFeaNameCheckType.MakeUpper(); strCheckContent.MakeUpper(); // 判断是否使用通配符 if (strCheckContent.Find(L'*') >= 0) { if (CompareWildCard(strCheckContent, strCheckedFeaName)) { return PRO_TK_USER_ABORT; } } else if (strCheckContent.CompareNoCase(strCheckedFeaName) == 0) { return PRO_TK_USER_ABORT; } return PRO_TK_NO_ERROR; }
ProError visit_component_action( ProFeature* in_feature, ProError in_status, Appdata in_app_data ) { ProError rs; ProMdl model; switch( rs = ProAsmcompMdlGet(in_feature, &model) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The specified feature is not a valid component feature."; return PRO_TK_GENERAL_ERROR; case PRO_TK_E_NOT_FOUND: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "Assembly component model is not a solid or is not in memory."; return PRO_TK_GENERAL_ERROR; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "unexpected error: " << rs; return PRO_TK_GENERAL_ERROR; } ProSolid solid = static_cast<ProSolid>(model); ProMdlType component_type; switch( rs = ProMdlTypeGet(model, &component_type) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The input argument is invalid."; return PRO_TK_GENERAL_ERROR; case PRO_TK_GENERAL_ERROR: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The information could not be obtained."; return PRO_TK_GENERAL_ERROR; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "unexpected error: " << rs; return PRO_TK_GENERAL_ERROR; } ProAsmcomp component = static_cast<ProAsmcomp>(*in_feature); Appdata app_data; app_data.level = in_app_data.level+1; app_data.path.owner = static_cast<ProSolid>(component.owner); app_data.path.owner = in_app_data.path.owner; app_data.path.table_num = in_app_data.path.table_num + 1; for( int ix=0; ix < app_data.path.table_num; ++ix ) { app_data.path.comp_id_table[ix] = in_app_data.path.comp_id_table[ix]; } app_data.path.comp_id_table[app_data.path.table_num] = in_feature->id; switch( component_type ) { case PRO_ASSEMBLY: { ProAppData* app_data_vp = reinterpret_cast<ProAppData*>(&app_data); switch( rs = ProSolidFeatVisit(solid, visit_action, filter_action, app_data_vp) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_E_NOT_FOUND: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "filter produced no component features."; break; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "Any other value is the value returned " << " by the action function (visiting stopped)." << rs; } } break; case PRO_PART: { ProMdl self; switch( rs = ProModelitemMdlGet(in_feature, &self) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "feature has no model. " << in_feature->id; } char assembly_name[PRO_NAME_SIZE]; { ProName wname; switch( rs = ProMdlNameGet(self, wname) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The input argument is invalid. " << in_feature->id; throw std::runtime_error("selector feature name failed"); case PRO_TK_E_NOT_FOUND: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The specified item does not have a name. "; break; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "ill specified error: " << rs; throw std::runtime_error("selector feature name failed"); } ProWstringToString(assembly_name, wname); } char model_name[PRO_PATH_SIZE]; { wchar_t* wname; ProBoolean is_modifiable; switch( rs = ProMdlCommonnameGet(self, &wname, &is_modifiable) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The input argument is invalid. " << in_feature->id; throw std::runtime_error("selector feature name failed"); case PRO_TK_E_NOT_FOUND: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The specified item does not have a name. "; break; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "ill specified error: " << rs; throw std::runtime_error("selector feature name failed"); } ProWstringToString(model_name, wname); ProWstringFree(wname); } char item_name[PRO_NAME_SIZE]; { ProName wname; switch( rs = ProModelitemNameGet(in_feature, wname) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The input argument is invalid. " << in_feature->id; throw std::runtime_error("selector feature name failed"); case PRO_TK_E_NOT_FOUND: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The specified item does not have a name. "; break; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "ill specified error: " << rs; throw std::runtime_error("selector feature name failed"); } ProWstringToString(item_name, wname); } // If you request the transformation from the member to the // assembly, this is PRO_B_TRUE. Otherwise, this is PRO_B_FALSE. ProBoolean bottom_up = PRO_B_TRUE; ProMatrix transformation; // retrieve the transformation matrix, given the component path. switch( rs = ProAsmcomppathTrfGet(&app_data.path, bottom_up, transformation) ) { case PRO_TK_NO_ERROR: break; case PRO_TK_BAD_INPUTS: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "transform get, the input argument is invalid: " << app_data.path.comp_id_table; return PRO_TK_GENERAL_ERROR; case PRO_TK_GENERAL_ERROR: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "The specified component path was wrong, or contained missing members."; return PRO_TK_GENERAL_ERROR; default: isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "unexpected error: " << rs; return PRO_TK_GENERAL_ERROR; } isis_LOG(lg, isis_FILE, isis_INFO) << "transformation: " << assembly_name << " : " << model_name << " : " << item_name; isis_LOG(lg, isis_FILE, isis_INFO) << "["; for( int ix=0; ix < 4; ++ix ) { isis_LOG(lg, isis_FILE, isis_INFO) << "\n\t["; for( int jx=0; jx < 4; ++jx ) { isis_LOG(lg, isis_FILE, isis_INFO) << '\t' << transformation[ix][jx]; } isis_LOG(lg, isis_FILE, isis_INFO) << "]"; } isis_LOG(lg, isis_FILE, isis_INFO) << "]\n"; return PRO_TK_NO_ERROR; } default: { isis_LOG(lg, isis_CONSOLE_FILE, isis_ERROR) << "unknown-component-type: " << component_type; } } return PRO_TK_NO_ERROR; }