# <pep8 compliant>

# BEGIN OCTANE GENERATED CODE BLOCK #
import bpy  # noqa
from nodeitems_utils import NodeCategory, NodeItem, NodeItemCustom  # noqa
from bpy.props import EnumProperty, StringProperty, BoolProperty, IntProperty, FloatProperty, FloatVectorProperty, IntVectorProperty  # noqa
from octane.utils import consts, runtime_globals, utility  # noqa
from octane.nodes import base_switch_input_socket  # noqa
from octane.nodes.base_color_ramp import OctaneBaseRampNode  # noqa
from octane.nodes.base_curve import OctaneBaseCurveNode  # noqa
from octane.nodes.base_lut import OctaneBaseLutNode  # noqa
from octane.nodes.base_image import OctaneBaseImageNode  # noqa
from octane.nodes.base_kernel import OctaneBaseKernelNode  # noqa
from octane.nodes.base_node import OctaneBaseNode  # noqa
from octane.nodes.base_osl import OctaneScriptNode  # noqa
from octane.nodes.base_switch import OctaneBaseSwitchNode  # noqa
from octane.nodes.base_socket import OctaneBaseSocket, OctaneTypedTextureSocket, OctaneGroupTitleSocket, OctaneMovableInput, OctaneGroupTitleMovableInputs  # noqa


