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:

+
    +
  • edge_pairs(args)
  • +
+

+See Source#edge_pairs for a description of that function. +

+

"edges" - Gets the edges from an original layer

+ +

Usage:

+
    +
  • edges(args)
  • +
+

+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:

    -
  • labels
  • +
  • labels(args)

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 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 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?d1Ax53;GDnaWoyJy+Q^2noGz(BkD|@K(&U0@rYO zxzRXw{KTD&Mg_~cl)Mw)Hp5btmd@P0gm1Vf@*oeI9#T7D+qi66ZDm<7H@WwaDSDbm zH1gtHa2fv1pkc=gB4LKez2P4}zf0wxBLDCG{rq<1^%~d>{)&9Q3wD7YAdf!`-b9Y> zg6|;r-UpsWuDt{}D*e?sp3CU^yGf{%h5!CT0o{|sIOuY#X~=fTt9 zo8U3Po_0Wc5dz{kLD@DJqT ze+ME@e-*q8o(Dex&w^*b6X0QRKR5=;fP(A5-;le%489M(3!VgzfD7Q$;2@|29n?S- zTm?kVe+4MM{=*tj2FTPurLdJixTRA3e<f5+}Xi4 zrL;0)1;!3(8jf&89AkP2WV{Wbd=-E#A{+nQ-KUThESALGsDlLD49imFvTa1-=3tzG z$Ql9>XQ-{RUuRZmR)ndIrWcs69N&9V%G@44N#SI>yMDkT!DhG~@w-R$KSx?WdW7}?GaB`cjx zQPEW@x{91w_FvA2I&MgfDBx|&bCWjXQ<%dz#XU%oE&1`eS>8e7JlHlwYA38lTFl_M zVT71bjC-3MNyH;jJCC+xxX{e&_{ zh}`ag#NRUHTFtG~Q_`5yvot~5@|X*DQ`ZLdile6d-8j1wi=7h|JEv8uI}uVBLc|!( zr!7-Y3_p)Dcd+Xu&8G}cPqu})@g196vVCU>{Fhsq+C%zV$oQd*u!Mnyr5zetSYt(v zkTk)%PA>y(c%K^E=D)*~G_^(9t9?hTB|A*-yi7Xv)HaN#EjQ#rRQ91hVv8d(Uv0+? TdDJGn*%r&-ztti&wY~ilt(p?X