From 4a854bfa5e91dc1c5f2c6675913e01700aafa149 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 4 Sep 2022 09:39:45 +0200
Subject: [PATCH 1/2] [CONSIDER MERGING] Clarification and typo fixed in DRC
doc.
---
src/drc/drc/built-in-macros/_drc_engine.rb | 8 ++++++++
src/drc/drc/built-in-macros/_drc_source.rb | 18 ++++++++++--------
src/lay/lay/doc/about/drc_ref_global.xml | 8 ++++++++
src/lay/lay/doc/about/drc_ref_source.xml | 18 ++++++++++--------
4 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb
index 1382f25244..7dce0a4513 100644
--- a/src/drc/drc/built-in-macros/_drc_engine.rb
+++ b/src/drc/drc/built-in-macros/_drc_engine.rb
@@ -1594,6 +1594,14 @@ def cell(*args)
# @brief Specifies cell filters on the default source
# @synopsis select(args)
# See \Source#select for a description of that function.
+ # Using the global version does not create a new source, but
+ # modifies the default source.
+ #
+ # @code
+ # # Selects only B cell instances below the top cell
+ # select("-", "+B*")
+ # l1 = input(1, 0)
+ # @/code
def select(*args)
self._context("select") do
diff --git a/src/drc/drc/built-in-macros/_drc_source.rb b/src/drc/drc/built-in-macros/_drc_source.rb
index 0af32c75a4..2e969e463c 100644
--- a/src/drc/drc/built-in-macros/_drc_source.rb
+++ b/src/drc/drc/built-in-macros/_drc_source.rb
@@ -161,9 +161,11 @@ def inplace_select(*args)
# %DRC%
# @name select
# @brief Adds cell name expressions to the cell filters
- # @synopsis source.select(filter1, filter2, ...)
+ # @synopsis new_source = source.select(filter1, filter2, ...)
# This method will construct a new source object with the given cell filters
- # applied.
+ # applied. Note that there is a global version of "select" which does not
+ # create a new source, but acts on the default source.
+ #
# Cell filters will enable or disable cells plus their subtree.
# Cells can be switched on and off, which makes the hierarchy traversal
# stop or begin delivering shapes at the given cell. The arguments of
@@ -184,8 +186,8 @@ def inplace_select(*args)
# code:
#
# @code
- # layout_with_selection = source.select("-TOP", "+B")
- # l1 = source.input(1, 0)
+ # source_with_selection = source.select("-TOP", "+B")
+ # l1 = source_with_selection.input(1, 0)
# ...
# @/code
#
@@ -201,8 +203,8 @@ def inplace_select(*args)
# first "-*" selection, all cells including the children of "B" are disabled:
#
# @code
- # layout_with_selection = source.select("-*", "+B")
- # l1 = source.input(1, 0)
+ # source_with_selection = source.select("-*", "+B")
+ # l1 = source_with_selection.input(1, 0)
# ...
# @/code
#
@@ -210,8 +212,8 @@ def inplace_select(*args)
# and will start with a disabled top cell regardless of its name:
#
# @code
- # layout_with_selection = source.select("-", "+B")
- # l1 = source.input(1, 0)
+ # source_with_selection = source.select("-", "+B")
+ # l1 = source_with_selection.input(1, 0)
# ...
# @/code
diff --git a/src/lay/lay/doc/about/drc_ref_global.xml b/src/lay/lay/doc/about/drc_ref_global.xml
index 31c87f7cf6..277db525d5 100644
--- a/src/lay/lay/doc/about/drc_ref_global.xml
+++ b/src/lay/lay/doc/about/drc_ref_global.xml
@@ -1597,6 +1597,14 @@ out = l1.drc(primary & secondary(l2))
See Source#select for a description of that function.
+Using the global version does not create a new source, but
+modifies the default source.
+
+
+# Selects only B cell instances below the top cell
+select("-", "+B*")
+l1 = input(1, 0)
+
"sep" - Synonym for "separation"
diff --git a/src/lay/lay/doc/about/drc_ref_source.xml b/src/lay/lay/doc/about/drc_ref_source.xml
index 4391570656..37bcc24582 100644
--- a/src/lay/lay/doc/about/drc_ref_source.xml
+++ b/src/lay/lay/doc/about/drc_ref_source.xml
@@ -320,11 +320,13 @@ Use the global version of "polygons" without a source object to address the defa
Usage:
-- source.select(filter1, filter2, ...)
+- new_source = source.select(filter1, filter2, ...)
This method will construct a new source object with the given cell filters
-applied.
+applied. Note that there is a global version of "select" which does not
+create a new source, but acts on the default source.
+
Cell filters will enable or disable cells plus their subtree.
Cells can be switched on and off, which makes the hierarchy traversal
stop or begin delivering shapes at the given cell. The arguments of
@@ -345,8 +347,8 @@ To disable the TOP cell but enabled a hypothetical cell B below the top cell, us
code:
-layout_with_selection = source.select("-TOP", "+B")
-l1 = source.input(1, 0)
+source_with_selection = source.select("-TOP", "+B")
+l1 = source_with_selection.input(1, 0)
...
@@ -362,8 +364,8 @@ The following code will just select "B" without its children, because in the
first "-*" selection, all cells including the children of "B" are disabled:
-layout_with_selection = source.select("-*", "+B")
-l1 = source.input(1, 0)
+source_with_selection = source.select("-*", "+B")
+l1 = source_with_selection.input(1, 0)
...
@@ -371,8 +373,8 @@ The short form "-" will disable the top cell. This code is identical to the firs
and will start with a disabled top cell regardless of its name:
-layout_with_selection = source.select("-", "+B")
-l1 = source.input(1, 0)
+source_with_selection = source.select("-", "+B")
+l1 = source_with_selection.input(1, 0)
...
From d0fdabbadff0cbf950551f093101fdbd05b8430a Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sun, 4 Sep 2022 19:39:39 +0200
Subject: [PATCH 2/2] Fixed issue #1143 (technology default DBU not taken)
---
src/layui/layui/layDialogs.cc | 16 ++++++++++++----
src/layui/layui/layDialogs.h | 1 +
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/layui/layui/layDialogs.cc b/src/layui/layui/layDialogs.cc
index 5128640d38..2a19ef4fad 100644
--- a/src/layui/layui/layDialogs.cc
+++ b/src/layui/layui/layDialogs.cc
@@ -98,7 +98,7 @@ LayerSourceDialog::exec_dialog (std::string &s)
// NewLayoutPropertiesDialog implementation
NewLayoutPropertiesDialog::NewLayoutPropertiesDialog (QWidget *parent)
- : QDialog (parent)
+ : QDialog (parent), m_default_dbu (0.0)
{
setObjectName (QString::fromUtf8 ("new_layout_properties_dialog"));
@@ -117,14 +117,20 @@ NewLayoutPropertiesDialog::~NewLayoutPropertiesDialog ()
void
NewLayoutPropertiesDialog::tech_changed ()
{
- double dbu = 0.001;
+ double dbu = 0.0;
int technology_index = mp_ui->tech_cbx->currentIndex ();
if (technology_index >= 0 && technology_index < (int) db::Technologies::instance ()->technologies ()) {
dbu = db::Technologies::instance ()->begin () [technology_index].dbu ();
}
+ m_default_dbu = dbu;
+
#if QT_VERSION >= 0x40700
- mp_ui->dbu_le->setPlaceholderText (tl::to_qstring (tl::to_string (dbu)));
+ if (dbu > 1e-10) {
+ mp_ui->dbu_le->setPlaceholderText (tl::to_qstring (tl::to_string (dbu)));
+ } else {
+ mp_ui->dbu_le->setPlaceholderText (QString ());
+ }
#endif
}
@@ -142,6 +148,8 @@ NewLayoutPropertiesDialog::exec_dialog (std::string &technology, std::string &ce
}
+ tech_changed ();
+
mp_ui->window_le->setText (tl::to_qstring (tl::to_string (size)));
if (dbu > 1e-10) {
mp_ui->dbu_le->setText (tl::to_qstring (tl::to_string (dbu)));
@@ -174,7 +182,7 @@ NewLayoutPropertiesDialog::exec_dialog (std::string &technology, std::string &ce
if (! mp_ui->dbu_le->text ().isEmpty ()) {
tl::from_string_ext (tl::to_string (mp_ui->dbu_le->text ()), dbu);
} else {
- dbu = 0.0;
+ dbu = m_default_dbu;
}
cell_name = tl::to_string (mp_ui->topcell_le->text ());
diff --git a/src/layui/layui/layDialogs.h b/src/layui/layui/layDialogs.h
index b78de37319..cf752d5b94 100644
--- a/src/layui/layui/layDialogs.h
+++ b/src/layui/layui/layDialogs.h
@@ -338,6 +338,7 @@ private slots:
virtual void accept ();
Ui::NewLayoutPropertiesDialog *mp_ui;
+ double m_default_dbu;
};
/**