DRC: more variants for layer#insert - labels, DBU-unit types

This commit is contained in:
Matthias Koefferlein 2024-09-08 19:16:40 +02:00
parent d902f5d53d
commit 68d15e01af
5 changed files with 155 additions and 2 deletions

View File

@ -42,22 +42,38 @@ module DRC
@engine._context("insert") do
requires_edges_or_region
args.each do |a|
if a.is_a?(RBA::DBox)
requires_edges_or_region
self.data.insert(RBA::Box::from_dbox(a * (1.0 / @engine.dbu)))
elsif a.is_a?(RBA::DPolygon)
requires_edges_or_region
self.data.insert(RBA::Polygon::from_dpoly(a * (1.0 / @engine.dbu)))
elsif a.is_a?(RBA::DSimplePolygon)
requires_edges_or_region
self.data.insert(RBA::SimplePolygon::from_dpoly(a * (1.0 / @engine.dbu)))
elsif a.is_a?(RBA::DPath)
requires_edges_or_region
self.data.insert(RBA::Path::from_dpath(a * (1.0 / @engine.dbu)))
elsif a.is_a?(RBA::Box) || a.is_a?(RBA::Polygon) || a.is_a?(RBA::SimplePolygon) || a.is_a?(RBA::Path)
requires_edges_or_region
self.data.insert(a)
elsif a.is_a?(RBA::DEdge)
requires_edges
self.data.insert(RBA::Edge::from_dedge(a * (1.0 / @engine.dbu)))
elsif a.is_a?(RBA::Edge)
requires_edges
self.data.insert(a)
elsif a.is_a?(RBA::DText)
requires_texts
self.data.insert(RBA::CplxTrans::new(@engine.dbu).inverted * a)
elsif a.is_a?(RBA::Text)
requires_texts
self.data.insert(a)
elsif a.is_a?(Array)
insert(*a)
else
raise("Invalid argument type for #{a.inspect}")
raise("Invalid argument type of #{a.inspect}")
end
end

View File

@ -1954,6 +1954,11 @@ TEST(122_NamedLayers)
compare_text_files (output, au_output);
}
TEST(123_DirectInsert)
{
run_test (_this, "123", false);
}
TEST(130_size_inside_outside)
{
run_test (_this, "130", false);

132
testdata/drc/drcSimpleTests_123.drc vendored Normal file
View File

@ -0,0 +1,132 @@
source $drc_test_source
target $drc_test_target
lp = polygons
le = edges
ll = labels
lp.insert(RBA::Box::new(0, 0, 100, 200))
lp.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200))
lp.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200)))
lp.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200)))
lp.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200)))
lp.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200)))
lp.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200))
lp.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2))
begin
lp.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100)))
raise Exception::new("Error expected")
rescue => ex
end
begin
lp.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0), RBA::DPoint::new(0.1, 0.1)))
raise Exception::new("Error expected")
rescue => ex
end
begin
lp.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(0, 0))))
raise Exception::new("Error expected")
rescue => ex
end
begin
lp.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1))))
raise Exception::new("Error expected")
rescue => ex
end
le.insert(RBA::Box::new(0, 0, 100, 200))
le.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200))
le.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200)))
le.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200)))
le.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200)))
le.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200)))
le.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200))
le.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2))
le.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100)))
le.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0.1), RBA::DPoint::new(0.1, 0.2)))
begin
le.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(0, 0))))
raise Exception::new("Error expected")
rescue => ex
end
begin
le.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1))))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::Box::new(0, 0, 100, 200))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200)))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200)))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200)))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200)))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100)))
raise Exception::new("Error expected")
rescue => ex
end
begin
ll.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0.1), RBA::DPoint::new(0.1, 0.2)))
raise Exception::new("Error expected")
rescue => ex
end
ll.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(100, 0))))
ll.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1))))
lp.output(1, 0)
le.output(2, 0)
ll.output(3, 0)

BIN
testdata/drc/drcSimpleTests_123.gds vendored Normal file

Binary file not shown.

BIN
testdata/drc/drcSimpleTests_au123.gds vendored Normal file

Binary file not shown.