/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include <ProToolkit.h> #include <ProObjects.h> #include <ProAssembly.h> #include <ProAsmcomp.h> #include <ProElemId.h> #include <ProElement.h> #include <ProExpldstate.h> #include <ProFeatType.h> #include <ProMdl.h> #include <ProMessage.h> #include <ProModelitem.h> #include <ProMenu.h> #include <ProSelection.h> #include <ProSolid.h> #include <ProUtil.h> #include <ProValue.h> #include <ProRefInfo.h> #include <ProCopyGeom.h> #include "TestError.h" #include <ProTKRunTime.h> #include <UtilMessage.h> /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #define UNUSED_MENU_INT 15000 /*--------------------------------------------------------------------*\ Application data types \*--------------------------------------------------------------------*/ typedef enum { TEST_CHILDREN_GET = 0, TEST_PARENTS_GET = 1 } TestRels; typedef enum { TEST_FEATURE_SELECT = 0, TEST_SOLID_SELECT = 1, TEST_SOLID_ALL_FEATS = 2, TEST_ALL_SOLIDS = 3, TEST_ALL_SOLIDS_ALL_FEATS = 4 } ExtrefinfoActionType; typedef struct { ProExtRefType type; ExtrefinfoActionType action_type; TestRels rels; ProBoolean solid; /* solid/feature */ FILE * qcr_ref; } ExtrefinfoMenuState; typedef struct { char * buttun_name; ProMenubuttonAction action; ProAppData data; int button_int; } TestMenubuttonStruct; typedef struct { char * menu_name; /* TestMenubuttonStruct *buttons; */ ProMenubuttonAction exit_action; ProAppData exit_data; int exit_button_int; } TestMenuStruct; /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ ProError ProTestSolidInfoWrite ( FILE * qcr_ref, ProSolid solid); int ProTestFileOpen (FILE ** qcr_ref); /*====================================================================*\ Function : ProTestCopiedRefSolidStateGet() Purpose : \*====================================================================*/ ProError ProTestCopiedRefSolidStateFilter( ProFeature * p_feat, ProAppData app_data) { ProError err = PRO_TK_NO_ERROR; ProBoolean has_backup = PRO_B_TRUE; ProFeattype type; err = ProFeatureTypeGet (p_feat, &type); TEST_CALL_REPORT ("ProFeatureTypeGet()", "ProTestCopiedRefSolidStateFilter()", err , err != PRO_TK_NO_ERROR); if (type == PRO_FEAT_GEOM_COPY) { return PRO_TK_NO_ERROR; } err = ProFeatureHasBackup (p_feat, &has_backup ); TEST_CALL_REPORT ("ProFeatureHasBackup()", "ProTestCopiedRefSolidStateFilter()", err , err != PRO_TK_NO_ERROR); if (err!=PRO_TK_NO_ERROR || has_backup == PRO_B_FALSE) return PRO_TK_CONTINUE; /* skip */ return PRO_TK_NO_ERROR; } /*====================================================================*\ Function : ProTestCopiedRefSolidStateVisitAction() Purpose : \*====================================================================*/ ProError ProTestCopiedRefSolidStateVisitAction( ProFeature * p_feat, ProError status, ProAppData app_data) { ProError err = PRO_TK_NO_ERROR; FILE * qcr_ref = (FILE*) app_data; ProCopiedRefStateDetails f_state; ProSolid mdl; ProCharLine str; ProBoolean has_backup = PRO_B_TRUE; if (status != (ProError)PRO_FEAT_ACTIVE) return PRO_TK_NO_ERROR; ProTKSprintf (str, "New feature to get state \nid : %d type %d \n owner : \n", p_feat->id,p_feat->type ); ProTKFprintf (qcr_ref,"%s", str); ProUtilMsgPrint( "gen", "TEST %0s", str); err = ProModelitemMdlGet (p_feat, (ProMdl *) &mdl); TEST_CALL_REPORT ("ProModelitemMdlGet()", "ProTestCopiedRefSolidStateVisitAction()", err , err != PRO_TK_NO_ERROR); err = ProTestSolidInfoWrite (qcr_ref, mdl); err = ProFeatureCopiedRefStateDetailsGet ( p_feat, & f_state); TEST_CALL_REPORT ("ProFeatureCopiedRefStateDetailsGet()", "ProTestCopiedRefSolidStateVisitAction()", err , err != PRO_TK_NO_ERROR); err = ProFeatureHasBackup (p_feat, &has_backup ); TEST_CALL_REPORT ("ProFeatureHasBackup()", "ProTestCopiedRefSolidStateVisitAction()", err , err != PRO_TK_NO_ERROR); ProTKSprintf (str, "The feature state : %d backup : %d \n ", f_state, has_backup ); ProTKFprintf (qcr_ref,"%s", str); ProUtilMsgPrint( "gen", "TEST %0s", str); return PRO_TK_NO_ERROR; } /*====================================================================*\ Function : ProTestCopiedRefSolidStateGet() Purpose : \*====================================================================*/ ProError ProTestCopiedRefSolidStateGet( FILE * qcr_ref, ProSolid solid) { ProError err = PRO_TK_NO_ERROR; err = ProSolidFeatVisit ( solid, (ProFeatureVisitAction) ProTestCopiedRefSolidStateVisitAction, (ProFeatureFilterAction)ProTestCopiedRefSolidStateFilter, (ProAppData) qcr_ref); TEST_CALL_REPORT ("ProSolidFeatVisit()", "ProTestCopiedRefSolidStateGet()", err , err != PRO_TK_NO_ERROR); return err; } /*====================================================================*\ Function : ProTestCopiedRefSolidSelectStateGet() Purpose : Menu callback \*====================================================================*/ int ProTestCopiedRefSolidSelectStateGet (ProAppData data, int dummy) { ProError err; int n_sel; ProSelection *sel_prt; ProModelitem mdl; ProSolid solid; FILE * qcr_ref = *((FILE**) data); ProTestFileOpen (&qcr_ref); *((FILE**) data) = qcr_ref; err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_prt, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return 0; TEST_CALL_REPORT("ProSelect()", "ProTestCopiedRefSolidSelectStateGet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet (sel_prt[0], (ProModelitem*) &mdl); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestCopiedRefSolidSelectStateGet()", err, err != PRO_TK_NO_ERROR); err = ProModelitemMdlGet ( &mdl, (ProMdl*) &solid); TEST_CALL_REPORT("ProModelitemMdlGet()", "ProTestCopiedRefSolidSelectStateGet()", err, err != PRO_TK_NO_ERROR); err = ProTestCopiedRefSolidStateGet (qcr_ref, solid ); return (0); } /*====================================================================*\ Function : ProTestCopiedRefSolidAllGet() Purpose : Menu buttun callback \*====================================================================*/ int ProTestCopiedRefSolidAllGet (ProAppData data, int dummy) { ProError err; ProMdl *session_mdls; FILE * qcr_ref = *((FILE**) data); int arr_size = 0, i; ProTestFileOpen (&qcr_ref); *((FILE**) data) = qcr_ref; err = ProSessionMdlList (PRO_MDL_PART, & session_mdls, &arr_size); TEST_CALL_REPORT("ProSessionMdlList()", "ProTestCopiedRefSolidAllGet()", err, err != PRO_TK_NO_ERROR); for (i = 0; i<arr_size; i++) { err = ProTestCopiedRefSolidStateGet (qcr_ref, (ProSolid)session_mdls[i] ); } err = ProArrayFree ((ProArray*)& session_mdls); TEST_CALL_REPORT("ProArrayFree()", "ProTestCopiedRefSolidAllGet()", err, err != PRO_TK_NO_ERROR); return (0); } /*====================================================================*\ FUNCTION : ProTestSelectionDepndFilter PURPOSE : \*====================================================================*/ ProError ProTestSelectionDepndFilter( ProSelection selection, Pro3dPnt point, ProMatrix transform, char * option, int level, ProAppData app_data) { ProFeature feat; ProError err = PRO_TK_NO_ERROR; ProBoolean has_backup = PRO_B_TRUE; ProFeattype type; err = ProSelectionModelitemGet ( selection, &feat); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestSelectionDepndFilter()", err, err != PRO_TK_NO_ERROR ); err = ProFeatureTypeGet (&feat, &type); TEST_CALL_REPORT ("ProFeatureTypeGet()", "ProTestSelectionDepndFilter()", err , err != PRO_TK_NO_ERROR); if (type == PRO_FEAT_GEOM_COPY) { return PRO_TK_NO_ERROR; /* accept */ } err = ProFeatureHasBackup (&feat, &has_backup ); TEST_CALL_REPORT ("ProFeatureHasBackup()", "ProTestSelectionDepndFilter()", err , err != PRO_TK_NO_ERROR); if (err!=PRO_TK_NO_ERROR || has_backup == PRO_B_FALSE) return PRO_TK_CONTINUE; /* skip */ return PRO_TK_NO_ERROR; /* accept */ } /*====================================================================*\ Function : ProTestCopiedRefDependSet() Purpose : Menu callback \*====================================================================*/ int ProTestCopiedRefDependSet (ProAppData data, int dummy) { ProError err; int n_sel; ProSelection *sel_feat; ProFeature feat; ProSelFunctions sel_funcs; sel_funcs.pre_filter = (ProSelectionPreFilter)ProTestSelectionDepndFilter; sel_funcs.post_filter = NULL; sel_funcs.post_selact = NULL; sel_funcs.app_data = NULL; err = ProSelect((char *)"feature", 1, NULL,&sel_funcs , NULL, NULL, &sel_feat, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return 0; TEST_CALL_REPORT("ProSelect()", "ProTestCopiedRefDependSet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet (sel_feat[0], (ProModelitem*) &feat); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestCopiedRefDependSet()", err, err != PRO_TK_NO_ERROR); err = ProFeatureDSFDependencystateSet (&feat, PRO_DSF_UPDATE_AUTOMATICALLY); TEST_CALL_REPORT("ProFeatureDSFDependencystateSet()", "ProTestCopiedRefDependSet()", err, err != PRO_TK_NO_ERROR); return (0); } /*====================================================================*\ Function : ProTestCopiedRefInDependSet() Purpose : Menu callback \*====================================================================*/ int ProTestCopiedRefInDependSet (ProAppData data, int dummy) { ProError err; int n_sel; ProSelection *sel_feat; ProFeature feat; ProSelFunctions sel_funcs; sel_funcs.pre_filter = (ProSelectionPreFilter)ProTestSelectionDepndFilter; sel_funcs.post_filter = NULL; sel_funcs.post_selact = NULL; sel_funcs.app_data = NULL; err = ProSelect((char *)"feature", 1, NULL,&sel_funcs , NULL, NULL, &sel_feat, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return 0; TEST_CALL_REPORT("ProSelect()", "ProTestCopiedRefInDependSet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet (sel_feat[0], (ProModelitem*) &feat); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestCopiedRefInDependSet()", err, err != PRO_TK_NO_ERROR); err = ProFeatureDSFDependencystateSet (&feat, PRO_DSF_UPDATE_MANUALLY); TEST_CALL_REPORT("ProFeatureDSFDependencystateSet()", "ProTestCopiedRefInDependSet()", err, err != PRO_TK_NO_ERROR); return (0); } /*--------------------------------------------------------------------*/ /*====================================================================*\ Function : ProTestExtFeatRefProcess() Purpose : \*====================================================================*/ ProError ProTestExtFeatRefProcess( FILE * qcr_ref, ProExtFeatRef ref) { ProError err = PRO_TK_NO_ERROR; ProRefState state = PRO_REF_ACTIVE; ProType type; ProAsmcomppath own_comp, ref_comp; ProSolid solid; ProFeature feature; ProModelitem modelitem; int i; own_comp.table_num = ref_comp.table_num = 0; feature.type = PRO_TYPE_UNUSED; modelitem.type = PRO_TYPE_UNUSED; err = ProExtRefStateGet ( ref, &state); TEST_CALL_REPORT ("ProExtRefStateGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); ProTKFprintf (qcr_ref, "Reference state : %d\n", state); err = ProExtRefTypeGet ( ref, &type); TEST_CALL_REPORT ("ProExtRefTypeGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); ProTKFprintf (qcr_ref, "Reference type : %d\n", type); err = ProExtRefAsmcompsGet (ref, &own_comp, &ref_comp); TEST_CALL_REPORT ("ProExtRefAsmcompsGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); if (ref_comp.table_num != 0) { ProTKFprintf (qcr_ref, "owner's asmcomppath model:\n"); err = ProTestSolidInfoWrite (qcr_ref, own_comp.owner); ProTKFprintf (qcr_ref, "Reference's asmcomppath model:\n"); err = ProTestSolidInfoWrite (qcr_ref, ref_comp.owner); } ProTKFprintf (qcr_ref, "Owner's asmcomppath:\n"); for (i=0; i<own_comp.table_num; i++) ProTKFprintf (qcr_ref, "%d ", own_comp.comp_id_table[i]); ProTKFprintf (qcr_ref, "\nReference's asmcomppath:\n"); for (i=0; i<ref_comp.table_num; i++) ProTKFprintf (qcr_ref, "%d ", ref_comp.comp_id_table[i]); err = ProExtRefOwnMdlGet (ref, &solid); TEST_CALL_REPORT ("ProExtRefOwnMdlGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); ProTKFprintf (qcr_ref, "\nOwner model:\n"); err = ProTestSolidInfoWrite (qcr_ref, solid); err = ProExtRefMdlGet (ref, &solid); TEST_CALL_REPORT ("ProExtRefMdlGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); ProTKFprintf (qcr_ref, "Reference model:\n"); err = ProTestSolidInfoWrite (qcr_ref, solid); err = ProExtRefOwnFeatGet (ref, &feature); TEST_CALL_REPORT ("ProExtRefOwnFeatGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); if (feature.type != PRO_TYPE_UNUSED) { ProTKFprintf (qcr_ref, "Owner feature ID: %d\n", feature.id); ProTKFprintf (qcr_ref, "Owner feature type: %d\n", feature.type); err = ProTestSolidInfoWrite (qcr_ref, (ProSolid)feature.owner); } err = ProExtRefFeatGet (ref, &feature); TEST_CALL_REPORT ("ProExtRefFeatGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); if (feature.type != PRO_TYPE_UNUSED) { ProTKFprintf (qcr_ref, "Reference feature ID: %d\n", feature.id); ProTKFprintf (qcr_ref, "Reference feature type: %d\n", feature.type); err = ProTestSolidInfoWrite (qcr_ref, (ProSolid)feature.owner); } err = ProExtRefModelitemGet (ref, &modelitem); TEST_CALL_REPORT ("ProExtRefModelitemGet()", "ProTestExtFeatRefProcess()", err , err != PRO_TK_NO_ERROR); if (modelitem.type != PRO_TYPE_UNUSED) { ProTKFprintf (qcr_ref, "Reference modelitem ID: %d\n", modelitem.id); ProTKFprintf (qcr_ref, "Reference modelitem type: %d\n", modelitem.type); err = ProTestSolidInfoWrite (qcr_ref, (ProSolid)modelitem.owner); } return (err); } /*====================================================================*\ Function : ProTestRefExtInfoProcess() Purpose : \*====================================================================*/ ProError ProTestRefExtInfoProcess ( FILE * qcr_ref, ProExtRefInfo * info) { ProError err = PRO_TK_NO_ERROR; int i; ProTKFprintf (qcr_ref,"Ext. ref. info : type %d n_refs : %d\n", info->type, info->n_refs); for (i = 0; i< info->n_refs; i++) { ProTKFprintf (qcr_ref,"the number of ProExtFeatRef item : %d \n", i); err = ProTestExtFeatRefProcess (qcr_ref, info->ext_refs[i]); } ProTKFprintf (qcr_ref,"End of ext. ref. info\n"); return (err); } /*====================================================================*\ Function : ProTestRefExtIfoArrProcess() Purpose : \*====================================================================*/ ProError ProTestRefExtIfoArrProcess ( FILE * qcr_ref, ProExtRefInfo * infos, int n_infos) { ProError err = PRO_TK_NO_ERROR; int i; for (i = 0; i< n_infos; i++) err = ProTestRefExtInfoProcess (qcr_ref, &(infos[i])); return (err); } /*====================================================================*\ Function : ProTestFeatureExternGet() Purpose : \*====================================================================*/ ProError ProTestFeatureExternGet ( ProFeature * feature, ProExtRefType type, ProExtRefInfo ** infos, int * n_infos, TestRels rel) { ProError err = PRO_TK_NO_ERROR; if (rel == TEST_CHILDREN_GET) { err = ProFeatureExternChildrenGet (feature, type, infos, n_infos); TEST_CALL_REPORT("ProFeatureExternChildrenGet()", "ProTestFeatureExternGet()", err, err != PRO_TK_NO_ERROR); } else { err = ProFeatureExternParentsGet (feature, type, infos, n_infos); TEST_CALL_REPORT("ProFeatureExternParentsGet()", "ProTestFeatureExternGet()", err, err != PRO_TK_NO_ERROR); } return (err); } /*====================================================================*\ Function : ProTestSolidExternGet() Purpose : \*====================================================================*/ ProError ProTestSolidExternGet ( ProSolid solid, ProExtRefType type, ProExtRefInfo ** infos, int * n_infos, TestRels rel) { ProError err = PRO_TK_NO_ERROR; if (rel == TEST_CHILDREN_GET) { err = ProSolidExternChildrenGet (solid, type, infos, n_infos); TEST_CALL_REPORT("ProSolidExternChildrenGet()", "ProTestFeatureExternGet()", err, err != PRO_TK_NO_ERROR); } else { err = ProSolidExternParentsGet (solid, type, infos, n_infos); TEST_CALL_REPORT("ProSolidExternParentsGet()", "ProTestFeatureExternGet()", err, err != PRO_TK_NO_ERROR); } return (err); } /*====================================================================*\ Function : ProTestFeatuteExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestFeatuteExtrefinfo ( FILE * qcr_ref, ProExtRefType type, ProFeature * feature, TestRels rel) { ProError err = PRO_TK_NO_ERROR; ProExtRefInfo * infos = NULL; int n_infos; ProTKFprintf (qcr_ref, "Proccess a new feature. ID is : %d, Type is %d\n", feature->type, feature->id); err = ProTestFeatureExternGet (feature, type, &infos, &n_infos, rel); if (err != PRO_TK_NO_ERROR) return err; err = ProTestRefExtIfoArrProcess (qcr_ref, infos, n_infos ); err = ProExtRefInfoFree ( &infos); TEST_CALL_REPORT("ProExtRefInfoFree()", "ProTestFeatuteExtrefinfo()", err, err != PRO_TK_NO_ERROR); return (err); } /*====================================================================*\ Function : ProTestSolidExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestSolidExtrefinfo ( FILE * qcr_ref, ProExtRefType type, ProSolid solid, TestRels rel) { ProError err = PRO_TK_NO_ERROR; ProExtRefInfo * infos=NULL; int n_infos; ProTKFprintf (qcr_ref, "Proccess a new solid. Ref. type : %d", type); if (rel ==TEST_CHILDREN_GET) ProTKFprintf (qcr_ref," Getting children... \n\n"); else ProTKFprintf (qcr_ref," Getting parents... \n\n"); err = ProTestSolidInfoWrite (qcr_ref, solid); err = ProTestSolidExternGet (solid, type, &infos, &n_infos, rel); if (err != PRO_TK_NO_ERROR) return err; err = ProTestRefExtIfoArrProcess (qcr_ref, infos, n_infos ); err = ProExtRefInfoFree ( &infos); TEST_CALL_REPORT("ProExtRefInfoFree()", "ProTestSolidExtrefinfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (qcr_ref, "\nEnd\n\n"); return (err); } /*====================================================================*\ Function : ProTestFeatuteSelectExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestFeatuteSelectExtrefinfo ( FILE * qcr_ref, ProExtRefType type, TestRels rel) { ProError err = PRO_TK_NO_ERROR; int n_sel; ProSelection *sel_feat; ProFeature feat; err = ProSelect((char *)"feature", 1, NULL, NULL, NULL, NULL, &sel_feat, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return PRO_TK_NO_ERROR; TEST_CALL_REPORT("ProSelect()", "ProTestFeatuteSelectExtrefinfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet ( sel_feat[0], &feat); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestFeatuteSelectExtrefinfo()", err, err != PRO_TK_NO_ERROR ); err = ProTestFeatuteExtrefinfo (qcr_ref, type, &feat, rel); return err; } /*====================================================================*\ Function : ProTestSolidSelectExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestSolidSelectExtrefinfo ( FILE * qcr_ref, ProExtRefType type, TestRels rel) { ProError err = PRO_TK_NO_ERROR; int n_sel; ProSelection *sel_feat; ProModelitem modelitem; ProSolid solid; err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_feat, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return PRO_TK_NO_ERROR; TEST_CALL_REPORT("ProSelect()", "ProTestSolidSelectExtrefinfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet ( sel_feat[0], &modelitem); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestSolidSelectExtrefinfo()", err, err != PRO_TK_NO_ERROR ); err = ProModelitemMdlGet ( &modelitem, (ProMdl*) &solid); TEST_CALL_REPORT("ProModelitemMdlGet()", "ProTestSolidSelectExtrefinfo()", err, err != PRO_TK_NO_ERROR); err = ProTestSolidExtrefinfo (qcr_ref, type, solid, rel); return err; } /*====================================================================*\ Function : ProTestSolidExtrefinfoVisitAction() Purpose : \*====================================================================*/ ProError ProTestSolidExtrefinfoVisitAction( ProFeature * p_feat, ProError status, ProAppData app_data) { ExtrefinfoMenuState *st = (ExtrefinfoMenuState*) app_data; ProTestFeatuteExtrefinfo (st->qcr_ref, st->type, p_feat, st->rels); return PRO_TK_NO_ERROR; } /*====================================================================*\ Function : ProTestSolidAllfeatExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestSolidAllfeatExtrefinfo( FILE * qcr_ref, ProExtRefType type, TestRels rel) { ProError err = PRO_TK_NO_ERROR; int n_sel; ProSelection *sel_feat; ProModelitem modelitem; ProSolid solid; ExtrefinfoMenuState st; st.type = type; st.rels = rel; st.qcr_ref = qcr_ref; err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_feat, &n_sel); if (n_sel < 1 || err != PRO_TK_NO_ERROR) return PRO_TK_NO_ERROR; TEST_CALL_REPORT("ProSelect()", "ProTestSolidAllfeatExtrefinfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT && err != PRO_TK_PICK_ABOVE); err = ProSelectionModelitemGet ( sel_feat[0], &modelitem); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestSolidAllfeatExtrefinfo()", err, err != PRO_TK_NO_ERROR ); err = ProModelitemMdlGet ( &modelitem, (ProMdl*) &solid); TEST_CALL_REPORT("ProModelitemMdlGet()", "ProTestSolidAllfeatExtrefinfo()", err, err != PRO_TK_NO_ERROR); err = ProSolidFeatVisit ( solid, (ProFeatureVisitAction) ProTestSolidExtrefinfoVisitAction, NULL, (ProAppData) &st); TEST_CALL_REPORT ("ProSolidFeatVisit()", "ProTestSolidAllfeatExtrefinfo()", err , err != PRO_TK_NO_ERROR); return err; } /*====================================================================*\ Function : ProTestAllSolidExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestAllSolidExtrefinfo( FILE * qcr_ref, ProExtRefType type, TestRels rel) { ProError err = PRO_TK_NO_ERROR; ProMdl *session_mdls; int arr_size = 0, i; err = ProSessionMdlList (PRO_MDL_PART, & session_mdls, &arr_size); TEST_CALL_REPORT("ProSessionMdlList()", "ProTestAllSolidExtrefinfo()", err, err != PRO_TK_NO_ERROR); for (i = 0; i<arr_size; i++) { err = ProTestSolidExtrefinfo (qcr_ref, type, (ProSolid) session_mdls[i], rel); } err = ProArrayFree ((ProArray*)& session_mdls); TEST_CALL_REPORT("ProArrayFree()", "ProTestAllSolidExtrefinfo()", err, err != PRO_TK_NO_ERROR); return (err); } /*====================================================================*\ Function : ProTestAllSolidAllfeatExtrefinfo() Purpose : \*====================================================================*/ ProError ProTestAllSolidAllfeatExtrefinfo( FILE * qcr_ref, ProExtRefType type, TestRels rel) { ProError err = PRO_TK_NO_ERROR; ProMdl *session_mdls; int arr_size = 0, i; ExtrefinfoMenuState st; st.type = type; st.rels = rel; st.qcr_ref = qcr_ref; err = ProSessionMdlList (PRO_MDL_PART, & session_mdls, &arr_size); TEST_CALL_REPORT("ProSessionMdlList()","ProTestAllSolidAllfeatExtrefinfo()", err, err != PRO_TK_NO_ERROR); for (i = 0; i<arr_size; i++) { err = ProSolidFeatVisit ( (ProSolid) session_mdls[i], (ProFeatureVisitAction) ProTestSolidExtrefinfoVisitAction, NULL, (ProAppData) &st); TEST_CALL_REPORT ("ProSolidFeatVisit()", "ProTestAllSolidAllfeatExtrefinfo()", err , err != PRO_TK_NO_ERROR); } err = ProArrayFree ((ProArray*)& session_mdls); TEST_CALL_REPORT("ProArrayFree()", "ProTestAllSolidAllfeatExtrefinfo()", err, err != PRO_TK_NO_ERROR); return (err); } /*====================================================================*\ Function : ProTestExtrefinfoActionProccess() Purpose : Menu callback \*====================================================================*/ int ProTestExtrefinfoActionProccess (ProAppData data, int dummy) { ExtrefinfoMenuState *st = (ExtrefinfoMenuState*) data; switch (st->action_type) { case TEST_FEATURE_SELECT: ProTestFeatuteSelectExtrefinfo (st->qcr_ref, st->type, st->rels); break; case TEST_SOLID_SELECT: ProTestSolidSelectExtrefinfo (st->qcr_ref, st->type, st->rels); break; case TEST_SOLID_ALL_FEATS: ProTestSolidAllfeatExtrefinfo(st->qcr_ref, st->type, st->rels); break; case TEST_ALL_SOLIDS: ProTestAllSolidExtrefinfo (st->qcr_ref, st->type, st->rels); break; case TEST_ALL_SOLIDS_ALL_FEATS: ProTestAllSolidAllfeatExtrefinfo (st->qcr_ref, st->type, st->rels); break; } return (0); } /*====================================================================*\ Function : ProTestMenuSetup() Purpose : \*====================================================================*/ ProError ProTestMenuSetup ( TestMenuStruct * menu, ProMenubuttonAction action, ProAppData data, int button_int, TestMenubuttonStruct *buttons, char * menu_name) { ProError err; int i, size, id; wchar_t ** names; for (i=0;;i++) if(strcmp (buttons[i].buttun_name, "") == 0) break; size = i; names = (wchar_t**)calloc(size+1, sizeof(wchar_t*)); for (i=0; i<=size; i++) { names[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t)); ProStringToWstring(names[i], buttons[i].buttun_name ); } err = ProMenuFromStringsRegister(menu_name, NULL, names, NULL, NULL, &id); TEST_CALL_REPORT("ProMenuFromStringsRegister()", "ProTestMenuSetup()", err, err != PRO_TK_NO_ERROR); for (i=0; i<size+1; i++) free(names[i]); free(names); for (i=0; i<=size; i++) { ProMenubuttonActionSet(menu_name, buttons[i].buttun_name, ((buttons[i].action == NULL)? action : buttons[i].action), ((buttons[i].data == NULL)? data : buttons[i].data), ((buttons[i].button_int == UNUSED_MENU_INT ) ?button_int : buttons[i].button_int)); } ProMenubuttonActionSet(menu_name ,menu_name, menu->exit_action, menu->exit_data, menu->exit_button_int); return err; } /*====================================================================*\ Function : () Purpose : \*====================================================================*/ int ProTestCompmenuQuit(ProAppData p_member, int option) { ProError status; status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); TEST_CALL_REPORT("ProMenuDelete()","ProTestDoneCancelAssign()", status, status != PRO_TK_NO_ERROR); return (0); } int ProTestScopeAssign(ProAppData p_member, int option); /*====================================================================*\ Function : ProTestExtrefinfoMenuAction() Purpose : Menu callback \*====================================================================*/ int ProTestExtrefinfoMenuAction (ProAppData data, int dummy) { ProError err; ExtrefinfoMenuState st; int dummyx; static char * menus[] = {"Relation", "Act. Type", "Ref. Type", "ProcExit", ""}; TestMenubuttonStruct ch_par_buttons [] = { { (char *)"Get Children", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_CHILDREN_GET }, { (char *)"Get Parents", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_PARENTS_GET }, { (char *)"", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_PARENTS_GET } }; TestMenuStruct RelMenu = { NULL, (ProMenubuttonAction)ProMenuDelete, NULL, 0 }; TestMenubuttonStruct action_type_buttons [] = { { (char *)"Feat Select", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_FEATURE_SELECT }, { (char *)"Solid Select", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_SOLID_SELECT }, { (char *)"All Feat in Solid", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_SOLID_ALL_FEATS }, { (char *)"All Solids", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_ALL_SOLIDS }, { (char *)"All Feats in All Solids", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_ALL_SOLIDS_ALL_FEATS }, { (char *)"", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)TEST_ALL_SOLIDS_ALL_FEATS } }; TestMenuStruct ActTypeMenu = { NULL, (ProMenubuttonAction)ProMenuDelete, NULL, 0 }; TestMenubuttonStruct ext_ref_type_buttons [] = { { (char *)"PRO_EXT_GEOM_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_EXT_GEOM_REF }, { (char *)"PRO_LOC_GEOM_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_LOC_GEOM_REF }, { (char *)"PRO_MERGE_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_MERGE_REF }, { (char *)"PRO_EXT_REL_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_EXT_REL_REF }, { (char *)"PRO_LOC_REL_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_LOC_REL_REF }, { (char *)"PRO_PRGM_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_PRGM_REF }, { (char *)"PRO_MOVE_COMP_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_MOVE_COMP_REF }, { (char *)"PRO_SUBS_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_SUBS_REF }, { (char *)"PRO_MFG_INFO_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_MFG_INFO_REF }, { (char *)"PRO_INTRCH_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_INTRCH_REF }, { (char *)"PRO_HARN_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_HARN_REF }, { (char *)"PRO_FEAT_PAT_REF", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_FEAT_PAT_REF }, { (char *)"PRO_ALL_EXT_REF_TYPES", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_ALL_EXT_REF_TYPES }, { (char *)"PRO_ALL_REF_TYPES", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_ALL_REF_TYPES }, { (char *)"", (ProMenubuttonAction)ProTestScopeAssign, NULL, (int)PRO_ALL_REF_TYPES } }; TestMenuStruct RefTypeMenu = { NULL, (ProMenubuttonAction)ProMenuDelete, NULL, 0 }; TestMenubuttonStruct exit_proc_buttons [] = { { (char *)"Proccess", (ProMenubuttonAction)ProTestExtrefinfoActionProccess, NULL, 0 }, { (char *)"Quit", (ProMenubuttonAction)ProTestCompmenuQuit, NULL, 0 }, { (char *)"", (ProMenubuttonAction)ProTestScopeAssign, NULL, 0 } }; TestMenuStruct ExitProcMenu = { NULL, (ProMenubuttonAction)ProMenuDelete, NULL, 0 }; st.qcr_ref = *((FILE**) data); ProTestFileOpen (&(st.qcr_ref)); *((FILE**) data) = st.qcr_ref; ProTestMenuSetup (&RelMenu, (ProMenubuttonAction) NULL, (ProAppData)&(st.rels), 0, ch_par_buttons, menus[0]); ProTestMenuSetup (&ActTypeMenu, (ProMenubuttonAction) NULL, (ProAppData)&(st.action_type), 0, action_type_buttons, menus[1]); ProTestMenuSetup (&RefTypeMenu, (ProMenubuttonAction) NULL, (ProAppData)&(st.type), 0, ext_ref_type_buttons, menus[2]); ProTestMenuSetup (&ExitProcMenu, (ProMenubuttonAction) NULL, (ProAppData) &st, 0, exit_proc_buttons, menus[3]); err = ProCompoundmenuCreate(menus, &dummyx); TEST_CALL_REPORT ("ProCompoundmenuCreate()","ProTestExtrefinfoMenuAction()", err , err != PRO_TK_NO_ERROR); err = ProMenuProcess(menus[0], &dummyx); TEST_CALL_REPORT ("ProMenuProcess()", "ProTestExtrefinfoMenuAction()", err, err != PRO_TK_NO_ERROR); return (PRO_TK_NO_ERROR); }