1
1
from ..utils .utils import *
2
+ import numpy as np
2
3
3
4
## global parameters
4
5
SelfDefineCount = - 1
5
6
SelfDefineComponent_cell_list = []
6
7
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 ):
8
11
"""
9
12
Make an self-defined Class with another gdsii file.
10
13
@@ -16,6 +19,8 @@ def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0),relative
16
19
Name of the cell (default: the filename).
17
20
relative_start_point : Point
18
21
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).
19
24
relative_end_point : Point
20
25
The end point in the file that contains your component (can be missing).
21
26
relative_input_point : Point
@@ -65,6 +70,22 @@ def MAKE_COMPONENT(filename,rename=None,relative_start_point=Point(0,0),relative
65
70
SelfDefineCount_local = SelfDefineCount
66
71
67
72
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
+
68
89
relative_end_point = tuple_to_point (relative_end_point )
69
90
relative_input_point = tuple_to_point (relative_input_point )
70
91
relative_through_point = tuple_to_point (relative_through_point )
@@ -101,6 +122,26 @@ def __init__(self, start_point, relative_position=RIGHT):
101
122
raise Exception ("Wrong relative position!" )
102
123
else :
103
124
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
104
145
if (type (relative_end_point ) != type (None )):
105
146
relative_end_point_transfer = relative_end_point
106
147
if (self .rotate_radian == RIGHT ):
@@ -194,6 +235,12 @@ def draw(self,cell):
194
235
def get_start_point (self ):
195
236
return self .start_point_for_return
196
237
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
+
197
244
def get_end_point (self ):
198
245
if (type (self .end_point_for_return ) == type (None )):
199
246
raise Exception ("You did not define a relative end point for your component!" )
0 commit comments