/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ #include <ProToolkit.h> #include <ProMdl.h> #include <ProModelitem.h> #include <ProGeomitem.h> #include <ProCsys.h> #include <ProSolid.h> #include <UtilString.h> /*--------------------------------------------------------------------*\ ProAppData used while visiting Csys \*--------------------------------------------------------------------*/ typedef struct { ProMdl model; 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; ProModelitem mdlitem; int id; status = ProCsysIdGet (this_csys, &id); status = ProModelitemInit(((UserCsysAppData *) app_data)->model, id, PRO_CSYS, &mdlitem); status = ProModelitemNameGet ( &mdlitem, this_csys_name); if (status != PRO_TK_NO_ERROR) return(status); if (ProUtilWstrcmp( ((UserCsysAppData *) app_data)->csys_name, this_csys_name) == 0) return(PRO_TK_NO_ERROR); return(PRO_TK_CONTINUE); } /*--------------------------------------------------------------------*\ 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); app_data.model = p_model; 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); }