feat: Registered all nodes.
Also added several features including dynamic sockets in nodes, abstracted units for sockets, and more.
parent
94c4ef4a73
commit
ce53997b4f
46
README.md
46
README.md
|
@ -9,28 +9,25 @@ Now that we can do all the cool things ex. presets and such, it's time to think
|
||||||
- Inputs
|
- Inputs
|
||||||
- Scene
|
- Scene
|
||||||
- Time
|
- Time
|
||||||
- Object Info
|
- Unit System
|
||||||
|
|
||||||
- Parameter: Sympy variables.
|
- Parameters: Sympy variables.
|
||||||
- *type* Parameter
|
- *type* Parameter
|
||||||
- Constant: Typed numbers.
|
- Constants: Typed numbers.
|
||||||
- Scientific Constant
|
- Scientific Constant
|
||||||
|
|
||||||
- *type* Constant
|
- *type* Constant
|
||||||
- Array
|
- Lists
|
||||||
- From File: Concatenate two arrays.
|
- *type* List Element
|
||||||
- *type* Array Union
|
|
||||||
- Element: Create a 1-element array, with a typed value.
|
|
||||||
- *type* Array Element
|
|
||||||
|
|
||||||
- File Data: Data from a file.
|
- File Data: Data from a file.
|
||||||
- *type* File Data
|
|
||||||
- Outputs
|
- Outputs
|
||||||
- Viewer
|
- Viewers
|
||||||
- Value Viewer: Live-monitoring.
|
- Value Viewer: Live-monitoring.
|
||||||
- Console Viewer: w/Button to Print Types
|
- Console Viewer: w/Button to Print Types
|
||||||
- Exporter
|
- Exporters
|
||||||
- JSON File Export: Compatible with any socket implementing `.as_json()`.
|
- JSON File Exporter: Compatible with any socket implementing `.as_json()`.
|
||||||
- Plot
|
- Plotters
|
||||||
- *various kinds of plotting? To Blender datablocks primarily, maybe*.
|
- *various kinds of plotting? To Blender datablocks primarily, maybe*.
|
||||||
|
|
||||||
- Sources
|
- Sources
|
||||||
|
@ -62,7 +59,6 @@ Now that we can do all the cool things ex. presets and such, it's time to think
|
||||||
- Library Medium
|
- Library Medium
|
||||||
- **NOTE**: Should provide an EnumProperty of materials with its own categorizations. It should provide another EnumProperty to choose the experiment. It should also be filterable by wavelength range, maybe also model info. Finally, a reference should be generated on use as text.
|
- **NOTE**: Should provide an EnumProperty of materials with its own categorizations. It should provide another EnumProperty to choose the experiment. It should also be filterable by wavelength range, maybe also model info. Finally, a reference should be generated on use as text.
|
||||||
|
|
||||||
- Linear Mediums
|
|
||||||
- PEC Medium
|
- PEC Medium
|
||||||
- Isotropic Medium
|
- Isotropic Medium
|
||||||
- Anisotropic Medium
|
- Anisotropic Medium
|
||||||
|
@ -124,15 +120,14 @@ Now that we can do all the cool things ex. presets and such, it's time to think
|
||||||
|
|
||||||
|
|
||||||
- Simulations
|
- Simulations
|
||||||
- FDTD Sim
|
|
||||||
|
|
||||||
- Grid Discretizations
|
|
||||||
- Sim Grid
|
- Sim Grid
|
||||||
- Grid Axis
|
- Sim Grid Axis
|
||||||
- Automatic Grid Axis
|
- Automatic Sim Grid Axis
|
||||||
- Manual Grid Axis
|
- Manual Sim Grid Axis
|
||||||
- Uniform Grid Axis
|
- Uniform Sim Grid Axis
|
||||||
- Data-Driven Grid Axis
|
- Array Sim Grid Axis
|
||||||
|
|
||||||
|
- FDTD Sim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,21 +135,23 @@ Now that we can do all the cool things ex. presets and such, it's time to think
|
||||||
- Math: Contains a dropdown for operation.
|
- Math: Contains a dropdown for operation.
|
||||||
- *type* Math: **Be careful about units :)**
|
- *type* Math: **Be careful about units :)**
|
||||||
- Operations
|
- Operations
|
||||||
- Array Operation
|
- List Operation
|
||||||
|
|
||||||
## Sockets
|
## Sockets
|
||||||
- basic
|
- basic
|
||||||
- Any
|
- Any
|
||||||
- FilePath
|
- FilePath
|
||||||
- Text
|
- Text
|
||||||
- math
|
- number
|
||||||
- IntegerNumber
|
- IntegerNumber
|
||||||
- RationalNumber
|
- RationalNumber
|
||||||
|
|
||||||
- RealNumber
|
- RealNumber
|
||||||
- ComplexNumber
|
- ComplexNumber
|
||||||
- RealNumberField
|
- RealNumberField
|
||||||
- ComplexNumberField
|
- ComplexNumberField
|
||||||
|
|
||||||
|
- vector
|
||||||
- Real2DVector
|
- Real2DVector
|
||||||
- Complex2DVector
|
- Complex2DVector
|
||||||
- Real2DVectorField
|
- Real2DVectorField
|
||||||
|
@ -185,7 +182,6 @@ Now that we can do all the cool things ex. presets and such, it's time to think
|
||||||
- PhysicalPolarization
|
- PhysicalPolarization
|
||||||
|
|
||||||
- PhysicalFrequency
|
- PhysicalFrequency
|
||||||
- PhysicalSpectralDomain
|
|
||||||
- PhysicalSpectralDistribution
|
- PhysicalSpectralDistribution
|
||||||
- blender
|
- blender
|
||||||
- BlenderObject
|
- BlenderObject
|
||||||
|
|
|
@ -72,10 +72,10 @@ def mk_node_categories(
|
||||||
# - Blender Registration
|
# - Blender Registration
|
||||||
####################
|
####################
|
||||||
BL_NODE_CATEGORIES = mk_node_categories(
|
BL_NODE_CATEGORIES = mk_node_categories(
|
||||||
contracts.NodeCategory.get_tree()["MAXWELL"]["SIM"],
|
contracts.NodeCategory.get_tree()["MAXWELLSIM"],
|
||||||
syllable_prefix = ["MAXWELL", "SIM"],
|
syllable_prefix = ["MAXWELLSIM"],
|
||||||
)
|
)
|
||||||
## TODO: refractor, this has a big code smell
|
## TODO: refactor, this has a big code smell
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
*DYNAMIC_SUBMENU_REGISTRATIONS
|
*DYNAMIC_SUBMENU_REGISTRATIONS
|
||||||
] ## Must be run after, right now.
|
] ## Must be run after, right now.
|
||||||
|
|
|
@ -3,12 +3,16 @@ import typing_extensions as pytypes_ext
|
||||||
import enum
|
import enum
|
||||||
|
|
||||||
import sympy as sp
|
import sympy as sp
|
||||||
|
|
||||||
|
sp.printing.str.StrPrinter._default_settings['abbrev'] = True
|
||||||
|
## When we str() a unit expression, use abbrevied units.
|
||||||
|
|
||||||
import sympy.physics.units as spu
|
import sympy.physics.units as spu
|
||||||
import pydantic as pyd
|
import pydantic as pyd
|
||||||
import bpy
|
import bpy
|
||||||
|
|
||||||
from ...utils.blender_type_enum import (
|
from ...utils.blender_type_enum import (
|
||||||
BlenderTypeEnum, append_cls_name_to_values
|
BlenderTypeEnum, append_cls_name_to_values, wrap_values_in_MT
|
||||||
)
|
)
|
||||||
|
|
||||||
####################
|
####################
|
||||||
|
@ -32,13 +36,6 @@ PresetID = pytypes_ext.Annotated[str, pyd.StringConstraints(
|
||||||
pattern=r'^[A-Z_]+$',
|
pattern=r'^[A-Z_]+$',
|
||||||
)]
|
)]
|
||||||
|
|
||||||
####################
|
|
||||||
# - Generic Types
|
|
||||||
####################
|
|
||||||
SocketReturnType = typ.TypeVar('SocketReturnType', covariant=True)
|
|
||||||
## - Covariance: If B subtypes A, then Container[B] subtypes Container[A].
|
|
||||||
## - This is absolutely what we want here.
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# - Sympy Expression Typing
|
# - Sympy Expression Typing
|
||||||
####################
|
####################
|
||||||
|
@ -79,71 +76,287 @@ class TreeType(BlenderTypeEnum):
|
||||||
####################
|
####################
|
||||||
@append_cls_name_to_values
|
@append_cls_name_to_values
|
||||||
class SocketType(BlenderTypeEnum):
|
class SocketType(BlenderTypeEnum):
|
||||||
|
# Base
|
||||||
Any = enum.auto()
|
Any = enum.auto()
|
||||||
Text = enum.auto()
|
Text = enum.auto()
|
||||||
FilePath = enum.auto()
|
FilePath = enum.auto()
|
||||||
|
|
||||||
|
# Number
|
||||||
|
IntegerNumber = enum.auto()
|
||||||
RationalNumber = enum.auto()
|
RationalNumber = enum.auto()
|
||||||
RealNumber = enum.auto()
|
RealNumber = enum.auto()
|
||||||
ComplexNumber = enum.auto()
|
ComplexNumber = enum.auto()
|
||||||
|
|
||||||
|
# Vector
|
||||||
|
Real2DVector = enum.auto()
|
||||||
|
Complex2DVector = enum.auto()
|
||||||
|
|
||||||
|
Real3DVector = enum.auto()
|
||||||
|
Complex3DVector = enum.auto()
|
||||||
|
|
||||||
|
# Physical
|
||||||
|
PhysicalTime = enum.auto()
|
||||||
|
|
||||||
|
PhysicalAngle = enum.auto()
|
||||||
|
|
||||||
PhysicalLength = enum.auto()
|
PhysicalLength = enum.auto()
|
||||||
PhysicalArea = enum.auto()
|
PhysicalArea = enum.auto()
|
||||||
|
PhysicalVolume = enum.auto()
|
||||||
|
|
||||||
|
PhysicalMass = enum.auto()
|
||||||
|
|
||||||
|
PhysicalSpeed = enum.auto()
|
||||||
|
PhysicalAccel = enum.auto()
|
||||||
|
PhysicalForce = enum.auto()
|
||||||
|
|
||||||
|
PhysicalPol = enum.auto()
|
||||||
|
|
||||||
|
PhysicalFreq = enum.auto()
|
||||||
|
PhysicalSpecPowerDist = enum.auto()
|
||||||
|
PhysicalSpecRelPermDist = enum.auto()
|
||||||
|
|
||||||
|
# Blender
|
||||||
|
BlenderObject = enum.auto()
|
||||||
|
BlenderCollection = enum.auto()
|
||||||
|
|
||||||
|
BlenderImage = enum.auto()
|
||||||
|
BlenderVolume = enum.auto()
|
||||||
|
|
||||||
|
BlenderGeoNodes = enum.auto()
|
||||||
|
BlenderText = enum.auto()
|
||||||
|
|
||||||
|
# Maxwell
|
||||||
MaxwellSource = enum.auto()
|
MaxwellSource = enum.auto()
|
||||||
|
MaxwellTemporalShape = enum.auto()
|
||||||
|
|
||||||
MaxwellMedium = enum.auto()
|
MaxwellMedium = enum.auto()
|
||||||
|
MaxwellMediumNonLinearity = enum.auto()
|
||||||
|
|
||||||
MaxwellStructure = enum.auto()
|
MaxwellStructure = enum.auto()
|
||||||
MaxwellBound = enum.auto()
|
|
||||||
|
MaxwellBoundBox = enum.auto()
|
||||||
|
MaxwellBoundFace = enum.auto()
|
||||||
|
|
||||||
|
MaxwellMonitor = enum.auto()
|
||||||
|
|
||||||
MaxwellFDTDSim = enum.auto()
|
MaxwellFDTDSim = enum.auto()
|
||||||
|
MaxwellSimGrid = enum.auto()
|
||||||
|
MaxwellSimGridAxis = enum.auto()
|
||||||
|
|
||||||
|
SocketType_to_units = {
|
||||||
|
SocketType.PhysicalTime: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalAngle: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalLength: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalArea: {
|
||||||
|
"default": "UM_SQ",
|
||||||
|
"values": {
|
||||||
|
"PM_SQ": spu.pm**2,
|
||||||
|
"A_SQ": spu.angstrom**2,
|
||||||
|
"NM_SQ": spu.nm**2,
|
||||||
|
"UM_SQ": spu.um**2,
|
||||||
|
"MM_SQ": spu.mm**2,
|
||||||
|
"CM_SQ": spu.cm**2,
|
||||||
|
"M_SQ": spu.m**2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalVolume: {
|
||||||
|
"default": "UM_CB",
|
||||||
|
"values": {
|
||||||
|
"PM_CB": spu.pm**3,
|
||||||
|
"A_CB": spu.angstrom**3,
|
||||||
|
"NM_CB": spu.nm**3,
|
||||||
|
"UM_CB": spu.um**3,
|
||||||
|
"MM_CB": spu.mm**3,
|
||||||
|
"CM_CB": spu.cm**3,
|
||||||
|
"M_CB": spu.m**3,
|
||||||
|
"ML": spu.milliliter,
|
||||||
|
"L": spu.liter,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalMass: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalSpeed: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalAccel: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalForce: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalPol: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
SocketType.PhysicalFreq: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalSpecPowerDist: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SocketType.PhysicalSpecRelPermDist: {
|
||||||
|
"default": "UM",
|
||||||
|
"values": {
|
||||||
|
"UM": spu.um,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
SocketType_to_color = {
|
||||||
|
SocketType.Any: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.Text: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.FilePath: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
# Mathematical
|
||||||
|
SocketType.IntegerNumber: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.RationalNumber: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.RealNumber: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.ComplexNumber: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.Real2DVector: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.Complex2DVector: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.Real3DVector: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.Complex3DVector: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
# Physical
|
||||||
|
SocketType.PhysicalTime: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalAngle: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalLength: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalArea: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalVolume: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalMass: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalSpeed: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalAccel: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalForce: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalPol: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.PhysicalFreq: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalSpecPowerDist: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.PhysicalSpecRelPermDist: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
# Blender
|
||||||
|
SocketType.BlenderObject: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.BlenderCollection: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.BlenderImage: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.BlenderVolume: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.BlenderGeoNodes: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.BlenderText: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
# Maxwell
|
||||||
|
SocketType.MaxwellSource: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.MaxwellTemporalShape: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.MaxwellMedium: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.MaxwellMediumNonLinearity: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.MaxwellStructure: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.MaxwellBoundBox: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.MaxwellBoundFace: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.MaxwellMonitor: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
|
||||||
|
SocketType.MaxwellFDTDSim: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.MaxwellSimGrid: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
SocketType.MaxwellSimGridAxis: (0.5, 0.5, 0.5, 1.0),
|
||||||
|
}
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# - Node Types
|
# - Node Types
|
||||||
####################
|
####################
|
||||||
@append_cls_name_to_values
|
@append_cls_name_to_values
|
||||||
class NodeType(BlenderTypeEnum):
|
class NodeType(BlenderTypeEnum):
|
||||||
|
KitchenSink = enum.auto()
|
||||||
|
|
||||||
# Inputs
|
# Inputs
|
||||||
|
## Inputs / Scene
|
||||||
Time = enum.auto()
|
Time = enum.auto()
|
||||||
ObjectInfo = enum.auto()
|
UnitSystem = enum.auto()
|
||||||
|
|
||||||
FloatParameter = enum.auto()
|
## Inputs / Parameters
|
||||||
ComplexParameter = enum.auto()
|
NumberParameter = enum.auto()
|
||||||
Vec3Parameter = enum.auto()
|
PhysicalParameter = enum.auto()
|
||||||
|
|
||||||
|
## Inputs / Constants
|
||||||
ScientificConstant = enum.auto()
|
ScientificConstant = enum.auto()
|
||||||
FloatConstant = enum.auto()
|
NumberConstant = enum.auto()
|
||||||
ComplexConstant = enum.auto()
|
PhysicalConstant = enum.auto()
|
||||||
Vec3Constant = enum.auto()
|
BlenderConstant = enum.auto()
|
||||||
|
|
||||||
FloatArrayElement = enum.auto()
|
## Inputs / Lists
|
||||||
ComplexArrayElement = enum.auto()
|
RealList = enum.auto()
|
||||||
Vec3ArrayElement = enum.auto()
|
ComplexList = enum.auto()
|
||||||
|
|
||||||
FloatDictElement = enum.auto()
|
## Inputs /
|
||||||
ComplexDictElement = enum.auto()
|
InputFile = enum.auto()
|
||||||
Vec3DictElement = enum.auto()
|
|
||||||
|
|
||||||
FloatField = enum.auto()
|
|
||||||
ComplexField = enum.auto()
|
|
||||||
Vec3Field = enum.auto()
|
|
||||||
|
|
||||||
# Outputs
|
# Outputs
|
||||||
|
## Outputs / Viewers
|
||||||
ValueViewer = enum.auto()
|
ValueViewer = enum.auto()
|
||||||
ConsoleViewer = enum.auto()
|
ConsoleViewer = enum.auto()
|
||||||
|
|
||||||
|
## Outputs / Exporters
|
||||||
JSONFileExporter = enum.auto()
|
JSONFileExporter = enum.auto()
|
||||||
|
|
||||||
# Viz
|
|
||||||
TemporalShapeViz = enum.auto()
|
|
||||||
SourceViz = enum.auto()
|
|
||||||
StructureViz = enum.auto()
|
|
||||||
BoundViz = enum.auto()
|
|
||||||
FDTDViz = enum.auto()
|
|
||||||
|
|
||||||
# Sources
|
# Sources
|
||||||
|
## Sources / Temporal Shapes
|
||||||
GaussianPulseTemporalShape = enum.auto()
|
GaussianPulseTemporalShape = enum.auto()
|
||||||
ContinuousWaveTemporalShape = enum.auto()
|
ContinuousWaveTemporalShape = enum.auto()
|
||||||
DataDrivenTemporalShape = enum.auto()
|
ListTemporalShape = enum.auto()
|
||||||
|
|
||||||
|
## Sources /
|
||||||
PointDipoleSource = enum.auto()
|
PointDipoleSource = enum.auto()
|
||||||
UniformCurrentSource = enum.auto()
|
UniformCurrentSource = enum.auto()
|
||||||
PlaneWaveSource = enum.auto()
|
PlaneWaveSource = enum.auto()
|
||||||
|
@ -169,124 +382,114 @@ class NodeType(BlenderTypeEnum):
|
||||||
DrudeLorentzMedium = enum.auto()
|
DrudeLorentzMedium = enum.auto()
|
||||||
DebyeMedium = enum.auto()
|
DebyeMedium = enum.auto()
|
||||||
|
|
||||||
|
## Mediums / Non-Linearities
|
||||||
AddNonLinearity = enum.auto()
|
AddNonLinearity = enum.auto()
|
||||||
ChiThreeSusceptibilityNonLinearity = enum.auto()
|
ChiThreeSusceptibilityNonLinearity = enum.auto()
|
||||||
TwoPhotonAbsorptionNonLinearity = enum.auto()
|
TwoPhotonAbsorptionNonLinearity = enum.auto()
|
||||||
KerrNonLinearity = enum.auto()
|
KerrNonLinearity = enum.auto()
|
||||||
|
|
||||||
# Structures
|
# Structures
|
||||||
TriMeshStructure = enum.auto()
|
ObjectStructure = enum.auto()
|
||||||
|
GeoNodesStructure = enum.auto()
|
||||||
|
ScriptedStructure = enum.auto()
|
||||||
|
|
||||||
|
## Structures / Primitives
|
||||||
BoxStructure = enum.auto()
|
BoxStructure = enum.auto()
|
||||||
SphereStructure = enum.auto()
|
SphereStructure = enum.auto()
|
||||||
CylinderStructure = enum.auto()
|
CylinderStructure = enum.auto()
|
||||||
|
|
||||||
GeoNodesStructure = enum.auto()
|
|
||||||
ScriptedStructure = enum.auto()
|
|
||||||
|
|
||||||
# Bounds
|
# Bounds
|
||||||
BoundBox = enum.auto()
|
BoundBox = enum.auto()
|
||||||
|
|
||||||
|
## Bounds / Bound Faces
|
||||||
PMLBoundFace = enum.auto()
|
PMLBoundFace = enum.auto()
|
||||||
PECBoundFace = enum.auto()
|
PECBoundFace = enum.auto()
|
||||||
|
PMCBoundFace = enum.auto()
|
||||||
|
|
||||||
BlochBoundFace = enum.auto()
|
BlochBoundFace = enum.auto()
|
||||||
PeriodicBoundFace = enum.auto()
|
PeriodicBoundFace = enum.auto()
|
||||||
AbsorbingBoundFace = enum.auto()
|
AbsorbingBoundFace = enum.auto()
|
||||||
|
|
||||||
|
|
||||||
# Monitors
|
# Monitors
|
||||||
EHFieldMonitor = enum.auto()
|
EHFieldMonitor = enum.auto()
|
||||||
FieldPowerFluxMonitor = enum.auto()
|
FieldPowerFluxMonitor = enum.auto()
|
||||||
EpsilonTensorMonitor = enum.auto()
|
EpsilonTensorMonitor = enum.auto()
|
||||||
DiffractionMonitor = enum.auto()
|
DiffractionMonitor = enum.auto()
|
||||||
|
|
||||||
|
## Monitors / Near-Field Projections
|
||||||
CartesianNearFieldProjectionMonitor = enum.auto()
|
CartesianNearFieldProjectionMonitor = enum.auto()
|
||||||
ObservationAngleNearFieldProjectionMonitor = enum.auto()
|
ObservationAngleNearFieldProjectionMonitor = enum.auto()
|
||||||
KSpaceNearFieldProjectionMonitor = enum.auto()
|
KSpaceNearFieldProjectionMonitor = enum.auto()
|
||||||
|
|
||||||
# Simulations
|
|
||||||
|
# Sims
|
||||||
|
SimGrid = enum.auto()
|
||||||
|
|
||||||
|
## Sims / Sim Grid Axis
|
||||||
|
AutomaticSimGridAxis = enum.auto()
|
||||||
|
ManualSimGridAxis = enum.auto()
|
||||||
|
UniformSimGridAxis = enum.auto()
|
||||||
|
ArraySimGridAxis = enum.auto()
|
||||||
|
|
||||||
|
## Sim /
|
||||||
FDTDSim = enum.auto()
|
FDTDSim = enum.auto()
|
||||||
|
|
||||||
SimulationGridDiscretization = enum.auto()
|
|
||||||
|
|
||||||
Automatic1DGridDiscretization = enum.auto()
|
|
||||||
Manual1DGridDiscretization = enum.auto()
|
|
||||||
Uniform1DGridDiscretization = enum.auto()
|
|
||||||
DataDriven1DGridDiscretization = enum.auto()
|
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
FloatMath = enum.auto()
|
Math = enum.auto()
|
||||||
ComplexMath = enum.auto()
|
|
||||||
Vec3Math = enum.auto()
|
|
||||||
|
|
||||||
FloatFieldMath = enum.auto()
|
## Utilities / Operations
|
||||||
ComplexFieldMath = enum.auto()
|
ArrayOperation = enum.auto()
|
||||||
Vec3FieldMath = enum.auto()
|
|
||||||
|
|
||||||
SpectralMath = enum.auto()
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# - Node Category Types
|
# - Node Category Types
|
||||||
####################
|
####################
|
||||||
|
@wrap_values_in_MT
|
||||||
class NodeCategory(BlenderTypeEnum):
|
class NodeCategory(BlenderTypeEnum):
|
||||||
MAXWELL_SIM = enum.auto()
|
MAXWELLSIM = enum.auto()
|
||||||
|
|
||||||
# Inputs/
|
# Inputs/
|
||||||
MAXWELL_SIM_INPUTS = enum.auto()
|
MAXWELLSIM_INPUTS = enum.auto()
|
||||||
MAXWELL_SIM_INPUTS_SCENE = enum.auto()
|
MAXWELLSIM_INPUTS_SCENE = enum.auto()
|
||||||
MAXWELL_SIM_INPUTS_PARAMETERS = enum.auto()
|
MAXWELLSIM_INPUTS_PARAMETERS = enum.auto()
|
||||||
MAXWELL_SIM_INPUTS_CONSTANTS = enum.auto()
|
MAXWELLSIM_INPUTS_CONSTANTS = enum.auto()
|
||||||
MAXWELL_SIM_INPUTS_ARRAY = enum.auto()
|
MAXWELLSIM_INPUTS_LISTS = enum.auto()
|
||||||
MAXWELL_SIM_INPUTS_ARRAY_ELEMENTS = enum.auto()
|
|
||||||
MAXWELL_SIM_INPUTS_ARRAY_UNIONS = enum.auto()
|
|
||||||
MAXWELL_SIM_INPUTS_DICTIONARY = enum.auto()
|
|
||||||
MAXWELL_SIM_INPUTS_DICTIONARY_ELEMENTS = enum.auto()
|
|
||||||
MAXWELL_SIM_INPUTS_DICTIONARY_UNIONS = enum.auto()
|
|
||||||
MAXWELL_SIM_INPUTS_FIELDS = enum.auto()
|
|
||||||
|
|
||||||
# Outputs/
|
# Outputs/
|
||||||
MAXWELL_SIM_OUTPUTS = enum.auto()
|
MAXWELLSIM_OUTPUTS = enum.auto()
|
||||||
MAXWELL_SIM_OUTPUTS_VIEWERS = enum.auto()
|
MAXWELLSIM_OUTPUTS_VIEWERS = enum.auto()
|
||||||
MAXWELL_SIM_OUTPUTS_EXPORTERS = enum.auto()
|
MAXWELLSIM_OUTPUTS_EXPORTERS = enum.auto()
|
||||||
|
MAXWELLSIM_OUTPUTS_PLOTTERS = enum.auto()
|
||||||
# Viz/
|
|
||||||
MAXWELL_SIM_VIZ = enum.auto()
|
|
||||||
|
|
||||||
# Sources/
|
# Sources/
|
||||||
MAXWELL_SIM_SOURCES = enum.auto()
|
MAXWELLSIM_SOURCES = enum.auto()
|
||||||
MAXWELL_SIM_SOURCES_TEMPORALSHAPES = enum.auto()
|
MAXWELLSIM_SOURCES_TEMPORALSHAPES = enum.auto()
|
||||||
MAXWELL_SIM_SOURCES_MODELLED = enum.auto()
|
|
||||||
MAXWELL_SIM_SOURCES_DATADRIVEN = enum.auto()
|
|
||||||
|
|
||||||
# Mediums/
|
# Mediums/
|
||||||
MAXWELL_SIM_MEDIUMS = enum.auto()
|
MAXWELLSIM_MEDIUMS = enum.auto()
|
||||||
MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS = enum.auto()
|
MAXWELLSIM_MEDIUMS_NONLINEARITIES = enum.auto()
|
||||||
MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS_DIRECT = enum.auto()
|
|
||||||
MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS_MODELLED = enum.auto()
|
|
||||||
MAXWELL_SIM_MEDIUMS_NONLINEARITIES = enum.auto()
|
|
||||||
|
|
||||||
# Structures/
|
# Structures/
|
||||||
MAXWELL_SIM_STRUCTURES = enum.auto()
|
MAXWELLSIM_STRUCTURES = enum.auto()
|
||||||
MAXWELL_SIM_STRUCTURES_PRIMITIES = enum.auto()
|
MAXWELLSIM_STRUCTURES_PRIMITIVES = enum.auto()
|
||||||
MAXWELL_SIM_STRUCTURES_GENERATED = enum.auto()
|
|
||||||
|
|
||||||
# Bounds/
|
# Bounds/
|
||||||
MAXWELL_SIM_BOUNDS = enum.auto()
|
MAXWELLSIM_BOUNDS = enum.auto()
|
||||||
MAXWELL_SIM_BOUNDS_BOUNDFACES = enum.auto()
|
MAXWELLSIM_BOUNDS_BOUNDFACES = enum.auto()
|
||||||
|
|
||||||
# Monitors/
|
# Monitors/
|
||||||
MAXWELL_SIM_MONITORS = enum.auto()
|
MAXWELLSIM_MONITORS = enum.auto()
|
||||||
MAXWELL_SIM_MONITORS_NEARFIELDPROJECTIONS = enum.auto()
|
MAXWELLSIM_MONITORS_NEARFIELDPROJECTIONS = enum.auto()
|
||||||
|
|
||||||
# Simulations/
|
# Simulations/
|
||||||
MAXWELL_SIM_SIMULATIONS = enum.auto()
|
MAXWELLSIM_SIMS = enum.auto()
|
||||||
MAXWELL_SIM_SIMULATIONS_DISCRETIZATIONS = enum.auto()
|
MAXWELLSIM_SIMGRIDAXES = enum.auto()
|
||||||
MAXWELL_SIM_SIMULATIONS_DISCRETIZATIONS_1DGRID = enum.auto()
|
|
||||||
|
|
||||||
# Utilities/
|
# Utilities/
|
||||||
MAXWELL_SIM_UTILITIES = enum.auto()
|
MAXWELLSIM_UTILITIES = enum.auto()
|
||||||
MAXWELL_SIM_UTILITIES_MATH = enum.auto()
|
MAXWELLSIM_UTILITIES_OPERATIONS = enum.auto()
|
||||||
MAXWELL_SIM_UTILITIES_FIELDMATH = enum.auto()
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_tree(cls):
|
def get_tree(cls):
|
||||||
|
@ -294,7 +497,7 @@ class NodeCategory(BlenderTypeEnum):
|
||||||
syllable_categories = [
|
syllable_categories = [
|
||||||
node_category.value.split("_")
|
node_category.value.split("_")
|
||||||
for node_category in cls
|
for node_category in cls
|
||||||
if node_category.value != "MAXWELL_SIM"
|
if node_category.value != "MAXWELLSIM"
|
||||||
]
|
]
|
||||||
|
|
||||||
category_tree = {}
|
category_tree = {}
|
||||||
|
@ -312,61 +515,45 @@ class NodeCategory(BlenderTypeEnum):
|
||||||
|
|
||||||
NodeCategory_to_category_label = {
|
NodeCategory_to_category_label = {
|
||||||
# Inputs/
|
# Inputs/
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS: "Inputs",
|
NodeCategory.MAXWELLSIM_INPUTS: "Inputs",
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_SCENE: "Scene",
|
NodeCategory.MAXWELLSIM_INPUTS_SCENE: "Scene",
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_PARAMETERS: "Parameters",
|
NodeCategory.MAXWELLSIM_INPUTS_PARAMETERS: "Parameters",
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_CONSTANTS: "Constants",
|
NodeCategory.MAXWELLSIM_INPUTS_CONSTANTS: "Constants",
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_ARRAY: "Array",
|
NodeCategory.MAXWELLSIM_INPUTS_LISTS: "Lists",
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_ARRAY_ELEMENTS: "Elements",
|
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_ARRAY_UNIONS: "Unions",
|
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_DICTIONARY: "Dictionary",
|
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_DICTIONARY_ELEMENTS: "Elements",
|
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_DICTIONARY_UNIONS: "Unions",
|
|
||||||
NodeCategory.MAXWELL_SIM_INPUTS_FIELDS: "Fields",
|
|
||||||
|
|
||||||
# Outputs/
|
# Outputs/
|
||||||
NodeCategory.MAXWELL_SIM_OUTPUTS: "Outputs",
|
NodeCategory.MAXWELLSIM_OUTPUTS: "Outputs",
|
||||||
NodeCategory.MAXWELL_SIM_OUTPUTS_VIEWERS: "Viewers",
|
NodeCategory.MAXWELLSIM_OUTPUTS_VIEWERS: "Viewers",
|
||||||
NodeCategory.MAXWELL_SIM_OUTPUTS_EXPORTERS: "Exporters",
|
NodeCategory.MAXWELLSIM_OUTPUTS_EXPORTERS: "Exporters",
|
||||||
|
NodeCategory.MAXWELLSIM_OUTPUTS_PLOTTERS: "Plotters",
|
||||||
# Viz/
|
|
||||||
NodeCategory.MAXWELL_SIM_VIZ: "Viz",
|
|
||||||
|
|
||||||
# Sources/
|
# Sources/
|
||||||
NodeCategory.MAXWELL_SIM_SOURCES: "Sources",
|
NodeCategory.MAXWELLSIM_SOURCES: "Sources",
|
||||||
NodeCategory.MAXWELL_SIM_SOURCES_TEMPORALSHAPES: "Temporal Shapes",
|
NodeCategory.MAXWELLSIM_SOURCES_TEMPORALSHAPES: "Temporal Shapes",
|
||||||
NodeCategory.MAXWELL_SIM_SOURCES_MODELLED: "Modelled",
|
|
||||||
NodeCategory.MAXWELL_SIM_SOURCES_DATADRIVEN: "Data-Driven",
|
|
||||||
|
|
||||||
# Mediums/
|
# Mediums/
|
||||||
NodeCategory.MAXWELL_SIM_MEDIUMS: "Mediums",
|
NodeCategory.MAXWELLSIM_MEDIUMS: "Mediums",
|
||||||
NodeCategory.MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS: "Linear Mediums",
|
NodeCategory.MAXWELLSIM_MEDIUMS_NONLINEARITIES: "Non-Linearities",
|
||||||
NodeCategory.MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS_DIRECT: "Direct",
|
|
||||||
NodeCategory.MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS_MODELLED: "Modelled",
|
|
||||||
NodeCategory.MAXWELL_SIM_MEDIUMS_NONLINEARITIES: "Non-Linearities",
|
|
||||||
|
|
||||||
# Structures/
|
# Structures/
|
||||||
NodeCategory.MAXWELL_SIM_STRUCTURES: "Structures",
|
NodeCategory.MAXWELLSIM_STRUCTURES: "Structures",
|
||||||
NodeCategory.MAXWELL_SIM_STRUCTURES_PRIMITIES: "Primitives",
|
NodeCategory.MAXWELLSIM_STRUCTURES_PRIMITIVES: "Primitives",
|
||||||
NodeCategory.MAXWELL_SIM_STRUCTURES_GENERATED: "Generated",
|
|
||||||
|
|
||||||
# Bounds/
|
# Bounds/
|
||||||
NodeCategory.MAXWELL_SIM_BOUNDS: "Bounds",
|
NodeCategory.MAXWELLSIM_BOUNDS: "Bounds",
|
||||||
NodeCategory.MAXWELL_SIM_BOUNDS_BOUNDFACES: "Bound Faces",
|
NodeCategory.MAXWELLSIM_BOUNDS_BOUNDFACES: "Bound Faces",
|
||||||
|
|
||||||
# Monitors/
|
# Monitors/
|
||||||
NodeCategory.MAXWELL_SIM_MONITORS: "Monitors",
|
NodeCategory.MAXWELLSIM_MONITORS: "Monitors",
|
||||||
NodeCategory.MAXWELL_SIM_MONITORS_NEARFIELDPROJECTIONS: "Near-Field Projections",
|
NodeCategory.MAXWELLSIM_MONITORS_NEARFIELDPROJECTIONS: "Near-Field Projections",
|
||||||
|
|
||||||
# Simulations/
|
# Simulations/
|
||||||
NodeCategory.MAXWELL_SIM_SIMULATIONS: "Simulations",
|
NodeCategory.MAXWELLSIM_SIMS: "Simulations",
|
||||||
NodeCategory.MAXWELL_SIM_SIMULATIONS_DISCRETIZATIONS: "Discretizations",
|
NodeCategory.MAXWELLSIM_SIMGRIDAXES: "Sim Grid Axes",
|
||||||
NodeCategory.MAXWELL_SIM_SIMULATIONS_DISCRETIZATIONS_1DGRID: "1D Grid Discretizations",
|
|
||||||
|
|
||||||
# Utilities/
|
# Utilities/
|
||||||
NodeCategory.MAXWELL_SIM_UTILITIES: "Utilities",
|
NodeCategory.MAXWELLSIM_UTILITIES: "Utilities",
|
||||||
NodeCategory.MAXWELL_SIM_UTILITIES_MATH: "Math",
|
NodeCategory.MAXWELLSIM_UTILITIES_OPERATIONS: "Operations",
|
||||||
NodeCategory.MAXWELL_SIM_UTILITIES_FIELDMATH: "Field Math",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -386,7 +573,11 @@ class PresetDef(pyd.BaseModel):
|
||||||
description: str
|
description: str
|
||||||
values: dict[SocketName, typ.Any]
|
values: dict[SocketName, typ.Any]
|
||||||
|
|
||||||
@typ.runtime_checkable
|
SocketReturnType = typ.TypeVar('SocketReturnType', covariant=True)
|
||||||
|
## - Covariance: If B subtypes A, then Container[B] subtypes Container[A].
|
||||||
|
## - This is absolutely what we want here.
|
||||||
|
|
||||||
|
#@typ.runtime_checkable
|
||||||
#class BLSocketProtocol(typ.Protocol):
|
#class BLSocketProtocol(typ.Protocol):
|
||||||
# socket_type: SocketType
|
# socket_type: SocketType
|
||||||
# socket_color: BlenderColorRGB
|
# socket_color: BlenderColorRGB
|
||||||
|
|
|
@ -1,23 +1,36 @@
|
||||||
|
from . import kitchen_sink
|
||||||
|
|
||||||
from . import inputs
|
from . import inputs
|
||||||
from . import outputs
|
from . import outputs
|
||||||
from . import sources
|
from . import sources
|
||||||
from . import mediums
|
from . import mediums
|
||||||
from . import simulations
|
|
||||||
from . import structures
|
from . import structures
|
||||||
|
from . import bounds
|
||||||
|
from . import monitors
|
||||||
|
from . import simulations
|
||||||
|
from . import utilities
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
|
*kitchen_sink.BL_REGISTER,
|
||||||
*inputs.BL_REGISTER,
|
*inputs.BL_REGISTER,
|
||||||
*outputs.BL_REGISTER,
|
*outputs.BL_REGISTER,
|
||||||
*mediums.BL_REGISTER,
|
|
||||||
*sources.BL_REGISTER,
|
*sources.BL_REGISTER,
|
||||||
*simulations.BL_REGISTER,
|
*mediums.BL_REGISTER,
|
||||||
*structures.BL_REGISTER,
|
*structures.BL_REGISTER,
|
||||||
|
*bounds.BL_REGISTER,
|
||||||
|
*monitors.BL_REGISTER,
|
||||||
|
*simulations.BL_REGISTER,
|
||||||
|
*utilities.BL_REGISTER,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
|
**kitchen_sink.BL_NODES,
|
||||||
**inputs.BL_NODES,
|
**inputs.BL_NODES,
|
||||||
**outputs.BL_NODES,
|
**outputs.BL_NODES,
|
||||||
**sources.BL_NODES,
|
**sources.BL_NODES,
|
||||||
**mediums.BL_NODES,
|
**mediums.BL_NODES,
|
||||||
**simulations.BL_NODES,
|
|
||||||
**structures.BL_NODES,
|
**structures.BL_NODES,
|
||||||
|
**bounds.BL_NODES,
|
||||||
|
**monitors.BL_NODES,
|
||||||
|
**simulations.BL_NODES,
|
||||||
|
**utilities.BL_NODES,
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,6 @@ class FuncOutputSocket(
|
||||||
# Define Factory Function & Decorator
|
# Define Factory Function & Decorator
|
||||||
def computes_output_socket(
|
def computes_output_socket(
|
||||||
output_socket_name: contracts.SocketName,
|
output_socket_name: contracts.SocketName,
|
||||||
return_type: typ.Generic[contracts.SocketReturnType],
|
|
||||||
) -> typ.Callable[
|
) -> typ.Callable[
|
||||||
[ComputeOutputSocketFunc[contracts.SocketReturnType]],
|
[ComputeOutputSocketFunc[contracts.SocketReturnType]],
|
||||||
FuncOutputSocket[contracts.SocketReturnType],
|
FuncOutputSocket[contracts.SocketReturnType],
|
||||||
|
@ -114,7 +113,7 @@ def computes_output_socket(
|
||||||
####################
|
####################
|
||||||
# - Node Callbacks
|
# - Node Callbacks
|
||||||
####################
|
####################
|
||||||
def sync_selected_preset(node: contracts.NodeTypeProtocol) -> None:
|
def sync_selected_preset(node) -> None:
|
||||||
"""Whenever a preset is set in a NodeTypeProtocol, this function
|
"""Whenever a preset is set in a NodeTypeProtocol, this function
|
||||||
should be called to overwrite the `default_value`s of the input sockets
|
should be called to overwrite the `default_value`s of the input sockets
|
||||||
with the actual preset values.
|
with the actual preset values.
|
||||||
|
@ -123,6 +122,7 @@ def sync_selected_preset(node: contracts.NodeTypeProtocol) -> None:
|
||||||
node: The node for which input socket `default_value`s should be
|
node: The node for which input socket `default_value`s should be
|
||||||
set to the values defined within the currently selected preset.
|
set to the values defined within the currently selected preset.
|
||||||
"""
|
"""
|
||||||
|
if hasattr(node, "preset") and hasattr(node, "presets"):
|
||||||
if node.preset is None:
|
if node.preset is None:
|
||||||
msg = f"Node {node} has no preset EnumProperty"
|
msg = f"Node {node} has no preset EnumProperty"
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
@ -153,6 +153,41 @@ class MaxwellSimTreeNode(bpy.types.Node):
|
||||||
# Set bl_idname
|
# Set bl_idname
|
||||||
cls.bl_idname = cls.node_type.value
|
cls.bl_idname = cls.node_type.value
|
||||||
|
|
||||||
|
# Declare Node Property: 'preset' EnumProperty
|
||||||
|
if hasattr(cls, "input_socket_sets") or hasattr(cls, "output_socket_sets"):
|
||||||
|
if not hasattr(cls, "input_socket_sets"):
|
||||||
|
cls.input_socket_sets = {}
|
||||||
|
if not hasattr(cls, "output_socket_sets"):
|
||||||
|
cls.output_socket_sets = {}
|
||||||
|
|
||||||
|
socket_set_keys = [
|
||||||
|
input_socket_set_key
|
||||||
|
for input_socket_set_key in cls.input_socket_sets.keys()
|
||||||
|
]
|
||||||
|
socket_set_keys += [
|
||||||
|
output_socket_set_key
|
||||||
|
for output_socket_set_key in cls.output_socket_sets.keys()
|
||||||
|
if output_socket_set_key not in socket_set_keys
|
||||||
|
]
|
||||||
|
|
||||||
|
cls.__annotations__["socket_set"] = bpy.props.EnumProperty(
|
||||||
|
name="",
|
||||||
|
description="Select a node socket configuration",
|
||||||
|
items=[
|
||||||
|
(
|
||||||
|
socket_set_key,
|
||||||
|
socket_set_key.capitalize(),
|
||||||
|
socket_set_key.capitalize(),
|
||||||
|
)
|
||||||
|
for socket_set_key in socket_set_keys
|
||||||
|
],
|
||||||
|
default=socket_set_keys[0],
|
||||||
|
update=(lambda self, context: self._update_socket()),
|
||||||
|
)
|
||||||
|
cls.__annotations__["socket_set_previous"] = bpy.props.StringProperty(
|
||||||
|
default=socket_set_keys[0]
|
||||||
|
)
|
||||||
|
|
||||||
# Declare Node Property: 'preset' EnumProperty
|
# Declare Node Property: 'preset' EnumProperty
|
||||||
if hasattr(cls, "presets"):
|
if hasattr(cls, "presets"):
|
||||||
first_preset = list(cls.presets.keys())[0]
|
first_preset = list(cls.presets.keys())[0]
|
||||||
|
@ -213,6 +248,28 @@ class MaxwellSimTreeNode(bpy.types.Node):
|
||||||
]
|
]
|
||||||
socket_def.init(bl_socket)
|
socket_def.init(bl_socket)
|
||||||
|
|
||||||
|
# Initialize Dynamic Sockets
|
||||||
|
if hasattr(self, "socket_set"):
|
||||||
|
if self.socket_set in self.input_socket_sets:
|
||||||
|
for socket_name, socket_def in self.input_socket_sets[self.socket_set].items():
|
||||||
|
self.inputs.new(
|
||||||
|
socket_def.socket_type.value,
|
||||||
|
socket_def.label,
|
||||||
|
)
|
||||||
|
|
||||||
|
bl_socket = self.inputs[socket_def.label]
|
||||||
|
socket_def.init(bl_socket)
|
||||||
|
|
||||||
|
if self.socket_set in self.output_socket_sets:
|
||||||
|
for socket_name, socket_def in self.output_socket_sets[self.socket_set].items():
|
||||||
|
self.outputs.new(
|
||||||
|
socket_def.socket_type.value,
|
||||||
|
socket_def.label,
|
||||||
|
)
|
||||||
|
|
||||||
|
bl_socket = self.outputs[socket_def.label]
|
||||||
|
socket_def.init(bl_socket)
|
||||||
|
|
||||||
# Sync Default Preset to Input Socket Values
|
# Sync Default Preset to Input Socket Values
|
||||||
if self.preset is not None:
|
if self.preset is not None:
|
||||||
sync_selected_preset(self)
|
sync_selected_preset(self)
|
||||||
|
@ -235,6 +292,47 @@ class MaxwellSimTreeNode(bpy.types.Node):
|
||||||
|
|
||||||
return ntree.bl_idname == contracts.TreeType.MaxwellSim.value
|
return ntree.bl_idname == contracts.TreeType.MaxwellSim.value
|
||||||
|
|
||||||
|
def _update_socket(self):
|
||||||
|
if not hasattr(self, "socket_set"):
|
||||||
|
raise ValueError("no socket")
|
||||||
|
|
||||||
|
if self.socket_set == self.socket_set_previous: return
|
||||||
|
|
||||||
|
# Delete Old Sockets
|
||||||
|
if self.socket_set_previous in self.input_socket_sets:
|
||||||
|
for socket_name, socket_def in self.input_socket_sets[self.socket_set_previous].items():
|
||||||
|
bl_socket = self.inputs[socket_def.label]
|
||||||
|
self.inputs.remove(bl_socket)
|
||||||
|
|
||||||
|
if self.socket_set_previous in self.output_socket_sets:
|
||||||
|
for socket_name, socket_def in self.output_socket_sets[self.socket_set_previous].items():
|
||||||
|
bl_socket = self.outputs[socket_def.label]
|
||||||
|
self.outputs.remove(bl_socket)
|
||||||
|
|
||||||
|
# Add New Sockets
|
||||||
|
if self.socket_set in self.input_socket_sets:
|
||||||
|
for socket_name, socket_def in self.input_socket_sets[self.socket_set].items():
|
||||||
|
self.inputs.new(
|
||||||
|
socket_def.socket_type.value,
|
||||||
|
socket_def.label,
|
||||||
|
)
|
||||||
|
|
||||||
|
bl_socket = self.inputs[socket_def.label]
|
||||||
|
socket_def.init(bl_socket)
|
||||||
|
|
||||||
|
if self.socket_set in self.output_socket_sets:
|
||||||
|
for socket_name, socket_def in self.output_socket_sets[self.socket_set].items():
|
||||||
|
self.outputs.new(
|
||||||
|
socket_def.socket_type.value,
|
||||||
|
socket_def.label,
|
||||||
|
)
|
||||||
|
|
||||||
|
bl_socket = self.outputs[socket_def.label]
|
||||||
|
socket_def.init(bl_socket)
|
||||||
|
|
||||||
|
# Update "Previous"
|
||||||
|
self.socket_set_previous = self.socket_set
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# - UI Methods
|
# - UI Methods
|
||||||
####################
|
####################
|
||||||
|
@ -250,6 +348,9 @@ class MaxwellSimTreeNode(bpy.types.Node):
|
||||||
if self.preset is not None:
|
if self.preset is not None:
|
||||||
layout.prop(self, "preset", text="")
|
layout.prop(self, "preset", text="")
|
||||||
|
|
||||||
|
if hasattr(self, "socket_set"):
|
||||||
|
layout.prop(self, "socket_set", text="")
|
||||||
|
|
||||||
if hasattr(self, "draw_operators"):
|
if hasattr(self, "draw_operators"):
|
||||||
self.draw_operators(context, layout)
|
self.draw_operators(context, layout)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import bound_box
|
||||||
|
from . import bound_faces
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*bound_box.BL_REGISTER,
|
||||||
|
*bound_faces.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**bound_box.BL_NODES,
|
||||||
|
**bound_faces.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,26 @@
|
||||||
|
from . import pml_bound_face
|
||||||
|
from . import pec_bound_face
|
||||||
|
from . import pmc_bound_face
|
||||||
|
|
||||||
|
from . import bloch_bound_face
|
||||||
|
from . import periodic_bound_face
|
||||||
|
from . import absorbing_bound_face
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*pml_bound_face.BL_REGISTER,
|
||||||
|
*pec_bound_face.BL_REGISTER,
|
||||||
|
*pmc_bound_face.BL_REGISTER,
|
||||||
|
|
||||||
|
*bloch_bound_face.BL_REGISTER,
|
||||||
|
*periodic_bound_face.BL_REGISTER,
|
||||||
|
*absorbing_bound_face.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**pml_bound_face.BL_NODES,
|
||||||
|
**pec_bound_face.BL_NODES,
|
||||||
|
**pmc_bound_face.BL_NODES,
|
||||||
|
|
||||||
|
**bloch_bound_face.BL_NODES,
|
||||||
|
**periodic_bound_face.BL_NODES,
|
||||||
|
**absorbing_bound_face.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -1,8 +1,17 @@
|
||||||
from . import constants
|
from . import constants
|
||||||
|
from . import lists
|
||||||
|
from . import parameters
|
||||||
|
from . import scene
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
|
*scene.BL_REGISTER,
|
||||||
*constants.BL_REGISTER,
|
*constants.BL_REGISTER,
|
||||||
|
*parameters.BL_REGISTER,
|
||||||
|
*lists.BL_REGISTER,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
|
**scene.BL_NODES,
|
||||||
**constants.BL_NODES,
|
**constants.BL_NODES,
|
||||||
|
**parameters.BL_NODES,
|
||||||
|
**lists.BL_NODES,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,17 @@
|
||||||
from . import complex_constant
|
from . import number_constant
|
||||||
|
from . import blender_constant
|
||||||
|
from . import physical_constant
|
||||||
|
from . import scientific_constant
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
*complex_constant.BL_REGISTER,
|
*scientific_constant.BL_REGISTER,
|
||||||
|
*number_constant.BL_REGISTER,
|
||||||
|
*blender_constant.BL_REGISTER,
|
||||||
|
*physical_constant.BL_REGISTER,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
**complex_constant.BL_NODES,
|
**scientific_constant.BL_NODES,
|
||||||
|
**number_constant.BL_NODES,
|
||||||
|
**blender_constant.BL_NODES,
|
||||||
|
**physical_constant.BL_NODES,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -5,27 +5,27 @@ from .... import contracts
|
||||||
from .... import sockets
|
from .... import sockets
|
||||||
from ... import base
|
from ... import base
|
||||||
|
|
||||||
class ComplexConstantNode(base.MaxwellSimTreeNode):
|
class NumberConstantNode(base.MaxwellSimTreeNode):
|
||||||
node_type = contracts.NodeType.ComplexConstant
|
node_type = contracts.NodeType.NumberConstant
|
||||||
|
|
||||||
bl_label = "Complex Constant"
|
bl_label = "Numerical Constant"
|
||||||
#bl_icon = constants.ICON_SIM_INPUT
|
#bl_icon = constants.ICON_SIM_INPUT
|
||||||
|
|
||||||
input_sockets = {
|
input_sockets = {
|
||||||
"value": sockets.ComplexNumberSocketDef(
|
"value": sockets.ComplexNumberSocketDef(
|
||||||
label="Complex",
|
label="Complex",
|
||||||
),
|
), ## TODO: Dynamic number socket!
|
||||||
}
|
}
|
||||||
output_sockets = {
|
output_sockets = {
|
||||||
"value": sockets.ComplexNumberSocketDef(
|
"value": sockets.ComplexNumberSocketDef(
|
||||||
label="Complex",
|
label="Complex",
|
||||||
),
|
), ## TODO: Dynamic number socket!
|
||||||
}
|
}
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# - Callbacks
|
# - Callbacks
|
||||||
####################
|
####################
|
||||||
@base.computes_output_socket("value", sp.Expr)
|
@base.computes_output_socket("value")
|
||||||
def compute_value(self: contracts.NodeTypeProtocol) -> sp.Expr:
|
def compute_value(self: contracts.NodeTypeProtocol) -> sp.Expr:
|
||||||
return self.compute_input("value")
|
return self.compute_input("value")
|
||||||
|
|
||||||
|
@ -35,10 +35,10 @@ class ComplexConstantNode(base.MaxwellSimTreeNode):
|
||||||
# - Blender Registration
|
# - Blender Registration
|
||||||
####################
|
####################
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
ComplexConstantNode,
|
NumberConstantNode,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
contracts.NodeType.ComplexConstant: (
|
contracts.NodeType.NumberConstant: (
|
||||||
contracts.NodeCategory.MAXWELL_SIM_INPUTS_CONSTANTS
|
contracts.NodeCategory.MAXWELLSIM_INPUTS_CONSTANTS
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import number_list
|
||||||
|
from . import physical_list
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*number_list.BL_REGISTER,
|
||||||
|
*physical_list.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**number_list.BL_NODES,
|
||||||
|
**physical_list.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import number_parameter
|
||||||
|
from . import physical_parameter
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*number_parameter.BL_REGISTER,
|
||||||
|
*physical_parameter.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**number_parameter.BL_NODES,
|
||||||
|
**physical_parameter.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import time
|
||||||
|
from . import unit_system
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*time.BL_REGISTER,
|
||||||
|
*unit_system.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**time.BL_NODES,
|
||||||
|
**unit_system.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,90 @@
|
||||||
|
import tidy3d as td
|
||||||
|
import sympy as sp
|
||||||
|
import sympy.physics.units as spu
|
||||||
|
|
||||||
|
from .. import contracts
|
||||||
|
from .. import sockets
|
||||||
|
from . import base
|
||||||
|
|
||||||
|
class KitchenSinkNode(base.MaxwellSimTreeNode):
|
||||||
|
node_type = contracts.NodeType.KitchenSink
|
||||||
|
|
||||||
|
bl_label = "Kitchen Sink"
|
||||||
|
#bl_icon = ...
|
||||||
|
|
||||||
|
####################
|
||||||
|
# - Sockets
|
||||||
|
####################
|
||||||
|
input_sockets = {}
|
||||||
|
input_socket_sets = {
|
||||||
|
"basic": {
|
||||||
|
"basic_any": sockets.AnySocketDef(label="Any"),
|
||||||
|
"basic_filepath": sockets.FilePathSocketDef(label="FilePath"),
|
||||||
|
"basic_text": sockets.TextSocketDef(label="Text"),
|
||||||
|
},
|
||||||
|
"number": {
|
||||||
|
"number_integer": sockets.IntegerNumberSocketDef(label="IntegerNumber"),
|
||||||
|
"number_rational": sockets.RationalNumberSocketDef(label="RationalNumber"),
|
||||||
|
"number_real": sockets.RealNumberSocketDef(label="RealNumber"),
|
||||||
|
"number_complex": sockets.ComplexNumberSocketDef(label="ComplexNumber"),
|
||||||
|
},
|
||||||
|
"vector": {
|
||||||
|
"vector_real2dvector": sockets.Real2DVectorSocketDef(label="Real2DVector"),
|
||||||
|
"vector_complex2dvector": sockets.Complex2DVectorSocketDef(label="Complex2DVector"),
|
||||||
|
"vector_real3dvector": sockets.Real3DVectorSocketDef(label="Real3DVector"),
|
||||||
|
"vector_complex3dvector": sockets.Complex3DVectorSocketDef(label="Complex3DVector"),
|
||||||
|
},
|
||||||
|
"physical": {
|
||||||
|
"physical_time": sockets.PhysicalTimeSocketDef(label="PhysicalTime"),
|
||||||
|
"physical_angle": sockets.PhysicalAngleSocketDef(label="PhysicalAngle"),
|
||||||
|
"physical_length": sockets.PhysicalLengthSocketDef(label="PhysicalLength"),
|
||||||
|
"physical_area": sockets.PhysicalAreaSocketDef(label="PhysicalArea"),
|
||||||
|
"physical_volume": sockets.PhysicalVolumeSocketDef(label="PhysicalVolume"),
|
||||||
|
"physical_mass": sockets.PhysicalMassSocketDef(label="PhysicalMass"),
|
||||||
|
"physical_speed": sockets.PhysicalSpeedSocketDef(label="PhysicalSpeed"),
|
||||||
|
"physical_accel": sockets.PhysicalAccelSocketDef(label="PhysicalAccel"),
|
||||||
|
"physical_force": sockets.PhysicalForceSocketDef(label="PhysicalForce"),
|
||||||
|
"physical_pol": sockets.PhysicalPolSocketDef(label="PhysicalPol"),
|
||||||
|
"physical_freq": sockets.PhysicalFreqSocketDef(label="PhysicalFreq"),
|
||||||
|
"physical_spec_power_dist": sockets.PhysicalSpecPowerDistSocketDef(label="PhysicalSpecPowerDist"),
|
||||||
|
"physical_spec_rel_perm_dist": sockets.PhysicalSpecRelPermDistSocketDef(label="PhysicalSpecRelPermDist"),
|
||||||
|
},
|
||||||
|
"blender": {
|
||||||
|
"blender_object": sockets.BlenderObjectSocketDef(label="BlenderObject"),
|
||||||
|
"blender_collection": sockets.BlenderCollectionSocketDef(label="BlenderCollection"),
|
||||||
|
"blender_image": sockets.BlenderImageSocketDef(label="BlenderImage"),
|
||||||
|
"blender_volume": sockets.BlenderVolumeSocketDef(label="BlenderVolume"),
|
||||||
|
"blender_geonodes": sockets.BlenderGeoNodesSocketDef(label="BlenderGeoNodes"),
|
||||||
|
"blender_text": sockets.BlenderTextSocketDef(label="BlenderText"),
|
||||||
|
},
|
||||||
|
"maxwell": {
|
||||||
|
"maxwell_source": sockets.MaxwellSourceSocketDef(label="MaxwellSource"),
|
||||||
|
"maxwell_temporal_shape": sockets.MaxwellTemporalShapeSocketDef(label="MaxwellTemporalShape"),
|
||||||
|
"maxwell_medium": sockets.MaxwellMediumSocketDef(label="MaxwellMedium"),
|
||||||
|
#"maxwell_medium_nonlinearity": sockets.MaxwellMediumNonLinearitySocketDef(label="MaxwellMediumNonLinearity"),
|
||||||
|
"maxwell_structure": sockets.MaxwellMediumSocketDef(label="MaxwellMedium"),
|
||||||
|
"maxwell_bound_box": sockets.MaxwellBoundBoxSocketDef(label="MaxwellBoundBox"),
|
||||||
|
"maxwell_bound_face": sockets.MaxwellBoundFaceSocketDef(label="MaxwellBoundFace"),
|
||||||
|
"maxwell_monitor": sockets.MaxwellMonitorSocketDef(label="MaxwellMonitor"),
|
||||||
|
"maxwell_monitor": sockets.MaxwellFDTDSimSocketDef(label="MaxwellFDTDSim"),
|
||||||
|
"maxwell_monitor": sockets.MaxwellSimGridSocketDef(label="MaxwellSimGrid"),
|
||||||
|
"maxwell_monitor": sockets.MaxwellSimGridAxisSocketDef(label="MaxwellSimGridAxis"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
output_sockets = {}
|
||||||
|
output_socket_sets = input_socket_sets
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = [
|
||||||
|
KitchenSinkNode,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
contracts.NodeType.KitchenSink: (
|
||||||
|
contracts.NodeCategory.MAXWELLSIM_INPUTS
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,8 +1,47 @@
|
||||||
from . import linear_mediums
|
from . import library_medium
|
||||||
|
|
||||||
|
from . import pec_medium
|
||||||
|
from . import isotropic_medium
|
||||||
|
from . import anisotropic_medium
|
||||||
|
|
||||||
|
from . import triple_sellmeier_medium
|
||||||
|
from . import sellmeier_medium
|
||||||
|
from . import pole_residue_medium
|
||||||
|
from . import drude_medium
|
||||||
|
from . import drude_lorentz_medium
|
||||||
|
from . import debye_medium
|
||||||
|
|
||||||
|
from . import non_linearities
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
*linear_mediums.BL_REGISTER,
|
*library_medium.BL_REGISTER,
|
||||||
|
|
||||||
|
*pec_medium.BL_REGISTER,
|
||||||
|
*isotropic_medium.BL_REGISTER,
|
||||||
|
*anisotropic_medium.BL_REGISTER,
|
||||||
|
|
||||||
|
*triple_sellmeier_medium.BL_REGISTER,
|
||||||
|
*sellmeier_medium.BL_REGISTER,
|
||||||
|
*pole_residue_medium.BL_REGISTER,
|
||||||
|
*drude_medium.BL_REGISTER,
|
||||||
|
*drude_lorentz_medium.BL_REGISTER,
|
||||||
|
*debye_medium.BL_REGISTER,
|
||||||
|
|
||||||
|
*non_linearities.BL_REGISTER,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
**linear_mediums.BL_NODES,
|
**library_medium.BL_NODES,
|
||||||
|
|
||||||
|
**pec_medium.BL_NODES,
|
||||||
|
**isotropic_medium.BL_NODES,
|
||||||
|
**anisotropic_medium.BL_NODES,
|
||||||
|
|
||||||
|
**triple_sellmeier_medium.BL_NODES,
|
||||||
|
**sellmeier_medium.BL_NODES,
|
||||||
|
**pole_residue_medium.BL_NODES,
|
||||||
|
**drude_medium.BL_NODES,
|
||||||
|
**drude_lorentz_medium.BL_NODES,
|
||||||
|
**debye_medium.BL_NODES,
|
||||||
|
|
||||||
|
**non_linearities.BL_NODES,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -1,8 +0,0 @@
|
||||||
from . import triple_sellmeier_medium
|
|
||||||
|
|
||||||
BL_REGISTER = [
|
|
||||||
*triple_sellmeier_medium.BL_REGISTER,
|
|
||||||
]
|
|
||||||
BL_NODES = {
|
|
||||||
**triple_sellmeier_medium.BL_NODES,
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
import bpy
|
|
||||||
import gpu
|
|
||||||
import gpu_extras
|
|
||||||
import sympy.physics.units as spu
|
|
||||||
from .... import types, constants
|
|
||||||
from ... import node_base
|
|
||||||
|
|
||||||
class TripleSellmeierMediumNode(node_base.MaxwellSimTreeNode):
|
|
||||||
bl_idname = types.NodeType.TripleSellmeierMedium.value
|
|
||||||
bl_label = "Triple Sellmeier Medium"
|
|
||||||
bl_icon = constants.ICON_SIM_MEDIUM
|
|
||||||
|
|
||||||
input_sockets = {
|
|
||||||
"B1": (types.SocketType.RealNumber, "B1"),
|
|
||||||
"B2": (types.SocketType.RealNumber, "B2"),
|
|
||||||
"B3": (types.SocketType.RealNumber, "B3"),
|
|
||||||
"C1": (types.SocketType.DimenArea, "C1"),
|
|
||||||
"C2": (types.SocketType.DimenArea, "C2"),
|
|
||||||
"C3": (types.SocketType.DimenArea, "C3"),
|
|
||||||
}
|
|
||||||
output_sockets = {
|
|
||||||
"medium": (types.SocketType.MaxwellMedium, "Medium")
|
|
||||||
}
|
|
||||||
|
|
||||||
input_unit_defaults = {
|
|
||||||
"B1": None,
|
|
||||||
"B2": None,
|
|
||||||
"B3": None,
|
|
||||||
"C1": spu.um**2,
|
|
||||||
"C2": spu.um**2,
|
|
||||||
"C3": spu.um**2,
|
|
||||||
}
|
|
||||||
socket_presets = {
|
|
||||||
"_description": [
|
|
||||||
('BK7', "BK7 Glass", "Borosilicate crown glass (known as BK7)"),
|
|
||||||
('FUSED_SILICA', "Fused Silica", "Fused silica aka. SiO2"),
|
|
||||||
],
|
|
||||||
"_default": "BK7",
|
|
||||||
"_values": {
|
|
||||||
"BK7": {
|
|
||||||
"B1": 1.03961212,
|
|
||||||
"B2": 0.231792344,
|
|
||||||
"B3": 1.01046945,
|
|
||||||
"C1": 6.00069867e-3 * spu.um**2,
|
|
||||||
"C2": 2.00179144e-2 * spu.um**2,
|
|
||||||
"C3": 103.560653 * spu.um**2,
|
|
||||||
},
|
|
||||||
"FUSED_SILICA": {
|
|
||||||
"B1": 0.696166300,
|
|
||||||
"B2": 0.407942600,
|
|
||||||
"B3": 0.897479400,
|
|
||||||
"C1": 4.67914826e-3 * spu.um**2,
|
|
||||||
"C2": 1.35120631e-2 * spu.um**2,
|
|
||||||
"C3": 97.9340025 * spu.um**2,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
####################
|
|
||||||
# - Properties
|
|
||||||
####################
|
|
||||||
def draw_buttons(self, context, layout):
|
|
||||||
layout.prop(self, 'preset', text="")
|
|
||||||
|
|
||||||
####################
|
|
||||||
# - Callbacks
|
|
||||||
####################
|
|
||||||
@node_base.output_socket_cb("medium")
|
|
||||||
def compute_medium(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
|
||||||
# - Blender Registration
|
|
||||||
####################
|
|
||||||
BL_REGISTER = [
|
|
||||||
TripleSellmeierMediumNode,
|
|
||||||
]
|
|
||||||
BL_NODES = {
|
|
||||||
types.NodeType.TripleSellmeierMedium: (
|
|
||||||
types.NodeCategory.MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
from . import add_non_linearity
|
||||||
|
from . import chi_3_susceptibility_non_linearity
|
||||||
|
from . import kerr_non_linearity
|
||||||
|
from . import two_photon_absorption_non_linearity
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*add_non_linearity.BL_REGISTER,
|
||||||
|
*chi_3_susceptibility_non_linearity.BL_REGISTER,
|
||||||
|
*kerr_non_linearity.BL_REGISTER,
|
||||||
|
*two_photon_absorption_non_linearity.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**add_non_linearity.BL_NODES,
|
||||||
|
**chi_3_susceptibility_non_linearity.BL_NODES,
|
||||||
|
**kerr_non_linearity.BL_NODES,
|
||||||
|
**two_photon_absorption_non_linearity.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -2,9 +2,9 @@ import tidy3d as td
|
||||||
import sympy as sp
|
import sympy as sp
|
||||||
import sympy.physics.units as spu
|
import sympy.physics.units as spu
|
||||||
|
|
||||||
from .... import contracts
|
from ... import contracts
|
||||||
from .... import sockets
|
from ... import sockets
|
||||||
from ... import base
|
from .. import base
|
||||||
|
|
||||||
class TripleSellmeierMediumNode(base.MaxwellSimTreeNode):
|
class TripleSellmeierMediumNode(base.MaxwellSimTreeNode):
|
||||||
node_type = contracts.NodeType.TripleSellmeierMedium
|
node_type = contracts.NodeType.TripleSellmeierMedium
|
||||||
|
@ -23,7 +23,7 @@ class TripleSellmeierMediumNode(base.MaxwellSimTreeNode):
|
||||||
} | {
|
} | {
|
||||||
f"C{i}": sockets.PhysicalAreaSocketDef(
|
f"C{i}": sockets.PhysicalAreaSocketDef(
|
||||||
label=f"C{i}",
|
label=f"C{i}",
|
||||||
default_unit="UM_SQ"
|
default_unit=spu.um**2
|
||||||
)
|
)
|
||||||
for i in [1, 2, 3]
|
for i in [1, 2, 3]
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ class TripleSellmeierMediumNode(base.MaxwellSimTreeNode):
|
||||||
####################
|
####################
|
||||||
# - Output Socket Computation
|
# - Output Socket Computation
|
||||||
####################
|
####################
|
||||||
@base.computes_output_socket("medium", td.Sellmeier)
|
@base.computes_output_socket("medium")
|
||||||
def compute_medium(self: contracts.NodeTypeProtocol) -> td.Sellmeier:
|
def compute_medium(self: contracts.NodeTypeProtocol) -> td.Sellmeier:
|
||||||
## Retrieval
|
## Retrieval
|
||||||
#B1 = self.compute_input("B1")
|
#B1 = self.compute_input("B1")
|
||||||
|
@ -96,6 +96,6 @@ BL_REGISTER = [
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
contracts.NodeType.TripleSellmeierMedium: (
|
contracts.NodeType.TripleSellmeierMedium: (
|
||||||
contracts.NodeCategory.MAXWELL_SIM_MEDIUMS_LINEARMEDIUMS
|
contracts.NodeCategory.MAXWELLSIM_MEDIUMS
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
from . import eh_field_monitor
|
||||||
|
from . import field_power_flux_monitor
|
||||||
|
from . import epsilon_tensor_monitor
|
||||||
|
from . import diffraction_monitor
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*eh_field_monitor.BL_REGISTER,
|
||||||
|
*field_power_flux_monitor.BL_REGISTER,
|
||||||
|
*epsilon_tensor_monitor.BL_REGISTER,
|
||||||
|
*diffraction_monitor.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**eh_field_monitor.BL_NODES,
|
||||||
|
**field_power_flux_monitor.BL_NODES,
|
||||||
|
**epsilon_tensor_monitor.BL_NODES,
|
||||||
|
**diffraction_monitor.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
from . import viewers
|
||||||
from . import exporters
|
from . import exporters
|
||||||
|
from . import plotters
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
*exporters.BL_REGISTER,
|
*exporters.BL_REGISTER,
|
||||||
|
|
|
@ -106,6 +106,6 @@ BL_REGISTER = [
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
contracts.NodeType.JSONFileExporter: (
|
contracts.NodeType.JSONFileExporter: (
|
||||||
contracts.NodeCategory.MAXWELL_SIM_OUTPUTS_EXPORTERS
|
contracts.NodeCategory.MAXWELLSIM_OUTPUTS_EXPORTERS
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,11 @@
|
||||||
|
from . import value_viewer
|
||||||
|
from . import console_viewer
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*value_viewer.BL_REGISTER,
|
||||||
|
*console_viewer.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**value_viewer.BL_NODES,
|
||||||
|
**console_viewer.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
from . import fdtd_simulation
|
from . import sim_grid
|
||||||
|
from . import sim_grid_axes
|
||||||
|
|
||||||
|
from . import fdtd_sim
|
||||||
|
|
||||||
BL_REGISTER = [
|
BL_REGISTER = [
|
||||||
*fdtd_simulation.BL_REGISTER,
|
*sim_grid.BL_REGISTER,
|
||||||
|
*sim_grid_axes.BL_REGISTER,
|
||||||
|
*fdtd_sim.BL_REGISTER,
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
**fdtd_simulation.BL_NODES,
|
**sim_grid.BL_NODES,
|
||||||
|
**sim_grid_axes.BL_NODES,
|
||||||
|
**fdtd_sim.BL_NODES,
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ class FDTDSimNode(base.MaxwellSimTreeNode):
|
||||||
"structure": sockets.MaxwellStructureSocketDef(
|
"structure": sockets.MaxwellStructureSocketDef(
|
||||||
label="Structure",
|
label="Structure",
|
||||||
),
|
),
|
||||||
"bound": sockets.MaxwellBoundSocketDef(
|
"bound": sockets.MaxwellBoundBoxSocketDef(
|
||||||
label="Bound",
|
label="Bound",
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ class FDTDSimNode(base.MaxwellSimTreeNode):
|
||||||
####################
|
####################
|
||||||
# - Output Socket Computation
|
# - Output Socket Computation
|
||||||
####################
|
####################
|
||||||
@base.computes_output_socket("fdtd_sim", td.Sellmeier)
|
@base.computes_output_socket("fdtd_sim")
|
||||||
def compute_simulation(self: contracts.NodeTypeProtocol) -> td.Simulation:
|
def compute_simulation(self: contracts.NodeTypeProtocol) -> td.Simulation:
|
||||||
run_time = self.compute_input("run_time")
|
run_time = self.compute_input("run_time")
|
||||||
ambient_medium = self.compute_input("ambient_medium")
|
ambient_medium = self.compute_input("ambient_medium")
|
||||||
|
@ -87,6 +87,6 @@ BL_REGISTER = [
|
||||||
]
|
]
|
||||||
BL_NODES = {
|
BL_NODES = {
|
||||||
contracts.NodeType.FDTDSim: (
|
contracts.NodeType.FDTDSim: (
|
||||||
contracts.NodeCategory.MAXWELL_SIM_SIMULATIONS
|
contracts.NodeCategory.MAXWELLSIM_SIMS
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
|
@ -0,0 +1,17 @@
|
||||||
|
from . import automatic_sim_grid_axis
|
||||||
|
from . import manual_sim_grid_axis
|
||||||
|
from . import uniform_sim_grid_axis
|
||||||
|
from . import array_sim_grid_axis
|
||||||
|
|
||||||
|
BL_REGISTER = [
|
||||||
|
*automatic_sim_grid_axis.BL_REGISTER,
|
||||||
|
*manual_sim_grid_axis.BL_REGISTER,
|
||||||
|
*uniform_sim_grid_axis.BL_REGISTER,
|
||||||
|
*array_sim_grid_axis.BL_REGISTER,
|
||||||
|
]
|
||||||
|
BL_NODES = {
|
||||||
|
**automatic_sim_grid_axis.BL_NODES,
|
||||||
|
**manual_sim_grid_axis.BL_NODES,
|
||||||
|
**uniform_sim_grid_axis.BL_NODES,
|
||||||
|
**array_sim_grid_axis.BL_NODES,
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
####################
|
||||||
|
# - Blender Registration
|
||||||
|
####################
|
||||||
|
BL_REGISTER = []
|
||||||
|
BL_NODES = {}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue