Skip to content

Instantly share code, notes, and snippets.

@daguiam
Created July 1, 2024 11:46
Show Gist options
  • Save daguiam/503e9550d0af552900eda3a798f9bcf1 to your computer and use it in GitHub Desktop.
Save daguiam/503e9550d0af552900eda3a798f9bcf1 to your computer and use it in GitHub Desktop.
import pya
import sys
import os
from matplotlib import pyplot as plt
import numpy as np
from scipy.constants import micro, nano, milli
from scipy import ndimage
def create_poly_dicing_corner(length, width):
poly = pya.DPolygon([
pya.DPoint(0, 0), pya.DPoint(0, length), pya.DPoint(width, length),
pya.DPoint(width, width), pya.DPoint(length, width), pya.DPoint(length, width),
pya.DPoint(length, 0)
])
return poly
def create_corners_cell(layout, field_width, field_height, corner_length, corner_width, layer="layer127"):
cell_corner_single = layout.create_cell('corner_instance')
cell_corner = layout.create_cell('corners')
layer_corners = layout.layer(layer)
corner_polygon = create_poly_dicing_corner(corner_length, corner_width)
cell_corner_single.shapes(layer_corners).insert(corner_polygon)
instance = pya.DCellInstArray(cell_corner_single.cell_index(),
pya.DTrans(pya.DTrans.R0, pya.DPoint(-field_width/2, -field_height/2))
)
cell_corner.insert(instance)
instance = pya.DCellInstArray(cell_corner_single.cell_index(),
pya.DTrans(pya.DTrans.R270, pya.DPoint(-field_width/2, field_height/2))
)
cell_corner.insert(instance)
instance = pya.DCellInstArray(cell_corner_single.cell_index(),
pya.DTrans(pya.DTrans.R180, pya.DPoint(field_width/2, field_height/2))
)
cell_corner.insert(instance)
instance = pya.DCellInstArray(cell_corner_single.cell_index(),
pya.DTrans(pya.DTrans.R90, pya.DPoint(field_width/2, -field_height/2))
)
cell_corner.insert(instance)
cell_corner.flatten(-1, True)
return cell_corner
def create_label_cell(layout, text, position=(0,0), rotate=True, mag=1000, layer="layer127"):
cell_label = layout.create_cell('label')
layer_label = layout.layer(layer)
gen = pya.TextGenerator.default_generator()
region = gen.text(text, layout.dbu, mag)
if rotate:
cell_label.shapes(layer_label).insert(region, pya.DTrans(pya.DTrans.R90,pya.DVector(position[0], position[1])))
else:
cell_label.shapes(layer_label).insert(region, pya.DTrans(pya.DVector(position[0], position[1])))
return cell_label
filename = "Dammann_5x5mm 11x13 with 0.7deg pitch_centered.dxf"
# loads filename
layout = pya.Layout()
layout.read(filename)
# get top cell
top = layout.top_cell()
corner_length = 500#*micro
corner_width = 100#*micro
field_width = 10000 #*micro
field_height = 10000 #*micro
trans = pya.Trans(pya.Point(0,0))
layer = "mask"
cell = create_corners_cell(layout, field_width, field_height, corner_length, corner_width, layer)
top.insert(pya.DCellInstArray(cell.cell_index(), trans))
label = os.path.splitext(filename)[0]
label = "P1_13x11_50um_633nm"
cell = create_label_cell(layout, label, position=(-4000, -4000), rotate=False, mag=400, layer=layer)
top.insert(pya.DCellInstArray(cell.cell_index(), trans))
# top.flatten(-1, True)
outfilename = "text2.dxf"
layout.write(outfilename)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment