tidy3d.plugins.polyslab.ComplexPolySlab#
- class ComplexPolySlab[source]#
- Bases: - ComplexPolySlabBase- Interface for dividing a complex polyslab where self-intersecting polygon can occur during extrusion. - Parameters:
- axis (Literal[0, 1, 2] = 2) β Specifies dimension of the planar axis (0,1,2) -> (x,y,z). 
- sidewall_angle (ConstrainedFloatValue = 0.0) β [units = rad]. Angle of the sidewall. - sidewall_angle=0(default) specifies a vertical wall;- 0<sidewall_angle<np.pi/2specifies a shrinking cross section along the- axisdirection; and- -np.pi/2<sidewall_angle<0specifies an expanding cross section along the- axisdirection.
- reference_plane (Literal['bottom', 'middle', 'top'] = middle) β The position of the plane where the supplied cross section are defined. The plane is perpendicular to the - axis. The plane is located at the- bottom,- middle, or- topof the geometry with respect to the axis. E.g. if- axis=1,- bottomrefers to the negative side of the y-axis, and- toprefers to the positive side of the y-axis.
- slab_bounds (Tuple[float, float]) β [units = um]. Minimum and maximum positions of the slab along axis dimension. 
- dilation (float = 0.0) β [units = um]. Dilation of the supplied polygon by shifting each edge along its normal outwards direction by a distance; a negative value corresponds to erosion. 
- vertices (ArrayLike[dtype=float, ndim=2]) β [units = um]. List of (d1, d2) defining the 2 dimensional positions of the polygon face vertices at the - reference_plane. The index of dimension should be in the ascending order: e.g. if the slab normal axis is- axis=y, the coordinate of the vertices will be in (x, z)
 
 - Example - >>> vertices = ((0, 0), (1, 0), (1, 1), (0, 1), (0, 0.9), (0, 0.11)) >>> p = ComplexPolySlab(vertices=vertices, axis=2, slab_bounds=(0, 1), sidewall_angle=0.785) >>> # To obtain the divided polyslabs, there are two approaches: >>> # 1) a list of divided polyslabs >>> geo_list = p.sub_polyslabs >>> # 2) geometry group containing the divided polyslabs >>> geo_group = p.geometry_group >>> # Or directly obtain the structure with a user-specified medium >>> mat = td.Medium(permittivity=2) >>> structure = p.to_structure(mat) - Note - This version is limited to neighboring vertex-vertex crossing type of self-intersecting events. Extension to cover all types of self-intersecting events is expected in the future. - The algorithm is as follows (for the convenience of illustration, letβs consider the reference plane to lie at the bottom of the polyslab), - 1. Starting from the reference plane, find out the critical extrusion distance for the first vertices degeneracy event when marching towards the top of the polyslab; - 2. Construct a sub-polyslab whose base is the polygon at the reference plane and height to be the critical extrusion distance; - 3. At the critical extrusion distance, constructing a new polygon that keeps only one of the degenerate vertices; - 4. Set the reference plane to the position of the new polygon, and repeating 1-3 to construct sub-polyslabs until reaching the top of the polyslab, or all vertices collapsed into a 1D curve or a 0D point. - Attributes - Methods - to_structure(medium)- Construct a structure containing a user-specified medium and a GeometryGroup made of all the divided PolySlabs from this object. - to_structure(medium)[source]#
- Construct a structure containing a user-specified medium and a GeometryGroup made of all the divided PolySlabs from this object. - Parameters:
- medium ( - MediumType) β Medium for the complex polyslab.
- Returns:
- The structure containing all divided polyslabs made of a user-specified medium. 
- Return type:
 
 - __hash__()#
- Hash method.