89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
|
from dataclasses import dataclass
|
||
|
import bpy
|
||
|
from .. import types, constants
|
||
|
|
||
|
####################
|
||
|
# - Utilities (to move out)
|
||
|
####################
|
||
|
def mk_set_preset(preset_dataclass):
|
||
|
def set_preset(self, context):
|
||
|
if self.preset in preset_dataclass.values:
|
||
|
for parameter, value in preset_dataclass.values.items():
|
||
|
self.inputs[parameter].default_value = value
|
||
|
|
||
|
return set_preset
|
||
|
|
||
|
|
||
|
####################
|
||
|
# - Medium: Sellmeier
|
||
|
####################
|
||
|
@dataclass
|
||
|
class _Presets_SellmeierMaxwellMediumNode:
|
||
|
descriptions = [
|
||
|
('BK7', "BK7 Glass", "Borosilicate crown glass (known as BK7)"),
|
||
|
('FUSED_SILICA', "Fused Silica", "Fused silica aka. SiO2"),
|
||
|
]
|
||
|
values = {
|
||
|
"BK7": {
|
||
|
"B1": 1.03961212,
|
||
|
"B2": 0.231792344,
|
||
|
"B3": 1.01046945,
|
||
|
"C1 (um^2)": 6.00069867e-3,
|
||
|
"C2 (um^2)": 2.00179144e-2,
|
||
|
"C3 (um^2)": 103.560653,
|
||
|
},
|
||
|
"FUSED_SILICA": {
|
||
|
"B1": 0.696166300,
|
||
|
"B2": 0.407942600,
|
||
|
"B3": 0.897479400,
|
||
|
"C1 (um^2)": 4.67914826e-3,
|
||
|
"C2 (um^2)": 1.35120631e-2,
|
||
|
"C3 (um^2)": 97.9340025,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
def mk_set_preset(self):
|
||
|
return mk_set_preset(self)
|
||
|
|
||
|
Presets_SellmeierMaxwellMediumNode = _Presets_SellmeierMaxwellMediumNode()
|
||
|
|
||
|
class SellmeierMaxwellMediumNode(types.MaxwellSimTreeNode, bpy.types.Node):
|
||
|
bl_idname = types.SellmeierMaxwellMediumNodeType
|
||
|
bl_label = "Sellmeier"
|
||
|
bl_icon = constants.tree_constants.ICON_SIM_MEDIUM
|
||
|
|
||
|
preset: bpy.props.EnumProperty(
|
||
|
name="Presets",
|
||
|
description="Select a preset",
|
||
|
items=Presets_SellmeierMaxwellMediumNode.descriptions,
|
||
|
default='BK7',
|
||
|
update=Presets_SellmeierMaxwellMediumNode.mk_set_preset(),
|
||
|
)
|
||
|
|
||
|
def init(self, context):
|
||
|
# Declare Node Inputs
|
||
|
self.inputs.new('NodeSocketFloat', "B1")
|
||
|
self.inputs.new('NodeSocketFloat', "B2")
|
||
|
self.inputs.new('NodeSocketFloat', "B3")
|
||
|
self.inputs.new('NodeSocketFloat', "C1 (um^2)")
|
||
|
self.inputs.new('NodeSocketFloat', "C2 (um^2)")
|
||
|
self.inputs.new('NodeSocketFloat', "C3 (um^2)")
|
||
|
|
||
|
# Declare Node Outputs
|
||
|
self.outputs.new(types.tree_types.MaxwellMediumSocketType, "Medium")
|
||
|
|
||
|
# Set Preset Values
|
||
|
Presets_SellmeierMaxwellMediumNode.mk_set_preset()(self, context)
|
||
|
|
||
|
def draw_buttons(self, context, layout):
|
||
|
layout.prop(self, 'sellmeier_presets', text="")
|
||
|
|
||
|
|
||
|
|
||
|
####################
|
||
|
# - Blender Registration
|
||
|
####################
|
||
|
BL_REGISTER = [
|
||
|
SellmeierMaxwellMediumNode,
|
||
|
]
|