2017-07-23 23:03:21 +02:00
|
|
|
# encoding: UTF-8
|
2017-02-12 13:21:08 +01:00
|
|
|
|
2017-07-23 23:03:21 +02:00
|
|
|
# KLayout Layout Viewer
|
2024-01-01 17:06:23 +01:00
|
|
|
# Copyright (C) 2006-2024 Matthias Koefferlein
|
2017-07-23 23:03:21 +02:00
|
|
|
#
|
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
# (at your option) any later version.
|
|
|
|
|
#
|
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
|
#
|
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
|
|
|
|
if !$:.member?(File::dirname($0))
|
|
|
|
|
$:.push(File::dirname($0))
|
|
|
|
|
end
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
load("test_prologue.rb")
|
|
|
|
|
|
2018-04-28 00:21:36 +02:00
|
|
|
# cool stuff ...
|
|
|
|
|
class RBA::Shapes
|
|
|
|
|
include Enumerable
|
|
|
|
|
end
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
class DBShapes_TestClass < TestBase
|
|
|
|
|
|
|
|
|
|
# Shapes
|
|
|
|
|
def test_7_Layout
|
|
|
|
|
|
2022-08-27 17:51:14 +02:00
|
|
|
shapes = RBA::Shapes::new
|
|
|
|
|
|
|
|
|
|
assert_equal(shapes.cell == nil, true)
|
|
|
|
|
assert_equal(shapes.layout == nil, true)
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
ly = RBA::Layout::new
|
|
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
ldummy = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 100, -10, 150, 40 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 200, -10, 250, 40 ) )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
2022-08-27 17:51:14 +02:00
|
|
|
assert_equal(shapes.cell == c1, true)
|
|
|
|
|
assert_equal(shapes.layout == ly, true)
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.bbox.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.area ) }
|
|
|
|
|
assert_equal( arr, [2000, 2500, 2500] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.perimeter ) }
|
|
|
|
|
assert_equal( arr, [180, 200, 200] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
2020-10-11 17:51:54 +02:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SRegions ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPolygons ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_overlapping( RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_touching( RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
c1.clear( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
# boxes
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdges ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 0 )
|
|
|
|
|
arr = []
|
2022-12-04 19:53:37 +01:00
|
|
|
shapes.each( RBA::Shapes::SPoints ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 0 )
|
|
|
|
|
arr = []
|
2017-02-12 13:21:08 +01:00
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_box )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].polygon.to_s, "(10,-10;10,40;50,40;50,-10)" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.to_s, "(10,-10;10,40;50,40;50,-10)" )
|
2022-12-04 19:53:37 +01:00
|
|
|
assert_equal( arr[0].point.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].edge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].edge_pair.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].box.to_s, "(10,-10;50,40)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].path.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, false )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
assert_equal( arr[0].box.to_s, "(10,-10;50,40)" )
|
|
|
|
|
assert_equal( arr[0].bbox.to_s, "(10,-10;50,40)" )
|
|
|
|
|
|
|
|
|
|
# edges
|
|
|
|
|
|
|
|
|
|
a = RBA::Edge::new( RBA::Point::new( -1, 2 ), RBA::Point::new( 5, 2 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdges ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_edge )
|
|
|
|
|
assert_equal( arr[0].is_edge?, true )
|
|
|
|
|
assert_equal( arr[0].polygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.inspect, "nil" )
|
2022-12-04 19:53:37 +01:00
|
|
|
assert_equal( arr[0].point.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].edge.to_s, "(-1,2;5,2)" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].edge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].box.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].path.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].edge == a, true )
|
|
|
|
|
assert_equal( arr[0].bbox == a.bbox, true )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
# edge pairs
|
|
|
|
|
|
|
|
|
|
a = RBA::EdgePair::new(RBA::Edge::new(RBA::Point::new(-1, 2), RBA::Point::new(5, 2)), RBA::Edge::new(RBA::Point::new(-1, 5), RBA::Point::new(5, 5)))
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdgePairs ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_edge_pair )
|
|
|
|
|
assert_equal( arr[0].is_edge_pair?, true )
|
|
|
|
|
assert_equal( arr[0].polygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].edge_pair.to_s, "(-1,2;5,2)/(-1,5;5,5)" )
|
2022-12-04 19:53:37 +01:00
|
|
|
assert_equal( arr[0].point.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].edge.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].box.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].path.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].edge_pair == a, true )
|
|
|
|
|
assert_equal( arr[0].bbox == a.bbox, true )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2022-12-04 19:53:37 +01:00
|
|
|
# points
|
|
|
|
|
|
|
|
|
|
a = RBA::Point::new( -1, 2 )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPoints ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_point )
|
|
|
|
|
assert_equal( arr[0].is_point?, true )
|
|
|
|
|
assert_equal( arr[0].polygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].point.to_s, "-1,2" )
|
|
|
|
|
assert_equal( arr[0].edge.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].edge_pair.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].box.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].path.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].point == a, true )
|
|
|
|
|
assert_equal( arr[0].bbox == RBA::Box::new(a, a), true )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
# paths
|
|
|
|
|
|
|
|
|
|
a = RBA::Path::new( [ RBA::Point::new( 0, 10 ), RBA::Point::new( 10, 50 ) ], 25 )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPaths ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_path )
|
|
|
|
|
assert_equal( arr[0].is_path?, true )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].polygon.to_s, "(12,7;-12,13;-2,53;22,47)" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.to_s, "(12,7;-12,13;-2,53;22,47)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].edge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].edge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].box.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].path.to_s, "(0,10;10,50) w=25 bx=0 ex=0 r=false" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].path == a, true )
|
|
|
|
|
assert_equal( arr[0].path_width, 25 )
|
|
|
|
|
assert_equal( arr[0].perimeter, 132 )
|
|
|
|
|
assert_equal( arr[0].area, 1025 )
|
|
|
|
|
assert_equal( arr[0].path_length, 41 )
|
|
|
|
|
assert_equal( arr[0].path_bgnext, 0 )
|
|
|
|
|
assert_equal( arr[0].path_endext, 0 )
|
|
|
|
|
assert_equal( arr[0].bbox == a.bbox, true )
|
|
|
|
|
parr = []
|
|
|
|
|
arr[0].each_point { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,10", "10,50"] )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
|
|
|
|
# simple polygons
|
|
|
|
|
|
|
|
|
|
a = RBA::SimplePolygon::new( [ RBA::Point::new( 0, 1 ), RBA::Point::new( 1, 5 ), RBA::Point::new( 5, 5 ) ] )
|
|
|
|
|
b = RBA::Polygon::new( [ RBA::Point::new( 0, 1 ), RBA::Point::new( 1, 5 ), RBA::Point::new( 5, 5 ) ] )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
2020-10-11 17:51:54 +02:00
|
|
|
arr = shapes.each( RBA::Shapes::SPolygons ).to_a
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_simple_polygon )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, true )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].polygon.to_s, "(0,1;1,5;5,5)" )
|
|
|
|
|
assert_equal( arr[0].simple_polygon.to_s, "(0,1;1,5;5,5)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].edge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].edge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].box.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].path.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].text.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].is_simple_polygon?, true )
|
2020-05-11 19:24:44 +02:00
|
|
|
begin
|
|
|
|
|
arr[0].each_point { |x| }
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "Shape is not a path in Shape::each_point")
|
|
|
|
|
end
|
|
|
|
|
begin
|
|
|
|
|
arr[0].each_point_hole(0) { |x| }
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "A simple polygon doesn't have holes in Shape::each_point_hole")
|
|
|
|
|
end
|
|
|
|
|
begin
|
|
|
|
|
arr[0].text_string
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "Shape is not a text in Shape::text_string")
|
|
|
|
|
end
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].simple_polygon == a, true )
|
|
|
|
|
assert_equal( arr[0].polygon == b, true )
|
|
|
|
|
assert_equal( arr[0].holes, 0 )
|
|
|
|
|
assert_equal( arr[0].bbox == a.bbox, true )
|
|
|
|
|
parr = []
|
|
|
|
|
arr[0].each_point_hull { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,1", "1,5", "5,5"] )
|
|
|
|
|
earr = []
|
|
|
|
|
arr[0].each_edge { |e| earr.push( e.to_s ) }
|
|
|
|
|
assert_equal( earr, ["(0,1;1,5)", "(1,5;5,5)", "(5,5;0,1)"] )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
|
|
|
|
# polygons
|
|
|
|
|
|
|
|
|
|
a = RBA::Polygon::new( [ RBA::Point::new( 0, 1 ), RBA::Point::new( 1, 5 ), RBA::Point::new( 5, 5 ) ] )
|
2020-05-11 19:24:44 +02:00
|
|
|
a.insert_hole( [ RBA::Point::new( 1, 2 ), RBA::Point::new( 2, 4 ), RBA::Point::new( 4, 4 ) ] )
|
2017-02-12 13:21:08 +01:00
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPolygons ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 2 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_polygon )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, true )
|
|
|
|
|
assert_equal( arr[0].is_simple_polygon?, false )
|
|
|
|
|
assert_equal( arr[0].polygon == a, true )
|
2020-05-11 19:24:44 +02:00
|
|
|
assert_equal( arr[0].holes, 1 )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].bbox == a.bbox, true )
|
|
|
|
|
parr = []
|
|
|
|
|
arr[0].each_point_hull { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,1", "1,5", "5,5"] )
|
2020-05-11 19:24:44 +02:00
|
|
|
parr = []
|
|
|
|
|
arr[0].each_point_hole(0) { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["1,2", "4,4", "2,4"] )
|
|
|
|
|
begin
|
|
|
|
|
arr[0].each_point_hole(1) { |x| }
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "Invalid hole index in Shape::each_point_hole")
|
|
|
|
|
end
|
2017-02-12 13:21:08 +01:00
|
|
|
earr = []
|
|
|
|
|
arr[0].each_edge { |e| earr.push( e.to_s ) }
|
2020-05-11 19:24:44 +02:00
|
|
|
assert_equal( earr, ["(0,1;1,5)", "(1,5;5,5)", "(5,5;0,1)", "(1,2;4,4)", "(4,4;2,4)", "(2,4;1,2)"] )
|
2017-02-12 13:21:08 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2020-10-11 17:51:54 +02:00
|
|
|
# All kind of polygonizable shapes:
|
|
|
|
|
|
|
|
|
|
assert_equal( shapes.each( RBA::Shapes::SRegions ).collect(&:to_s), [ "polygon (0,1;1,5;5,5/1,2;4,4;2,4)",
|
|
|
|
|
"simple_polygon (0,1;1,5;5,5)",
|
|
|
|
|
"path (0,10;10,50) w=25 bx=0 ex=0 r=false",
|
|
|
|
|
"box (10,-10;50,40)" ] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (double types)
|
|
|
|
|
def test_7_DLayout
|
|
|
|
|
|
|
|
|
|
ly = RBA::Layout::new
|
|
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
ldummy = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::DBox::new( 0.010, -0.010, 0.050, 0.040 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::DBox::new( 0.100, -0.010, 0.150, 0.040 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::DBox::new( 0.200, -0.010, 0.250, 0.040 ) )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.bbox.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.area ) }
|
|
|
|
|
assert_equal( arr, [2000, 2500, 2500] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.perimeter ) }
|
|
|
|
|
assert_equal( arr, [180, 200, 200] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPolygons ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_overlapping( RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_overlapping( RBA::DBox::new( 0.04, 0.0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::DBox::new( 0.040, 0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_touching( RBA::Box::new( 40, 0, 100, 10 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.shapes( lindex ).each_touching( RBA::DBox::new( 0.040, 0, 0.100, 0.010 ) ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
c1.clear( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_touching_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
c1.each_overlapping_shape( lindex, RBA::Box::new( 40, 0, 100, 10 ), RBA::Shapes::SBoxes ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
# boxes
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::DBox::new( 0.010, -0.010, 0.050, 0.040 ) )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdges ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 0 )
|
|
|
|
|
arr = []
|
2022-12-04 19:53:37 +01:00
|
|
|
shapes.each( RBA::Shapes::SPoints ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 0 )
|
|
|
|
|
arr = []
|
2017-02-12 13:21:08 +01:00
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_box )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dpolygon.to_s, "(0.01,-0.01;0.01,0.04;0.05,0.04;0.05,-0.01)" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.to_s, "(0.01,-0.01;0.01,0.04;0.05,0.04;0.05,-0.01)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dedge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].dedge_pair.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dbox.to_s, "(0.01,-0.01;0.05,0.04)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dpath.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, false )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
assert_equal( arr[0].dbox.to_s, "(0.01,-0.01;0.05,0.04)" )
|
|
|
|
|
assert_equal( arr[0].dbbox.to_s, "(0.01,-0.01;0.05,0.04)" )
|
|
|
|
|
|
|
|
|
|
# edges
|
|
|
|
|
|
|
|
|
|
a = RBA::DEdge::new( RBA::DPoint::new( -0.001, 0.002 ), RBA::DPoint::new( 0.005, 0.002 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdges ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_edge )
|
|
|
|
|
assert_equal( arr[0].is_edge?, true )
|
|
|
|
|
assert_equal( arr[0].dpolygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dedge.to_s, "(-0.001,0.002;0.005,0.002)" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].dedge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dbox.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dpath.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dbbox.to_s, "(-0.001,0.002;0.005,0.002)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
# edge pairs
|
|
|
|
|
|
|
|
|
|
a = RBA::DEdgePair::new(RBA::DEdge::new(RBA::DPoint::new(-0.001, 0.002), RBA::DPoint::new(0.005, 0.002)), RBA::DEdge::new(RBA::DPoint::new(-0.001, 0.005), RBA::DPoint::new(0.005, 0.005)))
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdgePairs ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_edge_pair )
|
|
|
|
|
assert_equal( arr[0].is_edge_pair?, true )
|
|
|
|
|
assert_equal( arr[0].dpolygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.inspect, "nil" )
|
2022-12-04 19:53:37 +01:00
|
|
|
assert_equal( arr[0].dpoint.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dedge_pair.to_s, "(-0.001,0.002;0.005,0.002)/(-0.001,0.005;0.005,0.005)" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].dedge.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dbox.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dpath.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dbbox.to_s, "(-0.001,0.002;0.005,0.005)" )
|
2018-11-10 22:41:36 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2022-12-04 19:53:37 +01:00
|
|
|
# points
|
|
|
|
|
|
|
|
|
|
a = RBA::DPoint::new( -1, 2 )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPoints ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_point )
|
|
|
|
|
assert_equal( arr[0].is_point?, true )
|
|
|
|
|
assert_equal( arr[0].dpolygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dpoint.to_s, "-1,2" )
|
|
|
|
|
assert_equal( arr[0].dedge.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dedge_pair.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dbox.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dpath.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dbbox.to_s, "(-1,2;-1,2)" )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
# paths
|
|
|
|
|
|
|
|
|
|
a = RBA::DPath::new( [ RBA::DPoint::new( 0, 0.010 ), RBA::DPoint::new( 0.010, 0.050 ) ], 0.025 )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPaths ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_path )
|
|
|
|
|
assert_equal( arr[0].is_path?, true )
|
2020-05-11 19:24:44 +02:00
|
|
|
begin
|
|
|
|
|
arr[0].each_point_hull { |x| }
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "Shape is not a general or simple polygon in Shape::each_point_hull")
|
|
|
|
|
end
|
|
|
|
|
begin
|
|
|
|
|
arr[0].each_point_hole(0) { |x| }
|
|
|
|
|
assert_equal(true, false)
|
|
|
|
|
rescue => ex
|
|
|
|
|
assert_equal(ex.to_s, "Shape is not a general or simple polygon in Shape::each_point_hole")
|
|
|
|
|
end
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dpolygon.to_s, "(0.012,0.007;-0.012,0.013;-0.002,0.053;0.022,0.047)" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.to_s, "(0.012,0.007;-0.012,0.013;-0.002,0.053;0.022,0.047)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dedge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].dedge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dbox.inspect, "nil" )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dpath.to_s, "(0,0.01;0.01,0.05) w=0.025 bx=0 ex=0 r=false" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
|
|
|
|
assert_equal( "%.12g" % arr[0].path_dwidth, "0.025" )
|
|
|
|
|
assert_equal( "%.12g" % arr[0].dperimeter, "0.132" )
|
|
|
|
|
assert_equal( "%.12g" % arr[0].darea, "0.001025" )
|
|
|
|
|
assert_equal( "%.12g" % arr[0].path_dlength, "0.041" )
|
|
|
|
|
assert_equal( arr[0].path_dbgnext, 0 )
|
|
|
|
|
assert_equal( arr[0].path_dendext, 0 )
|
|
|
|
|
parr = []
|
|
|
|
|
arr[0].each_dpoint { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,0.01", "0.01,0.05"] )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
|
|
|
|
# simple polygons
|
|
|
|
|
|
|
|
|
|
a = RBA::DSimplePolygon::new( [ RBA::DPoint::new( 0, 0.001 ), RBA::DPoint::new( 0.001, 0.005 ), RBA::DPoint::new( 0.005, 0.005 ) ] )
|
|
|
|
|
b = RBA::DPolygon::new( [ RBA::DPoint::new( 0, 0.001 ), RBA::DPoint::new( 0.001, 0.005 ), RBA::DPoint::new( 0.005, 0.005 ) ] )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPolygons ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_simple_polygon )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, true )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dpolygon.to_s, "(0,0.001;0.001,0.005;0.005,0.005)" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.to_s, "(0,0.001;0.001,0.005;0.005,0.005)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dedge.inspect, "nil" )
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal( arr[0].dedge_pair.inspect, "nil" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].dbox.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dpath.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].dtext.inspect, "nil" )
|
|
|
|
|
assert_equal( arr[0].is_simple_polygon?, true )
|
|
|
|
|
assert_equal( arr[0].holes, 0 )
|
|
|
|
|
parr = []
|
|
|
|
|
arr[0].each_dpoint_hull { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,0.001", "0.001,0.005", "0.005,0.005"] )
|
|
|
|
|
earr = []
|
|
|
|
|
arr[0].each_dedge { |e| earr.push( e.to_s ) }
|
|
|
|
|
assert_equal( earr, ["(0,0.001;0.001,0.005)", "(0.001,0.005;0.005,0.005)", "(0.005,0.005;0,0.001)"] )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
|
|
|
|
# polygons
|
|
|
|
|
|
|
|
|
|
a = RBA::DPolygon::new( [ RBA::DPoint::new( 0, 0.001 ), RBA::DPoint::new( 0.001, 0.005 ), RBA::DPoint::new( 0.005, 0.005 ) ] )
|
|
|
|
|
c1.shapes( lindex ).insert( a )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SPolygons ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 2 )
|
|
|
|
|
assert_equal( arr[0].prop_id, 0 )
|
|
|
|
|
assert_equal( arr[0].has_prop_id?, false )
|
|
|
|
|
assert_equal( arr[0].is_null?, false )
|
|
|
|
|
assert_equal( arr[0].type, RBA::Shape::t_polygon )
|
|
|
|
|
assert_equal( arr[0].is_polygon?, true )
|
|
|
|
|
assert_equal( arr[0].is_simple_polygon?, false )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dpolygon.to_s, "(0,0.001;0.001,0.005;0.005,0.005)" )
|
|
|
|
|
assert_equal( arr[0].dsimple_polygon.to_s, "(0,0.001;0.001,0.005;0.005,0.005)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal( arr[0].holes, 0 )
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal( arr[0].dbbox.to_s, "(0,0.001;0.005,0.005)" )
|
2017-02-12 13:21:08 +01:00
|
|
|
parr = []
|
|
|
|
|
arr[0].each_dpoint_hull { |p| parr.push( p.to_s ) }
|
|
|
|
|
assert_equal( parr, ["0,0.001", "0.001,0.005", "0.005,0.005"] )
|
|
|
|
|
earr = []
|
|
|
|
|
arr[0].each_dedge { |e| earr.push( e.to_s ) }
|
|
|
|
|
assert_equal( earr, ["(0,0.001;0.001,0.005)", "(0.001,0.005;0.005,0.005)", "(0.005,0.005;0,0.001)"] )
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SBoxes ) { |s| arr.push( s ) }
|
|
|
|
|
assert_equal( arr.size, 1 )
|
|
|
|
|
assert_equal( arr[0].is_box?, true )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes with properties
|
|
|
|
|
def test_8_Layout
|
|
|
|
|
|
|
|
|
|
ly = RBA::Layout::new
|
|
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 100, -10, 150, 40 ), 5 )
|
|
|
|
|
c1.shapes( lindex ).insert( RBA::Box::new( 200, -10, 250, 40 ), 8 )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ); arr.push( s.prop_id ) }
|
|
|
|
|
assert_equal( arr, [ "(10,-10;50,40)", 0, "(100,-10;150,40)", 5, "(200,-10;250,40)", 8 ] )
|
|
|
|
|
|
|
|
|
|
assert_equal( ly.properties( 17 ), [] )
|
|
|
|
|
assert_equal( ly.properties_id( { 17 => "a", "b" => [ 1, 5, 7 ] }.to_a ), 1 )
|
|
|
|
|
assert_equal( ly.properties_id( { 17 => "a", "b" => [ 1, 5, 7 ] }.to_a ), 1 )
|
|
|
|
|
assert_equal( ly.properties_id( { 17 => "a", "b" => [ 1, 5, 8 ] }.to_a ), 2 )
|
|
|
|
|
assert_equal( ly.properties_id( { [1,2] => "hallo", 5 => nil }.to_a ), 3 )
|
|
|
|
|
|
|
|
|
|
h = {}
|
|
|
|
|
ly.properties( 1 ).each { |p| h[p[0]] = p[1] }
|
|
|
|
|
assert_equal( h, { 17 => "a", "b" => [ 1, 5, 7 ] } )
|
|
|
|
|
h = {}
|
|
|
|
|
ly.properties( 2 ).each { |p| h[p[0]] = p[1] }
|
|
|
|
|
assert_equal( h, { 17 => "a", "b" => [ 1, 5, 8 ] } )
|
|
|
|
|
h = {}
|
|
|
|
|
ly.properties( 3 ).each { |p| h[p[0]] = p[1] }
|
|
|
|
|
assert_equal( h, { [1,2] => "hallo", 5 => nil } )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (edit)
|
|
|
|
|
def test_7_LayoutEdit
|
|
|
|
|
|
2018-07-10 01:17:35 +02:00
|
|
|
ly = RBA::Layout::new(true)
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
ldummy = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s2 = c1.shapes( lindex ).insert( RBA::Box::new( 100, -10, 150, 40 ) )
|
|
|
|
|
s3 = c1.shapes( lindex ).insert( RBA::Box::new( 200, -10, 250, 40 ) )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(10,-10;50,40)", "(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).erase( s1 )
|
|
|
|
|
assert_equal( s1.is_valid?, false )
|
|
|
|
|
assert_equal( s1.shapes.is_valid?(s1), false )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(100,-10;150,40)", "(200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).erase( s3 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, ["(100,-10;150,40)"] )
|
|
|
|
|
|
|
|
|
|
c1.shapes( lindex ).erase( s2 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.box.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
# replace etc.
|
|
|
|
|
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
path = RBA::Path::new( [ RBA::Point::new( 0, 10 ), RBA::Point::new( 10, 50 ) ], 25 )
|
|
|
|
|
s2 = c1.shapes( lindex ).insert( path )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["path (0,10;10,50) w=25 bx=0 ex=0 r=false", "box (10,-10;50,40)"] )
|
|
|
|
|
|
|
|
|
|
sdup = shapes.dup
|
|
|
|
|
sdup.transform( RBA::ICplxTrans::new( 1.0, 45.0, false, RBA::Point::new(0.0, 0.0) ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
sdup.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["polygon (14,0;-21,35;7,64;42,28)", "path (-7,7;-28,42) w=25 bx=0 ex=0 r=false"] )
|
|
|
|
|
|
|
|
|
|
sdup = shapes.dup
|
|
|
|
|
sdup.transform( RBA::Trans::new( 1, false, RBA::Point::new(0.0, 0.0) ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
sdup.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["path (-10,0;-50,10) w=25 bx=0 ex=0 r=false", "box (-40,10;10,50)"] )
|
|
|
|
|
|
|
|
|
|
s1 = shapes.transform( s1, RBA::DCplxTrans::new( 1.0, 45.0, false, RBA::DPoint::new(0.001, 0.002) ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (15,2;-20,37;8,66;43,30)", "path (0,10;10,50) w=25 bx=0 ex=0 r=false"] )
|
|
|
|
|
|
|
|
|
|
shapes.erase( s1 )
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s1 = shapes.transform( s1, RBA::ICplxTrans::new( 1.0, 45.0, false, RBA::Point::new(0.0, 0.0) ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "path (0,10;10,50) w=25 bx=0 ex=0 r=false"] )
|
|
|
|
|
|
|
|
|
|
shapes.erase( s1 )
|
|
|
|
|
s1a = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( s1a, RBA::Trans::new( 1 ) )
|
|
|
|
|
shapes.erase( s1a )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["path (0,10;10,50) w=25 bx=0 ex=0 r=false", "box (-40,10;10,50)"] )
|
|
|
|
|
|
|
|
|
|
shapes.erase( s1 )
|
|
|
|
|
s1a = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( s1a, RBA::ICplxTrans::new( 1.0, 45.0, false, RBA::Point::new(0.0, 0.0) ) )
|
|
|
|
|
shapes.erase( s1a )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "path (0,10;10,50) w=25 bx=0 ex=0 r=false"] )
|
|
|
|
|
|
|
|
|
|
shapes.erase( s2 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)"] )
|
|
|
|
|
|
|
|
|
|
s2 = shapes.insert( s1 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "simple_polygon (14,0;-21,35;7,64;42,28)"] )
|
|
|
|
|
|
|
|
|
|
s2 = shapes.replace_prop_id( s2, 17 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "simple_polygon (14,0;-21,35;7,64;42,28) prop_id=17"] )
|
|
|
|
|
|
|
|
|
|
s2 = shapes.replace( s2, RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "box (10,-10;50,40) prop_id=17"] )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
s2 = shapes.replace( s2, RBA::Edge::new( 10, -10, 50, 40 ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "edge (10,-10;50,40) prop_id=17"] )
|
|
|
|
|
|
|
|
|
|
s2 = shapes.replace( s2, RBA::EdgePair::new( RBA::Edge::new( 10, -10, 50, 40 ), RBA::Edge::new( 10, 0, 50, 30 ) ) )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)", "edge_pair (10,-10;50,40)/(10,0;50,30) prop_id=17"] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
shapes.erase( s2 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["simple_polygon (14,0;-21,35;7,64;42,28)"] )
|
|
|
|
|
|
|
|
|
|
shapes.erase( s1 )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, [] )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (edit, new methods)
|
|
|
|
|
def test_7_LayoutEdit2
|
|
|
|
|
|
2018-07-10 01:17:35 +02:00
|
|
|
ly = RBA::Layout::new(true)
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
ldummy = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s2 = c1.shapes( lindex ).insert( RBA::Box::new( 100, -10, 150, 40 ) )
|
|
|
|
|
s3 = c1.shapes( lindex ).insert( RBA::Box::new( 200, -10, 250, 40 ) )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.cell.name, c1.name )
|
|
|
|
|
assert_equal( s1.layout.inspect, ly.inspect )
|
|
|
|
|
|
|
|
|
|
s1.box = RBA::Box::new( 11, -11, 51, 41 )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["box (11,-11;51,41)", "box (100,-10;150,40)", "box (200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
s2.text = RBA::Text::new( "text", RBA::Trans::new( RBA::Point::new( 100, 200 ) ) )
|
|
|
|
|
assert_equal(s2.polygon.inspect, "nil")
|
|
|
|
|
assert_equal(s2.simple_polygon.inspect, "nil")
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal(s2.text.to_s, "('text',r0 100,200)")
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal(s2.edge.inspect, "nil")
|
2018-11-10 22:41:36 +01:00
|
|
|
assert_equal(s2.edge_pair.inspect, "nil")
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal(s2.path.inspect, "nil")
|
|
|
|
|
assert_equal(s2.box.inspect, "nil")
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["box (11,-11;51,41)", "box (200,-10;250,40)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
s3.edge_pair = RBA::EdgePair::new(RBA::Edge::new(RBA::Point::new(1, 2), RBA::Point::new(3, 4)), RBA::Edge::new(RBA::Point::new(1, 12), RBA::Point::new(3, 14)))
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge_pair (1,2;3,4)/(1,12;3,14)", "box (11,-11;51,41)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdgePairs ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge_pair (1,2;3,4)/(1,12;3,14)"] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
s3.edge = RBA::Edge::new( RBA::Point::new( 1, 2 ), RBA::Point::new( 3, 4 ) )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "box (11,-11;51,41)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SEdges ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)"] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
pts = [ RBA::Point::new( 100, 200 ), RBA::Point::new( 400, 300 ), RBA::Point::new( 500, 600 ) ]
|
|
|
|
|
s1.polygon = RBA::Polygon::new( pts )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["polygon (100,200;500,600;400,300)", "edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.prop_id, 0 )
|
|
|
|
|
assert_equal( s1.has_prop_id?, false )
|
|
|
|
|
s1.prop_id = 1
|
|
|
|
|
assert_equal( s1.prop_id, 1 )
|
|
|
|
|
assert_equal( s1.has_prop_id?, true )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["polygon (100,200;500,600;400,300) prop_id=1", "edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s1.path = RBA::Path::new( [ RBA::Point::new( 0, 10 ), RBA::Point::new( 10, 50 ) ], 25 )
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=25 bx=0 ex=0 r=false prop_id=1" )
|
|
|
|
|
s1.path_width = 12
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=0 ex=0 r=false prop_id=1" )
|
|
|
|
|
assert_equal( s1.path_width, 12 )
|
|
|
|
|
s1.path_bgnext = 1
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=0 r=false prop_id=1" )
|
|
|
|
|
assert_equal( s1.path_bgnext, 1 )
|
|
|
|
|
s1.path_endext = 2
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=2 r=false prop_id=1" )
|
|
|
|
|
assert_equal( s1.path_endext, 2 )
|
|
|
|
|
s1.round_path = true
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=2 r=true prop_id=1" )
|
|
|
|
|
assert_equal( s1.round_path?, true )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "path (0,10;10,50) w=12 bx=1 ex=2 r=true prop_id=1", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s1.box = RBA::Box::new(0, 10, 20, 40)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,10;20,40) prop_id=1" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_width.to_s, "20" )
|
|
|
|
|
s1.box_width = 30
|
|
|
|
|
assert_equal( s1.to_s, "box (-5,10;25,40) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_width.to_s, "30" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_height.to_s, "30" )
|
|
|
|
|
s1.box_height = 40
|
|
|
|
|
assert_equal( s1.to_s, "box (-5,5;25,45) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_height.to_s, "40" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_p1.to_s, "-5,5" )
|
|
|
|
|
s1.box_p1 = RBA::Point::new(0, 0)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,0;25,45) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_p1.to_s, "0,0" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_p2.to_s, "25,45" )
|
|
|
|
|
s1.box_p2 = RBA::Point::new(10, 20)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,0;10,20) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_p2.to_s, "10,20" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_center.to_s, "5,10" )
|
|
|
|
|
s1.box_center = RBA::Point::new(-10, -20)
|
|
|
|
|
assert_equal( s1.to_s, "box (-15,-30;-5,-10) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_center.to_s, "-10,-20" )
|
|
|
|
|
|
|
|
|
|
s1.text = RBA::Text::new( "text", RBA::Trans::new( RBA::Point::new( 100, 200 ) ) )
|
|
|
|
|
assert_equal( s1.to_s, "text ('text',r0 100,200) prop_id=1" )
|
|
|
|
|
|
|
|
|
|
s1.text_string = "blabla"
|
|
|
|
|
assert_equal( s1.to_s, "text ('blabla',r0 100,200) prop_id=1" )
|
|
|
|
|
assert_equal( s1.text_string, "blabla" )
|
|
|
|
|
|
|
|
|
|
s1.text_halign = 1
|
|
|
|
|
assert_equal( s1.text_halign, 1 )
|
|
|
|
|
|
|
|
|
|
s1.text_valign = 2
|
|
|
|
|
assert_equal( s1.text_valign, 2 )
|
|
|
|
|
|
|
|
|
|
s1.text_font = 3
|
|
|
|
|
assert_equal( s1.text_font, 3 )
|
|
|
|
|
|
|
|
|
|
s1.text_trans = RBA::Trans::new( 1, false, RBA::Point::new( 101, 201 ) )
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "r90 101,201" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.text_rot.to_s, "1" )
|
|
|
|
|
s1.text_rot = 4
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "m0 101,201" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.text_pos.to_s, "101,201" )
|
|
|
|
|
s1.text_pos = RBA::Point::new(100, 200)
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "m0 100,200" )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
2023-08-05 21:02:26 +02:00
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "text ('text',r0 100,200)", "text ('blabla',m0 100,200) f=3 ha=c va=b prop_id=1"] )
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
assert_equal( s1.is_valid?, true )
|
|
|
|
|
assert_equal( s1.shapes.is_valid?(s1), true )
|
|
|
|
|
s1.delete
|
|
|
|
|
assert_equal( s1.to_s, "null" )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::Trans::new(RBA::Trans::R90));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (-2,1;-4,3)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::ICplxTrans::new(2.0));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (-4,2;-8,6)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DCplxTrans::new(0.5, 0.0, false, RBA::DVector::new(0.01, 0.02)));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (8,21;6,23)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DTrans::new(0, false, RBA::DVector::new(0.01, 0.02)));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (18,41;16,43)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (edit, new methods)
|
|
|
|
|
def test_7_DLayoutEdit2
|
|
|
|
|
|
2018-07-10 01:17:35 +02:00
|
|
|
ly = RBA::Layout::new(true)
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
ldummy = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
s1 = c1.shapes( lindex ).insert( RBA::DBox::new( 0.010, -0.010, 0.050, 0.040 ) )
|
|
|
|
|
s2 = c1.shapes( lindex ).insert( RBA::DBox::new( 0.100, -0.010, 0.150, 0.040 ) )
|
|
|
|
|
s3 = c1.shapes( lindex ).insert( RBA::DBox::new( 0.200, -0.010, 0.250, 0.040 ) )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.cell.name, c1.name )
|
|
|
|
|
assert_equal( s1.layout.inspect, ly.inspect )
|
|
|
|
|
|
|
|
|
|
s1.box = RBA::DBox::new( 0.011, -0.011, 0.051, 0.041 )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["box (11,-11;51,41)", "box (100,-10;150,40)", "box (200,-10;250,40)"] )
|
|
|
|
|
|
|
|
|
|
s2.text = RBA::DText::new( "text", RBA::DTrans::new( RBA::DPoint::new( 0.100, 0.200 ) ) )
|
|
|
|
|
assert_equal(s2.polygon.inspect, "nil")
|
|
|
|
|
assert_equal(s2.simple_polygon.inspect, "nil")
|
2020-03-28 22:31:19 +01:00
|
|
|
assert_equal(s2.text.to_s, "('text',r0 100,200)")
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal(s2.edge.inspect, "nil")
|
|
|
|
|
assert_equal(s2.path.inspect, "nil")
|
|
|
|
|
assert_equal(s2.box.inspect, "nil")
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["box (11,-11;51,41)", "box (200,-10;250,40)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
2018-11-10 22:41:36 +01:00
|
|
|
s3.edge_pair = RBA::DEdgePair::new(RBA::DEdge::new(RBA::DPoint::new(0.001, 0.002), RBA::DPoint::new(0.003, 0.004)), RBA::DEdge::new(RBA::DPoint::new(0.001, 0.012), RBA::DPoint::new(0.003, 0.014)))
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge_pair (1,2;3,4)/(1,12;3,14)", "box (11,-11;51,41)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
s3.edge = RBA::DEdge::new( RBA::DPoint::new( 0.001, 0.002 ), RBA::DPoint::new( 0.003, 0.004 ) )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "box (11,-11;51,41)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
pts = [ RBA::DPoint::new( 0.100, 0.200 ), RBA::DPoint::new( 0.400, 0.300 ), RBA::DPoint::new( 0.500, 0.600 ) ]
|
|
|
|
|
s1.polygon = RBA::DPolygon::new( pts )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["polygon (100,200;500,600;400,300)", "edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.prop_id, 0 )
|
|
|
|
|
assert_equal( s1.has_prop_id?, false )
|
|
|
|
|
s1.prop_id = 1
|
|
|
|
|
assert_equal( s1.prop_id, 1 )
|
|
|
|
|
assert_equal( s1.has_prop_id?, true )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["polygon (100,200;500,600;400,300) prop_id=1", "edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s1.path = RBA::DPath::new( [ RBA::DPoint::new( 0, 0.010 ), RBA::DPoint::new( 0.010, 0.050 ) ], 0.025 )
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=25 bx=0 ex=0 r=false prop_id=1" )
|
|
|
|
|
s1.path_dwidth = 0.012
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=0 ex=0 r=false prop_id=1" )
|
|
|
|
|
assert_equal( "%.12g" % s1.path_dwidth, "0.012" )
|
|
|
|
|
s1.path_dbgnext = 0.001
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=0 r=false prop_id=1" )
|
|
|
|
|
assert_equal( "%.12g" % s1.path_dbgnext, "0.001" )
|
|
|
|
|
s1.path_dendext = 0.002
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=2 r=false prop_id=1" )
|
|
|
|
|
assert_equal( "%.12g" % s1.path_dendext, "0.002" )
|
|
|
|
|
s1.round_path = true
|
|
|
|
|
assert_equal( s1.to_s, "path (0,10;10,50) w=12 bx=1 ex=2 r=true prop_id=1" )
|
|
|
|
|
assert_equal( s1.round_path?, true )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "path (0,10;10,50) w=12 bx=1 ex=2 r=true prop_id=1", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s1.box = RBA::DBox::new(0, 0.010, 0.020, 0.040)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,10;20,40) prop_id=1" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_dwidth.to_s, "0.02" )
|
|
|
|
|
s1.box_dwidth = 0.03
|
|
|
|
|
assert_equal( s1.to_s, "box (-5,10;25,40) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_dwidth.to_s, "0.03" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_dheight.to_s, "0.03" )
|
|
|
|
|
s1.box_dheight = 0.04
|
|
|
|
|
assert_equal( s1.to_s, "box (-5,5;25,45) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_dheight.to_s, "0.04" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_dp1.to_s, "-0.005,0.005" )
|
|
|
|
|
s1.box_dp1 = RBA::DPoint::new(0, 0)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,0;25,45) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_dp1.to_s, "0,0" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_dp2.to_s, "0.025,0.045" )
|
|
|
|
|
s1.box_dp2 = RBA::DPoint::new(0.010, 0.020)
|
|
|
|
|
assert_equal( s1.to_s, "box (0,0;10,20) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_dp2.to_s, "0.01,0.02" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.box_dcenter.to_s, "0.005,0.01" )
|
|
|
|
|
s1.box_dcenter = RBA::DPoint::new(-0.010, -0.020)
|
|
|
|
|
assert_equal( s1.to_s, "box (-15,-30;-5,-10) prop_id=1" )
|
|
|
|
|
assert_equal( s1.box_dcenter.to_s, "-0.01,-0.02" )
|
|
|
|
|
|
|
|
|
|
s1.text = RBA::DText::new( "text", RBA::DTrans::new( RBA::DPoint::new( 0.100, 0.200 ) ) )
|
|
|
|
|
assert_equal( s1.to_s, "text ('text',r0 100,200) prop_id=1" )
|
|
|
|
|
|
|
|
|
|
s1.text_string = "blabla"
|
|
|
|
|
assert_equal( s1.to_s, "text ('blabla',r0 100,200) prop_id=1" )
|
|
|
|
|
assert_equal( s1.text_string, "blabla" )
|
|
|
|
|
|
|
|
|
|
s1.text_halign = 1
|
|
|
|
|
assert_equal( s1.text_halign, 1 )
|
|
|
|
|
|
|
|
|
|
s1.text_valign = 2
|
|
|
|
|
assert_equal( s1.text_valign, 2 )
|
|
|
|
|
|
|
|
|
|
s1.text_font = 3
|
|
|
|
|
assert_equal( s1.text_font, 3 )
|
|
|
|
|
|
|
|
|
|
s1.text_dtrans = RBA::DTrans::new( 1, false, RBA::DPoint::new( 0.101, 0.201 ) )
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "r90 101,201" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.text_rot.to_s, "1" )
|
|
|
|
|
s1.text_rot = 4
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "m0 101,201" )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.text_dpos.to_s, "0.101,0.201" )
|
|
|
|
|
s1.text_dpos = RBA::DPoint::new(0.100, 0.200)
|
|
|
|
|
assert_equal( s1.text_trans.to_s, "m0 100,200" )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
2023-08-05 21:02:26 +02:00
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "text ('text',r0 100,200)", "text ('blabla',m0 100,200) f=3 ha=c va=b prop_id=1"] )
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
assert_equal( s1.is_valid?, true )
|
|
|
|
|
assert_equal( s1.shapes.is_valid?(s1), true )
|
|
|
|
|
s1.delete
|
|
|
|
|
assert_equal( s1.to_s, "null" )
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (1,2;3,4)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DTrans::new(RBA::DTrans::R90));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (-2,1;-4,3)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DCplxTrans::new(2.0));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (-4,2;-8,6)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DCplxTrans::new(0.5, 0.0, false, RBA::DVector::new(0.01, 0.02)));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (8,21;6,23)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
s3.transform (RBA::DTrans::new(0, false, RBA::DVector::new(0.01, 0.02)));
|
|
|
|
|
|
|
|
|
|
shapes = c1.shapes( lindex )
|
|
|
|
|
|
|
|
|
|
arr = []
|
|
|
|
|
shapes.each( RBA::Shapes::SAll ) { |s| arr.push( s.to_s ) }
|
|
|
|
|
assert_equal( arr, ["edge (18,41;16,43)", "text ('text',r0 100,200)"] )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (edit, new methods)
|
|
|
|
|
def test_7_LayoutEdit3
|
|
|
|
|
|
2018-07-10 01:17:35 +02:00
|
|
|
ly = RBA::Layout::new(true)
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
ci1 = ly.add_cell( "c1" )
|
|
|
|
|
ci2 = ly.add_cell( "c2" )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 16
|
|
|
|
|
linfo.datatype = 1
|
|
|
|
|
lindex1 = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
linfo = RBA::LayerInfo::new
|
|
|
|
|
linfo.layer = 10
|
|
|
|
|
linfo.datatype = 2
|
|
|
|
|
lindex2 = ly.insert_layer( linfo )
|
|
|
|
|
|
|
|
|
|
c1 = ly.cell( ci1 )
|
|
|
|
|
c2 = ly.cell( ci2 )
|
|
|
|
|
|
|
|
|
|
s1 = c1.shapes( lindex1 ).insert( RBA::Box::new( 10, -10, 50, 40 ) )
|
|
|
|
|
s2 = c1.shapes( lindex1 ).insert( RBA::Box::new( 100, -10, 150, 40 ) )
|
|
|
|
|
s3 = c1.shapes( lindex2 ).insert( RBA::Box::new( 200, -10, 250, 40 ) )
|
|
|
|
|
|
|
|
|
|
assert_equal( s1.layer, lindex1 )
|
|
|
|
|
assert_equal( s3.layer, lindex2 )
|
|
|
|
|
assert_equal( s1.layer_info.to_s, "16/1" )
|
|
|
|
|
assert_equal( s3.layer_info.to_s, "10/2" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (10,-10;50,40);box (100,-10;150,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (200,-10;250,40)" )
|
|
|
|
|
|
|
|
|
|
s3.layer = lindex1
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (10,-10;50,40);box (100,-10;150,40);box (200,-10;250,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "" )
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
s3.layer = 17
|
|
|
|
|
assert_equal( false, true )
|
|
|
|
|
rescue => ex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
s1.layer_info = RBA::LayerInfo::new(10, 2)
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (100,-10;150,40);box (200,-10;250,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (10,-10;50,40)" )
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
s3.layer_info = RBA::LayerInfo("name")
|
|
|
|
|
assert_equal( false, true )
|
|
|
|
|
rescue => ex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
s3.cell = c2
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (100,-10;150,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (10,-10;50,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c2.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (200,-10;250,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c2.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "" )
|
|
|
|
|
|
|
|
|
|
s1.cell = c2
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (100,-10;150,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c1.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c2.shapes(lindex1).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (200,-10;250,40)" )
|
|
|
|
|
|
|
|
|
|
str = []
|
|
|
|
|
c2.shapes(lindex2).each { |s| str << s.to_s }
|
|
|
|
|
assert_equal( str.join(";"), "box (10,-10;50,40)" )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Shapes (edge iterator)
|
|
|
|
|
def test_8
|
|
|
|
|
|
|
|
|
|
shapes = RBA::Shapes::new
|
|
|
|
|
|
|
|
|
|
hull = [ RBA::Point::new(0, 0), RBA::Point::new(6000, 0),
|
|
|
|
|
RBA::Point::new(6000, 3000), RBA::Point::new(0, 3000) ]
|
|
|
|
|
hole1 = [ RBA::Point::new(1000, 1000), RBA::Point::new(2000, 1000),
|
|
|
|
|
RBA::Point::new(2000, 2000), RBA::Point::new(1000, 2000) ]
|
|
|
|
|
hole2 = [ RBA::Point::new(3000, 1000), RBA::Point::new(4000, 1000),
|
|
|
|
|
RBA::Point::new(4000, 2000), RBA::Point::new(3000, 2000) ]
|
|
|
|
|
poly = RBA::Polygon::new(hull)
|
|
|
|
|
poly.insert_hole(hole1)
|
|
|
|
|
poly.insert_hole(hole2)
|
|
|
|
|
|
|
|
|
|
s = shapes.insert(poly)
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(0,0;0,3000)/(0,3000;6000,3000)/(6000,3000;6000,0)/(6000,0;0,0)/(1000,1000;2000,1000)/(2000,1000;2000,2000)/(2000,2000;1000,2000)/(1000,2000;1000,1000)/(3000,1000;4000,1000)/(4000,1000;4000,2000)/(4000,2000;3000,2000)/(3000,2000;3000,1000)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(0) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(0,0;0,3000)/(0,3000;6000,3000)/(6000,3000;6000,0)/(6000,0;0,0)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(1) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(1000,1000;2000,1000)/(2000,1000;2000,2000)/(2000,2000;1000,2000)/(1000,2000;1000,1000)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(2) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(3000,1000;4000,1000)/(4000,1000;4000,2000)/(4000,2000;3000,2000)/(3000,2000;3000,1000)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(3) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "" )
|
|
|
|
|
|
|
|
|
|
shapes.clear
|
|
|
|
|
|
|
|
|
|
poly = RBA::SimplePolygon::new(hull)
|
|
|
|
|
|
|
|
|
|
s = shapes.insert(poly)
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(0,0;0,3000)/(0,3000;6000,3000)/(6000,3000;6000,0)/(6000,0;0,0)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(0) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "(0,0;0,3000)/(0,3000;6000,3000)/(6000,3000;6000,0)/(6000,0;0,0)" )
|
|
|
|
|
es = []
|
|
|
|
|
s.each_edge(1) { |e| es << e.to_s }
|
|
|
|
|
assert_equal( es.join("/"), "" )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2018-04-28 00:21:36 +02:00
|
|
|
# Shapes (insert from recursive shape iterator and other shape container)
|
|
|
|
|
def test_9
|
|
|
|
|
|
|
|
|
|
l = RBA::Layout.new
|
|
|
|
|
l.insert_layer_at(0, RBA::LayerInfo.new(1, 0))
|
|
|
|
|
l.insert_layer_at(1, RBA::LayerInfo.new(2, 0))
|
|
|
|
|
c0 = l.cell(l.add_cell("c0"))
|
|
|
|
|
c1 = l.cell(l.add_cell("c1"))
|
|
|
|
|
c2 = l.cell(l.add_cell("c2"))
|
|
|
|
|
c3 = l.cell(l.add_cell("c3"))
|
|
|
|
|
|
|
|
|
|
tt = RBA::Trans.new
|
|
|
|
|
c0.insert(RBA::CellInstArray.new(c1.cell_index, tt))
|
|
|
|
|
c0.insert(RBA::CellInstArray.new(c2.cell_index, RBA::Trans.new(RBA::Point.new(100, -100))))
|
|
|
|
|
c0.insert(RBA::CellInstArray.new(c3.cell_index, RBA::Trans.new(1)))
|
|
|
|
|
c2.insert(RBA::CellInstArray.new(c3.cell_index, RBA::Trans.new(RBA::Point.new(1100, 0))))
|
|
|
|
|
|
|
|
|
|
b = RBA::Box.new(0, 100, 1000, 1200)
|
|
|
|
|
c0.shapes(0).insert(b)
|
|
|
|
|
c1.shapes(0).insert(b)
|
|
|
|
|
c2.shapes(0).insert(b)
|
|
|
|
|
c3.shapes(0).insert(b)
|
|
|
|
|
|
|
|
|
|
shapes = RBA::Shapes::new
|
|
|
|
|
i1 = l.begin_shapes_touching(c0.cell_index, 0, RBA::Box.new(0, 0, 100, 100))
|
|
|
|
|
shapes.insert(i1)
|
|
|
|
|
assert_equal(shapes.collect { |s| s.to_s }.join(","), "box (0,100;1000,1200),box (0,100;1000,1200),box (100,0;1100,1100)")
|
|
|
|
|
|
|
|
|
|
shapes.clear
|
|
|
|
|
shapes.insert(i1, RBA::ICplxTrans::new(2.0))
|
|
|
|
|
assert_equal(shapes.collect { |s| s.to_s }.join(","), "box (0,200;2000,2400),box (0,200;2000,2400),box (200,0;2200,2200)")
|
|
|
|
|
|
|
|
|
|
shapes2 = RBA::Shapes::new
|
|
|
|
|
shapes2.insert(shapes)
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "box (0,200;2000,2400),box (0,200;2000,2400),box (200,0;2200,2200)")
|
|
|
|
|
|
|
|
|
|
shapes2.clear
|
|
|
|
|
shapes2.insert(shapes, RBA::ICplxTrans::new(0.5))
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "box (0,100;1000,1200),box (0,100;1000,1200),box (100,0;1100,1100)")
|
|
|
|
|
|
|
|
|
|
shapes2.clear
|
|
|
|
|
shapes2.insert(shapes, RBA::Shapes::SPolygons, RBA::ICplxTrans::new(0.5))
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "")
|
|
|
|
|
|
|
|
|
|
shapes2.clear
|
|
|
|
|
shapes2.insert(shapes, RBA::Shapes::SAll, RBA::ICplxTrans::new(0.5))
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "box (0,100;1000,1200),box (0,100;1000,1200),box (100,0;1100,1100)")
|
|
|
|
|
|
|
|
|
|
shapes2.clear
|
|
|
|
|
shapes2.insert(shapes, RBA::Shapes::SPolygons)
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "")
|
|
|
|
|
|
|
|
|
|
shapes2.clear
|
|
|
|
|
shapes2.insert(shapes, RBA::Shapes::SAll)
|
|
|
|
|
assert_equal(shapes2.collect { |s| s.to_s }.join(","), "box (0,200;2000,2400),box (0,200;2000,2400),box (200,0;2200,2200)")
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2018-08-13 09:30:28 +02:00
|
|
|
# issue 152 (number of shapes count wrong in viewer mode)
|
|
|
|
|
def test_10
|
|
|
|
|
|
|
|
|
|
ly = RBA::Layout::new(true)
|
|
|
|
|
ly.read(File.join($ut_testsrc, "testdata", "oasis", "issue_152.oas"))
|
|
|
|
|
assert_equal(ly.top_cell.shapes(ly.layer(1, 0)).size, 200)
|
|
|
|
|
ly.top_cell.shapes(ly.layer(1, 0)).insert(RBA::Polygon::new(RBA::Box::new(0, 0, 100, 100)))
|
|
|
|
|
assert_equal(ly.top_cell.shapes(ly.layer(1, 0)).size, 201)
|
|
|
|
|
|
|
|
|
|
ly = RBA::Layout::new(false)
|
|
|
|
|
ly.read(File.join($ut_testsrc, "testdata", "oasis", "issue_152.oas"))
|
|
|
|
|
assert_equal(ly.top_cell.shapes(ly.layer(1, 0)).size, 200)
|
|
|
|
|
ly.top_cell.shapes(ly.layer(1, 0)).insert(RBA::Polygon::new(RBA::Box::new(0, 0, 100, 100)))
|
|
|
|
|
assert_equal(ly.top_cell.shapes(ly.layer(1, 0)).size, 201)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2023-05-31 22:13:22 +02:00
|
|
|
# Shapes with shape-type specific insert and clear
|
|
|
|
|
def test_11
|
|
|
|
|
|
|
|
|
|
s = RBA::Shapes::new
|
|
|
|
|
s.insert(RBA::Box::new(1, 2, 3, 4))
|
|
|
|
|
s.insert(RBA::Polygon::new(RBA::Box::new(1, 2, 3, 4)))
|
|
|
|
|
|
|
|
|
|
assert_equal(s.each.collect { |sh| sh.to_s }.join("; "), "polygon (1,2;1,4;3,4;3,2); box (1,2;3,4)")
|
|
|
|
|
|
|
|
|
|
s2 = RBA::Shapes::new
|
|
|
|
|
s2.insert(s)
|
|
|
|
|
|
|
|
|
|
assert_equal(s2.each.collect { |sh| sh.to_s }.join("; "), "polygon (1,2;1,4;3,4;3,2); box (1,2;3,4)")
|
|
|
|
|
|
|
|
|
|
s2.clear(RBA::Shapes::SPolygons)
|
|
|
|
|
|
|
|
|
|
assert_equal(s2.each.collect { |sh| sh.to_s }.join("; "), "box (1,2;3,4)")
|
|
|
|
|
|
|
|
|
|
s2.clear
|
|
|
|
|
|
|
|
|
|
assert_equal(s2.each.collect { |sh| sh.to_s }.join("; "), "")
|
|
|
|
|
|
|
|
|
|
s2.insert(s, RBA::Shapes::SPolygons)
|
|
|
|
|
|
|
|
|
|
assert_equal(s2.each.collect { |sh| sh.to_s }.join("; "), "polygon (1,2;1,4;3,4;3,2)")
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
load("test_epilogue.rb")
|