mirror of https://github.com/KLayout/klayout.git
Merge remote-tracking branch 'origin/master' into master-mac-qt6
This commit is contained in:
commit
9cd0017d0d
|
|
@ -1530,8 +1530,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
db::DPoint pt = snap1 (p, m_obj_snap && tpl.snap ()).second;
|
db::DPoint pt = snap1 (p, m_obj_snap && tpl.snap ()).second;
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
if (manager ()) {
|
||||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
tl_assert (! manager ()->transacting ());
|
||||||
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
}
|
||||||
|
|
||||||
m_current = ant::Object (pt, pt, 0, tpl);
|
m_current = ant::Object (pt, pt, 0, tpl);
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
@ -1539,7 +1541,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
insert_ruler (m_current, true);
|
insert_ruler (m_current, true);
|
||||||
|
|
||||||
// end the transaction
|
// end the transaction
|
||||||
manager ()->commit ();
|
if (manager ()) {
|
||||||
|
manager ()->commit ();
|
||||||
|
}
|
||||||
|
|
||||||
} else if (tpl.mode () == ant::Template::RulerAutoMetric) {
|
} else if (tpl.mode () == ant::Template::RulerAutoMetric) {
|
||||||
|
|
||||||
|
|
@ -1567,8 +1571,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
if (ee.any) {
|
if (ee.any) {
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
if (manager ()) {
|
||||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
tl_assert (! manager ()->transacting ());
|
||||||
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
}
|
||||||
|
|
||||||
m_current = ant::Object (ee.first, ee.second, 0, tpl);
|
m_current = ant::Object (ee.first, ee.second, 0, tpl);
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
@ -1576,7 +1582,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
insert_ruler (m_current, true);
|
insert_ruler (m_current, true);
|
||||||
|
|
||||||
// end the transaction
|
// end the transaction
|
||||||
manager ()->commit ();
|
if (manager ()) {
|
||||||
|
manager ()->commit ();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1603,8 +1611,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
// create the ruler object
|
// create the ruler object
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
if (manager ()) {
|
||||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
tl_assert (! manager ()->transacting ());
|
||||||
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
}
|
||||||
|
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
||||||
|
|
@ -1615,7 +1625,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
clear_transient_selection ();
|
clear_transient_selection ();
|
||||||
|
|
||||||
// end the transaction
|
// end the transaction
|
||||||
manager ()->commit ();
|
if (manager ()) {
|
||||||
|
manager ()->commit ();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2256,9 +2268,13 @@ Service::menu_activated (const std::string &symbol)
|
||||||
if (symbol == "ant::clear_all_rulers_internal") {
|
if (symbol == "ant::clear_all_rulers_internal") {
|
||||||
clear_rulers ();
|
clear_rulers ();
|
||||||
} else if (symbol == "ant::clear_all_rulers") {
|
} else if (symbol == "ant::clear_all_rulers") {
|
||||||
manager ()->transaction (tl::to_string (tr ("Clear all rulers")));
|
if (manager ()) {
|
||||||
|
manager ()->transaction (tl::to_string (tr ("Clear all rulers")));
|
||||||
|
}
|
||||||
clear_rulers ();
|
clear_rulers ();
|
||||||
manager ()->commit ();
|
if (manager ()) {
|
||||||
|
manager ()->commit ();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
lay::Plugin::menu_activated (symbol);
|
lay::Plugin::menu_activated (symbol);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ void FlatEdges::invalidate_cache ()
|
||||||
|
|
||||||
void FlatEdges::init ()
|
void FlatEdges::init ()
|
||||||
{
|
{
|
||||||
m_is_merged = true;
|
m_is_merged = false;
|
||||||
m_merged_edges_valid = false;
|
m_merged_edges_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,9 +321,7 @@ const db::RecursiveShapeIterator *FlatEdges::iter () const
|
||||||
void
|
void
|
||||||
FlatEdges::do_insert (const db::Edge &edge)
|
FlatEdges::do_insert (const db::Edge &edge)
|
||||||
{
|
{
|
||||||
if (! empty ()) {
|
m_is_merged = empty ();
|
||||||
m_is_merged = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_edges->insert (edge);
|
mp_edges->insert (edge);
|
||||||
invalidate_cache ();
|
invalidate_cache ();
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ void FlatRegion::invalidate_cache ()
|
||||||
|
|
||||||
void FlatRegion::init ()
|
void FlatRegion::init ()
|
||||||
{
|
{
|
||||||
m_is_merged = true;
|
m_is_merged = false;
|
||||||
m_merged_polygons_valid = false;
|
m_merged_polygons_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ OriginalLayerEdges::less (const Edges &other) const
|
||||||
void
|
void
|
||||||
OriginalLayerEdges::init ()
|
OriginalLayerEdges::init ()
|
||||||
{
|
{
|
||||||
m_is_merged = true;
|
m_is_merged = false;
|
||||||
m_merged_edges_valid = false;
|
m_merged_edges_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -382,7 +382,7 @@ OriginalLayerRegion::less (const Region &other) const
|
||||||
void
|
void
|
||||||
OriginalLayerRegion::init ()
|
OriginalLayerRegion::init ()
|
||||||
{
|
{
|
||||||
m_is_merged = true;
|
m_is_merged = false;
|
||||||
m_merged_polygons_valid = false;
|
m_merged_polygons_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -260,7 +260,7 @@ static const db::Net *net_for_terminal_by_name_const (const db::Device *device,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const db::Net *net_for_terminal_by_name (db::Device *device, const std::string &name)
|
static db::Net *net_for_terminal_by_name (db::Device *device, const std::string &name)
|
||||||
{
|
{
|
||||||
if (! device->device_class () || ! device->device_class ()->has_terminal_with_name (name)) {
|
if (! device->device_class () || ! device->device_class ()->has_terminal_with_name (name)) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -2832,7 +2832,7 @@ Class<db::NetlistSpiceReader> db_NetlistSpiceReader (db_NetlistReader, "db", "Ne
|
||||||
"Use the SPICE reader like this:\n"
|
"Use the SPICE reader like this:\n"
|
||||||
"\n"
|
"\n"
|
||||||
"@code\n"
|
"@code\n"
|
||||||
"writer = RBA::NetlistSpiceReader::new\n"
|
"reader = RBA::NetlistSpiceReader::new\n"
|
||||||
"netlist = RBA::Netlist::new\n"
|
"netlist = RBA::Netlist::new\n"
|
||||||
"netlist.read(path, reader)\n"
|
"netlist.read(path, reader)\n"
|
||||||
"@/code\n"
|
"@/code\n"
|
||||||
|
|
|
||||||
|
|
@ -1318,3 +1318,13 @@ TEST(54_issue1011)
|
||||||
run_test (_this, "54", false);
|
run_test (_this, "54", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(55_drccount)
|
||||||
|
{
|
||||||
|
run_test (_this, "55", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(55d_drccount)
|
||||||
|
{
|
||||||
|
run_test (_this, "55", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,13 +98,16 @@ connect_global(ptie, "SUBSTRATE")
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
# Netlist and compare
|
# Netlist and compare
|
||||||
|
|
||||||
# Netlist normalization
|
# Netlist extraction
|
||||||
netlist.simplify
|
netlist
|
||||||
|
|
||||||
# Hierarchy alignment (flatten out unmatched cells)
|
# Hierarchy alignment (flatten out unmatched cells, specifically device cells)
|
||||||
align
|
align
|
||||||
|
|
||||||
# Netlist vs. netlist
|
# Netlist normalization and device combination
|
||||||
|
netlist.simplify
|
||||||
|
|
||||||
|
# Netlist vs. netlist check
|
||||||
compare
|
compare
|
||||||
</text>
|
</text>
|
||||||
</klayout-macro>
|
</klayout-macro>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
source $drc_test_source
|
||||||
|
target $drc_test_target
|
||||||
|
|
||||||
|
if $drc_test_deep
|
||||||
|
deep
|
||||||
|
end
|
||||||
|
|
||||||
|
licon = input(66, 44)
|
||||||
|
|
||||||
|
licon.output(66, 44)
|
||||||
|
|
||||||
|
licon_cluster = licon.sized(0.2).sized(-0.2)
|
||||||
|
|
||||||
|
single = licon_cluster.drc(secondary(licon).count == 1)
|
||||||
|
single.sized(0.1).output(100, 0)
|
||||||
|
|
||||||
|
single = licon_cluster.drc(if_any(secondary(licon).count == 1))
|
||||||
|
single.sized(0.1).output(101, 0)
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue