From d9fb0f7829e13b82e94775a41ff052b16f47eb60 Mon Sep 17 00:00:00 2001 From: Jingyan Ling <jingyanling2018@u.northwestern.edu> Date: Tue, 9 Jul 2019 17:26:57 -0700 Subject: [PATCH] update journal --- README.md | 4 ++++ analyze_dxf.py | 2 +- auto_layouteditor.py | 29 +++++++++++++++++++++++++++++ layout_test.py | 25 +++++++++++++++++++++++++ testout.gds | Bin 0 -> 3502 bytes 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 auto_layouteditor.py create mode 100644 layout_test.py create mode 100644 testout.gds diff --git a/README.md b/README.md index 053a7d0..69fc5eb 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,10 @@ - 2. Use `KiCAD 5` python API to sue `FreeRouting` - 3. Use `KiCAD 4` python API to use builtin auto-routing +###### 1 +- `FreeRouting` input format: `dsn`, `lef`, `def` +- `FreeRouting` output format: `ses`, `def` +- `FreeRouting` can take arbitrary board outlines shape - TODO: - If can run KiCAD 4 from python - Check `FreeRouting` API, see if a acceptable file can be generated from things on hand diff --git a/analyze_dxf.py b/analyze_dxf.py index 4203968..18e2286 100644 --- a/analyze_dxf.py +++ b/analyze_dxf.py @@ -13,7 +13,7 @@ import copy import matplotlib.pyplot as plt import matplotlib.animation as animation from matplotlib import cm -from array2gif import write_gif + class auto_rounter: def __init__(self,path,dxf_file): diff --git a/auto_layouteditor.py b/auto_layouteditor.py new file mode 100644 index 0000000..324dffa --- /dev/null +++ b/auto_layouteditor.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +import numpy as np +import ezdxf +import random +from math import sqrt +import copy +from LayoutEditor import LayoutScript +from LayoutScript import * + +l=project.newLayout(); + +#rename a layer +layers.num(6).name="new text" + +c=l.drawing.currentCell +c.cellName="test-cell-python" + +c.addBox(0,0,5000,7000,5) +c.addRoundedBox(10000,0,5000,7000,500,5) +c.addChamferedBox(20000,0,5000,7000,500,5) +c.addCircleBox(point(0,10000),point(5000,17000),5) +c.addEllipse(5,point(12500,15000),2500,3500) +c.addPolygonArc(point(22500,15000),2500,3500,0,340,5) +e=c.addText(5,point(25,25000),layers.num(6).name) +e.setWidth(1000) +l.drawing.saveFile("/home/jingyan/Documents/summer_intern_lemur/roco_electrical/testout.dsn") + +print("Python script completed") \ No newline at end of file diff --git a/layout_test.py b/layout_test.py new file mode 100644 index 0000000..b4803fc --- /dev/null +++ b/layout_test.py @@ -0,0 +1,25 @@ +# load the LayoutScript module +import LayoutScript +# use LayoutScript without prefix +from LayoutScript import * + +#create a new layout object +l=project.newLayout(); + +#rename a layer +layers.num(6).name="new text" + +c=l.drawing.currentCell +c.cellName="test-cell-python" + +c.addBox(0,0,5000,7000,5) +c.addRoundedBox(10000,0,5000,7000,500,5) +c.addChamferedBox(20000,0,5000,7000,500,5) +c.addCircleBox(point(0,10000),point(5000,17000),5) +c.addEllipse(5,point(12500,15000),2500,3500) +c.addPolygonArc(point(22500,15000),2500,3500,0,340,5) +e=c.addText(5,point(25,25000),layers.num(6).name) +e.setWidth(1000) +l.drawing.saveFile("/home/jingyan/Documents/summer_intern_lemur/roco_electrical/testout.gds") + +print("Python script completed") \ No newline at end of file diff --git a/testout.gds b/testout.gds new file mode 100644 index 0000000000000000000000000000000000000000..d76872df34b83c16315acf51ce9c9badacf4d468 GIT binary patch literal 3502 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 literal 0 HcmV?d00001 -- GitLab