class OctaneOrthographic(OctaneBaseSocket):
    bl_idname = "OctaneOrthographic"
    bl_label = "正投影"
    color = consts.OctanePinColor.
    octane_label_name = "正投影"
    octane_default_node_type = consts.NodeType.NT_BOOL
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_ORTHOGRAPHIC
    octane_pin_name = "orthographic"
    octane_pin_type = consts.PinType.PT_BOOL
    octane_pin_index = 0
    octane_socket_type = consts.SocketType.ST_BOOL
    default_value: BoolProperty(default=False, update=OctaneBaseSocket.update_node_tree, description="如果开启，相机将显示正交视图。 如果禁用，它将显示透视视图")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneSensorWidth(OctaneBaseSocket):
    bl_idname = "OctaneSensorWidth"
    bl_label = "传感器宽度"
    color = consts.OctanePinColor.
    octane_label_name = "传感器宽度"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_SENSOR_WIDTH
    octane_pin_name = "sensorWidth"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 1
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=36.000000, update=OctaneBaseSocket.update_node_tree, description="传感器或胶片的宽度[以毫米为单位]", min=1.000000, max=100.000000, soft_min=1.000000, soft_max=100.000000, step=1.000000, precision=2, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 2210002
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneFocalLength(OctaneBaseSocket):
    bl_idname = "OctaneFocalLength"
    bl_label = "焦距"
    color = consts.OctanePinColor.
    octane_label_name = "焦距"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_FOCAL_LENGTH
    octane_pin_name = "focalLength"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 2
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=50.000000, update=OctaneBaseSocket.update_node_tree, description="镜头的焦距[以毫米为单位]", min=0.000000, max=340282346638528859811704183484516925440.000000, soft_min=10.000000, soft_max=1200.000000, step=1.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 2210002
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneFstop(OctaneBaseSocket):
    bl_idname = "OctaneFstop"
    bl_label = "F值"
    color = consts.OctanePinColor.
    octane_label_name = "F值"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_FSTOP
    octane_pin_name = "fstop"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 3
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=2.800000, update=OctaneBaseSocket.update_node_tree, description="光圈与焦距的比例", min=0.500000, max=1000.000000, soft_min=0.500000, soft_max=64.000000, step=10.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 2210002
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneFov(OctaneBaseSocket):
    bl_idname = "OctaneFov"
    bl_label = "视野"
    color = consts.OctanePinColor.
    octane_label_name = "视野"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_FOV
    octane_pin_name = "fov"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 4
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=39.597752, update=OctaneBaseSocket.update_node_tree, description="水平视野[以度为单位]", min=0.001000, max=180.000000, soft_min=1.000000, soft_max=180.000000, step=1.000000, precision=5, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneScale(OctaneBaseSocket):
    bl_idname = "OctaneScale"
    bl_label = "视图尺寸"
    color = consts.OctanePinColor.
    octane_label_name = "视图尺寸"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_SCALE
    octane_pin_name = "scale"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 5
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.804984, update=OctaneBaseSocket.update_node_tree, description="正交视图的宽度[以米为单位]", min=0.000000, max=340282346638528859811704183484516925440.000000, soft_min=0.010000, soft_max=10000.000000, step=1.000000, precision=5, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneDistortion(OctaneBaseSocket):
    bl_idname = "OctaneDistortion"
    bl_label = "扭曲"
    color = consts.OctanePinColor.
    octane_label_name = "扭曲"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_DISTORTION
    octane_pin_name = "distortion"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 6
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.000000, update=OctaneBaseSocket.update_node_tree, description="球面扭曲的强度", min=0.000000, max=1.000000, soft_min=0.000000, soft_max=1.000000, step=1.000000, precision=2, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneLensShift(OctaneBaseSocket):
    bl_idname = "OctaneLensShift"
    bl_label = "镜头偏移"
    color = consts.OctanePinColor.
    octane_label_name = "镜头偏移"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_LENS_SHIFT
    octane_pin_name = "lensShift"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 7
    octane_socket_type = consts.SocketType.ST_FLOAT2
    default_value: FloatVectorProperty(default=(0.000000, 0.000000), update=OctaneBaseSocket.update_node_tree, description="镜头向右/向上的偏移(以渲染图片宽度/高度的比例表示)", min=-100.000000, max=100.000000, soft_min=-4.000000, soft_max=4.000000, step=1.000000, subtype="NONE", precision=2, size=2)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctanePerspectiveCorrection(OctaneBaseSocket):
    bl_idname = "OctanePerspectiveCorrection"
    bl_label = "透视校正"
    color = consts.OctanePinColor.
    octane_label_name = "透视校正"
    octane_default_node_type = consts.NodeType.NT_BOOL
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_PERSPECTIVE_CORRECTION
    octane_pin_name = "perspectiveCorrection"
    octane_pin_type = consts.PinType.PT_BOOL
    octane_pin_index = 8
    octane_socket_type = consts.SocketType.ST_BOOL
    default_value: BoolProperty(default=False, update=OctaneBaseSocket.update_node_tree, description="如果上向量是垂直的，透视校正会使垂直线保持平行")
    octane_hide_value = False
    octane_min_version = 1520000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctanePixelAspectRatio(OctaneBaseSocket):
    bl_idname = "OctanePixelAspectRatio"
    bl_label = "像素宽高比"
    color = consts.OctanePinColor.
    octane_label_name = "像素宽高比"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_PIXEL_ASPECT_RATIO
    octane_pin_name = "pixelAspectRatio"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 9
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=1.000000, update=OctaneBaseSocket.update_node_tree, description="像素的X:Y宽高比", min=0.100000, max=10.000000, soft_min=0.100000, soft_max=10.000000, step=1.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 2220000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneNearClipDepth(OctaneBaseSocket):
    bl_idname = "OctaneNearClipDepth"
    bl_label = "近裁剪面深度"
    color = consts.OctanePinColor.
    octane_label_name = "近裁剪面深度"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_NEAR_CLIP_DEPTH
    octane_pin_name = "nearClipDepth"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 10
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.000000, update=OctaneBaseSocket.update_node_tree, description="相机到近裁剪面的距离[以米为单位]", min=0.000000, max=10000000000.000000, soft_min=0.000000, soft_max=10000000000.000000, step=1.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneFarClipDepth(OctaneBaseSocket):
    bl_idname = "OctaneFarClipDepth"
    bl_label = "远裁剪面深度"
    color = consts.OctanePinColor.
    octane_label_name = "远裁剪面深度"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_FAR_CLIP_DEPTH
    octane_pin_name = "farClipDepth"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 11
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=10000000000.000000, update=OctaneBaseSocket.update_node_tree, description="相机到远裁剪面的距离[以米为单位]", min=0.000000, max=10000000000.000000, soft_min=0.000000, soft_max=10000000000.000000, step=1.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 3030000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneAutofocus(OctaneBaseSocket):
    bl_idname = "OctaneAutofocus"
    bl_label = "自动对焦"
    color = consts.OctanePinColor.
    octane_label_name = "自动对焦"
    octane_default_node_type = consts.NodeType.NT_BOOL
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_AUTOFOCUS
    octane_pin_name = "autofocus"
    octane_pin_type = consts.PinType.PT_BOOL
    octane_pin_index = 12
    octane_socket_type = consts.SocketType.ST_BOOL
    default_value: BoolProperty(default=True, update=OctaneBaseSocket.update_node_tree, description="如果开启，焦点将设定在位于渲染图像中心点处最近的一个可见表面上")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneFocalDepth(OctaneBaseSocket):
    bl_idname = "OctaneFocalDepth"
    bl_label = "焦深"
    color = consts.OctanePinColor.
    octane_label_name = "焦深"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_FOCAL_DEPTH
    octane_pin_name = "focalDepth"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 13
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=1.118034, update=OctaneBaseSocket.update_node_tree, description="焦点平面的深度[以米为单位]", min=0.000001, max=340282346638528859811704183484516925440.000000, soft_min=0.000001, soft_max=10000000000.000000, step=1.000000, precision=5, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneAperture(OctaneBaseSocket):
    bl_idname = "OctaneAperture"
    bl_label = "光圈"
    color = consts.OctanePinColor.
    octane_label_name = "光圈"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_APERTURE
    octane_pin_name = "aperture"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 14
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.892857, update=OctaneBaseSocket.update_node_tree, description="镜头开口的半径[以厘米为单位]", min=0.000000, max=100.000000, soft_min=0.000000, soft_max=100.000000, step=1.000000, precision=5, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneApertureAspectRatio(OctaneBaseSocket):
    bl_idname = "OctaneApertureAspectRatio"
    bl_label = "光圈宽高比"
    color = consts.OctanePinColor.
    octane_label_name = "光圈宽高比"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_APERTURE_ASPECT_RATIO
    octane_pin_name = "apertureAspectRatio"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 15
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=1.000000, update=OctaneBaseSocket.update_node_tree, description="光圈的X:Y宽高比", min=0.100000, max=10.000000, soft_min=0.100000, soft_max=10.000000, step=1.000000, precision=2, subtype="NONE")
    octane_hide_value = False
    octane_min_version = 2220000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneApertureEdge(OctaneBaseSocket):
    bl_idname = "OctaneApertureEdge"
    bl_label = "光圈边缘"
    color = consts.OctanePinColor.
    octane_label_name = "光圈边缘"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_APERTURE_EDGE
    octane_pin_name = "aperture_edge"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 16
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=1.000000, update=OctaneBaseSocket.update_node_tree, description="修改景深的散景效果。较高的值会增加边缘的对比度", min=0.000000, max=3.000000, soft_min=0.000000, soft_max=3.000000, step=1.000000, precision=2, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneBokehSidecount(OctaneBaseSocket):
    bl_idname = "OctaneBokehSidecount"
    bl_label = "散景边数"
    color = consts.OctanePinColor.
    octane_label_name = "散景边数"
    octane_default_node_type = consts.NodeType.NT_INT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_BOKEH_SIDECOUNT
    octane_pin_name = "bokehSidecount"
    octane_pin_type = consts.PinType.PT_INT
    octane_pin_index = 17
    octane_socket_type = consts.SocketType.ST_INT
    default_value: IntProperty(default=6, update=OctaneBaseSocket.update_node_tree, description="构成散景形状的边数量", min=3, max=100, soft_min=3, soft_max=12, step=1, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 3060000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneBokehRotation(OctaneBaseSocket):
    bl_idname = "OctaneBokehRotation"
    bl_label = "散景旋转"
    color = consts.OctanePinColor.
    octane_label_name = "散景旋转"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_BOKEH_ROTATION
    octane_pin_name = "bokehRotation"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 18
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.000000, update=OctaneBaseSocket.update_node_tree, description="散景形状的方向", min=0.000000, max=1.000000, soft_min=0.000000, soft_max=1.000000, step=1.000000, precision=2, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 3060000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneBokehRoundedness(OctaneBaseSocket):
    bl_idname = "OctaneBokehRoundedness"
    bl_label = "散景圆润度"
    color = consts.OctanePinColor.
    octane_label_name = "散景圆润度"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_BOKEH_ROUNDEDNESS
    octane_pin_name = "bokehRoundedness"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 19
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=1.000000, update=OctaneBaseSocket.update_node_tree, description="散景形状侧面的圆润度", min=0.000000, max=1.000000, soft_min=0.000000, soft_max=1.000000, step=1.000000, precision=2, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 3060000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctanePos(OctaneBaseSocket):
    bl_idname = "OctanePos"
    bl_label = "位置"
    color = consts.OctanePinColor.
    octane_label_name = "位置"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_POSITION
    octane_pin_name = "pos"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 20
    octane_socket_type = consts.SocketType.ST_FLOAT3
    default_value: FloatVectorProperty(default=(0.000000, 0.500000, 1.000000), update=OctaneBaseSocket.update_node_tree, description="相机的位置", min=-340282346638528859811704183484516925440.000000, max=340282346638528859811704183484516925440.000000, soft_min=-340282346638528859811704183484516925440.000000, soft_max=340282346638528859811704183484516925440.000000, step=1.000000, subtype="NONE", precision=2, size=3)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneTarget(OctaneBaseSocket):
    bl_idname = "OctaneTarget"
    bl_label = "目标"
    color = consts.OctanePinColor.
    octane_label_name = "目标"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_TARGET
    octane_pin_name = "target"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 21
    octane_socket_type = consts.SocketType.ST_FLOAT3
    default_value: FloatVectorProperty(default=(0.000000, 0.000000, 0.000000), update=OctaneBaseSocket.update_node_tree, description="目标位置(即相机看向的点)", min=-340282346638528859811704183484516925440.000000, max=340282346638528859811704183484516925440.000000, soft_min=-340282346638528859811704183484516925440.000000, soft_max=340282346638528859811704183484516925440.000000, step=1.000000, subtype="NONE", precision=2, size=3)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneUp(OctaneBaseSocket):
    bl_idname = "OctaneUp"
    bl_label = "上向量"
    color = consts.OctanePinColor.
    octane_label_name = "上向量"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_UP
    octane_pin_name = "up"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 22
    octane_socket_type = consts.SocketType.ST_FLOAT3
    default_value: FloatVectorProperty(default=(0.000000, 1.000000, 0.000000), update=OctaneBaseSocket.update_node_tree, description="上向量(即定义上方位置的向量)", min=-1.000000, max=1.000000, soft_min=-1.000000, soft_max=1.000000, step=1.000000, subtype="NONE", precision=2, size=3)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneStereoOutput(OctaneBaseSocket):
    bl_idname = "OctaneStereoOutput"
    bl_label = "立体图像输出"
    color = consts.OctanePinColor.
    octane_label_name = "立体图像输出"
    octane_default_node_type = consts.NodeType.NT_ENUM
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_STEREO_OUTPUT
    octane_pin_name = "stereoOutput"
    octane_pin_type = consts.PinType.PT_ENUM
    octane_pin_index = 23
    octane_socket_type = consts.SocketType.ST_ENUM
    items = [
        ("Disabled", "Disabled", "", 0),
        ("Left", "Left", "", 1),
        ("Right", "Right", "", 2),
        ("Side-by-side", "Side-by-side", "", 3),
        ("Anaglyphic", "Anaglyphic", "", 4),
        ("Over-under", "Over-under", "", 5),
    ]
    default_value: EnumProperty(default="Disabled", update=OctaneBaseSocket.update_node_tree, description="以立体图像模式渲染的输出", items=items)
    octane_hide_value = False
    octane_min_version = 2000005
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneStereoMode(OctaneBaseSocket):
    bl_idname = "OctaneStereoMode"
    bl_label = "立体图像模式"
    color = consts.OctanePinColor.
    octane_label_name = "立体图像模式"
    octane_default_node_type = consts.NodeType.NT_ENUM
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_STEREO_MODE
    octane_pin_name = "stereoMode"
    octane_pin_type = consts.PinType.PT_ENUM
    octane_pin_index = 24
    octane_socket_type = consts.SocketType.ST_ENUM
    items = [
        ("Off-axis", "Off-axis", "", 1),
        ("Parallel", "Parallel", "", 2),
    ]
    default_value: EnumProperty(default="Off-axis", update=OctaneBaseSocket.update_node_tree, description="立体图像渲染的操作方式", items=items)
    octane_hide_value = False
    octane_min_version = 2000005
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneStereodist(OctaneBaseSocket):
    bl_idname = "OctaneStereodist"
    bl_label = "眼距"
    color = consts.OctanePinColor.
    octane_label_name = "眼距"
    octane_default_node_type = consts.NodeType.NT_FLOAT
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_STEREO_DIST
    octane_pin_name = "stereodist"
    octane_pin_type = consts.PinType.PT_FLOAT
    octane_pin_index = 25
    octane_socket_type = consts.SocketType.ST_FLOAT
    default_value: FloatProperty(default=0.065000, update=OctaneBaseSocket.update_node_tree, description="立体图像模式中左眼与右眼的距离(以米为单位)", min=-340282346638528859811704183484516925440.000000, max=340282346638528859811704183484516925440.000000, soft_min=-1.000000, soft_max=1.000000, step=1.000000, precision=3, subtype=runtime_globals.FACTOR_PROPERTY_SUBTYPE)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneStereoSwitchEyes(OctaneBaseSocket):
    bl_idname = "OctaneStereoSwitchEyes"
    bl_label = "左右眼交换"
    color = consts.OctanePinColor.
    octane_label_name = "左右眼交换"
    octane_default_node_type = consts.NodeType.NT_BOOL
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_STEREO_SWAP_EYES
    octane_pin_name = "stereoSwitchEyes"
    octane_pin_type = consts.PinType.PT_BOOL
    octane_pin_index = 26
    octane_socket_type = consts.SocketType.ST_BOOL
    default_value: BoolProperty(default=False, update=OctaneBaseSocket.update_node_tree, description="当立体图像模式显示两眼时，交换左眼和右眼的位置")
    octane_hide_value = False
    octane_min_version = 3030000
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneLeftFilter(OctaneBaseSocket):
    bl_idname = "OctaneLeftFilter"
    bl_label = "左眼滤镜"
    color = consts.OctanePinColor.
    octane_label_name = "左眼滤镜"
    octane_default_node_type = consts.NodeType.NT_TEX_RGB
    octane_default_node_name = "OctaneRGB"
    octane_pin_id = consts.PinID.P_LEFT_FILTER
    octane_pin_name = "leftFilter"
    octane_pin_type = consts.PinType.PT_TEXTURE
    octane_pin_index = 27
    octane_socket_type = consts.SocketType.ST_RGB
    default_value: FloatVectorProperty(default=(1.000000, 0.000000, 0.812000), update=OctaneBaseSocket.update_node_tree, description="左眼滤镜的颜色", min=0.000000, max=1.000000, soft_min=0.000000, soft_max=1.000000, subtype="COLOR", size=3)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneRightFilter(OctaneBaseSocket):
    bl_idname = "OctaneRightFilter"
    bl_label = "右眼滤镜"
    color = consts.OctanePinColor.
    octane_label_name = "右眼滤镜"
    octane_default_node_type = consts.NodeType.NT_TEX_RGB
    octane_default_node_name = "OctaneRGB"
    octane_pin_id = consts.PinID.P_RIGHT_FILTER
    octane_pin_name = "rightFilter"
    octane_pin_type = consts.PinType.PT_TEXTURE
    octane_pin_index = 28
    octane_socket_type = consts.SocketType.ST_RGB
    default_value: FloatVectorProperty(default=(0.000000, 1.000000, 0.188000), update=OctaneBaseSocket.update_node_tree, description="右眼滤镜的颜色", min=0.000000, max=1.000000, soft_min=0.000000, soft_max=1.000000, subtype="COLOR", size=3)
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 4294967295
    octane_deprecated = False


class OctaneStereo(OctaneBaseSocket):
    bl_idname = "OctaneStereo"
    bl_label = "[Deprecated]双色立体图像"
    color = consts.OctanePinColor.
    octane_label_name = "[Deprecated]双色立体图像"
    octane_default_node_type = consts.NodeType.NT_BOOL
    octane_default_node_name = "Octane"
    octane_pin_id = consts.PinID.P_STEREO
    octane_pin_name = "stereo"
    octane_pin_type = consts.PinType.PT_BOOL
    octane_pin_index = 29
    octane_socket_type = consts.SocketType.ST_BOOL
    default_value: BoolProperty(default=False, update=OctaneBaseSocket.update_node_tree, description="(已作废)如果开启，将会渲染出一张色差立体图像视图")
    octane_hide_value = False
    octane_min_version = 0
    octane_end_version = 2000004
    octane_deprecated = True


class OctaneGroupPhysicalCameraParameters(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupPhysicalCameraParameters"
    bl_label = "[OctaneGroupTitle]Physical camera parameters"
    octane_label_name = "[OctaneGroupTitle]Physical camera parameters"
    octane_group_sockets: StringProperty(name="Group Sockets", default="传感器宽度;焦距;F值;")


class OctaneGroupViewingAngle(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupViewingAngle"
    bl_label = "[OctaneGroupTitle]Viewing angle"
    octane_label_name = "[OctaneGroupTitle]Viewing angle"
    octane_group_sockets: StringProperty(name="Group Sockets", default="视野;视图尺寸;扭曲;镜头偏移;透视校正;像素宽高比;")


class OctaneGroupClipping(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupClipping"
    bl_label = "[OctaneGroupTitle]Clipping"
    octane_label_name = "[OctaneGroupTitle]Clipping"
    octane_group_sockets: StringProperty(name="Group Sockets", default="近裁剪面深度;远裁剪面深度;")


class OctaneGroupDepthOfField(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupDepthOfField"
    bl_label = "[OctaneGroupTitle]Depth of field"
    octane_label_name = "[OctaneGroupTitle]Depth of field"
    octane_group_sockets: StringProperty(name="Group Sockets", default="自动对焦;焦深;光圈;光圈宽高比;光圈边缘;散景边数;散景旋转;散景圆润度;")


class OctaneGroupPosition(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupPosition"
    bl_label = "[OctaneGroupTitle]Position"
    octane_label_name = "[OctaneGroupTitle]Position"
    octane_group_sockets: StringProperty(name="Group Sockets", default="位置;目标;上向量;")


class OctaneGroupStereo(OctaneGroupTitleSocket):
    bl_idname = "OctaneGroupStereo"
    bl_label = "[OctaneGroupTitle]Stereo"
    octane_label_name = "[OctaneGroupTitle]Stereo"
    octane_group_sockets: StringProperty(name="Group Sockets", default="立体图像输出;立体图像模式;眼距;左右眼交换;左眼滤镜;右眼滤镜;")


class Octane(bpy.types.Node, OctaneBaseNode):
    bl_idname = "Octane"
    bl_label = "薄透镜相机"
    bl_width_default = 200
    octane_label_name = "薄透镜相机"
    octane_render_pass_id = -1
    octane_render_pass_name = ""
    octane_render_pass_short_name = ""
    octane_render_pass_description = ""
    octane_render_pass_sub_type_name = ""
    octane_socket_class_list = [OctaneOrthographic, OctaneGroupPhysicalCameraParameters, OctaneSensorWidth, OctaneFocalLength, OctaneFstop, OctaneGroupViewingAngle, OctaneFov, OctaneScale, OctaneDistortion, OctaneLensShift, OctanePerspectiveCorrection, OctanePixelAspectRatio, OctaneGroupClipping, OctaneNearClipDepth, OctaneFarClipDepth, OctaneGroupDepthOfField, OctaneAutofocus, OctaneFocalDepth, OctaneAperture, OctaneApertureAspectRatio, OctaneApertureEdge, OctaneBokehSidecount, OctaneBokehRotation, OctaneBokehRoundedness, OctaneGroupPosition, OctanePos, OctaneTarget, OctaneUp, OctaneGroupStereo, OctaneStereoOutput, OctaneStereoMode, OctaneStereodist, OctaneStereoSwitchEyes, OctaneLeftFilter, OctaneRightFilter, OctaneStereo, ]
    octane_min_version = 0
    octane_node_type = consts.NodeType.NT_CAM_THINLENS
    octane_socket_list = ["正投影", "传感器宽度", "焦距", "F值", "视野", "视图尺寸", "扭曲", "镜头偏移", "透视校正", "像素宽高比", "近裁剪面深度", "远裁剪面深度", "自动对焦", "焦深", "光圈", "光圈宽高比", "光圈边缘", "散景边数", "散景旋转", "散景圆润度", "位置", "目标", "上向量", "立体图像输出", "立体图像模式", "眼距", "左右眼交换", "左眼滤镜", "右眼滤镜", "[Deprecated]双色立体图像", ]
    octane_attribute_list = ["a_load_initial_state", "a_save_initial_state", ]
    octane_attribute_config = {"a_load_initial_state": [consts.AttributeID.A_LOAD_INITIAL_STATE, "loadInitialState", consts.AttributeType.AT_BOOL], "a_save_initial_state": [consts.AttributeID.A_SAVE_INITIAL_STATE, "saveInitialState", consts.AttributeType.AT_BOOL], }
    octane_static_pin_count = 29
    octane_movable_input_count_attribute_id = consts.AttributeID.A_UNKNOWN

    octane_typed_texture_configurations = {}
    octane_typed_texture_modes = ()

    a_load_initial_state: BoolProperty(name="Load initial state", default=False, update=OctaneBaseNode.update_node_tree, description="如果开启，节点将被评估，相机将重置为先前保存的位置和方向。")
    a_save_initial_state: BoolProperty(name="Save initial state", default=True, update=OctaneBaseNode.update_node_tree, description="如果开启，节点将进行评估，当前的摄像机位置和方向将会被保存。")

    def init(self, context):  # noqa
        self.inputs.new("OctaneOrthographic", OctaneOrthographic.bl_label).init()
        self.inputs.new("OctaneGroupPhysicalCameraParameters", OctaneGroupPhysicalCameraParameters.bl_label).init()
        self.inputs.new("OctaneSensorWidth", OctaneSensorWidth.bl_label).init()
        self.inputs.new("OctaneFocalLength", OctaneFocalLength.bl_label).init()
        self.inputs.new("OctaneFstop", OctaneFstop.bl_label).init()
        self.inputs.new("OctaneGroupViewingAngle", OctaneGroupViewingAngle.bl_label).init()
        self.inputs.new("OctaneFov", OctaneFov.bl_label).init()
        self.inputs.new("OctaneScale", OctaneScale.bl_label).init()
        self.inputs.new("OctaneDistortion", OctaneDistortion.bl_label).init()
        self.inputs.new("OctaneLensShift", OctaneLensShift.bl_label).init()
        self.inputs.new("OctanePerspectiveCorrection", OctanePerspectiveCorrection.bl_label).init()
        self.inputs.new("OctanePixelAspectRatio", OctanePixelAspectRatio.bl_label).init()
        self.inputs.new("OctaneGroupClipping", OctaneGroupClipping.bl_label).init()
        self.inputs.new("OctaneNearClipDepth", OctaneNearClipDepth.bl_label).init()
        self.inputs.new("OctaneFarClipDepth", OctaneFarClipDepth.bl_label).init()
        self.inputs.new("OctaneGroupDepthOfField", OctaneGroupDepthOfField.bl_label).init()
        self.inputs.new("OctaneAutofocus", OctaneAutofocus.bl_label).init()
        self.inputs.new("OctaneFocalDepth", OctaneFocalDepth.bl_label).init()
        self.inputs.new("OctaneAperture", OctaneAperture.bl_label).init()
        self.inputs.new("OctaneApertureAspectRatio", OctaneApertureAspectRatio.bl_label).init()
        self.inputs.new("OctaneApertureEdge", OctaneApertureEdge.bl_label).init()
        self.inputs.new("OctaneBokehSidecount", OctaneBokehSidecount.bl_label).init()
        self.inputs.new("OctaneBokehRotation", OctaneBokehRotation.bl_label).init()
        self.inputs.new("OctaneBokehRoundedness", OctaneBokehRoundedness.bl_label).init()
        self.inputs.new("OctaneGroupPosition", OctaneGroupPosition.bl_label).init()
        self.inputs.new("OctanePos", OctanePos.bl_label).init()
        self.inputs.new("OctaneTarget", OctaneTarget.bl_label).init()
        self.inputs.new("OctaneUp", OctaneUp.bl_label).init()
        self.inputs.new("OctaneGroupStereo", OctaneGroupStereo.bl_label).init()
        self.inputs.new("OctaneStereoOutput", OctaneStereoOutput.bl_label).init()
        self.inputs.new("OctaneStereoMode", OctaneStereoMode.bl_label).init()
        self.inputs.new("OctaneStereodist", OctaneStereodist.bl_label).init()
        self.inputs.new("OctaneStereoSwitchEyes", OctaneStereoSwitchEyes.bl_label).init()
        self.inputs.new("OctaneLeftFilter", OctaneLeftFilter.bl_label).init()
        self.inputs.new("OctaneRightFilter", OctaneRightFilter.bl_label).init()
        self.inputs.new("OctaneStereo", OctaneStereo.bl_label).init()
        self.outputs.new("OctaneSocket", "照相机输出").init()

    @classmethod
    def poll(cls, node_tree):
        return OctaneBaseNode.poll(node_tree)


_CLASSES = [
    OctaneOrthographic,
    OctaneSensorWidth,
    OctaneFocalLength,
    OctaneFstop,
    OctaneFov,
    OctaneScale,
    OctaneDistortion,
    OctaneLensShift,
    OctanePerspectiveCorrection,
    OctanePixelAspectRatio,
    OctaneNearClipDepth,
    OctaneFarClipDepth,
    OctaneAutofocus,
    OctaneFocalDepth,
    OctaneAperture,
    OctaneApertureAspectRatio,
    OctaneApertureEdge,
    OctaneBokehSidecount,
    OctaneBokehRotation,
    OctaneBokehRoundedness,
    OctanePos,
    OctaneTarget,
    OctaneUp,
    OctaneStereoOutput,
    OctaneStereoMode,
    OctaneStereodist,
    OctaneStereoSwitchEyes,
    OctaneLeftFilter,
    OctaneRightFilter,
    OctaneStereo,
    OctaneGroupPhysicalCameraParameters,
    OctaneGroupViewingAngle,
    OctaneGroupClipping,
    OctaneGroupDepthOfField,
    OctaneGroupPosition,
    OctaneGroupStereo,
    Octane,
]


_SOCKET_INTERFACE_CLASSES = []


def register():
    utility.octane_register_class(_CLASSES)
    utility.octane_register_interface_class(_CLASSES, _SOCKET_INTERFACE_CLASSES)


def unregister():
    utility.octane_unregister_interface_class(_SOCKET_INTERFACE_CLASSES)
    utility.octane_unregister_class(reversed(_CLASSES))

# END OCTANE GENERATED CODE BLOCK #
