#ifndef PRORULE_H
#define PRORULE_H
/* Creo Parametric TOOLKIT declarations for ProSimpreprule related actions */
#include <ProObjects.h>
PRO_BEGIN_C_DECLS
/*
Types of rules used to evaluate inclusion/exclusion in a simplified rep
*/
typedef enum pro_simprep_rule_types
{
PRO_RULE_NONE, /* No rule is defined. */
PRO_RULE_NAME, /* Substitute by name. */
PRO_RULE_ZONE, /* Select items by zone. */
PRO_RULE_EXPR, /* Select items by expression. */
PRO_RULE_SIZE, /* Select items by size. */
PRO_RULE_DIST, /* Select items by distance. */
PRO_RULE_SIMP_REP /* Select items active in the specified
representation. */
} ProRuleType;
typedef ProLine *ProExpression;
typedef struct pro_rule_size
{
ProBoolean absolute; /* PRO_B_TRUE to compare absolute size of the model
otherwise - compare relative size (0.0 - 1.0)
with respect to the assembly */
ProBoolean greater; /* PRO_B_TRUE to collect models that are larger than
the specified size, otherwise collect the smaller
ones */
double value; /* Size to compare against (valid range is
0.0 to 1.0 if absolute == PRO_B_FALSE) */
ProBoolean incl_datums; /* if TRUE - use bbox, FALSE - regen outline */
} ProRuleSize;
typedef struct pro_rule_dist
{
ProVector center; /* Center point from which to measure the
distance (in the coordinates of the top
assembly */
double distance; /* Distance value to compare against */
ProBoolean incl_datums; /* if TRUE - use bbox, FALSE - regen outline */
} ProRuleDist;
/*
ProRule - Specifies the rule type and data to support various
flavors of the simplified representation rules.
*/
typedef struct pro_rule
{
ProRuleType type;
union
{
ProName name_mask; /* PRO_RULE_NAME - name mask to compare */
ProRuleSize size_data; /* PRO_RULE_SIZE - size data */
ProExpression expression; /* PRO_RULE_EXPR - expression to evaluate */
ProFeature zone_feat; /* PRO_RULE_ZONE - zone feature */
ProSimprep simp_rep; /* PRO_RULE_SIMP_REP - simplified
representation to evaluate */
ProRuleDist dist_data; /* PRO_RULE_DIST - distance data */
} rule_data;
} ProRule;
extern ProError ProRuleInitName (ProName name_mask, ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure.
Input Arguments:
name_mask - The data specific to the rule type being initialized
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleInitExpr (ProExpression expr,
ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure for the specified
expression.
Input Arguments:
expr - The expression
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleInitZone (ProFeature *zone_feat,
ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure according to the
specified data.
Input Arguments:
zone_feat - The data specific to the rule type being initialized
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleInitDist (ProRuleDist *dist_data,
ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure according to the
specified data.
Input Arguments:
dist_data - The data specific to the rule type being initialized
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleInitSize (ProRuleSize *size_data,
ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure according to the
specified data.
Input Arguments:
size_data - The data specific to the rule type being initialized
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleInitRep (ProSimprep *simp_rep,
ProRule *rule);
/*
Purpose: Initializes the <i>ProRule</i> data structure according to the
specified data.
Input Arguments:
simp_rep - The data specific to the rule type being initialized
Output Arguments:
rule - The <i>ProRule</i> data structure to be filled in
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the data
structure.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProRuleEval (ProSolid p_solid,
ProRule *p_rule,
ProAsmcomppath **p_comp_list,
int *p_list_size);
/*
Purpose: Returns a list of components that satisfy the specified rule.
Input Arguments:
p_solid - The solid to evaluate.
p_rule - The rule data to evaluate.
Output Arguments:
p_comp_list - The list of components that satisfy the rule. Use
<b>ProArrayFree()</b> to free the allocated memory.
p_list_size - The size of the returned list of components. May be NULL.
Return Values:
PRO_TK_NO_ERROR - The function successfully completed the rule
evaluation.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
See Also:
ProArrayFree()
*/
PRO_END_C_DECLS
#endif /* PRORULE_H */