/*====================================================================*\ FILE : UtilCsys.c PURPOSE : Utilities for simple Csys functionnality HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 04-dec-97 H-02-02 Philippe $$1 Created \*====================================================================*/ #include #include #include #include #include #include #include /*--------------------------------------------------------------------*\ ProAppData used while visiting Csys \*--------------------------------------------------------------------*/ typedef struct { ProCsys *p_csys; ProName csys_name; }UserCsysAppData ; /*--------------------------------------------------------------------*\ Filter function used while visiting Csys \*--------------------------------------------------------------------*/ ProError CsysFindFilterAction ( ProCsys this_csys, ProAppData app_data) { int status; ProName this_csys_name; status = ProModelitemNameGet ((ProModelitem *) &this_csys, this_csys_name); if (status != PRO_TK_NO_ERROR) return(status); if (!ProUtilWstrcmp( ((UserCsysAppData *) app_data)->csys_name, this_csys_name)) return(PRO_TK_CONTINUE); return(PRO_TK_NO_ERROR); } /*--------------------------------------------------------------------*\ Visit Action used while visiting Csys \*--------------------------------------------------------------------*/ ProError CsysFindVisitAction ( ProCsys this_csys, ProError filter_return, ProAppData app_data) { int status; if (filter_return != PRO_TK_NO_ERROR) return (filter_return); *( ( (UserCsysAppData *) app_data) -> p_csys) = this_csys; return (PRO_TK_USER_ABORT); } /*====================================================================*\ FUNCTION : ProUtilCsysFind() PURPOSE : Find a csys given a model and a csys name \*====================================================================*/ ProError ProUtilCsysFind( ProMdl p_model, /* IN - the model in which to look */ ProName csys_name, /* IN - the name of the csys to find */ ProCsys *p_csys) /* OUT - the csys handle */ { int status; ProMdlType mdl_type; UserCsysAppData app_data; status = ProMdlTypeGet ( p_model, &mdl_type); if (status != PRO_TK_NO_ERROR) return(status); if ((mdl_type != PRO_MDL_PART) && (mdl_type != PRO_MDL_ASSEMBLY)) return(PRO_TK_INVALID_TYPE); ProUtilWstrcpy (app_data.csys_name, csys_name); status = ProSolidCsysVisit( (ProSolid) p_model, (ProCsysVisitAction) CsysFindVisitAction, (ProCsysFilterAction) CsysFindFilterAction, (ProAppData) &app_data); if (status != PRO_TK_USER_ABORT) return(PRO_TK_E_NOT_FOUND); p_csys = app_data.p_csys; return (PRO_TK_NO_ERROR); }