33import gdsfactory as gf
44import meep as mp
55import numpy as np
6- from kfactory import LayerEnum
7- from typing import cast
8- import shapely
9- from gdsfactory .pdk import get_layer_stack , get_layer , get_layer_name
10- from gdsfactory .technology import LayerStack
11- from gdsfactory .technology import DerivedLayer , LayerStack , LayerViews , LogicalLayer
6+
7+ from gdsfactory .pdk import get_layer_stack , get_layer
8+ from gdsfactory .technology import DerivedLayer , LayerStack , LogicalLayer
129from gdsfactory .typings import ComponentSpec , CrossSectionSpec , LayerSpecs
1310
14- from gplugins .common .utils .parse_layer_stack import order_layer_stack
1511from gplugins .gmeep .get_material import get_material
1612
1713
@@ -34,26 +30,21 @@ def get_meep_geometry_from_component(
3430 wavelength: in um.
3531 is_3d: renders in 3D.
3632 dispersive: add dispersion.
33+ exclude_layers: these layers are ignored during geometry creation.
3734 kwargs: settings.
3835 """
3936 component = gf .get_component (component = component , ** kwargs )
40- polygons_per_layer = component .get_polygons_points (merge = True )
41-
42-
4337 layer_stack = layer_stack or get_layer_stack ()
44-
45- layer_to_thickness = layer_stack .get_layer_to_thickness ()
46- layer_to_material = layer_stack .get_layer_to_material ()
47- layer_to_zmin = layer_stack .get_layer_to_zmin ()
48- layer_to_sidewall_angle = layer_stack .get_layer_to_sidewall_angle ()
4938 component_with_booleans = layer_stack .get_component_with_derived_layers (component )
39+ polygons_per_layer = component_with_booleans .get_polygons_points (merge = True )
5040
5141 geometry = []
52- exclude_layers = exclude_layers or []
53- layer_to_polygons = component_with_booleans . get_polygons_points ()
54-
55- # ordered_layer_stack_keys = order_layer_stack(layer_stack)[::-1 ]
42+ if exclude_layers is None :
43+ exclude_layers = []
44+ else :
45+ exclude_layers = [ get_layer ( l ) for l in exclude_layers ]
5646
47+ # TODO: currently ignores width_to_z, z_to_bias, bias, mesh_order of level
5748 for level in layer_stack .layers .values ():
5849 layer = level .layer
5950
@@ -66,45 +57,32 @@ def get_meep_geometry_from_component(
6657 layer_tuple = layer
6758 else :
6859 raise ValueError (f"Layer { layer !r} is not a DerivedLayer, LogicalLayer, or tuple" )
69-
7060 layer_index = int (get_layer (layer_tuple ))
7161
72- if layer_index in exclude_layers :
73- continue
74-
75- if layer_index not in polygons_per_layer :
62+ if layer_index in exclude_layers or layer_index not in polygons_per_layer :
7663 continue
7764
78- zmin = level .zmin
79- zmin_um = layer_to_zmin [layer ] if is_3d else 0
80- if zmin is not None :
81- has_polygons = True
82- polygons = polygons_per_layer [layer_index ]
83- height = level .thickness
84- for polygon in polygons :
85- p = shapely .geometry .Polygon (polygon )
86- vertices = [mp .Vector3 (p [0 ], p [1 ], zmin_um ) for p in polygon ]
87- material_name = layer_to_material [layer ]
88-
89- if material_name :
90- material = get_material (
91- name = material_name ,
92- dispersive = dispersive ,
93- material_name_to_meep = material_name_to_meep ,
94- wavelength = wavelength ,
95- )
96- geometry .append (
97- mp .Prism (
98- vertices = vertices ,
99- height = height ,
100- sidewall_angle = np .pi * layer_to_sidewall_angle [layer ] / 180
101- if is_3d
102- else 0 ,
103- material = material ,
104- # center=center
105- )
65+ zmin_um = level .zmin if is_3d else 0
66+ sw_angle = np .pi * level .sidewall_angle / 180 if is_3d else 0
67+ for polygon in polygons_per_layer [layer_index ]:
68+ vertices = [mp .Vector3 (p [0 ], p [1 ], zmin_um ) for p in polygon ]
69+ material_name = level .material
70+
71+ if material_name :
72+ material = get_material (
73+ name = material_name ,
74+ dispersive = dispersive ,
75+ material_name_to_meep = material_name_to_meep ,
76+ wavelength = wavelength ,
77+ )
78+ geometry .append (
79+ mp .Prism (
80+ vertices = vertices ,
81+ height = level .thickness ,
82+ sidewall_angle = sw_angle ,
83+ material = material ,
10684 )
107-
85+ )
10886 return geometry
10987
11088
0 commit comments