shape merge
| 586 | |
| 587 | # shape merge |
| 588 | def test_10 |
| 589 | |
| 590 | lay = RBA::Layout::new |
| 591 | cid_top = lay.add_cell( "TOP" ) |
| 592 | cid_a = lay.add_cell( "A" ) |
| 593 | li = RBA::LayerInfo::new |
| 594 | lid_a = lay.insert_layer( li ) |
| 595 | lid_b = lay.insert_layer( li ) |
| 596 | lay.cell( cid_top ).insert( RBA::CellInstArray::new( cid_a, RBA::Trans::new( 0, 0 ) ) ) |
| 597 | lay.cell( cid_top ).insert( RBA::CellInstArray::new( cid_a, RBA::Trans::new( 200, 200 ) ) ) |
| 598 | lay.cell( cid_a ).shapes( lid_a ).insert( RBA::Box::new( 0, 0, 1000, 1000 ) ) |
| 599 | lay.cell( cid_a ).shapes( lid_b ).insert( RBA::Box::new( 100, 100, 300, 300 ) ) |
| 600 | |
| 601 | sp = RBA::ShapeProcessor::new |
| 602 | |
| 603 | sh = RBA::Shapes::new |
| 604 | |
| 605 | sp.merge( lay, lay.cell( cid_top ), lid_a, sh, true, 0, false, true ) |
| 606 | assert_equal( sh2s(sh), "(0,0;0,1000;200,1000;200,1200;1200,1200;1200,200;1000,200;1000,0)" ) |
| 607 | |
| 608 | sp.merge( lay, lay.cell( cid_top ), lid_a, sh, true, 1, false, true ) |
| 609 | assert_equal( sh2s(sh), "(200,200;200,1000;1000,1000;1000,200)" ) |
| 610 | |
| 611 | sp.merge( lay, lay.cell( cid_top ), lid_a, sh, false, 0, false, true ) |
| 612 | assert_equal( sh2s(sh), "" ) |
| 613 | |
| 614 | sp.merge( lay, lay.cell( cid_a ), lid_a, sh, false, 0, false, true ) |
| 615 | assert_equal( sh2s(sh), "(0,0;0,1000;1000,1000;1000,0)" ) |
| 616 | |
| 617 | sp.merge( lay, lay.cell( cid_top ), lid_b, sh, true, 0, false, true ) |
| 618 | assert_equal( sh2s(sh), "(100,100;100,300;300,300;300,100);(300,300;300,500;500,500;500,300)" ) |
| 619 | |
| 620 | sp.merge( lay, lay.cell( cid_top ), lid_b, sh, true, 0, false, false ) |
| 621 | assert_equal( sh2s(sh), "(100,100;100,300;300,300;300,500;500,500;500,300;300,300;300,100)" ) |
| 622 | |
| 623 | sha = [] |
| 624 | lay.cell( cid_a ).shapes( lid_b ).each { |s| sha.push( s ) } |
| 625 | ee = sp.merge( sha, 0 ) |
| 626 | |
| 627 | assert_equal( a2s(ee), "(100,100;100,300);(300,100;100,100);(300,300;300,100);(100,300;300,300)" ) |
| 628 | |
| 629 | ee = sp.merge_to_polygon( sha, 0, true, false ) |
| 630 | |
| 631 | assert_equal( a2s(ee), "(100,100;100,300;300,300;300,100)" ) |
| 632 | |
| 633 | sha = [] |
| 634 | tt = [] |
| 635 | lay.cell( cid_a ).shapes( lid_a ).each { |s| sha.push( s ); tt.push( RBA::CplxTrans::new( RBA::Trans::new( 0, 0 ) ) ) } |
| 636 | lay.cell( cid_a ).shapes( lid_a ).each { |s| sha.push( s ); tt.push( RBA::CplxTrans::new( RBA::Trans::new( 200, 200 ) ) ) } |
| 637 | ee = sp.merge( sha, tt, 0 ) |
| 638 | |
| 639 | assert_equal( a2s(ee), "(0,0;0,1000);(1000,0;0,0);(1000,200;1000,0);(1200,200;1000,200);(1200,1200;1200,200);(0,1000;200,1000);(200,1000;200,1200);(200,1200;1200,1200)" ) |
| 640 | |
| 641 | sha = [] |
| 642 | tt = [] |
| 643 | lay.cell( cid_a ).shapes( lid_a ).each { |s| sha.push( s ); tt.push( RBA::CplxTrans::new( RBA::Trans::new( 0, 0 ) ) ) } |
| 644 | lay.cell( cid_a ).shapes( lid_a ).each { |s| sha.push( s ); tt.push( RBA::CplxTrans::new( RBA::Trans::new( 200, 200 ) ) ) } |
| 645 | ee = sp.merge_to_polygon( sha, tt, 0, true, false ) |