Source code for pyrobotstructural.enums

from .bootstrap import get_robotom


class _RobotEnumDescriptor:
    """Lazily fetches the real COM enum value from the owning class's _robot_enum_name."""

    def __init__(self, value_name: str):
        self.value_name = value_name

    def __set_name__(self, owner, name):
        self.owner = owner

    def __get__(self, obj, objtype=None):
        cls = objtype if objtype is not None else type(obj)
        rbt = get_robotom()
        return getattr(getattr(rbt, cls._robot_enum_name), self.value_name)


def com_member(value_name: str) -> _RobotEnumDescriptor:
    """Declare a COM enum com_member on a RobotEnum class."""
    return _RobotEnumDescriptor(value_name)


[docs] class LabelType: _robot_enum_name = "IRobotLabelType" NODE_RELEASE = com_member("I_LT_NODE_RELEASE") NODE_COMPATIBLE = com_member("I_LT_NODE_COMPATIBILITY") BAR_SECTION = com_member("I_LT_BAR_SECTION") BAR_RELEASE = com_member("I_LT_BAR_RELEASE") BAR_OFFSET = com_member("I_LT_BAR_OFFSET") BAR_CABLE = com_member("I_LT_BAR_CABLE") BRACKET_AT_BAR_END = com_member("I_LT_BAREND_BRACKET") PANEL_THICKNESS = com_member("I_LT_PANEL_THICKNESS") PANEL_REINFORCEMENT = com_member("I_LT_PANEL_REINFORCEMENT") SUPPORT = com_member("I_LT_SUPPORT") MATERIAL = com_member("I_LT_MATERIAL") LINEAR_RELEASE = com_member("I_LT_LINEAR_RELEASE") ELASTIC_GROUND = com_member("I_LT_BAR_ELASTIC_GROUND") NODE_RIGID_LINK = com_member("I_LT_NODE_RIGID_LINK") com_member_TYPE = com_member("I_LT_MEMBER_TYPE") VEHICLE = com_member("I_LT_VEHICLE") SOLID_PROPERTIES = com_member("I_LT_SOLID_PROPERTIES") BAR_GEO_IMPERFECTIONS = com_member("I_LT_BAR_GEO_IMPERFECTIONS") BAR_NONLINEAR_HINGE = com_member("I_LT_BAR_NONLINEAR_HINGE") CLADDING = com_member("I_LT_CLADDING") PANEL_CALCULATION_MODEL = com_member("I_LT_PANEL_CALC_MODEL") REINFORCEMENT_PARAMS = com_member("I_LT_MEMBER_REINFORCEMENT_PARAMS")
[docs] class CaseNature: _robot_enum_name = "IRobotCaseNature" PERMANENT = com_member("I_CN_PERMANENT") EXPLOITATION = com_member("I_CN_EXPLOATATION") WIND = com_member("I_CN_WIND") SNOW = com_member("I_CN_SNOW") TEMPERATURE = com_member("I_CN_TEMPERATURE") ACCIDENTAL = com_member("I_CN_ACCIDENTAL") SEISMIC = com_member("I_CN_SEISMIC")
class LoadRecordType: _robot_enum_name = "IRobotLoadRecordType" NODE_FORCE = com_member("I_LRT_NODE_FORCE") NODE_DISPLACEMENT = com_member("I_LRT_NODE_DISPLACEMENT") BAR_DILATATION = com_member("I_LRT_BAR_DILATATION") BAR_FORCE_CONENTRATED = com_member("I_LRT_BAR_FORCE_CONCENTRATED")
[docs] class CaseAnalizeType: _robot_enum_name = "IRobotCaseAnalizeType" COMB_LINEAR = com_member("I_CAT_COMB") COMB_BUCKLING = com_member("I_CAT_COMB_BUCKLING") COMB_NONLIN_BUCKLING = com_member("I_CAT_COMB_NONLINEAR_BUCKLING") COMB_NONLINEAR = com_member("I_CAT_COMB_NONLINEAR") STATIC_LINEAR = com_member("I_CAT_STATIC_LINEAR") STATIC_NONLINEAR = com_member("I_CAT_STATIC_NONLINEAR") STATIC_LINEAR_AUX = com_member("I_CAT_STATIC_LINEAR_AUXILIARY") DYNAMIC_MODAL = com_member("I_CAT_DYNAMIC_MODAL") DYNAMIC_SPECTRAL = com_member("I_CAT_DYNAMIC_SPECTRAL") DYNAMIC_SEISMIC = com_member("I_CAT_DYNAMIC_SEISMIC") DYNAMIC_HARMONIC = com_member("I_CAT_DYNAMIC_HARMONIC") MOBILE = com_member("I_CAT_MOBILE_MAIN") STATIC_BUCKLING = com_member("I_CAT_STATIC_BUCKLING") STATIC_NONLINEAR_BUCKLING = com_member("I_CAT_STATIC_NONLINEAR_BUCKLING")
[docs] class CombinationType: _robot_enum_name = "IRobotCombinationType" ULS = com_member("I_CBT_ULS") SLS = com_member("I_CBT_SLS") ALS = com_member("I_CBT_ALS") SLS_FREQ = com_member("I_CBT_SLS_EC_FRE") SLS_QPR = com_member("I_CBT_SLS_EC_QPR") SLS_RARE = com_member("I_CBT_SLS_EC_RAR") SPECIAL = com_member("I_CBT_SPC")
[docs] class SectionShapeType: """To add more enums see page 556 or section II.3.1.3.1 RobotAPI""" _robot_enum_name = "IRobotBarSectionShapeType" TUBE = com_member("I_BSST_USER_TUBE") RECT = com_member("I_BSST_USER_RECT") RECT_FILLED = com_member("I_BSST_RECT_FILLED") I_BEAM = com_member("I_BSST_USER_I_BISYM") I_BEAM_MONOSYM = com_member("I_BSST_USER_I_MONOSYM") T_SHAPE = com_member("I_BSST_USER_T_SHAPE") C_SHAPE = com_member("I_BSST_USER_C_SHAPE") CROSS = com_member("_BSST_USER_CROSS") WOOD_RECTANGLE = com_member("I_BSST_WOOD_RECT") WOOD_DOUBLE_RECTANGLE = com_member("I_BSST_WOOD_DRECT") STEEL_RECT_FILLED = com_member("I_BSST_RECT_FILLED") STEEL_CIRCLE_FILLED = com_member("I_BSST_CIRC_FILLED")
[docs] class SectionType: _robot_enum_name = "IRobotBarSectionType" STANDARD = com_member("I_BST_STANDARD") COMPLEX = com_member("I_BST_COMPLEX") JOIST = com_member("I_BST_JOIST") BOX = com_member("I_BST_NS_BOX") TUBE = com_member("I_BST_NS_TUBE") RECT = com_member("I_BST_NS_RECT")
[docs] class ThicknessType: _robot_enum_name = "IRobotThicknessType" HOMOGENEOUS = com_member("I_TT_HOMOGENEOUS") ORTHOTROPIC = com_member("I_TT_ORTHOTROPIC")
[docs] class ShellLayer: """Layer through the shell thickness for FE result extraction.""" _robot_enum_name = "IRobotFeLayerType" TOP = com_member("I_FLT_UPPER") # Top (upper) layer MID = com_member("I_FLT_MIDDLE") # Mid-plane layer BOTTOM = com_member("I_FLT_LOWER") # Bottom (lower) layer
[docs] class ObjLocalXDirType: """Definition type for the local X axis direction of a panel/cladding object.""" _robot_enum_name = "IRobotObjLocalXDirDefinitionType" UNDEFINED = com_member("I_OLXDDT_UNDEFINED") CARTESIAN = com_member("I_OLXDDT_CARTESIAN") POLAR = com_member("I_OLXDDT_POLAR")
[docs] class NodeSupportFixingDir: """Directions that can be blocked in a nodal support (used with one-directional supports).""" _robot_enum_name = "IRobotNodeSupportFixingDirection" UX = com_member("I_NSFD_UX") UY = com_member("I_NSFD_UY") UZ = com_member("I_NSFD_UZ") RX = com_member("I_NSFD_RX") RY = com_member("I_NSFD_RY") RZ = com_member("I_NSFD_RZ")
[docs] class NodeSupportOneDirType: """Manner of unilateral (one-directional) blocking for a nodal support direction.""" _robot_enum_name = "IRobotNodeSupportOneDirectionFixingType" NONE = com_member("I_NSODFT_NONE") MINUS = com_member("I_NSODFT_MINUS") PLUS = com_member("I_NSODFT_PLUS")