#ifndef PROSOLID_H #define PROSOLID_H /* Creo Parametric TOOLKIT declarations for ProSolid object related actions */ #include <ProObjects.h> #include <ProMdl.h> #include <ProFeature.h> #include <ProSelection.h> #include <ProColor.h> #include <ProAnalysis.h> #include <ProDimension.h> typedef enum { PROMODELCLASS_NONE = -1, PROMODELCLASS_FINE = 0, PROMODELCLASS_MEDIUM = 1, PROMODELCLASS_COARSE = 2, PROMODELCLASS_VERY_COARSE = 3 } ProModelClass; typedef enum pro_solid_outline_exclude { PRO_OUTL_EXC_NOT_USED = 1, PRO_OUTL_EXC_DATUM_PLANE = 2, PRO_OUTL_EXC_DATUM_POINT = 3, PRO_OUTL_EXC_DATUM_CSYS = 4, PRO_OUTL_EXC_DATUM_AXES = 5, PRO_OUTL_EXC_FACETS = 6, PRO_OUTL_EXC_ALL_CRVS = 7 } ProSolidOutlExclTypes; typedef struct { Pro3dPnt start_point; ProVector dir_vector; } ProRay; typedef struct pro_mass_property { double volume; double surface_area; double density; double mass; /* center of gravity with respect to coordinate frame */ double center_of_gravity[3]; /* inertia matrix with respect to coordinate frame */ /* (Element ij is the integral of x_i x_j over the object) */ double coor_sys_inertia[3][3]; /* inertia tensor with respect to coordinate frame */ /* inertia_tensor = trace(inertia) * identity - inertia */ double coor_sys_inertia_tensor[3][3]; /* inertia tensor translated to center of gravity */ double cg_inertia_tensor[3][3]; /* principal moments of inertia (eigenvalues of cg_inertia_tensor) */ double principal_moments[3]; /* principal axes (the eigenvectors of cg_inertia_tensor) */ /* The vectors are stored in columns */ double principal_axes[3][3]; } ProMassProperty; typedef enum pro_mp_dens_use { PRO_MP_DENS_DEFAULT = 0, /* calculate mass properties using material density. */ PRO_MP_DENS_USE_ALWAYS = 1, /* calculate mass properties using provided density even if material has a defined density */ PRO_MP_DENS_USE_IF_MISSING = 2 /* calculate mass properties using provided density even if material doesn't have a defined density */ } ProMPDensUse; typedef enum pro_mp_format_type { PRO_MP_TXT = 0, PRO_MP_CSV = 1, PRO_MP_XML = 2 } ProMassPropertyFormat; /* ProSolidRegenerate() bit_flags */ #define PRO_REGEN_NO_FLAGS 0 #define PRO_REGEN_CAN_FIX 1 /* Allow UI in FixModel */ #define PRO_REGEN_SKIP_DISALLOW_SYS_RECOVER 2 #define PRO_REGEN_UPDATE_INSTS 4 /* Update instances in memory. */ /* May cause slower performance*/ #define PRO_REGEN_RGN_BCK_USING_DISK 8 /* Use disk for regen backup */ /* Note: The flag PRO_REGEN_RGN_BCK_USING_DISK is obsolete */ #define PRO_REGEN_FORCE_REGEN 16 /* Force full object */ /* regeneration */ #define PRO_REGEN_UPDATE_ASSEMBLY_ONLY 32 /* Update assembly and sub-asm */ /* placements, regenerate assembly features and intersected parts. */ /* This flag is affected by the following config options: */ /* - bump_revnum_on_retr_regen -- If no, the assembly will not be marked as */ /* modified when updating the component placements using this option. This is */ /* similar to retrieval regeneration in the Creo Parametric UI. */ /* - regen_int_mdls_on_retr -- If yes, assembly features are updated during */ /* regeneration. */ /* CANNOT be used with PRO_REGEN_FORCE_REGEN */ #define PRO_REGEN_RESUME_EXCL_COMPS 64 /* This option will make */ /* Creo Parametric resume simplified-rep excluded components (if the models are */ /* in memory) during regeneration. This could result in a more accurate */ /* regeneration of the components in the simplified representation. */ #define PRO_REGEN_NO_RESOLVE_MODE 128 /* regenerate in no resolve mode */ #define PRO_REGEN_RESOLVE_MODE 256 /* regenerate in resolve mode */ /* The above flags allow temporary override default settings, which control */ /* regeneration behavior */ #define PRO_REGEN_ALLOW_CONFIRM 512 /* Deprecated since Creo 4. Allows Regen Failure popup dialog */ #define PRO_REGEN_UNDO_IF_FAIL 1024 /* Undo, if possible, in case of fail*/ /* The above two flags should be used only with PRO_REGEN_NO_RESOLVE_MODE or */ /* if the current mode is 'No Resolve'. Also, they cannot be used together. */ /* If one breaks these rules ProSolidRegenerate will return PRO_TK_BAD_CONTEXT*/ #define PRO_REGEN_SKIP_INSTS_REMAKE 2048 /*Reserved for internal use. */ /* Skip remake of instances in memory */ #define PRO_REGEN_TOP_ASM_ONLY 4096 /* Force Regeneration of Top Assembly, the rest of models will follow standard rules. */ /* Don't forget to change PRO_REGEN_LAST_USED if you add a flag! */ #define PRO_REGEN_SKIP_DSF_OUTOFASM_MODELS 8192 /*Reserved for internal use. */ #define PRO_REGEN_INTERACTIVE_UI (1<<14)/* Allow interactive UI, e.g. from */ /* errors in program execution */ #define PRO_REGEN_LAST_USED PRO_REGEN_INTERACTIVE_UI /*===========================================================================*/ PRO_BEGIN_C_DECLS extern ProError ProSolidMdlnameInit( ProMdlName name, ProMdlfileType type, ProSolid *p_handle); /* Purpose: Initializes the <i>ProSolid</i> handle. <b>Note:</b> In Creo 3 this function does not support names longer than 80 characters. It will return PRO_TK_BAD_INPUTS for longer names. The support for ProMdlName will be added in a future release. Input Arguments: name - The solid name type - The solid type Output Arguments: p_handle - The handle to initialize Return Values: PRO_TK_NO_ERROR - The function successfully initialized the handle. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. */ extern ProError ProSolidMdlnameCreate ( ProMdlName name, ProMdlfileType type, ProSolid *p_handle); /* Purpose: Creates a new Creo Parametric object of the specified type, and initializes the <i>ProSolid</i> handle. <b>Note:</b> In Creo 3 this function does not support names longer than 31 characters. It will return PRO_TK_LINE_TOO_LONG for longer names. The support for ProMdlName will be added in a future release. Input Arguments: name - The name of the new object type - The solid type (PRO_PART or PRO_ASSEMBLY) Output Arguments: p_handle - The handle to initialize Return Values: PRO_TK_NO_ERROR - The function successfully created the new object. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. PRO_TK_E_FOUND - An object of the specified name and type already exists. PRO_TK_GENERAL_ERROR - The object could not be created. PRO_TK_LINE_TOO_LONG - Name length of the new object is more than 31 chars. */ extern ProError ProSolidRegenerate (ProSolid p_handle, int flags); /* Purpose: Regenerates the specified <i>ProSolid</i>. Input Arguments: p_handle - The <i>ProSolid</i> to regenerate. flags - Bitmask containing one or more of the bit flags PRO_REGEN_* Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully regenerated the <i>ProSolid</i>. PRO_TK_UNATTACHED_FEATS - Unattached features were detected, but there was no regeneration failure PRO_TK_REGEN_AGAIN - The model is too complex to regenerate the first time PRO_TK_GENERAL_ERROR - Failure in regeneration PRO_TK_BAD_INPUTS - Incompatible flags used. PRO_TK_BAD_CONTEXT - Invalid regen flags and/or combination of regeneration flags if mixed with PRO_REGEN_FORCE_REGEN. */ extern ProError ProSolidToPostfixId (ProSolid handle, int *p_id); /* Purpose: Retrieves an internal postfix identifier for the specified solid (to be used in relations). Input Arguments: handle - The <i>ProSolid</i> for which to retrieve the postfix identifier Output Arguments: p_id - The postfix identifier Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The specified <i>p_handle</i> does not correspond to any valid model in session. PRO_TK_GENERAL_ERROR - There was a general internal failure. */ extern ProError ProPostfixIdToSolid (int id, ProSolid *p_handle); /* Purpose: Retrieves the solid handle, given the postfix identifier. Input Arguments: id - The postfix identifier of the solid Output Arguments: p_handle - The address of the <i>ProSolid</i> handle Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The specified identifier does not correspond to any valid model in session. PRO_TK_GENERAL_ERROR - There was a general internal failure. */ extern ProError ProSolidDisplay (ProSolid p_handle); /* Purpose: Displays the specified object. <b>Note</b>: <ul> <li>If no model is currently displayed, the specified model will be placed in the base window. <li>If a model is already displayed in the base window, the specified model will be placed in an accessory window. The current window will not be affected. <li>If the specified model has been assigned a new window, the model will be displayed in the new window provided a model is present in the base window, else the model is displayed in the base window. </ul> Input Arguments: p_handle - The object to display Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully displayed the object. PRO_TK_GENERAL_ERROR - The system failed to create a window. PRO_TK_BAD_INPUTS - The specified argument is invalid. PRO_TK_E_FOUND - The model is already in a window (from calling <b>ProObjectwindowMdlnameCreate()</b>). See Also: ProObjectwindowMdlnameCreate() */ /*===========================================================================*/ /* Modelitem Visit actions */ /*===========================================================================*/ typedef ProError (*ProAxisVisitAction) ( ProAxis axis, ProError status, ProAppData app_data ); /* Purpose: This is the generic function for visiting an axis. Input Arguments: axis - The axis handle status - The status app_data - The application data passed to the function <b>ProSolidAxisVisit()</b> Output Arguments: none Return Values: PRO_TK_NO_ERROR - Continue visiting. Any other value - Stop visiting and return this error from the visit function. */ typedef ProError (*ProAxisFilterAction) ( ProAxis axis, ProAppData app_data ); /* Purpose: This is the generic function for filtering an axis. Input Arguments: axis - The axis handle app_data - The application data passed to the function <b>ProSolidAxisVisit()</b> Output Arguments: none Return Values: PRO_TK_CONTINUE - Skip visiting this axis and go to the next axis. Other - Call the visit action for this axis. The return value is passed as input to the visit action. */ extern ProError ProSolidAxisVisit (ProSolid p_handle, ProAxisVisitAction visit_action, ProAxisFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the axes in the specified <i>ProSolid</i>. Input Arguments: p_handle - The solid handle. visit_action - The visiting function. If it returns anything other than PRO_TK_NO_ERROR, visiting stops. filter_action - The filter function. If NULL, all axes are visited using the action function. app_data - The application data passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the axes. PRO_TK_E_NOT_FOUND - Either no axes exist, or they were all filtered out by the filter function. Other - Any other value is the value returned by the action function (visiting stopped). */ extern ProError ProSolidCsysVisit (ProSolid p_handle, ProCsysVisitAction visit_action, ProCsysFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the coordinate systems in the specified solid. Input Arguments: p_handle - The solid handle. visit_action - The visiting function. If it returns anything other than PRO_TK_NO_ERROR, visiting stops. filter_action - The filter function. If NULL, all items are visited using the action function. app_data - The application data passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the items. PRO_TK_E_NOT_FOUND - Either no coordinate systems exist, or they were all filtered out by the filter function. Other - Any other value is the value returned by the action function (visiting stopped). */ typedef ProError (*ProSurfaceVisitAction) (ProSurface p_surface, ProError status, ProAppData app_data ); /* Purpose: This is the generic function for visiting a surface. Input Arguments: p_surface - The surface handle status - The status app_data - The application data passed to the function <b>ProSolidSurfaceVisit()</b> Output Arguments: none Return Values: PRO_TK_NO_ERROR - Continue visiting. Any other value - Stop visiting and return this error from the visit function. */ typedef ProError (*ProSurfaceFilterAction) (ProSurface p_surface, ProAppData app_data ); /* Purpose: This is the generic function for filtering a surface. Input Arguments: p_surface - The surface handle app_data - The application data passed to the function <b>ProSolidSurfaceVisit()</b> Output Arguments: none Return Values: PRO_TK_CONTINUE - Skip visiting this surface and go to the next surface. Other - Call the visit action for this surface. The return value is passed as input to the visit action. */ extern ProError ProSolidSurfaceVisit (ProSolid p_handle, ProSurfaceVisitAction visit_action, ProSurfaceFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the surfaces in the specified solid.<br> <b>Note:</b> This API will not work on solid having more than one body. Use ProSolidBodySurfaceVisit() for multi-body parts. Input Arguments: p_handle - The solid handle. visit_action - The visiting function. If it returns anything other than PRO_TK_NO_ERROR, visiting stops. filter_action - The filter function. If NULL, all surfaces are are visited using the action function. app_data - The application data passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the surfaces. PRO_TK_E_NOT_FOUND - Either no surfaces exist, or they were all filtered out by the filter function. PRO_TK_MULTIBODY_UNSUPPORTED - model has more than 1 body. Other - Any other value is the value returned by the action function (visiting stopped). */ extern ProError ProSolidQuiltVisit (ProSolid p_handle, ProQuiltVisitAction visit_action, ProQuiltFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the quilts in the specified solid. Input Arguments: p_handle - The solid handle. visit_action - The visiting function. If it returns anything other than PRO_TK_NO_ERROR, visiting stops. filter_action - The filter function. If NULL, all quilts are visited using the action function. app_data - The application data passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the quilts. PRO_TK_E_NOT_FOUND - Either no quilts exist, or they were all filtered out by the filter function. Other - Any other value is the value returned by the action function (visiting stopped). */ typedef ProError (*ProFeatureVisitAction) ( ProFeature* p_feature, ProError status, ProAppData app_data ); /* Purpose: This is the generic function for visiting a feature. Input Arguments: p_feature - The feature handle status - The status app_data - The application data passed to the function <b>ProSolidFeatVisit()</b> Output Arguments: none Return Values: PRO_TK_NO_ERROR - Continue visiting. Any other value - Stop visiting and return this error from the visit function. */ typedef ProError (*ProFeatureFilterAction) ( ProFeature* p_feature, ProAppData app_data ); /* Purpose: This is the generic function for filtering features. Input Arguments: p_feature - The feature handle app_data - The application data passed to the function <b>ProSolidFeatVisit()</b> Output Arguments: none Return Values: PRO_TK_CONTINUE - Skip visiting this feature and go to the next feature. Other - Call the visit action for this feature. The return value is passed as input to the visit action. */ extern ProError ProSolidFeatVisit (ProSolid p_handle, ProFeatureVisitAction visit_action, ProFeatureFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the features in the specified solid. <P> <B>NOTE:</B> Internal features are also visited. Use <B>ProFeatureVisibilityGet()</B> to filter/skip them if required. Input Arguments: p_handle - The solid handle. visit_action - The visiting function. If it returns anything other than PRO_TK_NO_ERROR, visiting stops. filter_action - The filter function. If NULL, all features in the specified solid are visited using the action function. app_data - The application data passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the features. PRO_TK_E_NOT_FOUND - Either no features exist, or they were all filtered out by the filter function. Other - Any other value is the value returned by the action function (visiting stopped). See Also: ProFeatureVisibilityGet() */ typedef ProError (*ProSolidDispCompFilterAction) (ProAsmcomppath *p_path, ProSolid handle, ProAppData app_data); /* Purpose: This is used to filter assembly components. If it returns PRO_TK_CONTINUE, all the SUB-COMPONENTS of handle will not be visited. Input Arguments: p_path - The assembly component path handle - The component solid handle app_data - The application data passed to the function <b>ProSolidDispCompVisit()</b> Output Arguments: none Return Values: PRO_TK_CONTINUE - Skip visiting this assembly component and go to the next. Other - Call the visit action for this assembly component. The return value is passed as input to the visit action. */ typedef ProError (*ProSolidDispCompVisitAction) (ProAsmcomppath *p_path, ProSolid handle, ProBoolean down, ProAppData app_data); /* Purpose: This is used to visit assembly components. If it returns anything other than PRO_TK_NO_ERROR, assembly traversal stops. Input Arguments: p_path - The assembly component path handle - The component solid handle down - Use PRO_B_TRUE when going down to this component and PRO_B_FALSE when going up from this component. app_data - The application data passed to the function <b>ProSolidDispCompVisit()</b> Output Arguments: none Return Values: PRO_TK_NO_ERROR - Continue visiting. Any other value - Stop visiting and return this error from the visit function. */ extern ProError ProSolidDispCompVisit ( ProSolid handle, ProSolidDispCompVisitAction visit_action, ProSolidDispCompFilterAction filter_action, ProAppData app_data); /* Purpose: Visits all the displayed components in the solid handle. Input Arguments: handle - The solid handle. visit_action - Visiting function applied to a displayed component solid. See comments for ProSolidDispCompVisitAction. filter_action - The filter function. If NULL, all displayed components in the solid handle are visited using the action function. app_data - The application data to be passed to the filter and visiting functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the solids. PRO_TK_BAD_INPUTS - One or more input arguments was invalid. Other - Any other value returned by the visit action (visiting stopped). */ typedef ProError (*ProAnalysisVisitAction)(ProAnalysis analysis, ProError filter_status, ProAppData appdata); /* Purpose: Action function called while visiting Creo Parametric analyses using the function ProSolidAnalysisVisit(). Input Arguments: analysis - Analysis or measurement performed filter_status - Return value from filter action function appdata - Application data passed to the function ProSolidAnalysisVisit() Output Arguments: none Return Values: PRO_TK_NO_ERROR - Continue visiting analyses Other - Stop visiting analyses */ typedef ProError (*ProAnalysisFilterAction)(ProAnalysis analysis, ProAppData appdata); /* Purpose: Filter function called while visiting Creo Parametric analysis using the function ProSolidAnalysisVisit(). Input Arguments: analysis - Analysis or measurement performed appdata - Application data passed to the function ProSolidAnalysisVisit() Output Arguments: none Return Values: PRO_TK_CONTINUE - Do not call visit action function for this object. Other - Call visit action function for this object. The return value is passed as input to the visit action. */ extern ProError ProSolidAnalysisVisit(ProSolid solid, ProAnalysisVisitAction visit_action, ProAnalysisFilterAction filter_action, ProAppData appdata); /* Purpose: Visits External Analyses in the Creo Parametric solid model. Input Arguments: solid - Handle to visited solid visit_action - Callback visit function filter_action - Callback filter function. If NULL, all items are visited using the action function. appdata - Application data passed to visit and filter callback functions Output Arguments: none Return Values: PRO_TK_NO_ERROR - Successful completion of filter and visit functions. PRO_TK_BAD_INPUTS - An input argument is invalid. PRO_TK_E_NOT_FOUND - Nothing to visit PRO_TK_GENERAL_ERROR - Function failed Other - Return value from visit action function that stops ProSolidAnalysisVisit */ extern ProError ProSolidDimensionVisit( ProSolid solid, ProBoolean refdim, ProDimensionVisitAction action, ProDimensionFilterAction filter, ProAppData data); /* Purpose: Visits all dimensions stored in the specified solid. i.e. all dimensions whose default names are of the form "d#", "rd#" or "ad#". This includes dimensions created in drawing mode when the config.pro option "create_drawing_dims_only" was set to NO (the default). Input Arguments: solid - Handle of the solid (part or assembly) whose dimensions are to be visited. refdim - TRUE if the reference dimensions are to be visited, FALSE for standard dimensions. action - the function that gets called for each solid dimension being visited. filter - the function that gets called for each solid dimension. This function decides whether the dimension should be visited or skipped. If NULL, all dimensions are visited using the action function. data - caller-specified data that gets passed to the action and filter functions. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully visited all the model's dimensions. PRO_TK_BAD_INPUTS - The function failed because one or more of the input arguments are invalid. PRO_TK_E_NOT_FOUND - No model dimensions were visited. PRO_TK_GENERAL_ERROR - An error occurred while locating the dimensions. other - Visiting was stopped by the caller supplied functions with this error return. */ extern ProError ProSolidFeatstatusflagsGet (ProSolid solid, int **p_feat_id_array, unsigned int **p_status_bitflag_arr); /* Purpose: Returns a list of features of the specified solid and the array of unsigned int values representing their statuses. Each item in status array represents the status of corresponding feature as a bit flag. Bit flag contains as many status values as feature can have at the same time. Status values are among PRO_FEAT_STAT_... defined in ProFeature.h Input Arguments: solid - The solid Output Arguments: p_feat_id_array - An array of feature ids. The function allocates the memory for this argument. Free this array using <b>ProArrayFree()</b>. p_status_bitflag_arr - An array of feature statuses. The function allocates the memory for this argument.Free this array using <b>ProArrayFree()</b>. Return Values: PRO_TK_NO_ERROR - The function successfully returned the features. PRO_TK_BAD_INPUTS - The input argument is invalid. See Also: ProArrayFree() */ extern ProError ProSolidFeatstatusGet (ProSolid solid, int **p_feat_id_array, ProFeatStatus **p_status_array, int *p_num_features); /* Purpose: Returns a list of features of the specified solid and their statuses (PRO_FEAT_ACTIVE, PRO_FEAT_SUPPRESSED, or PRO_FEAT_PROG_SUPPRESSED). Input Arguments: solid - The solid Output Arguments: p_feat_id_array - An array of features (preallocated by a call to <b>ProArrayAlloc()</b>). If you reuse the array, new elements will be appended to the existing elements unless you reset the array size to 0 with ProArraySizeSet. p_status_array - An array of feature statuses (preallocated by a call to <b>ProArrayAlloc()</b>). If you reuse the array, new elements will be appended to the existing elements unless you reset the array size to 0 with ProArraySizeSet. p_num_features - The size of the above arrays Return Values: PRO_TK_NO_ERROR - The function successfully returned the features. PRO_TK_BAD_INPUTS - The input argument is invalid. See Also: ProArrayAlloc() */ extern ProError ProSolidFeatstatusSet (ProSolid solid, int *feat_id_array, ProFeatStatus *status_array, int num_features, ProBoolean can_fix); /* Purpose: Assigns the feature order and status of the specified solid based on the input (PRO_FEAT_ACTIVE, PRO_FEAT_SUPPRESSED, or PRO_FEAT_PROG_SUPPRESSED). <p> NOTES: <ul> <li>You can change the status of active or user-suppressed features only. <li>Upon assignment of the order and status, the system regenerates the model. If it fails, the model is restored to its original state. </ul> Input Arguments: solid - The solid. feat_id_array - An array of features. status_array - An array of feature statuses. If this is NULL, the statuses are not changed. num_features - The size of the above arrays. can_fix - If regeneration fails, invoke the Fix Model user interface. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully assigned the feature order and statuses. PRO_TK_BAD_INPUTS - One or more of the arguments are invalid. PRO_TK_GENERAL_ERROR - There were regeneration errors. The <i>p_errors</i> argument supplies a detailed description of the errors. */ extern ProError ProSolidFeatstatusWithoptionsSet (ProSolid solid, int *feat_id_array, int *status_array, int flags); /* Purpose: Assigns the feature order and status of the specified solid based on the input (PRO_FEAT_ACTIVE, PRO_FEAT_SUPPRESSED, or PRO_FEAT_PROG_SUPPRESSED). <p> NOTES: <ul> <li>You can change the status of active or user-suppressed features only. <li>Upon assignment of the order and status, the system regenerates the model. If it fails, the model is restored to its original state. </ul> Input Arguments: solid - The solid. feat_id_array - A ProArray of features. status_array - A ProArray of feature statuses in the form of bit mask statuses like PRO_FEAT_STAT_*. If this is NULL, the statuses are not changed. flags - The regeneration control flags. Pass as bitmask containing one or more of the bit flags PRO_REGEN* defined in ProSolid.h Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully assigned the feature order and statuses. PRO_TK_BAD_INPUTS - One or more of the arguments are invalid. PRO_TK_GENERAL_ERROR - There were regeneration errors. The <i>p_errors</i> argument supplies a detailed description of the errors. See Also: ProArrayAlloc() ProArrayObjectAdd() ProArrayFree() */ extern ProError ProSolidDispoutlineGet (ProSolid solid, ProMatrix transform, double r_outline_points[2][3]); /* Purpose: Computes the display outline of a solid. The display outline would be used to calculate how to refit the model in a window, the extents of a drawing view, or the coordinates of a note free attachment. Input Arguments: solid - The solid whose outline is to be computed. transform - The orientation matrix (with respect to the base coordinate system) to which the outline is to be computed. Output Arguments: r_outline_points - The two points that define the display outline of the solid in the specified orientation. Return Values: PRO_TK_NO_ERROR - The function successfully computed the outline. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. See Also: ProNoteAttachFreeGet() ProNoteAttachFreeSet() */ extern ProError ProSolidOutlineCompute ( ProSolid p_solid, ProMatrix matrix, ProSolidOutlExclTypes excludes[], int num_excludes, Pro3dPnt r_outline_points[2]); /* Purpose: Computes the outline of a solid. This outline can include external datums. Input Arguments: p_solid - The solid whose outline is to be computed. matrix - The orientation matrix (with respect to the base coordinate system) to which the outline is to be computed. excludes - An array of types to exclude from outline computation (such as nongeometric features). If you set this to PRO_OUTL_EXC_NOT_USED, nothing is excluded. num_excludes - The number of exclusions in the array. Output Arguments: r_outline_points - The two points that define the boundary box of the solid in the specified orientation. Return Values: PRO_TK_NO_ERROR - The function successfully computed the outline. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. PRO_TK_GENERAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidOutlineWithOptionsCompute ( ProSolid p_solid, ProMatrix matrix, ProSolidOutlExclTypes excludes[], int num_excludes, ProFeatureFilterAction filter_action, ProAppData app_data, Pro3dPnt r_outline_points[2] ); /* Purpose: Computes the outline of a solid. This outline can include external datums. Input Arguments: p_solid - The solid whose outline is to be computed. matrix - The orientation matrix (with respect to the base coordinate system) to which the outline is to be computed. excludes - An array of types to exclude from outline computation (such as nongeometric features). If you set this to PRO_OUTL_EXC_NOT_USED, nothing is excluded. num_excludes - The number of exclusions in the array. filter_action - The filter function. If NULL, all features are considred while computing outline. app_data - The application data passed to the filter functions. Output Arguments: r_outline_points - The two points that define the boundary box of the solid in the specified orientation. Return Values: PRO_TK_NO_ERROR - The function successfully computed the outline. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. PRO_TK_GENERAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidOutlineGet (ProSolid p_solid, Pro3dPnt r_outline_points[2]); /* Purpose: Retrieves the regeneration outline of a solid, with respect to the base coordinate system orientation. The regeneration outline does not include datums, annotations, or other non-geometric items. This outline is used to compute part accuracy. Input Arguments: p_solid - The solid whose outline is to be determined Output Arguments: r_outline_points - The two points that define the boundary box of the solid, in the orientation of the base coordinate system Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The input argument is invalid. PRO_TK_GENERAL_ERROR - A general error occurred and the function failed. */ typedef enum { PRO_ACCURACY_RELATIVE = 1, PRO_ACCURACY_ABSOLUTE = 2 } ProAccuracyType; extern ProError ProSolidAccuracySet (ProSolid solid, ProAccuracyType type, double accuracy); /* Purpose: Sets either the relative or absolute accuracy of a part or an assembly. <p> NOTE: <p> This function does not regenerate the solid. You must perform this action separately. Input Arguments: solid - The solid whose accuracy is to be changed. type - The relative or absolute accuracy. accuracy - If you are setting the relative accuracy, this number has no dimension because the accuracy will be scaled by the part size. If you are setting absolute accuracy, the number is based on the solid units. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully set the accuracy of the solid. PRO_TK_BAD_INPUTS - One or more of the arguments are invalid. */ extern ProError ProSolidAccuracyGet (ProSolid solid, ProAccuracyType *r_type, double *r_accuracy); /* Purpose: Retrieves the accuracy of the specified part or assembly. Input Arguments: solid - The part or assembly Output Arguments: r_type - The type of accuracy r_accuracy - The accuracy value Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The input argument is invalid. */ extern ProError ProSolidRayIntersectionCompute ( ProMdl model, double aperture_radius, ProRay* p_ray, ProSelection** p_sel_arr, int* p_count ); /* Purpose: Returns a list of ray intersections with a model. The function computes the intersection points of both the original ray and its "negative" with the geometry of the model. The output array is sorted in order of increasing signed distance. It is the responsibility of the user to find whether the ray is inside or outside the model. <p> If a ray hits in the middle of a face on the model, the face is selected. If however, the intersection point is very close (within an internally determined selection aperture) to an edge is also selected. Thus, more than one entry of type surface or edge in the <i>ProSelection</i> array may correspond to one actual piercing of the model by the ray. <p> In an assembly, each part is processed separately. Therefore, if two coincident mating faces are hit, these will be recorded as two separate hits, because they are on two distinct faces. <p> You can set the default value of the <i>aperture_radius</i> using the configuration file option "pick_aperture_radius value" (the default is 7). This is the radius, in pixels, that controls whether a ray is close enough to an edge for it to be counted as a ray hit. Input Arguments: model - The part or assembly through which the ray is shot. aperture_radius - The value of <i>pick_aperture_radius</i>. If the value is less than or equal to 0.0, the function uses the default value (7.0), or the current value in the configuration file. p_ray - The starting point of the ray and the direction vector (defined as X,Y,Z). The vector is normalized within the function before it is being used. Output Arguments: p_sel_arr - An array of <i>ProSelection</i>, one for each selection made. The geometry is in terms of the coordinate system of the part being intersected, not the parent assembly. The function allocates the memory for this argument, and reuses it on subsequent calls. p_count - The number of selections in <i>p_sel_arr</i>. If the ray does not intersect the model, <i>p_count</i> is 0. Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_E_NOT_FOUND - No objects were found in the workspace. PRO_TK_BAD_INPUTS - One or more of the invalid arguments are invalid. */ extern ProError ProSolidFamtableCheck (ProSolid handle); /* Purpose: Determines whether the specified solid has a family table, and if that family table is valid and/or empty. Input Arguments: handle - The <i>ProSolid</i> to check. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The family table is found and is not empty. PRO_TK_BAD_INPUTS - The input argument is invalid. PRO_TK_E_NOT_FOUND - The family table was not found for the specified owner. PRO_TK_EMPTY - The family table is found and is empty. */ extern ProError ProSolidMassPropertyWithDensityGet ( ProSolid solid, ProName csys_name, ProMPDensUse dens_use_flag, double density, ProMassProperty *mass_prop ); /* Purpose: Calculates the mass properties of a part or an assembly in the specified coordinate system. This function doesn't affect the Solid mass properties. Input Arguments: solid - The handle to a part or an assembly. csys_name - The name of the coordinate system. If this is NULL, the function uses the default coordinate system. dens_use_flag - One of three values: density - density used while calculating mass properties depending on dens_use_flag parameter Output Arguments: mass_prop - The mass property. Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The solid handle is invalid. PRO_TK_E_NOT_FOUND - The specified coordinate system was not found. PRO_TK_GENREAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidMassPropertyGet ( ProSolid solid, ProName csys_name, ProMassProperty* mass_prop ); /* Purpose: Calculates the mass properties of a part or an assembly in the specified coordinate system. Input Arguments: solid - The handle to a part or an assembly. csys_name - The name of the coordinate system. If this is NULL, the function uses the default coordinate system. Output Arguments: mass_prop - The mass property. Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The solid handle is invalid. PRO_TK_E_NOT_FOUND - The specified coordinate system was not found. PRO_TK_GENREAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidFailedFeatsList (ProSolid solid, int **r_failed_feat_ids); /* Purpose: Retrieves the list of failed features in the specified part or assembly. <p><b> NOTE: </b> <p> This function is deprecated. Use ProSolidFailedfeaturesList() to get the list of failed, child of failed and child of external failed feature ids. In Resolve mode pass NULL each for "co_failed_ids" and "co_x_failed_ids" arguments. Input Arguments: solid - The part or assembly. Output Arguments: r_failed_feat_ids - An array of failed feature identifiers. You must preallocate this array using the function <b>ProArrayAlloc()</b>. Return Values: PRO_TK_NO_ERROR - The failed features were found and returned. PRO_TK_E_NOT_FOUND - No failed feature was found. Other - The input was invalid. See Also: ProArrayAlloc() */ typedef ProError (*ProSolidRegeneratePreAction) (ProSolid solid_handle, ProFeature *feat_handle); /* Purpose: This is the notification function called before regenerating a solid. <p> This function is to be supplied by the user by calling <b>ProNotificationSet()</b> with the notify type PRO_SOLID_REGEN_PRE. Input Arguments: solid_handle - The handle to the solid about to be regenerated feat_handle - The start feature for regeneration Output Arguments: none Return Values: Return values are not interpreted by Creo Parametric. See Also: ProNotificationSet() */ typedef ProError (*ProSolidRegeneratePostAction) (ProSolid solid_handle, ProFeature *feat_handle, ProError status); /* Purpose: This is the notification function called after regeneration of a solid. <p> This function is to be supplied by the user by calling <b>ProNotificationSet()</b> with the notify type PRO_SOLID_REGEN_POST. Input Arguments: solid_handle - The handle to the solid that was regenerated feat_handle - The feature where regeneration started status - The internal status generated as a result of regeneration Output Arguments: none Return Values: Return values are not interpreted by Creo Parametric. See Also: ProNotificationSet() */ extern ProError ProSolidProjectPoint ( ProSolid p_handle, Pro3dPnt xyz, double tolerance, ProSurface *p_surface, ProUvParam uv_point ); /* Purpose: Given a solid, a point, and a maximum distance, this function finds a surface from the solid within the maximum distance, and returns the UV point of the projection of the point to that surface. This does not necessarily find the nearest surface on the solid; any surface within the tolerance could be returned. <p><b> NOTE: </b> <p> This function supports parts only, not assemblies. Input Arguments: p_handle - Solid handle. xyz - The point to project. tolerance - Maximum allowed distance from the point to the solid. Output Arguments: p_surface - Surface where the point is projected. uv_point - The corresponding UV point on the surface. Return Values: PRO_TK_NO_ERROR - The function found a point on a surface within the tolerance. PRO_TK_NOT_EXIST - The function failed to find a point on a surface within the tolerance. PRO_TK_BAD_INPUTS - One or more of the Input arguments being invalid. */ extern ProError ProSolidToleranceGet ( ProSolid solid, ProToleranceType type, int n_decimals, double *tolerance); /* Purpose: Retreives the tolerance value for the specified solid, for the specified number of decimal places. Input Arguments: solid - The solid handle. type - The tolerance type. n_decimals - The number of decimal places used to identify the tolerance. Output Arguments: tolerance - The tolerance, at the specified number of decimal places. Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The solid handle is invalid. PRO_TK_GENREAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidToleranceSet ( ProSolid solid, ProToleranceType type, int n_decimals, double tolerance); /* Purpose: Sets the solid's tolerance, at the specified number of decimal places, to the specified value. Input Arguments: solid - The solid handle. type - The tolerance type. n_decimals - The number of decimal places used to identify the tolerance. tolerance - The tolerance, at the specified number of decimal places. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully set the tolerance. PRO_TK_BAD_INPUTS - The solid handle is invalid. PRO_TK_GENERAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidTolclassLoad (ProSolid p_model, ProName name); /* Purpose: This will load a tolerance class for Hole or Shaft ISO tols. Input Arguments: p_model - The model for which the tolerance should be loaded. name - The letter(s) indicating the tolerance class, with Hole tolerances CAPITALIZED and Shaft tolerances in lowercase. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The tolerance table loaded successfully. PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid. PRO_TK_E_NOT_FOUND- Creo Parametric TOOLKIT could not find the table. */ extern ProError ProSolidModelclassGet(ProSolid solid, ProModelClass *model_class); /* Purpose: Gets the ISO/DIN model class type for a solid model. Input Arguments: solid - The solid model. Output Arguments: model_class - The model class. Return Values: PRO_TK_NO_ERROR - The class was retrieved successfully. PRO_TK_BAD_INPUTS - The solid was invalid or the class was NULL. PRO_TK_BAD_CONTEXT - The solid was not using ISO/DIN tolerance tables. */ extern ProError ProSolidModelclassSet(ProSolid solid, ProModelClass model_class); /* Purpose: Sets the ISO/DIN model class type for a solid model. Input Arguments: solid - The solid model. model_class - The model class. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The class was set successfully. PRO_TK_BAD_INPUTS - The solid or class was invalid. PRO_TK_CANT_MODIFY - The model was locked. PRO_TK_BAD_CONTEXT - The model was not using ISO/DIN tolerance tables. */ typedef struct pro_solid_retr_errs* ProSolidretrievalerrs; extern ProError ProSolidRetrievalErrorsGet (ProSolid solid, ProSolidretrievalerrs* errs); /* Purpose: Returns the data structure containing errors that occurred during retrieval. <p><b> Notes: <p></b> The retrieval error information is not persistent and should be accessed immediately after the call to ProMdlRetrieve or an equivalent retrieval function. <p> Creo Parametric TOOLKIT currently does not return specific information from the retrieval errors structure - this is reserved for future expansion. Input Arguments: solid - The top-level solid model that was retrieved. Output Arguments: errs - Pointer to the retrieval errors. Return Values: PRO_TK_NO_ERROR - Errors were found for this model. PRO_TK_E_NOT_FOUND - Errors were not found for this model. PRO_TK_BAD_INPUTS - The inpurt argument is invalid. See Also: ProMdlRetrieve() ProMdlMultipleRetrieve() ProAssemblySimprepRetrieve() */ extern ProError ProSolidRetrievalerrsCount (ProSolidretrievalerrs errs, int* count); /* Purpose: Returns the number of errors that occurred during retrieval. Input Arguments: errs - The retrieval errors structure. Output Arguments: count - The number of errors found. Return Values: PRO_TK_NO_ERROR - The function successfully returned the data. PRO_TK_BAD_INPUTS - The input argument is invalid. */ extern ProError ProSolidDefaulttextheightGet (ProSolid solid, double* default_text_height); /* Purpose: Obtains the default text height used for text in annotations and dimensions in the solid model. Input Arguments: solid - The solid model. Output Arguments: default_text_height - The default text height. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more input arguments was invalid. */ typedef enum { PRO_SOLID_REGENERATED, PRO_SOLID_NEEDS_REGENERATION, PRO_SOLID_FAILED_REGENERATION, PRO_SOLID_CONNECT_FAILED /* The model has been successfully regenerated, but the mechanism connect of the model has failed. This status is applicable only for assemblies with movable components. */ } ProSolidRegenerationStatus; extern ProError ProSolidRegenerationstatusGet ( ProSolid solid, ProSolidRegenerationStatus* regen_status); /* Purpose: Returns the regeneration status of the solid model. This is analogous to the regen status indicator (Green/Disconnected/Yellow/Red) in the Creo Parametric UI. <P> <B>Note:</B> Models with certain contents, like circular references or assembly analysis features, will never return a PRO_SOLID_REGENERATED status. So this flag should not provide an absolute restriction; if the flag remains at the PRO_SOLID_NEEDS_REGENERATION status through two successful regenerations, the model could be considered up to date. Input Arguments: solid - The solid model. Output Arguments: regen_status - The current regeneration status for the solid model. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more input arguments was invalid. See Also: ProSolidRegenerate() */ extern ProError ProSolidFailedfeaturesList (ProSolid solid, int **failed_ids, int **co_failed_ids, int **co_x_failed_ids); /* Purpose: Retrieves the list of failed and/or child of failed and/or child of external failed features in the specified part or assembly. Input Arguments: solid - The part or assembly. Output Arguments: failed_ids - An array of failed feature identifiers. The function allocates the memory for this argument. Free this array using <b>ProArrayFree()</b>. Pass NULL if not requesting this type. co_failed_ids - An array of child of failed feature identifiers. The function allocates the memory for this argument. Free this array using <b>ProArrayFree()</b>. Pass NULL if not requesting this type. co_x_failed_ids - An array of child of external failed feature identifiers. The function allocates the memory for this argument. Free this array using <b>ProArrayFree()</b>. Pass NULL if not requesting this type. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_E_NOT_FOUND - No feature of requested type(s) was found. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_GENERAL_ERROR - The function failed. See Also: ProArrayAlloc() */ extern ProError ProSolidToleranceStandardGet(ProSolid p_solid, ProStandard *p_standard); /* Purpose: Get the assigned tolerance standard of a solid. Input Arguments: p_solid - The <i>ProSolid</i> to get the tol standard for. Output Arguments: p_standard - The tolerance standard, NULL not allowed. Return Values: PRO_TK_NO_ERROR - Success PRO_TK_BAD_INPUTS - p_solid or p_standard was invalid */ extern ProError ProSolidToleranceStandardSet(ProSolid p_solid, ProStandard new_standard); /* Purpose: Set the assigned tolerance standard of a solid. Note that in the regular UI, this operation asks whether to regenerate the solid. This function will not itself perform regeneration. Also note that if this function is used to change the standard, we will set the latest version, see ProSolidToleranceStandardVersionSet. Input Arguments: p_solid - The <i>ProSolid</i> to set the tol standard for. new_standard - The tolerance standard to set. Output Arguments: none Return Values: PRO_TK_NO_ERROR - Success PRO_TK_BAD_INPUTS - p_solid or new_standard was invalid PRO_TK_GENERAL_ERROR - An error occurred trying to set the standard. */ typedef enum pro_standard_version { PRO_ASME14_5_2009 = 0, PRO_ASME14_5_2018, PRO_ISO_2012 = 20, PRO_ISO_2017, }ProStandardVersion; extern ProError ProSolidToleranceStandardVersionSet(ProSolid p_solid, ProStandardVersion version); /* Purpose: Set the version for assigned tolerance standard of a solid. Note that in the regular UI, this operation asks whether to regenerate the solid. This function will not itself perform regeneration. Input Arguments: p_solid - The <i>ProSolid</i> to set the tol standard version for. version - The tolerance standard version to set. Output Arguments: none Return Values: PRO_TK_NO_ERROR - Success PRO_TK_BAD_INPUTS - p_solid or version was invalid PRO_TK_BAD_CONTEXT - Version is not applicable for current standard. PRO_TK_GENERAL_ERROR - An error occurred trying to set the standard version. */ extern ProError ProSolidToleranceStandardVersionGet(ProSolid p_solid, ProStandardVersion *version); /* Purpose: Get the version for assigned tolerance standard of a solid. Input Arguments: p_solid - The <i>ProSolid</i> to set the tol standard version for. Output Arguments: version - The tolerance standard version. Return Values: PRO_TK_NO_ERROR - Success PRO_TK_BAD_INPUTS - p_solid is NULL PRO_TK_GENERAL_ERROR - An error occurred trying to get the standard. */ extern ProError ProSolidToleranceStandardUpdate(ProSolid p_solid); /* Purpose: Update the solid to the most current version of its tolerance standard. This function will not itself perform regeneration. Input Arguments: p_solid - The <i>ProSolid</i> to update the tol standard version. Output Arguments: none Return Values: PRO_TK_NO_ERROR - Success PRO_TK_BAD_INPUTS - p_solid was invalid PRO_TK_GENERAL_ERROR - An error occurred trying to update the standard. */ extern ProError ProSolidRegenerationIsNoresolvemode ( ProBoolean *is_no_resolve); /* Purpose: Check the current Creo Parametric regeneration mode. Input Arguments: none Output Arguments: is_no_resolve - PRO_B_TRUE if the current Creo Parametric regeneration mode is No Resolve Mode; PRO_B_FALSE if it is Resolve Mode. Return Values: PRO_TK_NO_ERROR - The function succeeded PRO_TK_BAD_INPUTS - One or more arguments are invalid. */ extern ProError ProSolidMaxsizeGet(ProSolid p_solid, double* r_max_size); /* Purpose: Gets maximum model size of a solid. Input Arguments: p_solid - The solid model. Output Arguments: r_max_size - The possible maximum size for the solid. Return Values: PRO_TK_NO_ERROR - The function succeeded PRO_TK_BAD_INPUTS - One or more arguments are invalid. */ extern ProError ProAssemblySolidMassPropertyGet(ProSolid solid, ProSelection csys_sel, ProMassProperty *mass_prop); /* Purpose: Calculates the mass properties of solid referenced by the specified coordinate system selection. <p> <b>Notes: </b> Allocate the coordinate system selection using component path of component/sub-assembly whose mass properties are required. Input Arguments: solid - The handle to top assembly or component/sub-assembly. csys_sel - The selection reference for the coordinate system. If this is NULL, the function uses the default coordinate system of the input solid. Output Arguments: mass_prop - The mass property. Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The assembly handle or csys selection is invalid. PRO_TK_E_NOT_FOUND - The specified coordinate system was not found. PRO_TK_GENREAL_ERROR - A general error occurred and the function failed. */ extern ProError ProSolidMassPropertyWrite(ProSelection solid_or_body, ProSelection csys_sel, ProMassPropertyFormat format, wchar_t* file_path); /* Purpose: Writes the mass properties of solid/body referenced by the specified coordinate system selection. <p> <b>Notes: </b> Allocate the coordinate system selection using component path of component/sub-assembly whose mass properties are required. Input Arguments: solid_or_body - The handle to solid,body csys_sel - The selection reference for the coordinate system. If this is NULL, the function uses the default coordinate system of the input solid. format - format file_path - file Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function successfully retrieved the information. PRO_TK_BAD_INPUTS - The solid/body handle or csys selection is invalid. PRO_TK_E_NOT_FOUND - The specified coordinate system was not found. PRO_TK_GENREAL_ERROR - A general error occurred and the function failed. */ PRO_END_C_DECLS #endif /* PROSOLID_H */