def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position # elems += i3.Rectangle(layer=self.layer, center=(x0, y0), # box_size=(self.length + self.release_margin, self.width + self.release_margin)) elems += i3.Rectangle(layer=self.layer, center=(300, 300), box_size=(200, 200)) rec = i3.Rectangle(layer=self.layer, center=(0, 0), box_size=(200, 200)) remove = i3.Wedge(layer=self.layer, begin_coord=(-100, 0), end_coord=(-50, 0), begin_width=8, end_width=0.001) elems += rec, # # elems = elems | wedge, # haha = rec | remove, elems += remove, # # elems +=rec, # elems = elems.extend(haha), return elems
def _generate_elements(self, elems): rect_size = (self.cross_boundary_width - self.cross_bar_width) / 2 rect_center = self.cross_bar_width / 2 + rect_size / 2 if not self.inversion: # Dark cross elems += i3.Cross( layer=i3.TECH.PPLAYER.CH1. TRENCH, #i3.PPLayer(self.process,self.purpose), center=(0, 0), box_size=self.cross_boundary_width, thickness=self.cross_bar_width) else: # Open cross: formed by 4 dark squares at corners elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH2. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(rect_center, rect_center), box_size=(rect_size, rect_size)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH2. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(rect_center, -rect_center), box_size=(rect_size, rect_size)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH2. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(-rect_center, rect_center), box_size=(rect_size, rect_size)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH2. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(-rect_center, -rect_center), box_size=(rect_size, rect_size)) return elems
def _generate_elements(self, elems): for counter, child in enumerate(self.DC_list): name = child.name # elems += i3.PolygonText(layer=i3.TECH.PPLAYER.WG.TEXT, # text="{}_{}".format(name, self.cell.wg_t1.name), # # coordinate=(1300.0, 100.0), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), # font=2, # height=20.0, # transformation=i3.Translation((1500, 100 + 10000 * counter)) # ) # elems += i3.PolygonText(layer=i3.TECH.PPLAYER.WG.TEXT, # text="{}_{}".format(name, self.cell.wg_t1.name), # # coordinate=(-2000, -150), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), # font=2, # height=200.0, # transformation=i3.Rotation((0.0, 0.0), 90.0) # + i3.Translation((450, -2000 + 10000 * counter)) # ) for j in range (-1,2,1): #dicing marker left 48 squares for i in range(0,4,1): elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=( 100+j*10000, -3000+100+10000*i-2000),box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=( 100+j*10000, -3000 - 100 + 10000 * i-2000), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=( 300, -3000 + 100 + 6000 * 3 + 10000), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=( 300, -5000 - 100), box_size=(100, 100)) return elems
def _generate_elements(self, elems): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(0, 10000), # change box_size=(190, 30000)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(10000, 10000), # change box_size=(190, 30000)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(6000 + 13905 + 190 / 2, 10000), # change box_size=(190, 30000)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(5000, 15000), # change box_size=(30000, 190)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.SIL.LINE, center=(0, 10000), # change box_size=(210, 30000)) # Medphab = mmi_slots_cell_test() # elems += i3.ARef(n_o_periods=(2,6), period=(20000,5000), reference=Medphab, origin=(-21400,13625)) return elems
def _generate_elements(self, elems): # Draw the central bar, which is longer than the others elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH1. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(0, (self.bar_length + self.bar_extra_length) * 0.5), box_size=(self.bar_width, self.bar_length + self.bar_extra_length)) # Draw the other bars for i in range((self.number_of_bars - 1) / 2): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH1. TRENCH, #i3.PPLayer(self.process, self.purpose), center=(-(i + 1) * self.spacing, self.bar_length * 0.5), box_size=(self.bar_width, self.bar_length)) for j in range((self.number_of_bars - 1) / 2): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.CH1. TRENCH, #i3.PPLayer(self.process, self.purpose), center=((j + 1) * self.spacing, self.bar_length * 0.5), box_size=(self.bar_width, self.bar_length)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position elems += i3.Rectangle(layer=self.layer, center=(x0 + 7500, y0 + 4500), box_size=(15000, 1000)) # elems += i3.Rectangle(layer=i3.TECH.PPLAYER.NONE.DOC, center=(x0 + 7500, y0 + 4500), # box_size=(15000, 1000)) elems += i3.Rectangle(layer=self.layer, center=(x0 + 7500, y0 + 500), box_size=(15000, 1000)) elems += i3.Rectangle(layer=self.layer, center=(x0 + 12500+1000, y0 + 2500), #change box_size=(self.length, self.width)) if self.pocket: PO = i3.Rectangle(layer=self.layer_bool, center=(10001+2000, 2500), box_size=(2, 160)) #change elems += PO generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) if self.tilt: # TI = i3.Rectangle(layer=self.layer_bool, center=(10001, 2500), box_size=(2, 160)) # elems += TI TI_shape = i3.Shape(points=[(10000.0+2000, 2470.0), (10010.58+2000, 2530.0), (10000.0+2000, 2530.0)], closed=True) #change TI = i3.Boundary(layer=self.layer_bool, shape=TI_shape) elems += TI generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position # elems += i3.Rectangle(layer=self.layer, center=(x0, y0), # box_size=(self.length + self.release_margin, self.width + self.release_margin)) elems += i3.Rectangle(layer=self.layer, center=(300, 300), box_size=(200, 200)) rec = i3.Rectangle(layer=self.layer, center=(0, 0), box_size=(200, 200)) layer2 = i3.Layer(2) remove = i3.Wedge(layer=layer2, begin_coord=(-100, 0), end_coord=(-50, 0), begin_width=8, end_width=0.001) elems += rec elems += remove generated1 = self.layer - layer2 mapping = {generated1: self.layer} output_elems = i3.get_elements_for_generated_layers(elems, mapping) # # elems = elems | wedge, # haha = rec | remove, # elems += remove, # # elems +=rec, # elems = elems.extend(haha), return output_elems
def _generate_elements(self, elems): elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.CORE, center=(0.5 * self.length, 0.0), box_size=(self.length, self.width)) elems += i3.Wedge(layer=i3.TECH.PPLAYER.WG.CORE, begin_coord=(-self.taper_length, 0.0), end_coord=(0.0, 0.0), begin_width=self.trace_template.core_width, end_width=self.taper_width) elems += i3.Wedge(layer=i3.TECH.PPLAYER.WG.CORE, begin_coord=(self.length, 0.5 * self.waveguide_spacing), end_coord=(self.length + self.taper_length, 0.5 * self.waveguide_spacing), begin_width=self.taper_width, end_width=self.trace_template.core_width) elems += i3.Wedge(layer=i3.TECH.PPLAYER.WG.CORE, begin_coord=(self.length, -0.5 * self.waveguide_spacing), end_coord=(self.length + self.taper_length, -0.5 * self.waveguide_spacing), begin_width=self.taper_width, end_width=self.trace_template.core_width) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.WG.CLADDING, center=(0.5 * self.length, 0.0), box_size=(self.length + 2 * self.taper_length, self.width + 2.0)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position elems += i3.Rectangle(layer=self.layer, center=(1500 - 20, 2500), box_size=(3000 - 40, 3000 - 40 * 2)) if self.tilt_0: elems += i3.Rectangle(layer=self.layer, center=(x0 + 6500 - 40 + 20 + 7.5, 2500), box_size=(self.length + 40 + 15, self.width - 40 * 2)) else: elems += i3.Rectangle(layer=self.layer, center=(x0 + 6500 - 40 + 20 + 5, 2500), box_size=(self.length + 40 + 10, self.width - 40 * 2)) for i in range(7): elems += i3.Rectangle(layer=self.layer_bool, center=(10000 - 725 - i * 750, 1000 + (3000 - self.width) / 2 + 185), box_size=(130, 130)) elems += i3.Rectangle( layer=self.layer_bool, center=(10000 - 725 - i * 750, 1000 + (3000 - self.width) / 2 + self.width - 185), box_size=(130, 130)) generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): elems += i3.Rectangle(layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(0, 7500), # change box_size=(190, 21000)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(6000, 7500), # change box_size=(190, 21000)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.SIL.LINE, center=(0, 7500), # change box_size=(210, 21000)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position elems += i3.Rectangle(layer=self.layer, center=(x0 + 6500 + 2000, y0 + 600 + (1800 - self.width) / 4), box_size=(self.length, (1800 - self.width) / 2)) elems += i3.Rectangle( layer=self.layer, center=(x0 + 6500 + 2000, y0 + 600 + self.width + (1800 - self.width) * 3 / 4), box_size=(self.length, (1800 - self.width) / 2)) elems += i3.SRef( reference=Interface_mmi12(pocket=self.pocket, tilt=self.tilt)) if self.pillar: self.label = "NO" for i in range(7): elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000, 600 + (1800 - self.width) / 2 + 30), #change box_size=(50, 60)) elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000, 600 + (1800 - self.width) / 2 + self.width - 30), #change box_size=(50, 60)) if self.width > 330: self.label += "W" if self.pocket: self.label += "_WP" if self.tilt: self.label += "WT" elems += i3.PolygonText( layer=self.layer_bool, text=self.label, coordinate=(8000, 2700), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=700.0) generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): num_x = 5 x_step = 200 y_step = 200 pplayers = get_pplayers_from_tree(i3.TECH.PPLAYER) xcnt = 0 ycnt = 0 for p in pplayers: x = xcnt * x_step y = ycnt * y_step if not (p.process, p.purpose) in i3.TECH.GDSII.LAYERTABLE: continue elems += i3.Rectangle(layer=p, center=(x, y), box_size=(100.0, 100.0)) elems += i3.PolygonText(layer=p, text=p.name, coordinate=(x, y + 75.0), height=15.0) if xcnt == num_x - 1: xcnt = 0 ycnt += 1 else: xcnt += 1 return elems
def _generate_elements(self, elems): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.NONE.DOC, center=(0, 9000), # change box_size=(200, 28000)) # generated1 = i3.TECH.PPLAYER.HFW - i3.TECH.PPLAYER.NONE.DOC # mapping = {generated1: i3.TECH.PPLAYER.HFW} # elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(0, 7500), # change box_size=(190, 21000)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.PPLUS.LINE, center=(6000, 7500), # change box_size=(190, 21000)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.SIL.LINE, center=(0, 7500), # change box_size=(210, 21000)) #ebeam for i in range(0, 7, 1): elems += i3.Rectangle( layer=i3.TECH.PPLAYER.N.LINE, center=(-5770, -1215 + 3000 * i), # change box_size=(540, 150)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.N.LINE, center=(6000, -1215 + 3000 * i), # change box_size=(1000, 150)) elems += i3.Rectangle( layer=i3.TECH.PPLAYER.N.LINE, center=(17770, -1215 + 3000 * i), # change box_size=(540, 150)) return elems
def _generate_elements(self, elems): layer_core = self.trace_template.core_layer # mmi core elems += i3.Rectangle(layer=layer_core, center=(+self.length / 2.0, 0.0), box_size=(self.length, self.width)) # input wedges for bc, ec in self._get_input_taper_coords(): elems += i3.Wedge(layer_core, begin_coord=bc, end_coord=ec, begin_width=self.taper_width, end_width=self.trace_template.core_width) for bc, ec in self._get_output_taper_coords(): elems += i3.Wedge(layer_core, begin_coord=bc, end_coord=ec, begin_width=self.taper_width, end_width=self.trace_template.core_width) return elems
def _generate_elements(self, elems): for counter, child in enumerate(self.DC_list): name = child.name elems += i3.PolygonText( layer=i3.TECH.PPLAYER.WG.TEXT, text="{}_{}".format(name, self.cell.wg_t1.name), # coordinate=(1300.0, 100.0), alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=30.0, transformation=i3.Translation((600, 100 + 6000 * counter))) for i in range(1, 8, 1): elems += i3.PolygonText( layer=i3.TECH.PPLAYER.WG.TEXT, text="{}".format(i), coordinate=(400, -4400 + 3000 * i), font=2, height=200.0, ) for j in range(-1, 2, 1): for i in range(0, 4, 1): elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100 + j * 6000, -3000 + 100 + 6000 * i), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100 + j * 6000, -3000 - 100 + 6000 * i), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100 + j * 6000, -3000 + 100 + 6000 * 3 + 3000), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100 + j * 6000, -3000 - 100 + 6000 * 3 + 3000), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(300, -3000 + 100 + 6000 * 3 + 3000), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(300, -3000 - 100), box_size=(100, 100)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position for i in range(0, 4, 1): for j in range(0, 3, 1): elems += i3.Rectangle(layer=self.layer, center=(x0 + i * 6000, y0 + j * 7000), box_size=(100, 100)) elems += i3.Rectangle(layer=self.layer, center=(x0 + 200 + i * 6000, y0 + j * 7000), box_size=(100, 100)) elems += i3.Rectangle(layer=self.layer, center=(x0 + i * 6000, y0 + 200 + j * 7000), box_size=(100, 100)) elems += i3.Rectangle(layer=self.layer, center=(x0 + i * 6000 + 200, y0 + 200 + j * 7000), box_size=(100, 100)) for k in range(0, 20, 1): elems += i3.Rectangle( layer=self.layer, center=(-1000 + 0 + i * 6000, 1000 + 10 * k + j * 7000), box_size=(500, 0.6 + 0.2 * k)) elems += i3.PolygonText( layer=self.layer, text="{}".format(str(k)), # coordinate=(1300.0, 100.0), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=7.0, transformation=i3.Translation( (-1000 + 260 + i * 6000, 1000 + 3 + 10 * k + j * 7000))) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.NONE.DOC, center=(9000, 7500), box_size=(21000, 16000)) # elems += i3.Rectangle(layer=i3.TECH.PPLAYER.CONTACT.PILLAR, center=(8500, 7500), # box_size=(22000, 18000)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position shift = 0.5 * self.cross_width + self.cross_margin square_length = 0.5 * self.cross_length - shift if (self.complement == False and self.protection == False): # Add cross elems += i3.Rectangle(layer=self.layer, center=(x0, y0), box_size=(self.cross_length, self.cross_width)) elems += i3.Rectangle(layer=self.layer, center=(x0, y0), box_size=(self.cross_width, self.cross_length)) # Add rectangles left VERNIER elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1]), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] + self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] + 2.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] + 3.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] + 4.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] - self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] - 2.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] - 3.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_left_center[0], self.vernier_left_center[1] - 4.0 * self.vernier_period), box_size=(self.vernier_length, self.vernier_width)) # Add rectangles top VERNIER elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0], self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] + 2.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] + 3.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] + 4.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] - 2.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] - 3.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) elems += i3.Rectangle(layer=self.layer, center=(self.vernier_top_center[0] - 4.0 * self.vernier_period, self.vernier_top_center[1]), box_size=(self.vernier_width, self.vernier_length)) # Add TEXT elems += i3.PolygonText(layer=self.layer, coordinate=(x0, y0 - 100.0), text=self.layer_text, height=35.0) elif (self.complement == True and self.protection == False): # Add squares elems += i3.Rectangle( layer=self.layer, center=(x0 - 0.25 * self.cross_length - 0.5 * shift, y0 + 0.25 * self.cross_length + 0.5 * shift), box_size=(square_length, square_length)) elems += i3.Rectangle( layer=self.layer, center=(x0 + 0.25 * self.cross_length + 0.5 * shift, y0 + 0.25 * self.cross_length + 0.5 * shift), box_size=(square_length, square_length)) elems += i3.Rectangle( layer=self.layer, center=(x0 - 0.25 * self.cross_length - 0.5 * shift, y0 - 0.25 * self.cross_length - 0.5 * shift), box_size=(square_length, square_length)) elems += i3.Rectangle( layer=self.layer, center=(x0 + 0.25 * self.cross_length + 0.5 * shift, y0 - 0.25 * self.cross_length - 0.5 * shift), box_size=(square_length, square_length)) # Add rectangles left VERNIER elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_long_length, self.vernier_left_center[1]), box_size=(self.vernier_complement_long_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_long_length, self.vernier_left_center[1]), box_size=(self.vernier_complement_long_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 2.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 2.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 3.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 3.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 4.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] + 4.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 2.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 2.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 3.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 3.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 4.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_left_center[0] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length, self.vernier_left_center[1] - 4.0 * self.vernier_complement_period), box_size=(self.vernier_complement_length, self.vernier_complement_width)) # Add rectangles top VERNIER elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0], self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_long_length), box_size=(self.vernier_complement_width, self.vernier_complement_long_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0], self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_long_length), box_size=(self.vernier_complement_width, self.vernier_complement_long_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 2.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 2.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 3.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 3.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 4.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] + 4.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 2.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 2.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 3.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 3.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 4.0 * self.vernier_complement_period, self.vernier_top_center[1] - self.vernier_complement_shift - 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) elems += i3.Rectangle( layer=self.layer, center=(self.vernier_top_center[0] - 4.0 * self.vernier_complement_period, self.vernier_top_center[1] + self.vernier_complement_shift + 0.5 * self.vernier_complement_length), box_size=(self.vernier_complement_width, self.vernier_complement_length)) else: elems += i3.Rectangle(layer=self.layer, center=(x0 - 43.5, y0 + 11.5), box_size=(self.protection_length, self.protection_width)) return elems
def _generate_elements(self, elems): super(PlaceAndAutoRoute.Layout, self)._generate_elements(elems) total_length = self.modulator_length + self.additional_length delta = self.delta delay = self.delay signal_width = self.signal_width metal_spacing = self.metal_spacing ground_width = self.ground_width period_pad = self.period_pad taper_length = self.taper_length pad_length = self.pad_length pad_width = self.pad_width pad_size = (pad_length, pad_width) y_ground = -delta + min( delay / 2., 0.) - signal_width - 1.5 * metal_spacing - ground_width / 2. y_arm1_n = -delta + min( delay / 2., 0.) - signal_width / 2. - metal_spacing / 2. y_arm1_p = delay / 4. - signal_width / 2. - metal_spacing / 2. y_arm2_n = delta + max(delay / 2., 0.) - signal_width / 2. - metal_spacing / 2. y_arm2_p = delta + max(delay / 2., 0.) + ground_width / 2. + metal_spacing / 2. arm2_n_width = 2 * delta + abs( delay / 2.) - signal_width - 2 * metal_spacing # Metal lines lines = [] ground = i3.Rectangle(layer=i3.TECH.PPLAYER.M1, center=(0., y_ground), box_size=(total_length, ground_width)) arm1_n = i3.Rectangle(layer=i3.TECH.PPLAYER.M1, center=(0., y_arm1_n), box_size=(total_length, signal_width)) arm1_p = i3.Rectangle(layer=i3.TECH.PPLAYER.M1, center=(0., y_arm1_p), box_size=(total_length, arm2_n_width)) arm2_n = i3.Rectangle(layer=i3.TECH.PPLAYER.M1, center=(0., y_arm2_n), box_size=(total_length, signal_width)) arm2_p = i3.Rectangle(layer=i3.TECH.PPLAYER.M1, center=(0., y_arm2_p), box_size=(total_length, ground_width)) lines += [ground, arm1_n, arm1_p, arm2_n, arm2_p] # Metal left pads left_pads = [] taper_ground = i3.Boundary( layer=i3.TECH.PPLAYER.M1, shape=[ (-(total_length / 2. + taper_length), y_arm1_p - 2 * period_pad + pad_width / 2.), (-(total_length / 2. + taper_length), y_arm1_p - 2 * period_pad - pad_width / 2.), (-total_length / 2., y_ground - ground_width / 2.), (-total_length / 2., y_ground + ground_width / 2.), ]) taper_arm1_n = i3.Boundary( layer=i3.TECH.PPLAYER.M1, shape=[ (-(total_length / 2. + taper_length), y_arm1_p - period_pad + pad_width / 2.), (-(total_length / 2. + taper_length), y_arm1_p - period_pad - pad_width / 2.), (-total_length / 2., y_arm1_n - signal_width / 2.), (-total_length / 2., y_arm1_n + signal_width / 2.), ]) taper_arm1_p = i3.Wedge( layer=i3.TECH.PPLAYER.M1, begin_coord=(-(total_length / 2. + taper_length), y_arm1_p), end_coord=(-total_length / 2., y_arm1_p), begin_width=pad_width, end_width=arm2_n_width, ) taper_arm2_n = i3.Boundary( layer=i3.TECH.PPLAYER.M1, shape=[ (-(total_length / 2. + taper_length), y_arm1_p + period_pad + pad_width / 2.), (-(total_length / 2. + taper_length), y_arm1_p + period_pad - pad_width / 2.), (-total_length / 2., y_arm2_n - signal_width / 2.), (-total_length / 2., y_arm2_n + signal_width / 2.), ]) taper_arm2_p = i3.Boundary( layer=i3.TECH.PPLAYER.M1, shape=[ (-(total_length / 2. + taper_length), y_arm1_p + 2 * period_pad + pad_width / 2.), (-(total_length / 2. + taper_length), y_arm1_p + 2 * period_pad - pad_width / 2.), (-total_length / 2., y_arm2_p - ground_width / 2.), (-total_length / 2., y_arm2_p + ground_width / 2.), ]) for i in range(-2, 3): left_pads += i3.Rectangle( layer=i3.TECH.PPLAYER.M1, center=( -(total_length / 2. + taper_length + pad_length / 2.), y_arm1_p + i * period_pad), box_size=pad_size) left_pads += [ taper_ground, taper_arm1_n, taper_arm1_p, taper_arm2_n, taper_arm2_p ] # Metal right pads right_pads = [ elt.transform_copy(i3.HMirror(0.)) for elt in left_pads ] elems += lines elems += left_pads elems += right_pads return elems
def _generate_elements(self, elems): elems += i3.Rectangle(layer=self.layer, center=(0, 0), box_size=(self.length, self.width)) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position elems += i3.Rectangle(layer=self.layer, center=(8750 - 15 - 10 + 5, 1500), box_size=(500 - 40, 1800 - 100)) elems += i3.Rectangle(layer=self.layer, center=(10500 - 15 - 10 + self.tilt / 2, 1500), box_size=(3000 + 50 + self.tilt, 450 - 15 * 2)) elems += i3.Rectangle(layer=self.layer, center=(8750 - 15 - 10 + 5 + 2420 - 150, 1000 - 120), box_size=(2000, 500 - 40)) # extra SiN pad # for i in range(4): # elems += i3.Rectangle(layer=self.layer, # center=( # 10000 - 725 - i * 750 + 2000 + 350, 1316+72.75), # box_size=(145, 77.5)) # elems += i3.Rectangle(layer=self.layer, center=( # 10000 - 725 - i * 750 + 2000 + 350, 1684-72.75), # change # box_size=(145, 77.5)) if self.pillar: for i in range(4): elems += i3.Rectangle( layer=self.layer_bool, center=(10000 - 725 - i * 750 + 2000 + 550, 1316 + self.width / 2 - 11.0 / 2), box_size=(self.length + 30, self.width + 30 + 11)) elems += i3.Rectangle( layer=self.layer_bool, center=(10000 - 725 - i * 750 + 2000 + 550, 1684 - self.width / 2 + 11.0 / 2), # change box_size=(self.length + 30, self.width + 30 + 11)) if self.double: elems += i3.Rectangle( layer=self.layer_bool, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1316 + self.width / 2 - 11.0 / 2), box_size=(self.length + 30, self.width + 30 + 11)) elems += i3.Rectangle( layer=self.layer_bool, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1684 - self.width / 2 + 11.0 / 2), # change box_size=(self.length + 30, self.width + 30 + 11)) # if self.tilt_0: # elems += i3.Rectangle(layer=self.layer, # center=(x0 + 6500 - 40 + 20 + 7.5, 2500), # box_size=(self.length + 40 + 15, self.width - 40 * 2)) # else: # elems += i3.Rectangle(layer=self.layer, # center=(x0 + 6500 - 40 + 20 + 5, 2500), # box_size=(self.length + 40 + 10, self.width - 40 * 2)) # # if self.pillar: # for i in range(7): # elems += i3.Rectangle(layer=self.layer_bool, # center=(10000 - 725 - i * 750, 1000 + (3000 - self.width) / 2 + 30), # box_size=(130, 140)) # elems += i3.Rectangle(layer=self.layer_bool, center=( # 10000 - 725 - i * 750, 1000 + (3000 - self.width) / 2 + self.width - 30), # box_size=(130, 140)) generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position elems += i3.Rectangle(layer=self.layer, center=(6250, -500), box_size=(500, 500)) elems += i3.Rectangle(layer=self.layer, center=(6250, 1000), box_size=(500, 500)) elems += i3.Rectangle(layer=self.layer2, center=(9950, 1000), box_size=(4100, self.width)) # heaters elems += i3.Rectangle(layer=self.layer3, center=(9950, 1000), box_size=(3900, self.width+20)) # heaters during plating elems += i3.Rectangle(layer=self.layer, center=(9950 - 4100 / 2+50, 1000), box_size=(100, self.width)) # heaters butt left elems += i3.Rectangle(layer=self.layer, center=(9950 + 4100 / 2 - 50, 1000), box_size=(100, self.width)) # heaters butt right elems += i3.Rectangle(layer=self.layer, center=(9950 - 4100 / 2 + 50-750, 1000), box_size=(1400, 100)) # left elems += i3.Rectangle(layer=self.layer, center=(9950 - 4100 / 2 + 50 - 750-450, -500), box_size=(500, 100)) elems += i3.Rectangle(layer=self.layer, center=(9950 + 4100 / 2 - 50, 1000 - (500+self.width) / 2), box_size=(100, 500)) elems += i3.Rectangle(layer=self.layer, center=(9450, 1000-self.width/2-450), box_size=(4900, 100)) elems += i3.Rectangle(layer=self.layer, center=(5050 + 4100 / 2 - 50, -550+(1000-self.width/2+50)/2), box_size=(100, 1000-self.width/2+50)) elems += i3.PolygonText(layer=i3.TECH.PPLAYER.WG.TEXT, text="width_{}".format(self.width), # coordinate=(1300.0, 100.0), alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=400.0, transformation=i3.Translation((8000, 0)) ) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position # width2 = 338 + 15 + 15 elems += i3.Rectangle(layer=self.layer, center=(8750 - 15 - 10 + 5, 1500), box_size=(500 - 40, 1800 - 100)) elems += i3.Rectangle(layer=self.layer, center=(10500 - 15 - 10, 1500), box_size=(3000 + 50, 145)) elems += i3.Rectangle(layer=self.layer, center=(8750 - 15 - 10 + 5 + 2420 - 150, 1000 - 120), box_size=(2000, 500 - 40)) #extra pad elems += i3.Rectangle( layer=self.layer_bool, center=(8750 - 15 - 10 + 5 + 2420 - 150 + 998, 1000 - 120 + 620), box_size=(4, 145)) #extra shrink on the interface for i in range(4): elems += i3.Rectangle(layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 350 + self.offset, 1316 + 72.75), box_size=(145, 77.5)) elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 350 + self.offset, 1684 - 72.75), # change box_size=(145, 77.5)) # Avoid solder spill on facet elems += i3.Rectangle(layer=self.layer_bool, center=(12000 - 20, 1500), box_size=(40, 50)) elems += i3.Rectangle(layer=self.layer_bool, center=(12000 - 750 * 2, 1500), box_size=(80, 50)) elems += i3.Rectangle(layer=self.layer_bool, center=(12000 - 750 * 3, 1500), box_size=(80, 50)) elems += i3.Rectangle(layer=self.layer_bool, center=(12000 - 750 * 4, 1500), box_size=(80, 50)) # reservoir if self.reservoir: for i in range(3): elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1572.5 + 20), box_size=(149, 40)) elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1427.5 - 20), box_size=(149, 40)) elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1572.5 + 20), box_size=(149, 40)) elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1427.5 - 20), box_size=(149, 40)) elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1572.5 + 20), box_size=(149, 40)) elems += i3.Rectangle(layer=self.layer, center=(-750 * i + 12000 - 750, 1427.5 - 20), box_size=(149, 40)) elems += i3.PolygonText( layer=self.layer, text="RE", coordinate=(12000, 2600), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=400.0) # Markers bigsquare = 16.5 smallsquare = 11.5 for i in range(-3, 0, 2): elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78, 1568.75), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5, 1572 - 32), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 57, 1572 - 32), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78, 1568.75 - 57.5), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75, 1572.5 - 13.25), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5, 1572.5 - 13.25), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75, 1572.5 - 13.25 - 38.5), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5, 1572.5 - 13.25 - 38.5), box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78, 1568.75-80), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5, 1572 - 32-80), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5 - 57, 1572 - 32-80), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78, 1568.75 - 57.5-80), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-2.5, 1572.5 - 13.25-80-2.5), box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 - 38.5+2.5, 1572.5 - 13.25-80-2.5), # box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-2.5, 1572.5 - 13.25 - 38.5-80+2.5), # box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 - 38.5+2.5, 1572.5 - 13.25 - 38.5-80+2.5), # box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78-594, 1568.75), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5-594, 1572 - 32), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5 - 57-594, 1572 - 32), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78-594, 1568.75 - 57.5), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-594-2.5, 1572.5 - 13.25-2.5), box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 - 38.5-594+2.5, 1572.5 - 13.25-2.5), # box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-594-2.5, 1572.5 - 13.25 - 38.5+2.5), # box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 - 38.5-594+2.5, 1572.5 - 13.25 - 38.5+2.5), # box_size=(bigsquare, bigsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78 - 594, 1568.75 - 80), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 594, 1572 - 32 - 80), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 57 - 594, 1572 - 32 - 80), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78 - 594, 1568.75 - 57.5 - 80), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 594, 1572.5 - 13.25 - 80), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 - 594, 1572.5 - 13.25 - 80), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 594, 1572.5 - 13.25 - 38.5 - 80), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 - 594, 1572.5 - 13.25 - 38.5 - 80), box_size=(smallsquare, smallsquare)) for i in range(-2, 1, 2): # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78, 1568.75), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5, 1572-32), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5-57, 1572-32), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78, 1568.75-57.5), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75, 1572.5-13.25), box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-38.5, 1572.5 - 13.25), box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75, 1572.5 - 13.25-38.5), box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75-38.5, 1572.5 - 13.25-38.5), box_size=(smallsquare, smallsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78, 1568.75 - 80), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5, 1572 - 32 - 80), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 57, 1572 - 32 - 80), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78, 1568.75 - 57.5 - 80), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 2.5, 1572.5 - 13.25 - 80 - 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 + 2.5, 1572.5 - 13.25 - 80 - 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle( layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 2.5, 1572.5 - 13.25 - 38.5 - 80 + 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle( layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 + 2.5, 1572.5 - 13.25 - 38.5 - 80 + 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78 - 594, 1568.75), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 594, 1572 - 32), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 49.5 - 57 - 594, 1572 - 32), box_size=(9, 9)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 78 - 594, 1568.75 - 57.5), box_size=(9, 9.5)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 594 - 2.5, 1572.5 - 13.25 - 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle(layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 - 594 + 2.5, 1572.5 - 13.25 - 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle( layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 594 - 2.5, 1572.5 - 13.25 - 38.5 + 2.5), box_size=(bigsquare, bigsquare)) elems += i3.Rectangle( layer=self.layer_bool, center=(750 * i + 12000 - 58.75 - 38.5 - 594 + 2.5, 1572.5 - 13.25 - 38.5 + 2.5), box_size=(bigsquare, bigsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78-594, 1568.75 - 80), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5-594, 1572 - 32 - 80), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 49.5 - 57-594, 1572 - 32 - 80), box_size=(7, 7)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 78-594, 1568.75 - 57.5 - 80), box_size=(7, 7.5)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 -594, 1572.5 - 13.25 - 80 ), # box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 - 38.5 -594, 1572.5 - 13.25 - 80 ), # box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, center=(750*i+12000 - 58.75 -594, 1572.5 - 13.25 - 38.5 - 80 ), # box_size=(smallsquare, smallsquare)) # elems += i3.Rectangle(layer=self.layer_bool, # center=(750*i+12000 - 58.75 - 38.5 -594, 1572.5 - 13.25 - 38.5 - 80 ), # box_size=(smallsquare, smallsquare)) generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) return elems
def _generate_elements(self, elems): # Center of the structure (x0, y0) = self.position width2 = 450.0 elems += i3.Rectangle(layer=self.layer, center=(x0 + 6500 + 2000 + 2000, 600 + (1800 - width2) / 4), box_size=(3000, (1800 - width2) / 2)) elems += i3.Rectangle(layer=self.layer, center=(x0 + 6500 + 2000 + 2000, y0 + 600 + width2 + (1800 - width2) * 3 / 4), box_size=(3000, (1800 - width2) / 2)) elems += i3.SRef( reference=Interface_mmi12(pocket=self.pocket, tilt=self.tilt)) if self.pillar: self.label = "NO" for i in range(4): elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 550, 1275 + self.width / 2), box_size=(self.length, self.width)) elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 550, 1725 - self.width / 2), # change box_size=(self.length, self.width)) if self.double: elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1275 + self.width / 2), box_size=(self.length, self.width)) elems += i3.Rectangle( layer=self.layer, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1725 - self.width / 2), # change box_size=(self.length, self.width)) if self.width > 120: self.label += "W" if self.pocket: self.label += "_WP" if self.tilt: self.label += "WT" elems += i3.PolygonText( layer=self.layer_bool, text=self.label, coordinate=(10800, 2600), # alignment=(i3.TEXT_ALIGN_LEFT, i3.TEXT_ALIGN_LEFT), font=2, height=400.0) generated1 = self.layer - self.layer_bool mapping = {generated1: self.layer} elems = i3.get_elements_for_generated_layers(elems, mapping) if self.pillar: for i in range(4): elems += i3.Rectangle( layer=self.layer2, center=(10000 - 725 - i * 750 + 2000 + 550, 1275 + self.width / 2), box_size=(self.length + 10, self.width + 10)) elems += i3.Rectangle( layer=self.layer2, center=(10000 - 725 - i * 750 + 2000 + 550, 1725 - self.width / 2), # change box_size=(self.length + 10, self.width + 10)) if self.double: elems += i3.Rectangle( layer=self.layer2, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1275 + self.width / 2), box_size=(self.length + 10, self.width + 10)) elems += i3.Rectangle( layer=self.layer2, center=(10000 - 725 - i * 750 + 2000 + 550 - 400, 1725 - self.width / 2), # change box_size=(self.length + 10, self.width + 10)) return elems
def _generate_elements(self, elems): elems += i3.Rectangle(layer=self.layer, box_size=(self.heightchip,self.widthchip)) return elems
def _generate_elements(self, elems): for i in range(0, 5, 1): elems += i3.PolygonText( layer=i3.TECH.PPLAYER.WG.TEXT, text="WITDH={}_length={}*2_R=500".format( str(self.width), 17000 - 4000 * i), coordinate=(900, 55 + 4000 * i + 100 * self.offset), font=2, height=20.0, ) for j in range(0, 13, 1): elems += i3.PolygonText( layer=i3.TECH.PPLAYER.WG.TEXT, text="{}_{}".format(str(i), str(j)), coordinate=(550, 63 + 4000 * i + 100 * j), font=2, height=30.0, ) elems += i3.PolygonText( layer=i3.TECH.PPLAYER.WG.TEXT, text="{}_{}".format(str(i), str(j)), # coordinate=(), font=2, height=30.0, transformation=i3.Rotation(rotation=-90) + i3.Translation( (20000 - 4000 * i - 100 * j + 63, 20000 - 550)), ) for i in range(0, 6, 1): elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100, 4000 * i - 1000 + 700), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(300, 4000 * i - 1000 + 700), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(4000 * i + 300, 19700), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(4000 * i + 300, 19900), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100, 19900), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(-100, 19900), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(500, 19900), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100, 19500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100, 20100), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(-100, -500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(100, -500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(300, -500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(500, -500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(20500, 19500), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(20500, 19700), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(20500, 19900), box_size=(100, 100)) elems += i3.Rectangle(layer=i3.TECH.PPLAYER.WG.TEXT, center=(20500, 20100), box_size=(100, 100)) return elems
def _generate_elements(self, elems): elems += i3.Rectangle(layer=self.metal1_layer, box_size=self.metal1_size) elems += i3.Rectangle(layer=self.metal2_layer, box_size=self.metal2_size) return elems