Ruby can be used as an alternative scripting interface to build-in C++ Macros having the same Application Programming Interface (API). It is a regular extension module of Ruby for pure scripting without any graphical output and runs independent to the LayoutEditor application. It is build as an easy to use scripting feature for all kind of designs and can be use with all other extension modules Ruby offers. You can try and run LayoutScript without a license key. To use the export to some file formats a full version of the LayoutEditor is required in the case your design exceeds a certain size.
If you need scripting to adjust the user interface with new menu entry, create parametric cells from the schematic or callback macros after changing device parameter, please use LayoutEditor C++ Macros.
Using LayoutScript for Ruby is very simple. You can start a ruby script from the integrated TextEditor by pressing the execute button. No setup required, a ruby installation is shipped within most LayoutEditor installations. In the script the line "require 'LayoutScript'" will load the module and the line "include LayoutScript" will enable to use any LayoutScript command without a prefix. The Application Programming Interface (API) is identical to the LayoutEditor. All names are adjusted to the ruby naming convention. That means that all class names start with a capital letter and all methods are named with a separating _ instead of the use of CamelCase.The LayoutScript module is independent of any open layout window. So please don't forget to save the result in the script. Afterwards the created file can be loaded in the LayoutEditor.
# load the module
require 'LayoutScript'
# remove the need of the prefix
include LayoutScript
#create a new layout object
l=Project.new_layout()
Layers.num(6).name="new text"
c=l.drawing.currentCell
c.cellName="test-cell-ruby"
c.add_box(0,0,5000,7000,5)
c.add_rounded_box(10000,0,5000,7000,500,5)
c.add_chamfered_box(20000,0,5000,7000,500,5)
c.add_circle_box(Point.new(0,10000),Point.new(5000,17000),5)
c.add_ellipse(5,Point.new(12500,15000),2500,3500)
c.add_polygon_arc(Point.new(22500,15000),2500,3500,0,340,5)
e=c.add_text(5,Point.new(25,25000),Layers.num(6).name)
e.set_width(1000)
l.drawing.save_file("/home/user/testout.gds")
puts("Ruby script completed")
In this example the line require 'LayoutScript' will load the LayoutScript module for Ruby. The includes line remove the requirement of any prefix on the LayoutScript module. With the line l=Project.new_layout() a new instance of the LayoutEditor is created.
require 'LayoutScript'
include LayoutScript
l=Project.new_layout()
c=l.drawing.currentCell
c.cellName="randomCircleArray"
sizeX=10000 #array width
sizeY=10000 #array height
diameter=100 #circle diameter
count=2000 #number circles
layer =11 #layer for circles
space=50 #minimum circle to circle distance
ds=diameter+space;
for i in 1..count
try=0
found=false
while (found == false) do
try += 1
x=Random.rand(sizeX)
y=Random.rand(sizeY)
p=Point.new(x,y);
e=c.nearest_element(p)
if e==nil
found=true
else
p2=Point.new()
radius=PointerInt.new()
# to assign radius use
#radius.assign(34)
# to output radius use
#puts radius.value()
if e.thisElement.is_circle(p2,radius)
if p2.x()>x+ds
found=true
elsif p2.x()<x-ds
found=true
elsif p2.y()<y-ds
found=true
elsif p2.y()>y+ds
found=true
end
end
end
if try>1000
return 1
end
end
c.add_circle(layer,p,diameter/2)
end
# save to your home folder
l.drawing.save_file("#{Dir.home}/testout.gds")
#l.drawing.save_file("/Users/apple/testout.gds")
puts "circle array completed"
These example and many further ruby script using LayoutScript are including in any LayoutEditor package under macros/examples. These examples can be open with the integrated TextEditor under Utilities/LayoutEditor/Open Example Macro.
LayoutScript for Ruby is available for Windows, Linux. It is included in the Windows packages, and in all Linux packages. To use LayoutScript from outside the LayoutEditor set the environment variables PATH, LD_LIBRARY_PATH, RUBYLIB, RUBYOPT to the correct values before starting ruby. LayoutScript for Ruby is no longer part of MacOS with release 20210928 and newer.