Source code for creopyson.feature

"""Feature module."""
STATUS_LIST = [
    "ACTIVE",
    "INACTIVE",
    "FAMILY_TABLE_SUPPRESSED",
    "SIMP_REP_SUPPRESSED",
    "PROGRAM_SUPPRESSED",
    "SUPPRESSED",
    "UNREGENERATED",
]


[docs] def delete(client, name=None, file_=None, status=None, type_=None, clip=None): """Delete one or more features that match criteria. Args: client (obj): creopyson Client. name (str|list:str, optional): Dimension name, (wildcards allowed: True); if empty then all features are listed. `file_` (str, optional): Model name (wildcards allowed: True). Defaults is current active model. status (str, optional): Feature status pattern (wildcards allowed: True). Defaults: All feature statuses. Valid values: ACTIVE, INACTIVE, FAMILY_TABLE_SUPPRESSED, SIMP_REP_SUPPRESSED, PROGRAM_SUPPRESSED, SUPPRESSED, UNREGENERATED `type_` (str, optional): Feature type pattern (wildcards allowed: True). Defaults: All feature types. clip (boolean, optional): Whether to clip-delete ANY features from this feature through the end of the structure. Defaults is False. Raises: ValueError: status value is incorrect. Returns: None """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: if isinstance(name, (str)): data["name"] = name elif isinstance(name, (list)): data["names"] = name if status in STATUS_LIST: data["status"] = status elif status is not None: raise ValueError(f"`{status}` is not a correct status.") if type_ is not None: data["type"] = type_ if clip is not None: data["clip"] = clip return client._creoson_post("feature", "delete", data)
[docs] def delete_param(client, name=None, file_=None, param=None): """Delete a feature parameter. Args: client (obj): creopyson Client. name (str, optional): Parameter name (wildcards allowed: True). Defaults: All parameter names. `file_` (str, optional): Model name. Defaults is current active model. param (str, optional): Parameter name (wildcards allowed: True). Defaults: All parameter names. Returns: None """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: data["name"] = name if param: data["param"] = param return client._creoson_post("feature", "delete_param", data)
[docs] def list_( client, file_=None, name=None, status=None, type_=None, paths=None, no_datum=None, inc_unnamed=None, no_comp=None, ): """List feature parameters that match criteria. Will only list parameters on visible features. Args: client (obj): creopyson Client. `file_` (str, optional): File name. Defaults is the currently active model. name (str, optional): Feature name (wildcards allowed: True). Defaults: All features are listed. status (str, optionnal): Feature status pattern. Defaults: All feature statuses. Valid values: ACTIVE, INACTIVE, FAMILY_TABLE_SUPPRESSED, SIMP_REP_SUPPRESSED, PROGRAM_SUPPRESSED, SUPPRESSED, UNREGENERATED. `type_` (str, optional): Feature type patter (wildcards allowed: True). Defaults: All feature types. paths (boolean, optionnal): Whether feature ID and feature number are returned with the data Default: False. no_datum (boolean, optional): Whether to exclude datum-type features from the list; these are COORD_SYS, CURVE, DATUM_AXIS, DATUM_PLANE, DATUM_POINT, DATUM_QUILT, and DATUM_SURFACE features. Defaults is False. inc_unnamed (boolean, optional): Whether to include unnamed features in the list. Defaults is False. no_comp (boolean, optional): Whether to include component-type features in the list. Defaults is False. Raises: ValueError: status value is incorrect. Returns: (list:dict): List of parameter information. name (str): Parameter nam. value (depends on data type): Parameter value. type (string): Data type. Valid values: STRING, DOUBLE, INTEGER, BOOL, NOTE. designate (boolean): Value is designated. encoded (boolean): Value is Base64-encoded. owner_name (str): Owner Name. owner_id (int): Owner ID. owner_type (str): Owner type. """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: data["name"] = name if status in STATUS_LIST: data["status"] = status elif status is not None: raise ValueError(f"`{status}` is not a correct status.") if type_ is not None: data["type"] = type_ if paths is not None: data["paths"] = paths if no_datum is not None: data["no_datum"] = no_datum if inc_unnamed is not None: data["inc_unnamed"] = inc_unnamed if no_comp is not None: data["no_comp"] = no_comp return client._creoson_post("feature", "list", data, "featlist")
[docs] def list_params( client, file_=None, name=None, type_=None, no_datum=None, inc_unnamed=None, no_comp=None, param=None, value=None, encoded=None, ): """List feature parameters that match criteria. Args: client (obj): creopyson Client. `file_` (str, optional): File name. Defaults is the currently active model. name (str|int, optional): str: Feature name (wildcards allowed: True). int: Feature ID. Defaults: All features are listed. `type_` (str, optional): Feature type patter (wildcards allowed: True). Defaults: All feature types. no_datum (boolean, optional): Whether to exclude datum-type features from the list; these are COORD_SYS, CURVE, DATUM_AXIS, DATUM_PLANE, DATUM_POINT, DATUM_QUILT, and DATUM_SURFACE features. Defaults is False. inc_unnamed (boolean, optional): Whether to include unnamed features in the list. Defaults is False. no_comp (boolean, optional): Whether to include component-type features in the list. Defaults is False. param (str|list:str, optional): Parameter name; (wildcards allowed: True) if empty all parameters are listed. value (str, optional): Parameter value filter (wildcards allowed: True). Defaults is no filter. encoded (boolean, optional): Whether to return the values Base64-encoded. Defaults is False. Returns: (list:dict): List of parameter information. name (str): Parameter nam. value (depends on data type): Parameter value. type (string): Data type. Valid values: STRING, DOUBLE, INTEGER, BOOL, NOTE. designate (boolean): Value is designated. encoded (boolean): Value is Base64-encoded. owner_name (str): Owner Name. owner_id (int): Owner ID. owner_type (str): Owner type. description (str): List of parameter information. """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: if isinstance(param, (str)): data["name"] = name elif isinstance(param, (list)): data["feat_id"] = name if type_ is not None: data["type"] = type_ if no_datum is not None: data["no_datum"] = no_datum if inc_unnamed is not None: data["inc_unnamed"] = inc_unnamed if no_comp is not None: data["no_comp"] = no_comp if param is not None: if isinstance(param, (str)): data["param"] = param elif isinstance(param, (list)): data["params"] = param if value is not None: data["value"] = value if encoded is not None: data["encoded"] = encoded return client._creoson_post("feature", "list_params", data, "paramlist")
[docs] def list_group_features(client, group_name, type_=None, file_=None): """List features in a Creo Group. Args: client (obj): creopyson Client. group_name (str): Group name. `type_` (str, optional): Feature type patter (wildcards allowed: True). Defaults: All feature types. `file_` (str, optional): File name. Defaults is the currently active model. Returns: (list:dict): List of feature information """ data = { "group_name": group_name, } if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if type_ is not None: data["type"] = type_ return client._creoson_post("feature", "list_group_features", data, "featlist")
[docs] def list_pattern_features(client, patter_name, type_=None, file_=None): """List features in a Creo Pattern. Args: client (obj): creopyson Client. patter_name (str): Pattern name. `type_` (str, optional): Feature type patter (wildcards allowed: True). Defaults: All feature types. `file_` (str, optional): File name. Defaults is the currently active model. Returns: (list:dict): List of feature information """ data = { "patter_name": patter_name, } if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if type_ is not None: data["type"] = type_ return client._creoson_post("feature", "list_group_features", data, "featlist")
[docs] def list_selected(client): """List the currently selected features in Creo Returns: (list): List of feature informations. [ { 'file' : model name (str) 'name' : feature name (str) 'status' : feature status (str) 'type' : feature type (str) 'feat_id' : feature ID (int) 'feat_number' : feature number (int) 'path' : feature's component path (list of ints) }, ] """ data = None return client._creoson_post("feature", "list_selected", data, "featlist")
[docs] def param_exists(client, file_=None, name=None, param=None): """Check whether parameter(s) exists on a feature. Args: client (obj): creopyson Client. `file_` (str, optional): File name. Defaults is the currently active model. name (str, optional): Parameter name (wildcards allowed: True). Defaults: All parameter names. param (str|list:str, optional): Parameter name; (wildcards allowed: True) if empty all parameters are listed. Returns: (boolean): Whether the parameter exists on the model """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: data["name"] = name if param is not None: if isinstance(param, (str)): data["param"] = param elif isinstance(param, (list)): data["params"] = param return client._creoson_post("feature", "param_exists", data, "exists")
[docs] def rename(client, name, new_name, file_=None): """Rename a feature. Args: client (obj): creopyson Client. name (str|int, optional): Feature name (str) or Feature ID (int). new_name (str): New name for the feature. `file_` (str, optional): File name. Defaults is the currently active model. Returns: None """ data = {"new_name": new_name} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if isinstance(name, (str)): data["name"] = name elif isinstance(name, (int)): data["feat_id"] = name else: raise TypeError("name must be str or int") return client._creoson_post("feature", "rename", data)
[docs] def resume(client, file_=None, name=None, status=None, type_=None, with_children=None): """Resume one or more features that match criteria. Will only resume visible features. Args: client (obj): creopyson Client. `file_` (str, optional): File name (wildcards allowed: True). Defaults is the currently active model. name (int|str|list:str, optional): Feature name or Feature ID, (wildcards allowed: True); if empty then all features are resumed. int => Feat_ID str => name list:str => names status (str, optional): Feature status pattern. Defaults: All feature statuses. Valid values: ACTIVE, INACTIVE, FAMILY_TABLE_SUPPRESSED, SIMP_REP_SUPPRESSED, PROGRAM_SUPPRESSED, SUPPRESSED, UNREGENERATED `type_` (str, optional): Feature type pattern (wildcards allowed: True). Defaults: All feature types. with_children (boolean, optional): Whether to resume any child features of the resumed feature. Defaults is False. Raises: ValueError: status value is incorrect. Returns: None """ data = { "with_children": False, } if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: if isinstance(name, (int)): data["feat_id"] = name elif isinstance(name, (str)): data["name"] = name elif isinstance(name, (list)): data["names"] = name if status in STATUS_LIST: data["status"] = status elif status is not None: raise ValueError(f"`{status}` is not a correct status.") if type_ is not None: data["type"] = type_ if with_children is not None: data["with_children"] = with_children return client._creoson_post("feature", "resume", data)
[docs] def set_param( client, param, file_=None, name=None, type_=None, value=None, encoded=None, designate=None, description=None, no_create=None, ): """Set the value of a feature parameter. Will only set parameters on visible features. Args: client (obj): creopyson Client. param (str): Parameter name. `file_` (str, optional): File name (wildcards allowed: True). Defaults is the currently active model. name (str, optional): Feature name. Defaults: All features are updated. `type_` (str, optional): Parameter data type. Defaults is True. Valid values: STRING, DOUBLE, INTEGER, BOOL, NOTE. value (depends on data type, optional): Parameter value. Defaults: Clears the parameter value if missing. encoded (boolean, optional): Value is Base64-encoded. Defaults is False. designate (boolean, optional): Set parameter to be designated/not designated, blank=do not set. Defaults is `blank`. description (str, optionnal): Parameter description. If missing, leaves the currect description in place. no_create (boolean, optional): If parameter does not already exist, do not create it. Defaults is False. Returns: None """ data = {} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: data["name"] = name if param is not None: data["param"] = param if type_ is not None: data["type"] = type_ if value is not None: data["value"] = value if encoded is not None: data["encoded"] = encoded if designate is not None: data["designate"] = designate if description is not None: data["description"] = description if no_create is not None: data["no_create"] = no_create return client._creoson_post("feature", "set_param", data)
[docs] def suppress( client, file_=None, name=None, status=None, type_=None, clip=None, with_children=None, ): """Suppress one or more features that match criteria. Will only suppress visible features. Args: client (obj): creopyson Client. `file_` (str, optional): File name (wildcards allowed: True). Defaults is the currently active model. name (int|str|list:str, optional): Feature name or Feature ID, (wildcards allowed: True); if empty then all features are suppressed. int => Feat_ID str => name list:str => names status (str, optional): Feature status pattern. Defaults: All feature statuses. Valid values: ACTIVE, INACTIVE, FAMILY_TABLE_SUPPRESSED, SIMP_REP_SUPPRESSED, PROGRAM_SUPPRESSED, SUPPRESSED, UNREGENERATED `type_` (str, optional): Feature type pattern (wildcards allowed: True). Defaults: All feature types. clip (boolean, optional): Whether to clip-suppress ANY features from this feature through the end of the structure. Defaults is True. with_children (boolean, optional): Whether to suppress any child features of the suppressed feature. Defaults is True. Raises: ValueError: status value is incorrect. Returns: None """ data = {"clip": True, "with_children": True} if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if name is not None: if isinstance(name, (int)): data["feat_id"] = name elif isinstance(name, (str)): data["name"] = name elif isinstance(name, (list)): data["names"] = name if status in STATUS_LIST: data["status"] = status elif status is not None: raise ValueError(f"`{status}` is not a correct status.") if type_ is not None: data["type"] = type_ if clip is False: data["clip"] = False if with_children is False: data["with_children"] = False return client._creoson_post("feature", "suppress", data)
[docs] def user_select_csys(client, file_=None, max_=None): """Prompt the user to select one or more coordinate systems. and return their selections. Args: client (obj): creopyson Client. `file_` (str, optional): File name. Defaults is the currently active model. `max_` (int, optional): The maximum number of dimensions that the user can select. Defaults is `1`. Returns: (list:dict): List of feature information. name (str): Feature name. type (string): Feature type. status (str): Feature status. Valid values: ACTIVE, INACTIVE, FAMILY_TABLE_SUPPRESSED, SIMP_REP_SUPPRESSED, PROGRAM_SUPPRESSED, SUPPRESSED, UNREGENERATED. feat_id (int): Feature ID. file (str): File name containing the feature. path (list:int): Component Path to feature (optionnal) """ data = { "max": 1, } if file_ is not None: data["file"] = file_ else: active_file = client.file_get_active() if active_file: data["file"] = active_file["file"] if max_ is not None: data["max"] = max_ return client._creoson_post("feature", "user_select_csys", data)