Skip to content

Commit 7eca779

Browse files
committed
Version 0.5.12
* New parameter: relative_point_list for MAKE_COMPONENT function. * New function: get_point_list() for customized components.
1 parent 28984c2 commit 7eca779

File tree

3 files changed

+54
-3
lines changed

3 files changed

+54
-3
lines changed

history.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,8 @@
242242
### Version 0.5.11 (Nov 4, 2024)
243243
* New functions: add_port, reset_ports_source and get_port_transmission for FDTDSimulation.
244244
* Add precision parameter for inversion operations.
245-
* New function: remove_other_cells for Cell.
245+
* New function: remove_other_cells for Cell.
246+
247+
### Version 0.5.12 (Dec 5, 2024)
248+
* New parameter: relative_point_list for MAKE_COMPONENT function.
249+
* New function: get_point_list() for customized components.

splayout/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "0.5.11"
1+
__version__ = "0.5.12"
22

33
## Submodules
44
from . import utils

splayout/components/selfdefinecomponent.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from ..utils.utils import *
2+
import numpy as np
23

34
## global parameters
45
SelfDefineCount = -1
56
SelfDefineComponent_cell_list = []
67

7-
def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0),relative_end_point=None,relative_input_point=None,relative_through_point=None,relative_drop_point=None,relative_add_point=None,initial_relative_position = RIGHT):
8+
def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0), relative_point_list=None, relative_end_point=None,
9+
relative_input_point=None,relative_through_point=None,relative_drop_point=None,
10+
relative_add_point=None,initial_relative_position = RIGHT):
811
"""
912
Make an self-defined Class with another gdsii file.
1013
@@ -16,6 +19,8 @@ def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0),relative
1619
Name of the cell (default: the filename).
1720
relative_start_point : Point
1821
The start point in the file that contains your component (can be missing).
22+
relative_point_list : List of Point
23+
List of points that contains your component (can be missing).
1924
relative_end_point : Point
2025
The end point in the file that contains your component (can be missing).
2126
relative_input_point : Point
@@ -65,6 +70,22 @@ def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0),relative
6570
SelfDefineCount_local = SelfDefineCount
6671

6772
relative_start_point = tuple_to_point(relative_start_point)
73+
74+
if (type(relative_point_list) == np.ndarray):
75+
relative_point_list = relative_point_list.tolist()
76+
point_list = []
77+
for item in relative_point_list:
78+
if type(item) == Point:
79+
point_list.append(item)
80+
elif type(item) == tuple:
81+
point_list.append(Point(item[0], item[1]))
82+
elif type(item) == list:
83+
point_list.append(Point(item[0], item[1]))
84+
elif type(item) == np.ndarray:
85+
point_list.append(Point(item[0], item[1]))
86+
else:
87+
raise Exception("relative_point_list wrong type input!")
88+
6889
relative_end_point = tuple_to_point(relative_end_point)
6990
relative_input_point =tuple_to_point(relative_input_point)
7091
relative_through_point =tuple_to_point(relative_through_point)
@@ -101,6 +122,26 @@ def __init__(self, start_point, relative_position=RIGHT):
101122
raise Exception("Wrong relative position!")
102123
else:
103124
self.start_point_for_return = None
125+
if not relative_point_list is None:
126+
self.point_list_for_return = []
127+
for item in point_list:
128+
relative_point_transfer = item
129+
if (self.rotate_radian == RIGHT):
130+
point_for_return = self.start_point + relative_point_transfer
131+
elif (self.rotate_radian == UP):
132+
point_for_return = self.start_point + Point(-relative_point_transfer.y,
133+
relative_point_transfer.x)
134+
elif (self.rotate_radian == LEFT):
135+
point_for_return = self.start_point + Point(-relative_point_transfer.x,
136+
- relative_point_transfer.y)
137+
elif (self.rotate_radian == DOWN):
138+
point_for_return = self.start_point + Point(relative_point_transfer.y,
139+
-relative_point_transfer.x)
140+
else:
141+
raise Exception("Wrong relative position!")
142+
self.point_list_for_return.append(point_for_return)
143+
else:
144+
self.point_list_for_return = None
104145
if (type(relative_end_point) != type(None)):
105146
relative_end_point_transfer = relative_end_point
106147
if (self.rotate_radian == RIGHT):
@@ -194,6 +235,12 @@ def draw(self,cell):
194235
def get_start_point(self):
195236
return self.start_point_for_return
196237

238+
def get_point_list(self):
239+
if self.point_list_for_return is None:
240+
raise Exception("You did not define a relative point list for your component!")
241+
else:
242+
return self.point_list_for_return
243+
197244
def get_end_point(self):
198245
if (type(self.end_point_for_return) == type(None)):
199246
raise Exception("You did not define a relative end point for your component!")

0 commit comments

Comments
 (0)