From f410c9133925f6c7300427185f2dc11e01d63c67 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Sat, 23 May 2020 21:14:01 +0200
Subject: [PATCH] Updated documentation
---
scripts/create_drc_samples.rb | 88 +++++++++++++++-
src/db/db/gsiDeclDbShapes.cc | 53 +++++++++-
src/drc/drc/built-in-macros/_drc_layer.rb | 65 +++++++++---
src/drc/drc/built-in-macros/_drc_netter.rb | 10 +-
src/lay/lay/doc/about/drc_ref_global.xml | 20 +++-
src/lay/lay/doc/about/drc_ref_layer.xml | 82 ++++++++++++---
src/lay/lay/doc/about/drc_ref_netter.xml | 10 +-
src/lay/lay/doc/about/drc_ref_source.xml | 55 +++++++++-
src/lay/lay/doc/images/drc_and1.png | Bin 5120 -> 5105 bytes
src/lay/lay/doc/images/drc_and2.png | Bin 6074 -> 6059 bytes
src/lay/lay/doc/images/drc_and3.png | Bin 6262 -> 6247 bytes
src/lay/lay/doc/images/drc_centers1.png | Bin 5222 -> 5207 bytes
src/lay/lay/doc/images/drc_centers2.png | Bin 5180 -> 5165 bytes
src/lay/lay/doc/images/drc_corners1.png | Bin 5238 -> 5223 bytes
src/lay/lay/doc/images/drc_corners2.png | Bin 5118 -> 5103 bytes
src/lay/lay/doc/images/drc_corners3.png | Bin 5336 -> 5321 bytes
src/lay/lay/doc/images/drc_enc1.png | Bin 5805 -> 5790 bytes
src/lay/lay/doc/images/drc_enc2.png | Bin 5912 -> 5897 bytes
src/lay/lay/doc/images/drc_end_segments1.png | Bin 5131 -> 5116 bytes
src/lay/lay/doc/images/drc_end_segments2.png | Bin 5224 -> 5209 bytes
src/lay/lay/doc/images/drc_extended1.png | Bin 4964 -> 4949 bytes
src/lay/lay/doc/images/drc_extended2.png | Bin 5147 -> 5132 bytes
src/lay/lay/doc/images/drc_extended3.png | Bin 5293 -> 5278 bytes
src/lay/lay/doc/images/drc_extended4.png | Bin 5125 -> 5110 bytes
src/lay/lay/doc/images/drc_extent_refs1.png | Bin 4652 -> 4637 bytes
src/lay/lay/doc/images/drc_extent_refs10.png | Bin 4642 -> 4627 bytes
src/lay/lay/doc/images/drc_extent_refs11.png | Bin 4600 -> 4585 bytes
src/lay/lay/doc/images/drc_extent_refs12.png | Bin 4920 -> 4905 bytes
src/lay/lay/doc/images/drc_extent_refs13.png | Bin 4675 -> 4660 bytes
src/lay/lay/doc/images/drc_extent_refs20.png | Bin 4748 -> 4733 bytes
src/lay/lay/doc/images/drc_extent_refs21.png | Bin 4764 -> 4749 bytes
src/lay/lay/doc/images/drc_extent_refs22.png | Bin 4763 -> 4748 bytes
src/lay/lay/doc/images/drc_extent_refs23.png | Bin 4748 -> 4733 bytes
src/lay/lay/doc/images/drc_extent_refs24.png | Bin 4684 -> 4669 bytes
src/lay/lay/doc/images/drc_extent_refs25.png | Bin 4718 -> 4703 bytes
src/lay/lay/doc/images/drc_extent_refs26.png | Bin 4748 -> 4733 bytes
src/lay/lay/doc/images/drc_extent_refs27.png | Bin 4749 -> 4734 bytes
src/lay/lay/doc/images/drc_extent_refs30.png | Bin 4759 -> 4744 bytes
src/lay/lay/doc/images/drc_extent_refs31.png | Bin 4731 -> 4716 bytes
src/lay/lay/doc/images/drc_extents1.png | Bin 4693 -> 4678 bytes
src/lay/lay/doc/images/drc_extents2.png | Bin 5708 -> 5693 bytes
src/lay/lay/doc/images/drc_holes.png | Bin 4960 -> 4945 bytes
src/lay/lay/doc/images/drc_hulls.png | Bin 4684 -> 4669 bytes
src/lay/lay/doc/images/drc_in.png | Bin 4797 -> 4782 bytes
src/lay/lay/doc/images/drc_inside.png | Bin 5214 -> 5199 bytes
src/lay/lay/doc/images/drc_inside_part.png | Bin 6054 -> 6039 bytes
src/lay/lay/doc/images/drc_interacting.png | Bin 5422 -> 5407 bytes
src/lay/lay/doc/images/drc_join1.png | Bin 5104 -> 5089 bytes
src/lay/lay/doc/images/drc_join2.png | Bin 6813 -> 6798 bytes
src/lay/lay/doc/images/drc_merged1.png | Bin 4726 -> 4711 bytes
src/lay/lay/doc/images/drc_merged2.png | Bin 4798 -> 4783 bytes
src/lay/lay/doc/images/drc_merged3.png | Bin 5573 -> 5558 bytes
src/lay/lay/doc/images/drc_merged4.png | Bin 5506 -> 5491 bytes
src/lay/lay/doc/images/drc_middle1.png | Bin 4450 -> 4435 bytes
src/lay/lay/doc/images/drc_moved1.png | Bin 5207 -> 5192 bytes
src/lay/lay/doc/images/drc_not1.png | Bin 5500 -> 5485 bytes
src/lay/lay/doc/images/drc_not2.png | Bin 6764 -> 6749 bytes
src/lay/lay/doc/images/drc_not3.png | Bin 6196 -> 6181 bytes
src/lay/lay/doc/images/drc_not_in.png | Bin 5060 -> 5045 bytes
src/lay/lay/doc/images/drc_not_inside.png | Bin 5516 -> 5501 bytes
.../lay/doc/images/drc_not_interacting.png | Bin 6151 -> 6136 bytes
src/lay/lay/doc/images/drc_not_outside.png | Bin 5111 -> 5096 bytes
.../lay/doc/images/drc_not_overlapping.png | Bin 6210 -> 6195 bytes
src/lay/lay/doc/images/drc_or1.png | Bin 5233 -> 5218 bytes
src/lay/lay/doc/images/drc_or2.png | Bin 6790 -> 6775 bytes
src/lay/lay/doc/images/drc_outside.png | Bin 6051 -> 6036 bytes
src/lay/lay/doc/images/drc_outside_part.png | Bin 6414 -> 6399 bytes
src/lay/lay/doc/images/drc_overlap1.png | Bin 6331 -> 6316 bytes
src/lay/lay/doc/images/drc_overlap2.png | Bin 6339 -> 6324 bytes
src/lay/lay/doc/images/drc_overlapping.png | Bin 5158 -> 5143 bytes
src/lay/lay/doc/images/drc_raw1.png | Bin 6139 -> 6124 bytes
src/lay/lay/doc/images/drc_raw2.png | Bin 6818 -> 6803 bytes
src/lay/lay/doc/images/drc_raw3.png | Bin 6218 -> 6203 bytes
src/lay/lay/doc/images/drc_rotated1.png | Bin 6991 -> 6976 bytes
.../lay/doc/images/drc_rounded_corners.png | Bin 5668 -> 5653 bytes
src/lay/lay/doc/images/drc_scaled1.png | Bin 5197 -> 5182 bytes
src/lay/lay/doc/images/drc_separation1.png | Bin 6144 -> 6129 bytes
src/lay/lay/doc/images/drc_sized1.png | Bin 4399 -> 4384 bytes
src/lay/lay/doc/images/drc_sized2.png | Bin 4546 -> 4531 bytes
src/lay/lay/doc/images/drc_sized3.png | Bin 4678 -> 4663 bytes
src/lay/lay/doc/images/drc_sized4.png | Bin 4649 -> 4634 bytes
src/lay/lay/doc/images/drc_sized5.png | Bin 4595 -> 4580 bytes
src/lay/lay/doc/images/drc_sized6.png | Bin 4694 -> 4679 bytes
src/lay/lay/doc/images/drc_space1.png | Bin 5504 -> 5489 bytes
src/lay/lay/doc/images/drc_space2.png | Bin 5208 -> 5193 bytes
src/lay/lay/doc/images/drc_space3.png | Bin 5440 -> 5425 bytes
.../lay/doc/images/drc_start_segments1.png | Bin 5154 -> 5139 bytes
.../lay/doc/images/drc_start_segments2.png | Bin 5317 -> 5302 bytes
src/lay/lay/doc/images/drc_textpoly1.png | Bin 0 -> 4114 bytes
src/lay/lay/doc/images/drc_textpoly2.png | Bin 0 -> 4097 bytes
src/lay/lay/doc/images/drc_texts1.png | Bin 0 -> 3059 bytes
src/lay/lay/doc/images/drc_texts2.png | Bin 0 -> 3142 bytes
src/lay/lay/doc/images/drc_transformed1.png | Bin 5884 -> 5869 bytes
src/lay/lay/doc/images/drc_width1.png | Bin 5046 -> 5031 bytes
src/lay/lay/doc/images/drc_width2.png | Bin 4858 -> 4843 bytes
src/lay/lay/doc/images/drc_width3.png | Bin 5042 -> 5027 bytes
src/lay/lay/doc/images/drc_width4.png | Bin 5397 -> 5382 bytes
src/lay/lay/doc/images/drc_with_angle1.png | Bin 5904 -> 5889 bytes
src/lay/lay/doc/images/drc_with_angle2.png | Bin 6272 -> 6257 bytes
src/lay/lay/doc/images/drc_with_angle3.png | Bin 5595 -> 5580 bytes
src/lay/lay/doc/images/drc_with_angle4.png | Bin 5621 -> 5606 bytes
src/lay/lay/doc/images/drc_xor1.png | Bin 5178 -> 5163 bytes
src/lay/lay/doc/images/drc_xor2.png | Bin 6878 -> 6863 bytes
src/lay/lay/doc/manual/drc_runsets.xml | 14 +--
src/lay/lay/lay.pro | 3 +-
src/lay/lay/layDRCLVSHelpResources.qrc | 99 ++++++++++++++++++
src/lay/lay/layHelpResources.qrc | 94 -----------------
testdata/drc/.drcSuiteTests.drc.swp | Bin 36864 -> 0 bytes
testdata/drc/.drctest.drc.swp | Bin 16384 -> 0 bytes
109 files changed, 446 insertions(+), 147 deletions(-)
create mode 100644 src/lay/lay/doc/images/drc_textpoly1.png
create mode 100644 src/lay/lay/doc/images/drc_textpoly2.png
create mode 100644 src/lay/lay/doc/images/drc_texts1.png
create mode 100644 src/lay/lay/doc/images/drc_texts2.png
create mode 100644 src/lay/lay/layDRCLVSHelpResources.qrc
delete mode 100644 testdata/drc/.drcSuiteTests.drc.swp
delete mode 100644 testdata/drc/.drctest.drc.swp
diff --git a/scripts/create_drc_samples.rb b/scripts/create_drc_samples.rb
index 962c026ac..b8ea6665a 100644
--- a/scripts/create_drc_samples.rb
+++ b/scripts/create_drc_samples.rb
@@ -2,9 +2,45 @@
# Run with:
# ./klayout -z -r ./create_drc_samples.rb -t -c klayoutrc_drc_samples
+class QRCGenerator
+
+ def res_path
+ "src/lay/lay"
+ end
+
+ def img_path
+ "doc/images"
+ end
+
+ def initialize
+ @path = res_path + "/" + "layDRCLVSHelpResources.qrc"
+ @file = File.open(@path, "w")
+ @file.puts("")
+ @file.puts(" ")
+ end
+
+ def <<(str)
+ @file.puts(str)
+ end
+
+ def finish
+ @file.puts(" ")
+ @file.puts("")
+ @file.close
+ puts "---> resource file written to #{@path}"
+ end
+
+ def self.instance
+ @@inst ||= QRCGenerator::new
+ @@inst
+ end
+
+end
+
def run_demo(gen, cmd, out)
- img_path = "src/lay/lay/doc/images"
+ res_path = QRCGenerator::instance.res_path
+ img_path = QRCGenerator::instance.img_path
mw = RBA::Application::instance::main_window
@@ -81,7 +117,9 @@ def run_demo(gen, cmd, out)
input1 = input(1, 0)
input = input1
input2 = input(2, 0)
- #{cmd}.data
+ labels1 = labels(1, 0)
+ labels = labels1
+ (#{cmd}).data
SCRIPT
if data.is_a?(RBA::Region)
@@ -101,15 +139,19 @@ SCRIPT
elsif data.is_a?(RBA::EdgePairs)
cell.shapes(lout_poly).insert_as_polygons(data, 1)
cell.shapes(lout).insert(data.edges)
+ elsif data.is_a?(RBA::Texts)
+ cell.shapes(lout).insert(data)
end
view.update_content
- view.save_image(img_path + "/" + out, 400, 400)
+ view.save_image(res_path + "/" + img_path + "/" + out, 400, 400)
- puts "---> written #{img_path}/#{out}"
+ puts "---> written #{res_path}/#{img_path}/#{out}"
mw.close_all
+ QRCGenerator::instance << " #{img_path}/#{out}"
+
end
class Gen
@@ -631,3 +673,41 @@ run_demo gen, "input.corners.sized(0.1)", "drc_corners1.png"
run_demo gen, "input.corners(90.0).sized(0.1)", "drc_corners2.png"
run_demo gen, "input.corners(-90.0 .. -45.0).sized(0.1)", "drc_corners3.png"
+
+class Gen
+ def produce(s1, s2)
+ s1.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(0, 2000))))
+ s1.insert(RBA::Text::new("A", RBA::Trans::new(RBA::Vector::new(0, 6000))))
+ s1.insert(RBA::Text::new("XYZ", RBA::Trans::new(RBA::Vector::new(4000, 2000))))
+ s1.insert(RBA::Text::new("A*", RBA::Trans::new(RBA::Vector::new(4000, 6000))))
+ end
+end
+
+gen = Gen::new
+
+run_demo gen, "labels.texts(\"A*\")", "drc_texts1.png"
+run_demo gen, "labels.texts(text(\"A*\"))", "drc_texts2.png"
+
+class Gen
+ def produce(s1, s2)
+ s1.insert(RBA::Text::new("T1", RBA::Trans::new(RBA::Vector::new(0, 2000))))
+ s1.insert(RBA::Text::new("T2", RBA::Trans::new(RBA::Vector::new(2000, 2000))))
+ s1.insert(RBA::Text::new("T3", RBA::Trans::new(RBA::Vector::new(4000, 2000))))
+ pts = [
+ RBA::Point::new(2000, 0),
+ RBA::Point::new(2000, 4000),
+ RBA::Point::new(6000, 4000),
+ RBA::Point::new(6000, 0)
+ ];
+ s2.insert(RBA::Polygon::new(pts))
+ end
+end
+
+gen = Gen::new
+
+run_demo gen, "labels & input2", "drc_textpoly1.png"
+run_demo gen, "labels - input2", "drc_textpoly2.png"
+
+
+QRCGenerator::instance.finish
+
diff --git a/src/db/db/gsiDeclDbShapes.cc b/src/db/db/gsiDeclDbShapes.cc
index cf2e175de..2dff334b9 100644
--- a/src/db/db/gsiDeclDbShapes.cc
+++ b/src/db/db/gsiDeclDbShapes.cc
@@ -419,6 +419,29 @@ static void insert_edge_pairs_with_dtrans (db::Shapes *sh, const db::EdgePairs &
}
}
+static void insert_texts (db::Shapes *sh, const db::Texts &r)
+{
+ for (db::Texts::const_iterator s = r.begin (); ! s.at_end (); ++s) {
+ sh->insert (*s);
+ }
+}
+
+static void insert_texts_with_trans (db::Shapes *sh, const db::Texts &r, const db::ICplxTrans &trans)
+{
+ for (db::Texts::const_iterator s = r.begin (); ! s.at_end (); ++s) {
+ sh->insert (s->transformed (trans));
+ }
+}
+
+static void insert_texts_with_dtrans (db::Shapes *sh, const db::Texts &r, const db::DCplxTrans &trans)
+{
+ db::CplxTrans dbu_trans (shapes_dbu (sh));
+ db::ICplxTrans itrans = dbu_trans.inverted () * trans * dbu_trans;
+ for (db::Texts::const_iterator s = r.begin (); ! s.at_end (); ++s) {
+ sh->insert (s->transformed (itrans));
+ }
+}
+
static unsigned int s_all () { return db::ShapeIterator::All; }
static unsigned int s_all_with_properties () { return db::ShapeIterator::AllWithProperties; }
static unsigned int s_properties () { return db::ShapeIterator::Properties; }
@@ -599,7 +622,7 @@ Class decl_Shapes ("db", "Shapes",
"@param edges The edge pairs to insert\n"
"@param trans The transformation to apply (displacement in micrometer units)\n"
"\n"
- "This method inserts all edge pairs from the edge collection into this shape container.\n"
+ "This method inserts all edge pairs from the edge pair collection into this shape container.\n"
"Before an edge pair is inserted, the given transformation is applied.\n"
"\n"
"This method has been introduced in version 0.26.\n"
@@ -682,6 +705,34 @@ Class decl_Shapes ("db", "Shapes",
"\n"
"This method has been introduced in version 0.25.\n"
) +
+ gsi::method_ext ("insert", &insert_texts, gsi::arg ("texts"),
+ "@brief Inserts the texts from the text collection into this shape container\n"
+ "@param texts The texts to insert\n"
+ "\n"
+ "This method inserts all texts from the text collection into this shape container.\n"
+ "\n"
+ "This method has been introduced in version 0.27.\n"
+ ) +
+ gsi::method_ext ("insert", &insert_texts_with_trans, gsi::arg ("texts"), gsi::arg ("trans"),
+ "@brief Inserts the texts from the text collection into this shape container with a transformation\n"
+ "@param edges The texts to insert\n"
+ "@param trans The transformation to apply\n"
+ "\n"
+ "This method inserts all texts from the text collection into this shape container.\n"
+ "Before an text is inserted, the given transformation is applied.\n"
+ "\n"
+ "This method has been introduced in version 0.27.\n"
+ ) +
+ gsi::method_ext ("insert", &insert_texts_with_dtrans, gsi::arg ("texts"), gsi::arg ("trans"),
+ "@brief Inserts the texts from the text collection into this shape container with a transformation (given in micrometer units)\n"
+ "@param edges The text to insert\n"
+ "@param trans The transformation to apply (displacement in micrometer units)\n"
+ "\n"
+ "This method inserts all texts from the text collection into this shape container.\n"
+ "Before an text is inserted, the given transformation is applied.\n"
+ "\n"
+ "This method has been introduced in version 0.27.\n"
+ ) +
gsi::method_ext ("transform", &transform_shapes, gsi::arg ("trans"),
"@brief Transforms all shapes with the given transformation\n"
"This method will invalidate all references to shapes inside this collection.\n\n"
diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb
index 4f90e01f9..b6fc6802b 100644
--- a/src/drc/drc/built-in-macros/_drc_layer.rb
+++ b/src/drc/drc/built-in-macros/_drc_layer.rb
@@ -593,9 +593,11 @@ CODE
# selected text. By using the "as_dots" option, degenerated point-like edges will be
# produced.
#
- # This method can also be applied to true text layers obtained with \labels.
+ # The preferred method however is to use true text layers created with \labels.
# In this case, without specifying "as_dots" or "as_boxes" retains the text
- # objects as such. Only text filtering is applied.
+ # objects as such a text filtering is applied. In contrast to this, layers generated
+ # with \input cannot maintain the text nature of the selected objects and
+ # produce dots or small polygon boxes in the \texts method.
#
# Texts can be selected either by exact match string or a pattern match with a
# glob-style pattern. By default, glob-style pattern are used.
@@ -612,14 +614,22 @@ CODE
#
# @code
# # Selects all texts
- # t = input(1, 0).texts
+ # t = labels(1, 0).texts
# # Selects all texts beginning with an "A"
- # t = input(1, 0).texts("A*")
- # t = input(1, 0).texts(pattern("A*"))
- # # Selects all texts whose string is "A*"
- # t = input(1, 0).texts(text("A*"))
+ # t = labels(1, 0).texts("A*")
+ # t = labels(1, 0).texts(pattern("A*"))
+ # # Selects all texts whose string is "ABC"
+ # t = labels(1, 0).texts(text("ABC"))
# @/code
- #
+ #
+ # The effect of the operation is shown in these examples:
+ #
+ # @table
+ # @tr
+ # @td @img(/images/drc_texts1.png) @/td
+ # @td @img(/images/drc_texts2.png) @/td
+ # @/tr
+ # @/table
def texts(*args)
requires_texts_or_region("texts")
@@ -1168,7 +1178,7 @@ CODE
# borders of the polygons of the second operand.
#
# The following images show the effect of the "and" method
- # on polygons and edges (layer1: red, layer2: blue):
+ # on polygons and edges (input1: red, input2: blue):
#
# @table
# @tr
@@ -1177,6 +1187,16 @@ CODE
# @td @img(/images/drc_and3.png) @/td
# @/tr
# @/table
+ #
+ # The AND operation can be applied between a text and a polygon
+ # layer. In this case, the texts inside or at the border of the
+ # polygons will be written to the output (labels: red, input2: blue):
+ #
+ # @table
+ # @tr
+ # @td @img(/images/drc_textpoly1.png) @/td
+ # @/tr
+ # @/table
def and(other)
self & other
@@ -1195,7 +1215,7 @@ CODE
# of the second operand.
#
# The following images show the effect of the "not" method
- # on polygons and edges (layer1: red, layer2: blue):
+ # on polygons and edges (input1: red, input2: blue):
#
# @table
# @tr
@@ -1204,6 +1224,16 @@ CODE
# @td @img(/images/drc_not3.png) @/td
# @/tr
# @/table
+ #
+ # The NOT operation can be applied between a text and a polygon
+ # layer. In this case, the texts outside the polygons will be
+ # written to the output (labels: red, input2: blue):
+ #
+ # @table
+ # @tr
+ # @td @img(/images/drc_textpoly2.png) @/td
+ # @/tr
+ # @/table
def not(other)
self - other
@@ -1219,7 +1249,7 @@ CODE
# This method is available for polygon and edge layers.
#
# The following images show the effect of the "xor" method
- # on polygons and edges (layer1: red, layer2: blue):
+ # on polygons and edges (input1: red, input2: blue):
#
# @table
# @tr
@@ -1242,7 +1272,7 @@ CODE
# This method is available for polygon and edge layers.
#
# The following images show the effect of the "or" method
- # on polygons and edges (layer1: red, layer2: blue):
+ # on polygons and edges (input1: red, input2: blue):
#
# @table
# @tr
@@ -1265,7 +1295,7 @@ CODE
# This method is available for polygon, edge and edge pair layers.
#
# The following images show the effect of the "join" method
- # on polygons and edges (layer1: red, layer2: blue):
+ # on polygons and edges (input1: red, input2: blue):
#
# @table
# @tr
@@ -1587,8 +1617,9 @@ CODE
# It returns a new layer containing the selected shapes. A version which modifies self
# is \select_interacting.
#
- # This method is available for polygon and edge layers. Edges can be selected
- # with respect to other edges or polygons.
+ # This method is available for polygon, text and edge layers. Edges can be selected
+ # with respect to other edges or polygons. Texts can be selected with respect to
+ # polygons.
#
# The following image shows the effect of the "interacting" method (input1: red, input2: blue):
#
@@ -2502,7 +2533,7 @@ CODE
# Distance values can be given as floating-point values (in micron) or integer values (in
# database units). To explicitly specify the unit, use the unit denominators.
#
- # The following image shows the effect of the separation check (layer1: red, layer2: blue):
+ # The following image shows the effect of the separation check (input1: red, input2: blue):
#
# @table
# @tr
@@ -2537,7 +2568,7 @@ CODE
# Distance values can be given as floating-point values (in micron) or integer values (in
# database units). To explicitly specify the unit, use the unit denominators.
#
- # The following images show the effect of the overlap check (layer1: red, layer2: blue):
+ # The following images show the effect of the overlap check (input1: red, input2: blue):
#
# @table
# @tr
diff --git a/src/drc/drc/built-in-macros/_drc_netter.rb b/src/drc/drc/built-in-macros/_drc_netter.rb
index e40229d4e..bfc95d8cc 100644
--- a/src/drc/drc/built-in-macros/_drc_netter.rb
+++ b/src/drc/drc/built-in-macros/_drc_netter.rb
@@ -76,13 +76,19 @@ module DRC
# @name connect
# @brief Specifies a connection between two layers
# @synopsis connect(a, b)
- # a and b must be polygon layers. After calling this function, the
+ # a and b must be polygon or text layers. After calling this function, the
# Netter regards all overlapping or touching shapes on these layers
# to form an electrical connection between the materials formed by
# these layers. This also implies intra-layer connections: shapes
# on these layers touching or overlapping other shapes on these
# layers will form bigger, electrically connected areas.
#
+ # Texts will be used to assign net names to the nets. The preferred
+ # method is to use \labels to create a text layer from a design
+ # layer. When using \input, text labels are carried implicitly
+ # with the polygons but at the cost of small dummy shapes (2x2 DBU
+ # marker polygons) and limited functionality.
+ #
# Multiple connect calls must be made to form larger connectivity
# stacks across multiple layers. Such stacks may include forks and
# joins.
@@ -112,7 +118,7 @@ module DRC
# Connects the shapes from the given layer l to a global net with the given name.
# Global nets are common to all cells. Global nets automatically connect to parent
# cells throughs implied pins. An example is the substrate (bulk) net which connects
- # to shapes belonging to tie-down diodes.
+ # to shapes belonging to tie-down diodes. "l" can be a polygon or text layer.
def connect_global(l, name)
diff --git a/src/lay/lay/doc/about/drc_ref_global.xml b/src/lay/lay/doc/about/drc_ref_global.xml
index 7e4be95ba..5cf550238 100644
--- a/src/lay/lay/doc/about/drc_ref_global.xml
+++ b/src/lay/lay/doc/about/drc_ref_global.xml
@@ -362,6 +362,24 @@ This function creates an edge object. The arguments are the same than for the
The intention of that method is to create an empty layer which can be
filled with edge objects using Layer#insert.
+"edge_pairs" - Gets the edges from an original layer
+
+Usage:
+
+
+See Source#edge_pairs for a description of that function.
+
+"edges" - Gets the edges from an original layer
+
+Usage:
+
+
+See Source#edges for a description of that function.
+
"error" - Prints an error
Usage:
@@ -446,7 +464,7 @@ See Netter#l2n_data for a descr
Usage:
See Source#labels for a description of that function.
diff --git a/src/lay/lay/doc/about/drc_ref_layer.xml b/src/lay/lay/doc/about/drc_ref_layer.xml
index d7287b733..2f29c1d58 100644
--- a/src/lay/lay/doc/about/drc_ref_layer.xml
+++ b/src/lay/lay/doc/about/drc_ref_layer.xml
@@ -76,7 +76,7 @@ result will be the edges of the first operand which are inside or on the
borders of the polygons of the second operand.
The following images show the effect of the "and" method
-on polygons and edges (layer1: red, layer2: blue):
+on polygons and edges (input1: red, input2: blue):
@@ -85,6 +85,16 @@ on polygons and edges (layer1: red, layer2: blue):
 |
+
+The AND operation can be applied between a text and a polygon
+layer. In this case, the texts inside or at the border of the
+polygons will be written to the output (labels: red, input2: blue):
+
+
+
+ |
+
+
"area" - Returns the total area of the polygons in the region
@@ -594,7 +604,7 @@ Returns the first edges of the edge pairs in the collection.
If the layer already is a flat one, this method does nothing.
If the layer is a hierarchical layer (an original layer or
a derived layer in deep mode), this method will convert it
-to a flat collection of polygons, edges or edge pairs.
+to a flat collection of texts, polygons, edges or edge pairs.
"holes" - Selects all polygon holes from the input
@@ -740,8 +750,9 @@ otherwise individual shapes are selected.
It returns a new layer containing the selected shapes. A version which modifies self
is select_interacting.
-This method is available for polygon and edge layers. Edges can be selected
-with respect to other edges or polygons.
+This method is available for polygon, text and edge layers. Edges can be selected
+with respect to other edges or polygons. Texts can be selected with respect to
+polygons.
The following image shows the effect of the "interacting" method (input1: red, input2: blue):
@@ -860,7 +871,7 @@ It is an alias for the "+" operator.
This method is available for polygon, edge and edge pair layers.
The following images show the effect of the "join" method
-on polygons and edges (layer1: red, layer2: blue):
+on polygons and edges (input1: red, input2: blue):
@@ -1030,7 +1041,7 @@ result will be the edges of the first operand which are outside the polygons
of the second operand.
The following images show the effect of the "not" method
-on polygons and edges (layer1: red, layer2: blue):
+on polygons and edges (input1: red, input2: blue):
@@ -1039,6 +1050,16 @@ on polygons and edges (layer1: red, layer2: blue):
 |
+
+The NOT operation can be applied between a text and a polygon
+layer. In this case, the texts outside the polygons will be
+written to the output (labels: red, input2: blue):
+
+
+
+ |
+
+
"not_in" - Selects shapes or regions of self which are not contained in the other layer
@@ -1216,7 +1237,7 @@ It is an alias for the "|" operator.
This method is available for polygon and edge layers.
The following images show the effect of the "or" method
-on polygons and edges (layer1: red, layer2: blue):
+on polygons and edges (input1: red, input2: blue):
@@ -1318,7 +1339,7 @@ are the same than for width.
Distance values can be given as floating-point values (in micron) or integer values (in
database units). To explicitly specify the unit, use the unit denominators.
-The following images show the effect of the overlap check (layer1: red, layer2: blue):
+The following images show the effect of the overlap check (input1: red, input2: blue):
@@ -1766,7 +1787,7 @@ are the same than for width.
Distance values can be given as floating-point values (in micron) or integer values (in
database units). To explicitly specify the unit, use the unit denominators.
-The following image shows the effect of the separation check (layer1: red, layer2: blue):
+The following image shows the effect of the separation check (input1: red, input2: blue):
@@ -1985,6 +2006,12 @@ been created with input. By default, a small box (2x2 DBU)
selected text. By using the "as_dots" option, degenerated point-like edges will be
produced.
+The preferred method however is to use true text layers created with labels.
+In this case, without specifying "as_dots" or "as_boxes" retains the text
+objects as such a text filtering is applied. In contrast to this, layers generated
+with input cannot maintain the text nature of the selected objects and
+produce dots or small polygon boxes in the texts method.
+
Texts can be selected either by exact match string or a pattern match with a
glob-style pattern. By default, glob-style pattern are used.
The options available are:
@@ -2000,13 +2027,38 @@ Here are some examples:
# Selects all texts
-t = input(1, 0).texts
+t = labels(1, 0).texts
# Selects all texts beginning with an "A"
-t = input(1, 0).texts("A*")
-t = input(1, 0).texts(pattern("A*"))
-# Selects all texts whose string is "A*"
-t = input(1, 0).texts(text("A*"))
+t = labels(1, 0).texts("A*")
+t = labels(1, 0).texts(pattern("A*"))
+# Selects all texts whose string is "ABC"
+t = labels(1, 0).texts(text("ABC"))
+
+The effect of the operation is shown in these examples:
+
+
+
+ |
+ |
+
+
+
+"texts_not" - Selects texts from an original layer not matching a specific selection
+
+Usage:
+
+- layer.texts_not
+- layer.texts_not(p)
+- layer.texts_not([ options ])
+
+
+This method can be applied to true text layers obtained with labels.
+In this case, without specifying "as_dots" or "as_boxes" retains the text
+objects as such. Only text filtering is applied.
+
+Beside that this method acts like texts, but will select the text objects
+not matching the filter.
"transform" - Transforms a layer (modifies the layer)
@@ -2388,7 +2440,7 @@ It is an alias for the "^" operator.
This method is available for polygon and edge layers.
The following images show the effect of the "xor" method
-on polygons and edges (layer1: red, layer2: blue):
+on polygons and edges (input1: red, input2: blue):
diff --git a/src/lay/lay/doc/about/drc_ref_netter.xml b/src/lay/lay/doc/about/drc_ref_netter.xml
index c56e060df..a08620943 100644
--- a/src/lay/lay/doc/about/drc_ref_netter.xml
+++ b/src/lay/lay/doc/about/drc_ref_netter.xml
@@ -153,13 +153,19 @@ See connect for more details.
connect(a, b)
-a and b must be polygon layers. After calling this function, the
+a and b must be polygon or text layers. After calling this function, the
Netter regards all overlapping or touching shapes on these layers
to form an electrical connection between the materials formed by
these layers. This also implies intra-layer connections: shapes
on these layers touching or overlapping other shapes on these
layers will form bigger, electrically connected areas.
+Texts will be used to assign net names to the nets. The preferred
+method is to use labels to create a text layer from a design
+layer. When using input, text labels are carried implicitly
+with the polygons but at the cost of small dummy shapes (2x2 DBU
+marker polygons) and limited functionality.
+
Multiple connect calls must be made to form larger connectivity
stacks across multiple layers. Such stacks may include forks and
joins.
@@ -177,7 +183,7 @@ can be cleared with clear_connections.
Connects the shapes from the given layer l to a global net with the given name.
Global nets are common to all cells. Global nets automatically connect to parent
cells throughs implied pins. An example is the substrate (bulk) net which connects
-to shapes belonging to tie-down diodes.
+to shapes belonging to tie-down diodes. "l" can be a polygon or text layer.
"connect_implicit" - Specifies a search pattern for labels which create implicit net connections
diff --git a/src/lay/lay/doc/about/drc_ref_source.xml b/src/lay/lay/doc/about/drc_ref_source.xml
index a620c0b4b..d30545115 100644
--- a/src/lay/lay/doc/about/drc_ref_source.xml
+++ b/src/lay/lay/doc/about/drc_ref_source.xml
@@ -54,6 +54,48 @@ This method will create a new source which delivers the shapes
from that region clipped to the rectangle. A method doing the
same but without clipping is touching or overlapping.
+"edge_pairs" - Gets the edge pairs from an input layer
+
+Usage:
+
+- source.edge_pairs(layer)
+- source.edge_pairs(layer, datatype)
+- source.edge_pairs(layer_into)
+- source.edge_pairs(filter, ...)
+
+
+Creates a layer with the edge_pairs from the given layer of the source.
+Edge pairs are not supported by layout formats so far. So except if the source is
+a custom-built layout object, this method has little use. It is provided for future
+extensions which may include edge pairs in file streams.
+
+This method is identical to input with respect to the options supported.
+
+Use the global version of "edge_pairs" without a source object to address the default source.
+
+This method has been introduced in version 0.27.
+
+"edges" - Gets the edge shapes (or shapes that can be converted edges) from an input layer
+
+Usage:
+
+- source.edges(layer)
+- source.edges(layer, datatype)
+- source.edges(layer_into)
+- source.edges(filter, ...)
+
+
+Creates a layer with the edges from the given layer of the source.
+Edge layers are formed from shapes by decomposing the shapes into edges: polygons
+for example are decomposed into their outline edges. Some file formats support egdes
+as native objects.
+
+This method is identical to input with respect to the options supported.
+
+Use the global version of "edges" without a source object to address the default source.
+
+This method has been introduced in version 0.27.
+
"extent" - Returns a layer with the bounding box of the selected layout
Usage:
@@ -95,7 +137,7 @@ Some filter expressions are:
not have names)
-Layers created with "input" contain both texts and polygons. There is a subtle
+Layers created with "input" may contain both texts (labels) and polygons. There is a subtle
difference between flat and deep mode: in flat mode, texts are not visible in polygon
operations. In deep mode, texts appear as small 2x2 DBU rectangles. In flat mode,
some operations such as clipping are not fully supported for texts. Also, texts will
@@ -106,6 +148,11 @@ Texts can later be selected on the layer returned by "input" with the polygons to create an input layer with polygon data
only. If you only want to see texts, use labels to create an input layer with texts only.
+labels also produces a true "text layer" which contains text objects. A variety of
+operations is available for these objects, such as boolean "and" and "not" with a polygon layer.
+True text layers should be preferred over mixed polygon/text layers if text object processing
+is required.
+
Use the global version of "input" without a source object to address the default source.
"labels" - Gets the labels (texts) from an input layer
@@ -118,10 +165,12 @@ Use the global version of "input" without a source object to address the default
source.labels(filter, ...)
-Creates a layer with the labels from the given layer of the source.
+Creates a true text layer with the labels from the given layer of the source.
This method is identical to input, but takes only texts from the given input
-layer.
+layer. Starting with version 0.27, the result is no longer a polygon layer that tries
+to provide text support but a layer type which is provided for carrying text objects
+explicitly.
Use the global version of "labels" without a source object to address the default source.
diff --git a/src/lay/lay/doc/images/drc_and1.png b/src/lay/lay/doc/images/drc_and1.png
index 5964e19393309b82661763f2bdd4de28817ccac8..a0c7364764bef7fe9a9b7526ccc25c3b4a36c3be 100644
GIT binary patch
delta 10
RcmZqB_^3WXWux&~VE`B@1UUcz
delta 23
fcmeyU-k>o-g@?J=$uoq5gX8u?{|6ftF9-twU+oBv
diff --git a/src/lay/lay/doc/images/drc_and2.png b/src/lay/lay/doc/images/drc_and2.png
index f6a9cfe6bf0916acfe16a2f7512f32105f442bb2..8c99cc75ed88aa7838a8d38ade46d84bf4c235e9 100644
GIT binary patch
delta 10
Rcmdm`zgmBS%0}aMaR3-B1Nr~}
delta 23
fcmZ3jze|6D3J-I!lV=DA2gmJ){tq@Pc8LQ3Ul|Bb
diff --git a/src/lay/lay/doc/images/drc_and3.png b/src/lay/lay/doc/images/drc_and3.png
index 08ba542280d157d22e07bffdb64351c5f02ac9e6..4078a55a396c16e35508e46c8f1a41c1bd674739 100644
GIT binary patch
delta 10
Rcmexn@Z4a6%0^>n2>=`I1Tg>r
delta 23
fcmaEE@XcU?3J-I!lV=DA2gmJ){tq@Px=8>4X$%O4
diff --git a/src/lay/lay/doc/images/drc_centers1.png b/src/lay/lay/doc/images/drc_centers1.png
index 5f5b072968c4e43dc72d9496142afa41f44d3a64..9f731821069d3d268670f743ed7f3b812315fb22 100644
GIT binary patch
delta 10
RcmaE+ab07A%0^>j5daz~1ML6+
delta 23
fcmcbv@l0ca3J-I!lV=DA2gmJ){tq@Pnu!1aWY`Eo
diff --git a/src/lay/lay/doc/images/drc_centers2.png b/src/lay/lay/doc/images/drc_centers2.png
index 65e267b7e74e998dd227ce1436572977009af900..949971f74dd1e7de1cc44c15df268fd416fed094 100644
GIT binary patch
delta 10
Rcmdm^u~uV(%0^>O5daq918)ET
delta 23
fcmZ3hu}5Qq3J-I!lV=DA2gmJ){tq@P@`wNcT}%hW
diff --git a/src/lay/lay/doc/images/drc_corners1.png b/src/lay/lay/doc/images/drc_corners1.png
index 461054bdf9e5760ea1ede8545a42d7cac676fb5c..f5782c1a600c1b84c1cf26c5430a266857a89f34 100644
GIT binary patch
delta 10
RcmeyS@mynq%0^>n5da%$1RVeX
delta 23
fcmaE^@l9ib3J-I!lV=DA2gmJ){tq@Px`_Y)XSfJ*
diff --git a/src/lay/lay/doc/images/drc_corners2.png b/src/lay/lay/doc/images/drc_corners2.png
index 24c48a3168d30b69cc408593715b26077cef2bc4..36de462559b49fe8929f0f3d53cd959b1e622be8 100644
GIT binary patch
delta 10
RcmeyT{$728%0}bU!T=oj1hN1C
delta 23
fcmaE_{!e{^3J-I!lV=DA2gmJ){tq@Po)ZQDY5fTY
diff --git a/src/lay/lay/doc/images/drc_corners3.png b/src/lay/lay/doc/images/drc_corners3.png
index ed6f976963b87ba25d73868c030870c37213bf40..f0224dba8d7090bc0246dcaf5f2a1d49d96f0f98 100644
GIT binary patch
delta 10
Rcmcbic~WzN%0}a*A^;j81VsP<
delta 23
fcmX@9c|&u83J-I!lV=DA2gmJ){tq@Pt`GqLV}1yl
diff --git a/src/lay/lay/doc/images/drc_enc1.png b/src/lay/lay/doc/images/drc_enc1.png
index d4b448284629bd997b7195b1bd6c206bdd6e8823..c0c25dc5fc0cf62c719c4afe62580fd5999402dd 100644
GIT binary patch
delta 10
RcmZ3hJ5P6l%0}ZVF#s0_1I_>d
delta 23
fcmbQIyH
diff --git a/src/lay/lay/doc/images/drc_enc2.png b/src/lay/lay/doc/images/drc_enc2.png
index 27a38ac485681dfc5388369139a65de234376529..93c1b4c1412cc7d98f51de79297530affdd583ce 100644
GIT binary patch
delta 10
RcmbQC*Qqx_Wux&^F#r~G1Q7rL
delta 23
fcmeCwo1r&Bg@?J=$uoq5gX8u?{|6ftUx)z!S<(n*
diff --git a/src/lay/lay/doc/images/drc_end_segments1.png b/src/lay/lay/doc/images/drc_end_segments1.png
index e146be06337a1906c3c4a9b0109f9fea87230e37..0c2c424aee416fa9ed341c597efac8c03c85d575 100644
GIT binary patch
delta 10
RcmeCy_@h2SWux&8VE`Eg1X=(9
delta 23
fcmeyP-mNh~g@?J=$uoq5gX8u?{|6ftZwmteVdn_1
diff --git a/src/lay/lay/doc/images/drc_end_segments2.png b/src/lay/lay/doc/images/drc_end_segments2.png
index 2bbf6f78b1f29d09fb817106c1eeb1327bd6fbaa..cd56d40ecfc096d458064114eee1664bb1cca47e 100644
GIT binary patch
delta 10
RcmaE%aZ_W0%0^>T5da!d1M>g?
delta 23
fcmcbq@j_#Q3J-I!lV=DA2gmJ){tq@PT8IDuWi$v#
diff --git a/src/lay/lay/doc/images/drc_extended1.png b/src/lay/lay/doc/images/drc_extended1.png
index 04ae3e83585988a4c74ad07f8eb526f56dc14ef7..12db6370d3d59c3badd124a998b7790633e5eec6 100644
GIT binary patch
delta 10
RcmaE&c2#YH%0^>DVE`H61L6Px
delta 23
fcmcbr_C#%h3J-I!lV=DA2gmJ){tq@Png{~`WG4tW
diff --git a/src/lay/lay/doc/images/drc_extended2.png b/src/lay/lay/doc/images/drc_extended2.png
index 287ad4aa78a3af6d47e3660d79333de3f55c8fca..90816d5f826354ef20854634cb16b17a0bd2ed56 100644
GIT binary patch
delta 10
RcmbQO(W5azWux&6VE`6P1PcHF
delta 23
fcmeCtn5{8Eg@?J=$uoq5gX8u?{|6ftUkd{OSzQQV
diff --git a/src/lay/lay/doc/images/drc_extended3.png b/src/lay/lay/doc/images/drc_extended3.png
index 185d601d026f2ec8125155d32ede43ad4948405b..330ed208afeca88b19966a3d02d21d29892c4349 100644
GIT binary patch
delta 10
RcmZ3hIZtzf%0}ZV5dap&1H=FT
delta 23
fcmbQIxmI(63J-I!lV=DA2gmJ){tq@P)`|cCTf_(%
diff --git a/src/lay/lay/doc/images/drc_extended4.png b/src/lay/lay/doc/images/drc_extended4.png
index 6e24afc48df3cadd736ea4f8b966abec07d9b823..8caea794f0e5f49190f1d0de7a947e2f305188d2 100644
GIT binary patch
delta 10
RcmZqG_@+KVWux&WVE`D71V{h?
delta 23
fcmeyS-l{P{g@?J=$uoq5gX8u?{|6ftuL=VIVABYl
diff --git a/src/lay/lay/doc/images/drc_extent_refs1.png b/src/lay/lay/doc/images/drc_extent_refs1.png
index 2ab2414637d78a1664d0bf265fd0abdee07821a5..c32c4612914690f4e2b00192d3576d341f761ea2 100644
GIT binary patch
delta 10
RcmZ3ZGFN4S%0}a#f&dp@1T+8u
delta 23
fcmbQMvPNZs3J-I!lV=DA2gmJ){tq@P{t*NKTfqp4
diff --git a/src/lay/lay/doc/images/drc_extent_refs10.png b/src/lay/lay/doc/images/drc_extent_refs10.png
index 81a5603fe94fc5755b94324e3db74e5921854759..2771cae388226f82ee454dc47157fb9ca93ba76f 100644
GIT binary patch
delta 10
RcmZ3aGFfGU%0}b&f&dnl1Qq}Q
delta 23
fcmbQNvPflu3J-I!lV=DA2gmJ){tq@Pei8%#S@j5O
diff --git a/src/lay/lay/doc/images/drc_extent_refs11.png b/src/lay/lay/doc/images/drc_extent_refs11.png
index 9b3618059f0d53ded647db42790c60f14d65968c..f1feb73373e99eac0c11094a8cb7a7d688bb1519 100644
GIT binary patch
delta 10
RcmeyN{8D*>%0}a(f&d&o1eO2*
delta 23
fcmaE<{6l$y3J-I!lV=DA2gmJ){tq@Po)828Xg>(+
diff --git a/src/lay/lay/doc/images/drc_extent_refs12.png b/src/lay/lay/doc/images/drc_extent_refs12.png
index f84556d2447e7eea543eb0a6b192ce84311f65c0..1a9dae0b84ffa6be622820476490d8c51058ab7c 100644
GIT binary patch
delta 10
Rcmdm?wo+|^%0^>WVE`6z16}|C
delta 23
fcmZ3fwnJ@#3J-I!lV=DA2gmJ){tq@PatH$eTt5f1
diff --git a/src/lay/lay/doc/images/drc_extent_refs13.png b/src/lay/lay/doc/images/drc_extent_refs13.png
index d1ebc5eaabeda02e07d28c35969b970491801b1c..4543ee8218a436c156a63b2fe4ee7bd8f52130a8 100644
GIT binary patch
delta 10
RcmX@CvPETr%0^=WApjRE19|`e
delta 23
fcmdm@a#&@83J-I!lV=DA2gmJ){tq@P3JU=MUE~MP
diff --git a/src/lay/lay/doc/images/drc_extent_refs20.png b/src/lay/lay/doc/images/drc_extent_refs20.png
index 170aa1b526b8299f94c3bd5f795b5ef6e08ac164..4b3a2c2e3eade9eb30f14b971771ba54727eec67 100644
GIT binary patch
delta 10
RcmeBC{i`xTWutMV5C9kG1J(cl
delta 23
ecmeyX(xW;-g@?J=$uoq5gX8u?{|6ftV}t-;mIx~V
diff --git a/src/lay/lay/doc/images/drc_extent_refs21.png b/src/lay/lay/doc/images/drc_extent_refs21.png
index 26efee1491807135e117cefd97efa2b9796bfc3a..cbb4fd30de06ab6c0809057ab5d85cec36b2e407 100644
GIT binary patch
delta 10
RcmbQE+N(N2WutMX5C9b~1BUJApjTO1C;;(
delta 23
fcmdn1az3J-I!lV=DA2gmJ){tq@P$_N1fUxEkf
diff --git a/src/lay/lay/doc/images/drc_extent_refs25.png b/src/lay/lay/doc/images/drc_extent_refs25.png
index f3a0db1a2f670e3066bcde4369dd23ea0ca0c952..b90e4bfccb346cb38f009958b75b2cf18a45f559 100644
GIT binary patch
delta 10
RcmaE-a$jYF%0^>rApjbO1N#5~
delta 23
fcmcbw@=j%f3J-I!lV=DA2gmJ){tq@P+6e&wWu6F7
diff --git a/src/lay/lay/doc/images/drc_extent_refs26.png b/src/lay/lay/doc/images/drc_extent_refs26.png
index d855fb789965c94c0c290b70f9a799eed37413b4..c61984c211fd9ea7209e99362a7cb386da10e5c6 100644
GIT binary patch
delta 10
RcmeBC{i`xTWutMV5C9kG1J(cl
delta 23
ecmeyX(xW;-g@?J=$uoq5gX8u?{|6ftV}t-;mIx~V
diff --git a/src/lay/lay/doc/images/drc_extent_refs27.png b/src/lay/lay/doc/images/drc_extent_refs27.png
index 73b9597c0f1a1cd2058395ea4ed7b15f27cc4df8..eee91b62a6231ea5311c2110a8171141cb0f03b7 100644
GIT binary patch
delta 10
RcmeBG{iiZPWutMF5C9ka1K9uo
delta 23
ecmeyT(yKZ_g@?J=$uoq5gX8u?{|6ftV}$@<#0V|`
diff --git a/src/lay/lay/doc/images/drc_extent_refs30.png b/src/lay/lay/doc/images/drc_extent_refs30.png
index c8ac61634e7797a1e976369f06485553e3fe7623..1d76c687d1f81409a5f4f66d3b21ad50be10057c 100644
GIT binary patch
delta 10
RcmbQP+Mzl@WutM55C9a*19$)c
delta 23
ecmeBBovu1Tg@?J=$uoq5gX8u?{|6ft(}e(6CI`&`
diff --git a/src/lay/lay/doc/images/drc_extent_refs31.png b/src/lay/lay/doc/images/drc_extent_refs31.png
index 755dd2922891b345807430bdc838dfd19635bdf9..c490f81e544863cce7812501d42ebe054327a59a 100644
GIT binary patch
delta 10
RcmeyZ@^ws3J-I!lV=DA2gmJ){tq@PdJ6#nXY>en
diff --git a/src/lay/lay/doc/images/drc_extents1.png b/src/lay/lay/doc/images/drc_extents1.png
index edc3fa060110b42f07c608487aba724edd99bde3..5f9c37e025fc2c1bc3b45fbb0a5bca88a0541ab3 100644
GIT binary patch
delta 10
Rcmcbra!h4{%0^=)ApjVY1F!%9
delta 23
fcmX@6a#dx53J-I!lV=DA2gmJ){tq@PstN%BVIT+v
diff --git a/src/lay/lay/doc/images/drc_extents2.png b/src/lay/lay/doc/images/drc_extents2.png
index bb14947ce4b2b1ba542fb7b96a60002323a745f6..29608ac31be3327d08c2f5a304a66d10d967e475 100644
GIT binary patch
delta 10
RcmX@3vsY(=%0^>JF#s521E~N2
delta 23
fcmdn1b4F)^3J-I!lV=DA2gmJ){tq@P%7_5~VAcoz
diff --git a/src/lay/lay/doc/images/drc_holes.png b/src/lay/lay/doc/images/drc_holes.png
index e245a0b88b415e1c96759206ed1c622d375dc3d6..c56f83164be919412f01959968ec6f8ce649d337 100644
GIT binary patch
delta 10
RcmaE$c2RAD%0^>dVE`GB1J(cl
delta 23
fcmcbp_CRfd3J-I!lV=DA2gmJ){tq@P8VCabV{Zs6
diff --git a/src/lay/lay/doc/images/drc_hulls.png b/src/lay/lay/doc/images/drc_hulls.png
index 65ef909306b833f60632a0349f51e664760e38f9..e3f6fd16e0b7e9bd7abf67e973a5c1c6f2685118 100644
GIT binary patch
delta 10
RcmX@3vR7q-%0^>JApjTO1C;;(
delta 23
fcmdn1az3J-I!lV=DA2gmJ){tq@P$_N1fUxEkf
diff --git a/src/lay/lay/doc/images/drc_in.png b/src/lay/lay/doc/images/drc_in.png
index 75ba7043b445a5393a6584d54f5a3ad10aab6253..b3017edb34c518e7f4561249568c199f4339397b 100644
GIT binary patch
delta 10
Rcmdn1x=wY1%0}ZZApjS{1L^<(
delta 23
fcmZ3dx>t3A3J-I!lV=DA2gmJ){tq@P_6h+2UHS+=
diff --git a/src/lay/lay/doc/images/drc_inside.png b/src/lay/lay/doc/images/drc_inside.png
index 3e8e74b0fe75c33be3bec852ea6a40cfd3fbf2b6..03cf210a6d1c2bab8b45a72e9fb190593e6198d7 100644
GIT binary patch
delta 10
Rcmcboab9DB%0^>t5day91JwWk
delta 23
fcmX@FaZh7{3J-I!lV=DA2gmJ){tq@P>WKgVV`vB}
diff --git a/src/lay/lay/doc/images/drc_inside_part.png b/src/lay/lay/doc/images/drc_inside_part.png
index eb827a8b1656b879bc0ba5d3ff736a6878de3fba..0d407c4dd563a380febfc402930f8a5bc605de7a 100644
GIT binary patch
delta 10
RcmZ3cKV5%<%0}a2aR3&a1HJ$N
delta 23
fcmbQPzf6CE3J-I!lV=DA2gmJ){tq@PmWcxZTY(4@
diff --git a/src/lay/lay/doc/images/drc_interacting.png b/src/lay/lay/doc/images/drc_interacting.png
index 96de49249fa81545e06a016d48b54d93f66e9385..9feceacdc18aabbd4fa8b3f8acc4cf0c72ead847 100644
GIT binary patch
delta 10
RcmZ3dHD7Cj%0}bgA^;cZ1W5n@
delta 23
fcmbQQwN7h-3J-I!lV=DA2gmJ){tq@P{u2QJT^tCW
diff --git a/src/lay/lay/doc/images/drc_join1.png b/src/lay/lay/doc/images/drc_join1.png
index 74c2b43548053b6d3e70b4557e5ee97dff4ca098..93422273d6094976ac350dd1d90109b1ba035091 100644
GIT binary patch
delta 10
RcmeyM{!o2_%0}b8!T=lK1c(3t
delta 23
fcmaE;{y}|$3J-I!lV=DA2gmJ){tq@P9uNiqXL$(S
diff --git a/src/lay/lay/doc/images/drc_join2.png b/src/lay/lay/doc/images/drc_join2.png
index c6c751efee4b40ea590e2b01172b7e5067c54b10..b0dfc41d81c40cd134272ea44affbf2d85e2cc36 100644
GIT binary patch
delta 10
RcmbPh+GjdJWutMH6aW@W1F`@B
delta 23
ecmeA(oohNlg@?J=$uoq5gX8u?{|6ftbEN=U;s^%-
diff --git a/src/lay/lay/doc/images/drc_merged1.png b/src/lay/lay/doc/images/drc_merged1.png
index 2f02b29305d671b8cfdf207a63787a81120dcd15..d6c2d3e6df47e918e9ef946c3ad32d47991d8f46 100644
GIT binary patch
delta 10
RcmeyS@?2$t%0^>nApjdE1QP%N
delta 23
fcmaE^@=axe3J-I!lV=DA2gmJ){tq@Px(NXQXATHx
diff --git a/src/lay/lay/doc/images/drc_merged2.png b/src/lay/lay/doc/images/drc_merged2.png
index 76ea5368e6d5c70131785022f5be3cbf70e4781e..c5aec6c9db881f3e6221b4b00256d3bbc7db9750 100644
GIT binary patch
delta 10
Rcmdm|x?XjH%0}aEApjTG1ML6+
delta 23
fcmZ3lx=(e23J-I!lV=DA2gmJ){tq@P_6Y$1UML7c
diff --git a/src/lay/lay/doc/images/drc_merged3.png b/src/lay/lay/doc/images/drc_merged3.png
index 2f7ead9ddd13895376fdb9cab7f90a470eb1808c..12bc538b553e38452bb2af64c510dcfbb75f6bf0 100644
GIT binary patch
delta 10
RcmX@Ay-j<9%0}Z!q5v4i1Q7rL
delta 23
fcmdm{eN=mb3J-I!lV=DA2gmJ){tq@PP89_JU}*?u
diff --git a/src/lay/lay/doc/images/drc_merged4.png b/src/lay/lay/doc/images/drc_merged4.png
index 0dc6f5580c38e780d5de9a3e42b58177859893ba..e744c80fe8de09ee5548e771b1c9e02bb94f0543 100644
GIT binary patch
delta 10
RcmZqD{;V}YWuvjbC;%6O1IGXW
delta 23
ecmeyY)ucT^g@?J=$uoq5gX8u?{|6ftgG2#e$p{<(
diff --git a/src/lay/lay/doc/images/drc_middle1.png b/src/lay/lay/doc/images/drc_middle1.png
index 4fddc996bf3c10958098b71596328e05481ff190..33579313468b22666ab21ce25519eabed82ebe6a 100644
GIT binary patch
delta 10
RcmaE)bXjSF%0^>-K>!(c1JVEh
delta 23
fcmcbt^hjxf3J-I!lV=DA2gmJ){tq@P8VLdbV<8A9
diff --git a/src/lay/lay/doc/images/drc_moved1.png b/src/lay/lay/doc/images/drc_moved1.png
index 649de520ae716cebe4f04f98e5edf82b3c56bd78..40319a78146162baed1fb400f3bbaa84fd6be822 100644
GIT binary patch
delta 10
RcmcbvaYAE)%0^=q5dawd1Hb?P
delta 23
fcmX@1ab07A3J-I!lV=DA2gmJ){tq@Ps*3;sVkQU`
diff --git a/src/lay/lay/doc/images/drc_not1.png b/src/lay/lay/doc/images/drc_not1.png
index c62d8a9d3ffe34a62958c64abded2383ee7b30b7..dad0049f2f3d180a2bd8ea8010084fad6ecb776d 100644
GIT binary patch
delta 10
RcmeyP^;TPQ2-nQ1T+8u
delta 23
fcmaE>^+#)h3J-I!lV=DA2gmJ){tq@P`iKGmX(0%S
diff --git a/src/lay/lay/doc/images/drc_not2.png b/src/lay/lay/doc/images/drc_not2.png
index c501c3ada09f4ad79f687375d80e4ce6fa5da827..e3f229224df933b9c12e893084247da3873d33e8 100644
GIT binary patch
delta 10
RcmaE3a@S;n%0^>LDF7R11RVeX
delta 23
fcmca>^2TI>3J-I!lV=DA2gmJ){tq@P+DHKaXX*%Y
diff --git a/src/lay/lay/doc/images/drc_not3.png b/src/lay/lay/doc/images/drc_not3.png
index 51b96ba4f70cdba7164d89973c0e8cb25892c887..4a4553a3d0415c89e2e95f4d93ccc2156398c758 100644
GIT binary patch
delta 10
RcmdmDu+(6J%0^>G2>=$w18V>P
delta 23
fcmZ2#u*G143J-I!lV=DA2gmJ){tq@PvPb{`T`&j0
diff --git a/src/lay/lay/doc/images/drc_not_in.png b/src/lay/lay/doc/images/drc_not_in.png
index c3e7986b34bac631aec00980d5aab55db79d0dcf..a2556074ccd57446efe3937bd0590057635c8b17 100644
GIT binary patch
delta 10
RcmX@2zEypK%0}af!T=a>1Oxy8
delta 23
fcmdn0enfqO3J-I!lV=DA2gmJ){tq@PP7wwGUy%q|
diff --git a/src/lay/lay/doc/images/drc_not_inside.png b/src/lay/lay/doc/images/drc_not_inside.png
index aa4c880eb06d59c7f4101633fa8731e9f5fb6c90..48398c45aecc81b23fa728cb4ff5c74d06d5eb77 100644
GIT binary patch
delta 10
RcmeCt{;M@XWutMVC;%8s1LXh!
delta 23
ecmeyX)uTN@g@?J=$uoq5gX8u?{|6ftV?+UAl?XZj
diff --git a/src/lay/lay/doc/images/drc_not_interacting.png b/src/lay/lay/doc/images/drc_not_interacting.png
index 27a48eb066f022cda0cc98f6b5f679e09d71b1ac..3455d262b1453088209f66e2057adb1d28942bc9 100644
GIT binary patch
delta 10
RcmZoS_@O^RWux&GaR3=P1Y!UH
delta 23
fcmeyN-)=BLg@?J=$uoq5gX8u?{|6ftuZsf!VuJ{`
diff --git a/src/lay/lay/doc/images/drc_not_outside.png b/src/lay/lay/doc/images/drc_not_outside.png
index e6ede552aab7f6086017b500767f7c96e51ddec2..738af1cb8ca8e3b3b4d3616ced61dd392c6b7a12 100644
GIT binary patch
delta 10
Rcmeya{z83%%0}ZO!T=m>1f2i?
delta 23
fcmaE%{#|{73J-I!lV=DA2gmJ){tq@P9v21xXuAmV
diff --git a/src/lay/lay/doc/images/drc_not_overlapping.png b/src/lay/lay/doc/images/drc_not_overlapping.png
index 89f571221b6eda57c1e728f0f5927c7fa7193cf3..254bac8c6c144c97fd2c00f7a0bf8b2081c2bed9 100644
GIT binary patch
delta 10
RcmX?Pu-RaO%0^>;2>=(}1C;;(
delta 23
fcmdmNaL8bS3J-I!lV=DA2gmJ){tq@P3P}I}U$h76
diff --git a/src/lay/lay/doc/images/drc_or1.png b/src/lay/lay/doc/images/drc_or1.png
index 78386d1fff4c87515fd0feb1bf9eb09eaa149698..a14ec27eb524c0510bee7526d6b697234dac2615 100644
GIT binary patch
delta 10
RcmeyU@knEW%0^>55da$n1P%ZI
delta 23
fcmaE)@lj)f3J-I!lV=DA2gmJ){tq@PI*I@QX3_{_
diff --git a/src/lay/lay/doc/images/drc_or2.png b/src/lay/lay/doc/images/drc_or2.png
index ae2974fa09040268c0e50479d4eec30ec21c707e..76fa8b7e407be93d80209a3c411eea291ca9c2fb 100644
GIT binary patch
delta 10
RcmZoO{cbWrWutMh6aW}_1MC0*
delta 23
ecmexv(q=kAg@?J=$uoq5gX8u?{|6ft!=wOWDhNRU
diff --git a/src/lay/lay/doc/images/drc_outside.png b/src/lay/lay/doc/images/drc_outside.png
index 190b2537c50fbadc0a62ee38a23a8979b37ce951..c12dfb826b945c771bccd66c017d1c5d85e5af14 100644
GIT binary patch
delta 10
RcmZ3iKSh6n%0}Y?aR3%z1GNAE
delta 23
fcmbQDzgT~Q3J-I!lV=DA2gmJ){tq@P7K;M_TK5PF
diff --git a/src/lay/lay/doc/images/drc_outside_part.png b/src/lay/lay/doc/images/drc_outside_part.png
index 16789b5178cbaa05f2dc9704d0e78628d6b04f31..8e3552e70701895c8c0f4af5cd584845d3d03d5c 100644
GIT binary patch
delta 10
RcmeA(`foTvWux(J2>==91bhGh
delta 23
fcmexw*k?3Bg@?J=$uoq5gX8u?{|6ft?@0gvWEu$3
diff --git a/src/lay/lay/doc/images/drc_overlap1.png b/src/lay/lay/doc/images/drc_overlap1.png
index 75d18813d630d848abc17692d300f478f32883e1..8a3653124deeb1b56faa9d663e1d5db33da4eba3 100644
GIT binary patch
delta 10
RcmdmOxW;gT%0}Z32>=*j1Ofm6
delta 23
fcmZ2uxZ7}o3J-I!lV=DA2gmJ){tq@Pc1r*NUz`Y6
diff --git a/src/lay/lay/doc/images/drc_overlap2.png b/src/lay/lay/doc/images/drc_overlap2.png
index 06d17e418e3357aba5654a6a8562cff3dd2ae870..dbcea6cf906fc50a65fc93f42b0a2c5ecd637f81 100644
GIT binary patch
delta 10
RcmX?XxW#aS%0}Y}5(i1R4MU
delta 23
fcmdmDc-U})3J-I!lV=DA2gmJ){tq@PPL==wVGIaw
diff --git a/src/lay/lay/doc/images/drc_overlapping.png b/src/lay/lay/doc/images/drc_overlapping.png
index 2afb3ba857f30291d5d40fdbd3ac135333d480d0..33ebb1460954cf32980b6f796d08c55c10b63e7b 100644
GIT binary patch
delta 10
RcmZ3cFx2>=*<1FZl6
delta 23
fcmdmOaLQnU3J-I!lV=DA2gmJ){tq@PN=X0!VI&9w
diff --git a/src/lay/lay/doc/images/drc_rotated1.png b/src/lay/lay/doc/images/drc_rotated1.png
index 02011ed60b7bbeed97413b525850e08f87be8769..40bff10aaa35ea0c2d2ca91f78e052e341ff4ebf 100644
GIT binary patch
delta 10
RcmX?acED_c%0^=uX#g2S1Iqva
delta 23
fcmX?LcHV4)3J-I!lV=DA2gmJ){tq@P%1Z+PV+jZ#
diff --git a/src/lay/lay/doc/images/drc_rounded_corners.png b/src/lay/lay/doc/images/drc_rounded_corners.png
index c77f0da8b99f00d0d480916b272f564f9f0f483c..c0c8e3228d18cf398f8adb394c3d66b8b61b88bd 100644
GIT binary patch
delta 10
RcmZ3YGgW7T%0}alq5u~{1TX*q
delta 23
fcmbQLvqWct3J-I!lV=DA2gmJ){tq@Peh~!#Tcrqv
diff --git a/src/lay/lay/doc/images/drc_scaled1.png b/src/lay/lay/doc/images/drc_scaled1.png
index 32c75761e34452edc784b530401e40b47d78cfb1..e29d4ecbf191e7570b248c71f567838bb8a61eef 100644
GIT binary patch
delta 10
RcmX@Bu}@=y%0^=;5dau91EK%`
delta 23
fcmdm|aaLo33J-I!lV=DA2gmJ){tq@P%8CF0U|I+F
diff --git a/src/lay/lay/doc/images/drc_separation1.png b/src/lay/lay/doc/images/drc_separation1.png
index 1204d1d8ac8207b5a04a86e968b479dd0d4e8558..4b370a1da5e45db7144ef49f0aa5fe54e36ec8ca 100644
GIT binary patch
delta 10
RcmZoL_^3ZYWux&~aR3;t1Wf<{
delta 23
fcmeyU-(WC7g@?J=$uoq5gX8u?{|6ftFNgyGVL=F@
diff --git a/src/lay/lay/doc/images/drc_sized1.png b/src/lay/lay/doc/images/drc_sized1.png
index c4a9d56a2b604fbf5406d74c01f6f4098f97a522..cfb54b87e6cdc3183a72af239324e523f9616455 100644
GIT binary patch
delta 10
RcmZ3lv_NTs%0}Zq0st3z1ULWy
delta 23
fcmZ3Wv|ed~3J-I!lV=DA2gmJ){tq@P{uclMTlNTz
diff --git a/src/lay/lay/doc/images/drc_sized2.png b/src/lay/lay/doc/images/drc_sized2.png
index af90902977061b86be898f3666aa9508150d653c..6803ba0212c10f33623eb6732c82461543b01468 100644
GIT binary patch
delta 10
RcmX@4yjgjI%0}aUK>!#A1M~m@
delta 23
fcmdn2d`NkM3J-I!lV=DA2gmJ){tq@PP7(wFUW*7x
diff --git a/src/lay/lay/doc/images/drc_sized3.png b/src/lay/lay/doc/images/drc_sized3.png
index d5a1f1ad682f0c85c8ace28c645b5cc5923a2652..090f3039390201ff6cd3229750e3226bced717ae 100644
GIT binary patch
delta 10
RcmX@6vR!3@%0^>hApjR=1A_nn
delta 23
fcmdn4a!h4{3J-I!lV=DA2gmJ){tq@PiU|P#UTz22
diff --git a/src/lay/lay/doc/images/drc_sized4.png b/src/lay/lay/doc/images/drc_sized4.png
index d178ed2369d5c495a90251e227be3c59b28a61f9..35bb940f4dcafab9cbfcd826e6a0f042c93d0e48 100644
GIT binary patch
delta 10
RcmZ3fGD~HG%0}aFf&dpH1S-R
diff --git a/src/lay/lay/doc/images/drc_sized5.png b/src/lay/lay/doc/images/drc_sized5.png
index 556ffb531e90e5f14f520edf1f5e800bb1271d1b..5efc645439fdb44a1fad0a5a35d0598816c5161e 100644
GIT binary patch
delta 10
RcmeyY{6u+z%0}Y@f&d%Z1cv|s
delta 23
fcmaE&{8@Q|3J-I!lV=DA2gmJ){tq@P9u@=uXITi`
diff --git a/src/lay/lay/doc/images/drc_sized6.png b/src/lay/lay/doc/images/drc_sized6.png
index c81dbdcd2c3d8c0a62b16ec03b891225449fbc26..17cdf1f57c1a350402e7977669fb7554bb30b36f 100644
GIT binary patch
delta 10
Rcmcbna$IGC%0^>lApjVs1G4}C
delta 23
fcmX@Ea!qA|3J-I!lV=DA2gmJ){tq@PstExAVNM7L
diff --git a/src/lay/lay/doc/images/drc_space1.png b/src/lay/lay/doc/images/drc_space1.png
index 81b377a1a13d54449234b98844f46588e6bfab0b..0665068bbe3a53c73e0009a7c8d1982077322266 100644
GIT binary patch
delta 10
RcmZqB{-`xUWuvjLC;%5*1Hk|Q
delta 23
ecmeyU)u25=g@?J=$uoq5gX8u?{|6ft14IE|Z3q?s
diff --git a/src/lay/lay/doc/images/drc_space2.png b/src/lay/lay/doc/images/drc_space2.png
index c4cc02b5b7bd25d3e795980fe65e59ba1bc0816e..65d1c9dc9af422912b722d38df9da8bceecfea23 100644
GIT binary patch
delta 10
RcmcbiaZ+P~%0^>V5dawx1H%9S
delta 23
fcmX@9aYJK*3J-I!lV=DA2gmJ){tq@PYKQ;;VpIqi
diff --git a/src/lay/lay/doc/images/drc_space3.png b/src/lay/lay/doc/images/drc_space3.png
index db0b50898f17a69ac7639e9aa22fb8966e042db7..5ac751bc37d0b8d417ce275c43042ec0e683db94 100644
GIT binary patch
delta 10
RcmX@0wNYz=%0^>eQ2-ZG1AqVk
delta 23
fcmdm}bwF!^3J-I!lV=DA2gmJ){tq@P3Wx##URej#
diff --git a/src/lay/lay/doc/images/drc_start_segments1.png b/src/lay/lay/doc/images/drc_start_segments1.png
index a6b45ecabf2e9fe2e281be2fb60b5edde559eb33..12ba8a0910b64e2378940d770e6e6db63ac4b62f 100644
GIT binary patch
delta 10
RcmZ3aFp
diff --git a/src/lay/lay/doc/images/drc_textpoly1.png b/src/lay/lay/doc/images/drc_textpoly1.png
new file mode 100644
index 0000000000000000000000000000000000000000..5379970089d4281d7f63518ff2f261f90935a827
GIT binary patch
literal 4114
zcmeH~dr(t%7RLiDw2C2}byvEepj}a1URs3k3Rt6yNH?HGj0$3KtwtV^mlz(2Y~4_o
z3NEM-1R_O1C5Bs2ffycc3Wx$hB7~Bcn81~U5Fv&DdG!Xi?H{%?-I<-~IO89``OTbr
z&;9+*Ils^M+~4_dOfY=8-EtTV1`pY_V=oM5cF{E6H-{_;VZ}9QT6SvJffN|b=3CP+
zyX<0PZ!)It#HON;#m8@fMTCV1$4mVn;|C_=-eX5oVa{$JySi=h_i^>zw7mAh0q9#r
zAv->aI8&++97>k>{NA#^zS8z{WsiTHqDMb^B6oM;rrlQC)=&9vaiq(G_kOv(a9ah)
zp=~A*2*G0WS2uW-1lSP|xV5uHebZ_0$bf4?>EJ%9)rzgpj)lB`sRCzqY?y7g{{Lxw
zT8+y#5I|(QUf;WBpKa5#Q|DiYvopR_gw-2E=
zl=aHT^#Kdb_o*a4O}@}oNB+A+6}T>;04=;H@0>vPw@tdXM;i`pzrF%065Hq)>B;vW
z!%OH4=GG(EE8Ihu9!Tm?^mFnQPeDN(kD-a_I&XLtUh1?ioI**9T<4H)&281t#`8FueA5A7rny?NoOCYvWN~mU|=?NKqkumL;B;kpgLxBN+vch)c&QS
z%!a65^g6;WIexnP8fZ84!rcB!z~-39k#fvIVXngyxazJdybt$u=g2mtSbcGSk3<9v
zoI}!mkC*8tqSyzclG%P)Cf6jmOG4PjJ5$2oq?!Olz@-#y>c74F`TlEWWJG~|WJx>4
zi!)h>1Z+y5-#oXO
za<55BNt-jdO6-=l^`PJdhB!iW27#9!C0uVz_md8)nvnFZKa;UcKYW^FhAXm%+lThe
z-D!)rXd&~^hqn}DvUjf(0pq1pRMKkKbJgKgRw2+_zeQ8JtkKT@=QRWumWK3GL4n5G}iZV(x
z`@!N1Z5*nR1=VQEo33D$=C$>UJ!i*bUUN8unBwYek-ADTv3d}&5wjQS^_Zk-^BJzk
zcST{z4ksn5`-(^ikAEWRX2O%@x^YlH(q1A9r1hCNIf3PgQ@*iinU;*rT;QasLK}oe
z;Sw}V-%u)%*HlbMuga^#oH3@WnkZh~hX?kgrOX1Y?hIowojX|~4R|&SCY-5%=%{*-M;iO
z`3MB-FF_o^KByKONRPRJ%1#Ykrp_|o7-jT-i290Un4O*``nAN6IkCh^Q196#Zp4vk
zpY6z=QzG;KB(k)U;%Vs;{{uTB*b5Ewh>#h}WC*7mc&Niw5Bbey^r;UQ2@g_K-r{=)
z-Nsd+<`6~R{n~Vt^pA_sj>6;m4s0a*K}1mnfDJ8rW}Fzs-p%KR)Mje-2sQ-;A#WtM
z2^@xAKwxFopbw)K*&PPPi=kId^3YCkLiA8C->)f()KqjOvwu>bU%yJ2KVoe4s%S_`
zXEC{~j74?+REBuHBG){&$$BKqOngLd$Y=q}6b>YR#ii5d5KaXJ>6=PlxdC7v4KOt>|tt@1=;OIwJb6;zkw;6
zImAadlM(V7>*vn3Zp+B3*ea)o(p7@gwwM0tTAoHj!)!!ZS6{hr)tVU|_o)!~Y+rg6
zGb#Thwq1GWey$~8Qx_4=D*=HGm%RIAw?i$g>|`19y@>ZPhFcg8y5u$pkW&1fb?ksQdKCo$
z3qoWUj4UB!mpeehl68?IgbhcO!-xrqBnDQ3gpjLA@aWXebUSsX<4phf<~Q@s`}^ko
zp67X=@BJgJCHEfa#CAWl(5i
zYNZRN`odFvPRGYP0FJ_f55)7`w87u%f?u3Il?vEtx5w7b!F{i->u2k0u7_#&y6Crm
z-_eXal8M8~yq5emgCV}V`a2xw;u{=Uc%CafKk)D#z$Zzp%kpUMx5@s0@y_q>D#fae
zq>GDbiw6La3&Iy>fOEHSYi_+1l0qvRLhBpQA)yhLl)>QQQ181YK;xYZleilnGI-4e
zDCS{J)dDh<-dZm*gpBo5?2G%RlQE(^k7Ke+1a5Ev8=AvSY@6!-6Or0cT{HV)*%P6f
zH$yR-24zvAPhV!Qi&9ILhnhfuE8m?vPxrIwu`SNLvn{NRt{@XQBBx-YBegYUc%rYmV5do(NpjqLRHiHJ11u*b>vu8HHv5xho^fg5qc
z9kZ=DH#&UH+PmK_D@Tze8QuBR#=5ej=KYzfRES
z@7{egL{>eX%utTc)u5zG60R_f2Mrwa1`#qJ+6aReQF1CYHUeuDsh5QDyZ0Y4qu$ritA!ceCj&<`I>43oonj?I*2e
zxrLv$BbcpX{w`fb`BtMdZ2?a_^5Wn~$Fc^hS>l7T`37n50ODugG4DB;8-GM!)dgT&
z`Q(no@;JB-yZO%SFnu~~vdBt+6jt0}e0{ayl9$)38=?KYatb>aLUK(nQ%>vfO=h^|
z=+2)6v`M&E5F(qZZ8=h&X5H&*OFbC=T;+#v&(v2%K``sJh^7GJk}d!PtZ(mHN!L;0
zA@R7C0#Ci!G}ukFp1*>b*cejs3(i?cE}-AhRuq7O6XSdekCRk5NzczQm%;DYP=^
zP^W9M_*K$c3pMTf1pRkxno?cq6X^-d>bkP=5k>G=3vVl~v85BY!>qp;J-Rj|{TdO~
z2b2;7XGBd*)>$|bq8|E>(37-oLo23Zv}JwZ(~%KX%v83>t9?^?@6dpcE8cfA(zpXU
zb0d_c!+f<136oabj?t-;g6LT#J-w2S4oBU7E1Kn{VV_8cysR$&jZY|o3G{ri4(}eI
zctOW*w==2XZ$ZZ=@y*YIUTgDNN(GcwuS$Su!Z@5t9xuhaO-@%R1u)gZkUxJL7owFo
zlUX)JbI2K|i>PvZWoZOe#j1-ci-oAYqST7B@T*ymD2vi$l-e6Bd6cO68rx2XHCkZ_
z#2oG`ZHWVC;Y1e23z&89Hs51-K$b9GtCf>63|{YPoXVuDXoOXyYA<2mYt{=FV;Z1^
z1d+78XoY(2EW5F7;GiF1xKE!cZ4P|^Zx3(GWcUNz^=5@x&VkSR!ueI&>KQEvE77|uPmev?7vR69sN
z*cIQH9pOlNQ1!1{s<%kqOy@OWD`5K8JXgPvS*pMGmOPY9_GYlJ#;HnbY`&^ejbH#a|`@Gr=}*QXP7oW1RqoNUpyy4!ls
zOoXS*y2<-=9P@GLW!?FCmMhlG2u~uuvz!m=iXb86Yc0AaYJ
zGRLYFyS*|;uJ^?9#oSHc_dHQd0+MEbueV(&^XK7&Qo;y@jZzZ*!k_)iotf_Ghl-tk%
z+A1vV$H0-=q7&NDZn}A~cz(%5Of-IKThp;YE%?Dd;9`&6-cDRF-PC{cAo`~#i3VzAV48u;$dA^()B%3JLHo(x(HH*?830I2
literal 0
HcmV?d00001
diff --git a/src/lay/lay/doc/images/drc_texts1.png b/src/lay/lay/doc/images/drc_texts1.png
new file mode 100644
index 0000000000000000000000000000000000000000..af37d9f6ffa52780ee95d9242ec582cfcbd50f69
GIT binary patch
literal 3059
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
literal 0
HcmV?d00001
diff --git a/src/lay/lay/doc/images/drc_transformed1.png b/src/lay/lay/doc/images/drc_transformed1.png
index d232cbd6ecf9e4d700a54c4467065c29c64163f7..fd0ec282826e32fbdc1bd8d8149b8cada2e7403d 100644
GIT binary patch
delta 10
RcmeyP`&M^?%0}apVgMa81iJtL
delta 23
fcmaE>`$ud
delta 23
fcmZ3izDa$83J-I!lV=DA2gmJ){tq@PHVFd&TvZ4o
diff --git a/src/lay/lay/doc/images/drc_width4.png b/src/lay/lay/doc/images/drc_width4.png
index 727007a4b71c53f8f564bf514a1b511a65aa04c5..9b281830f2263dcb122ebaf7910aa670fe1d9d5d 100644
GIT binary patch
delta 10
RcmbQL)uuH;Wux&U5danS1O5O2
delta 23
fcmZqEnyNKHg@?J=$uoq5gX8u?{|6ftpNaqgSe^(|
diff --git a/src/lay/lay/doc/images/drc_with_angle1.png b/src/lay/lay/doc/images/drc_with_angle1.png
index 4c9ba1f7209d6caaa83d9670505b7b3dccd97047..dadeb672743bb403d82c5dc1d0326d1d2cb9d122 100644
GIT binary patch
delta 10
RcmbQB*Qhr^Wux(3F#r|Q1Ni^|
delta 23
fcmZqFo1iyAg@?J=$uoq5gX8u?{|6ftABX_}SYilH
diff --git a/src/lay/lay/doc/images/drc_with_angle2.png b/src/lay/lay/doc/images/drc_with_angle2.png
index 5fe220c01d2e0fa349305746ffc7866aa47f2ad7..fe3b022a8fbc0acf0d5ff51aa1f9f5d2520d72a4 100644
GIT binary patch
delta 10
RcmZoL{Ae&iWuvjL1OOMl1JD2f
delta 23
ecmexp&|o-0g@?J=$uoq5gX8u?{|6ft10(=oYzQR)
diff --git a/src/lay/lay/doc/images/drc_with_angle3.png b/src/lay/lay/doc/images/drc_with_angle3.png
index 1aa664498244e38218ff0a309538c6f1acdfb5ed..b3c8c978da7f6e2c0808a53bdf62437e546ed11b 100644
GIT binary patch
delta 10
RcmcbueMWnN%0}ZAq5v9x1XBP2
delta 23
fcmX@3eOr5i3J-I!lV=DA2gmJ){tq@Pt`-FVWL*fT
diff --git a/src/lay/lay/doc/images/drc_with_angle4.png b/src/lay/lay/doc/images/drc_with_angle4.png
index 6e5246d2a6499d05d9006c58d78ebc0b277d4923..30aa5e33dd0111bee8238e9357598d5fe653c5a9 100644
GIT binary patch
delta 10
RcmeyW{Y-m;%0}Zuq5vF*1fc)`
delta 23
fcmaE+{Z)H{3J-I!lV=DA2gmJ){tq@P9u)-uX$c7S
diff --git a/src/lay/lay/doc/images/drc_xor1.png b/src/lay/lay/doc/images/drc_xor1.png
index 6a53ec961ccb07bb232ac05e75c3124b34dca6ee..5ca89f97bd284ba2da04ce69afe05296c1c91c52 100644
GIT binary patch
delta 10
Rcmdm`v07t-%0^>$5daps18D#N
delta 23
fcmZ3ju}fou3J-I!lV=DA2gmJ){tq@Pa)|%{T<{0J
diff --git a/src/lay/lay/doc/images/drc_xor2.png b/src/lay/lay/doc/images/drc_xor2.png
index 5b391cd3fd8f09ea2ec35dd85f0be08b34d31902..d67542b760b8dafe697fce0e6e1abfb466b3153d 100644
GIT binary patch
delta 10
Rcmca-dfs$`%0}bWQUDuY1a$xa
delta 23
fcmX?ade3x%3J-I!lV=DA2gmJ){tq@Pu9E@)W{?QV
diff --git a/src/lay/lay/doc/manual/drc_runsets.xml b/src/lay/lay/doc/manual/drc_runsets.xml
index 6123f5e0a..dd7442135 100644
--- a/src/lay/lay/doc/manual/drc_runsets.xml
+++ b/src/lay/lay/doc/manual/drc_runsets.xml
@@ -545,20 +545,20 @@ output(w, "width violations")
- Boolean AND with a polygon layer: will select those texts
which are inside or at the border of a polygon.
- interact is a synonym for this operation.
+ interact is a synonym for this operation.
- Boolean NOT with a polygon layer: will select those texts
which are outside of any polygon.
- not_interact is a synonym for this operation.
+ not_interact is a synonym for this operation.
- Text filtering by string: texts can be filtered either
by matching against a fixed text or a glob pattern.
The methods provided for this purpose are:
- texts and
- texts_not
- - flatten
+ texts and
+ texts_not
+ - flatten
will flatten the hierarchy of a text layer.
- Polygon or edge generation around the text's location:
- polygons and
- edges
+ polygons and
+ edges
Edge pairs and edge pair collections
diff --git a/src/lay/lay/lay.pro b/src/lay/lay/lay.pro
index c5b7c4cf9..cfb7e9c75 100644
--- a/src/lay/lay/lay.pro
+++ b/src/lay/lay/lay.pro
@@ -165,7 +165,8 @@ RESOURCES = layBuildInMacros.qrc \
layHelpResources.qrc \
layMacroTemplates.qrc \
layResources.qrc \
- laySaltTemplates.qrc
+ laySaltTemplates.qrc \
+ layDRCLVSHelpResources.qrc
INCLUDEPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
DEPENDPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
diff --git a/src/lay/lay/layDRCLVSHelpResources.qrc b/src/lay/lay/layDRCLVSHelpResources.qrc
new file mode 100644
index 000000000..39a37e95b
--- /dev/null
+++ b/src/lay/lay/layDRCLVSHelpResources.qrc
@@ -0,0 +1,99 @@
+
+
+ doc/images/drc_width1.png
+ doc/images/drc_width2.png
+ doc/images/drc_width3.png
+ doc/images/drc_width4.png
+ doc/images/drc_space1.png
+ doc/images/drc_space2.png
+ doc/images/drc_space3.png
+ doc/images/drc_separation1.png
+ doc/images/drc_raw1.png
+ doc/images/drc_raw2.png
+ doc/images/drc_raw3.png
+ doc/images/drc_enc1.png
+ doc/images/drc_enc2.png
+ doc/images/drc_overlap1.png
+ doc/images/drc_overlap2.png
+ doc/images/drc_start_segments1.png
+ doc/images/drc_start_segments2.png
+ doc/images/drc_end_segments1.png
+ doc/images/drc_end_segments2.png
+ doc/images/drc_centers1.png
+ doc/images/drc_centers2.png
+ doc/images/drc_extended1.png
+ doc/images/drc_extended2.png
+ doc/images/drc_extended3.png
+ doc/images/drc_extended4.png
+ doc/images/drc_extents1.png
+ doc/images/drc_extents2.png
+ doc/images/drc_inside.png
+ doc/images/drc_not_inside.png
+ doc/images/drc_outside.png
+ doc/images/drc_not_outside.png
+ doc/images/drc_interacting.png
+ doc/images/drc_not_interacting.png
+ doc/images/drc_overlapping.png
+ doc/images/drc_not_overlapping.png
+ doc/images/drc_and1.png
+ doc/images/drc_or1.png
+ doc/images/drc_xor1.png
+ doc/images/drc_not1.png
+ doc/images/drc_join1.png
+ doc/images/drc_and2.png
+ doc/images/drc_or2.png
+ doc/images/drc_xor2.png
+ doc/images/drc_not2.png
+ doc/images/drc_join2.png
+ doc/images/drc_and3.png
+ doc/images/drc_not3.png
+ doc/images/drc_inside_part.png
+ doc/images/drc_outside_part.png
+ doc/images/drc_in.png
+ doc/images/drc_not_in.png
+ doc/images/drc_hulls.png
+ doc/images/drc_holes.png
+ doc/images/drc_merged1.png
+ doc/images/drc_merged2.png
+ doc/images/drc_merged3.png
+ doc/images/drc_merged4.png
+ doc/images/drc_moved1.png
+ doc/images/drc_rotated1.png
+ doc/images/drc_scaled1.png
+ doc/images/drc_transformed1.png
+ doc/images/drc_sized1.png
+ doc/images/drc_sized2.png
+ doc/images/drc_sized3.png
+ doc/images/drc_sized4.png
+ doc/images/drc_sized5.png
+ doc/images/drc_sized6.png
+ doc/images/drc_with_angle1.png
+ doc/images/drc_with_angle2.png
+ doc/images/drc_with_angle3.png
+ doc/images/drc_with_angle4.png
+ doc/images/drc_rounded_corners.png
+ doc/images/drc_middle1.png
+ doc/images/drc_extent_refs1.png
+ doc/images/drc_extent_refs10.png
+ doc/images/drc_extent_refs11.png
+ doc/images/drc_extent_refs12.png
+ doc/images/drc_extent_refs13.png
+ doc/images/drc_extent_refs20.png
+ doc/images/drc_extent_refs21.png
+ doc/images/drc_extent_refs22.png
+ doc/images/drc_extent_refs23.png
+ doc/images/drc_extent_refs24.png
+ doc/images/drc_extent_refs25.png
+ doc/images/drc_extent_refs26.png
+ doc/images/drc_extent_refs27.png
+ doc/images/drc_extent_refs30.png
+ doc/images/drc_extent_refs31.png
+ doc/images/drc_corners1.png
+ doc/images/drc_corners2.png
+ doc/images/drc_corners3.png
+ doc/images/drc_texts1.png
+ doc/images/drc_texts2.png
+ doc/images/drc_textpoly1.png
+ doc/images/drc_textpoly2.png
+
+
diff --git a/src/lay/lay/layHelpResources.qrc b/src/lay/lay/layHelpResources.qrc
index d6ba81d93..731ef64c8 100644
--- a/src/lay/lay/layHelpResources.qrc
+++ b/src/lay/lay/layHelpResources.qrc
@@ -2,100 +2,6 @@
doc/help_format.css
-
- doc/navigator_sep.png
- doc/images/drc_width1.png
- doc/images/drc_width2.png
- doc/images/drc_width3.png
- doc/images/drc_width4.png
- doc/images/drc_space1.png
- doc/images/drc_space2.png
- doc/images/drc_space3.png
- doc/images/drc_separation1.png
- doc/images/drc_raw1.png
- doc/images/drc_raw2.png
- doc/images/drc_raw3.png
- doc/images/drc_enc1.png
- doc/images/drc_enc2.png
- doc/images/drc_overlap1.png
- doc/images/drc_overlap2.png
- doc/images/drc_start_segments1.png
- doc/images/drc_start_segments2.png
- doc/images/drc_end_segments1.png
- doc/images/drc_end_segments2.png
- doc/images/drc_centers1.png
- doc/images/drc_centers2.png
- doc/images/drc_extended1.png
- doc/images/drc_extended2.png
- doc/images/drc_extended3.png
- doc/images/drc_extended4.png
- doc/images/drc_extents1.png
- doc/images/drc_extents2.png
- doc/images/drc_inside.png
- doc/images/drc_outside.png
- doc/images/drc_interacting.png
- doc/images/drc_overlapping.png
- doc/images/drc_not_inside.png
- doc/images/drc_not_outside.png
- doc/images/drc_not_interacting.png
- doc/images/drc_not_overlapping.png
- doc/images/drc_and1.png
- doc/images/drc_or1.png
- doc/images/drc_xor1.png
- doc/images/drc_not1.png
- doc/images/drc_join1.png
- doc/images/drc_and2.png
- doc/images/drc_or2.png
- doc/images/drc_xor2.png
- doc/images/drc_not2.png
- doc/images/drc_and3.png
- doc/images/drc_not3.png
- doc/images/drc_inside_part.png
- doc/images/drc_outside_part.png
- doc/images/drc_join2.png
- doc/images/drc_in.png
- doc/images/drc_not_in.png
- doc/images/drc_hulls.png
- doc/images/drc_holes.png
- doc/images/drc_merged1.png
- doc/images/drc_merged2.png
- doc/images/drc_merged3.png
- doc/images/drc_merged4.png
- doc/images/drc_moved1.png
- doc/images/drc_rotated1.png
- doc/images/drc_scaled1.png
- doc/images/drc_transformed1.png
- doc/images/drc_sized1.png
- doc/images/drc_sized2.png
- doc/images/drc_sized3.png
- doc/images/drc_sized4.png
- doc/images/drc_sized5.png
- doc/images/drc_sized6.png
- doc/images/drc_with_angle1.png
- doc/images/drc_with_angle2.png
- doc/images/drc_with_angle3.png
- doc/images/drc_with_angle4.png
- doc/images/drc_rounded_corners.png
- doc/images/drc_middle1.png
- doc/images/drc_extent_refs1.png
- doc/images/drc_extent_refs10.png
- doc/images/drc_extent_refs11.png
- doc/images/drc_extent_refs12.png
- doc/images/drc_extent_refs13.png
- doc/images/drc_extent_refs20.png
- doc/images/drc_extent_refs21.png
- doc/images/drc_extent_refs22.png
- doc/images/drc_extent_refs23.png
- doc/images/drc_extent_refs24.png
- doc/images/drc_extent_refs25.png
- doc/images/drc_extent_refs26.png
- doc/images/drc_extent_refs27.png
- doc/images/drc_extent_refs30.png
- doc/images/drc_extent_refs31.png
- doc/images/drc_corners1.png
- doc/images/drc_corners2.png
- doc/images/drc_corners3.png
-
doc/about/rba_notation.xml
doc/about/about_libraries.xml
diff --git a/testdata/drc/.drcSuiteTests.drc.swp b/testdata/drc/.drcSuiteTests.drc.swp
deleted file mode 100644
index ff550f50ae3f72229cd0660b59bd9c666f297c48..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 36864
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
diff --git a/testdata/drc/.drctest.drc.swp b/testdata/drc/.drctest.drc.swp
deleted file mode 100644
index 03518e417dcf7c43017355ac7f5c02dd3b9f94ac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 16384
zcmeI3UyLM09mneg4um@}iZ5uiZZt#t^$^M~_5@BpU>j>*H=1^gFyg^<#KXumB4gSNS^{y+@R=d6C@wTm
zXkZcz>?JdGU7Gq-X&?Q_hd(<><>J{w1BC_(4HOzEG*D=u&_JPqLIZ^c{>L>C`B#&N
zF@_Js#2C%$hEmA@O8pNj9lFjW3dTz)3L|A|;|PyX9+`MJ0}7%IO!
zRQ}>n`4w@!`{K`A;sN#K$G3}*LIZ^c3Jnw*C^S%LpwK{}fkFd?1_})n8YndIf2jcj
ziTuqN`AZ^E#^3*Y`Tu)25b}HQBDe&841NS21z!Y@fF*Df_~Z42JPX#rVQ>xj)m}or
z4FYf!TnjGkA>6Km(iu74X&v3Hb$h5=lUM_WAzUp(lUSZM)4ZF)r
z6(TD5p1s!gTvaCux|vmEE!hm?uGt8A+u?2$mNhn4rT9@{d^JJ|Hye1%1GhE3!tk4q
z3%f}V(1TTKI;!zeV)6<3)Yd{6+RW(2{IG;DGJimB^GR2IbUvDcTh
z150*lDI78(Pl?``M6{}y7M$9?(T~2^+9YD*nrXSIOF$L|pUtT_A+9UBV8gTLn>@5{
z>#1k=@9%{|PB)C?OgDLIvhi@Dw4O7vb-GB6{Y^ETzF%r{mj{O3_dIw&8dPd*c^7`?
z>?mbIk6Pt?YIQnR7+P+d;_X>%xB9e3EmvKH)V4yk@MU4hxY6p+b-H11(9T)=JjNh5
zw@vi2gNyY|VHa!o&2mLprt3n@tNm+DT*K?d