oscillode/blender_maxwell/node_trees/maxwell_sim_nodes/nodes/definitions/mediums.py

89 lines
2.3 KiB
Python
Raw Normal View History

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,
]