gdsdk
Breif
gdsii file development kit
read/write gdsii file implemented by rust
Features
- read gdsii file and parse to gds object(concurrent)
- write gdsii object data to gdsii file(concurrent)
- avoid circular reference of gds object
- create gdsii object like polygons from scratch
- create/modify gdsii object like polygons by using higher level graphics algorithms
Usage
Read
use gdsdk;
let gds_lib = read_gdsii.unwrap;
gds_lib is a gdsdk::gds_model::Lib struct, which contains all the data in the gdsii file.
Write
use *;
use Error;
use Write;
use ;
let mut lib = new;
// create a new cell with name "cell_a"
let struc_a = new;
let mut polygon_1 = default;
// polygon's points no need to be close
polygon_1.points.push;
polygon_1.points.push;
polygon_1.points.push;
polygon_1.points.push;
polygon_1.points.push;
polygon_1.points.push;
// add polygon to cell
struc_a.write.unwrap.polygons.push;
let struc_b = new;
let mut polygon_2 = default;
polygon_2.points.push;
polygon_2.points.push;
polygon_2.points.push;
struc_b.write.unwrap.polygons.push;
// create refer to struc_b
let mut struc_b_ref = new;
struc_b_ref.origin = new;
// modify struc_b_ref to make a 3x2 array ref
struc_b_ref.row = 3;
struc_b_ref.column = 2;
struc_b_ref.spaceing_row = new;
struc_b_ref.spaceing_col = new;
// add ref to struc_a
struc_a.write.unwrap.refs.push;
// add struc_a will also add it's refs, that is struc_b will be added too
let _ = lib.add_struc;
// dump gds object to gdsii file data
let gds_data = lib.gds_bytes?;
let mut file = create?;
file.write_all?;
Circle Reference
add corss referenced structure to library will get a error:
let lib = new;
let struc_a = new;
let struc_b = new;
let struc_c = new;
// struc_a refer to struc_b, struc_b refer to struc_c, struc_c refer to struc_a
let mut struc_a_ref = new;
let mut struc_b_ref = new;
let mut struc_c_ref = new;
sturc_a.write.unwrap.refs.push;
struc_b.write.unwrap.refs.push;
struc_c.write.unwrap.refs.push;
// add struc_a will recursly add it's refs, get a error and lib will rewind to original state
let res = lib.add_struc;