mirror of https://github.com/KLayout/klayout.git
82 lines
1.6 KiB
Ruby
82 lines
1.6 KiB
Ruby
|
|
|
|
app = RBA::Application.instance
|
|
mw = app.main_window
|
|
|
|
# create a new layout
|
|
mw.create_layout( 0 )
|
|
view = mw.current_view
|
|
|
|
# create a new layer in that layout
|
|
layout = view.cellview( 0 ).layout
|
|
|
|
layer_ids = []
|
|
|
|
256.times { |l|
|
|
|
|
linfo = RBA::LayerInfo.new
|
|
layer_id = layout.insert_layer( linfo )
|
|
|
|
# create a layer view for that layer
|
|
ln = RBA::LayerPropertiesNode::new
|
|
ln.dither_pattern = 0
|
|
if l >= 128
|
|
# red colors for the positive values
|
|
c = (l - 128) * 2 * 0x10000
|
|
elsif l > 0
|
|
# blue colors for the negative values
|
|
c = (128 - l) * 2
|
|
else
|
|
c = 0xff
|
|
end
|
|
ln.fill_color = c
|
|
ln.frame_color = c
|
|
ln.width = 1
|
|
ln.source_layer_index = layer_id
|
|
view.insert_layer( view.end_layers, ln )
|
|
|
|
layer_ids.push( layer_id )
|
|
|
|
}
|
|
|
|
# replicate last layer to allow values of 256 (mapped to 255) ..
|
|
layer_ids.push( layer_ids[255] )
|
|
|
|
# create a top cell and start the recursion on this
|
|
topcell_id = layout.add_cell( "top" )
|
|
topcell = layout.cell( topcell_id )
|
|
|
|
# create an image
|
|
|
|
nx = 500
|
|
ny = 500
|
|
radius = 100
|
|
x = -nx / 2
|
|
nx.times {
|
|
y = -ny / 2
|
|
ny.times {
|
|
r = Math::sqrt( x * x + y * y ) * Math::PI * 2.0 / radius
|
|
if r.abs < 1e-6
|
|
v = 1.0
|
|
else
|
|
v = Math::sin( r ) / r
|
|
end
|
|
vi = ((v + 1.0) * 128.0 + 0.5).to_i
|
|
box = RBA::Box::new_lbrt( x * 100, y * 100, (x + 1) * 100, (y + 1) * 100 )
|
|
topcell.shapes( layer_ids[vi] ).insert_box( box )
|
|
y += 1
|
|
}
|
|
x += 1
|
|
}
|
|
|
|
# select his cell as the top cell, fit all and switch on all hierarchy levels
|
|
view.select_cell_path( [topcell_id], 0 )
|
|
view.update_content
|
|
view.zoom_fit
|
|
view.max_hier
|
|
|
|
# run the application
|
|
RBA::Application.instance.exec
|
|
|
|
|