mirror of https://github.com/KLayout/klayout.git
Renamed new DRC options to: without_touching_corners and without_touching_edges as this is more consistent
This commit is contained in:
parent
e08429ee44
commit
a2877358a5
|
|
@ -206,7 +206,7 @@ end
|
|||
gen = Gen::new
|
||||
|
||||
run_demo gen, "input.width(1.0)", "drc_width5.png"
|
||||
run_demo gen, "input.width(1.0, without_touching)", "drc_width6.png"
|
||||
run_demo gen, "input.width(1.0, without_touching_corners)", "drc_width6.png"
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
|
|
@ -448,8 +448,8 @@ end
|
|||
gen = Gen::new
|
||||
|
||||
run_demo gen, "input1.sep(input2, 1.0)", "drc_separation12.png"
|
||||
run_demo gen, "input1.sep(input2, 1.0, without_touching)", "drc_separation13.png"
|
||||
run_demo gen, "input1.sep(input2, 1.0, without_coincident)", "drc_separation14.png"
|
||||
run_demo gen, "input1.sep(input2, 1.0, without_touching_corners)", "drc_separation13.png"
|
||||
run_demo gen, "input1.sep(input2, 1.0, without_touching_edges)", "drc_separation14.png"
|
||||
|
||||
# ...
|
||||
|
||||
|
|
|
|||
|
|
@ -2896,14 +2896,14 @@ The following image shows the effect of the separation check (input1: red, input
|
|||
</p><p>
|
||||
<h3>Touching shapes </h3>
|
||||
</p><p>
|
||||
Like <a href="#width">width</a> and <a href="#space">space</a>, the separation check also supports the "without_touching" option.
|
||||
Like <a href="#width">width</a> and <a href="#space">space</a>, the separation check also supports the "without_touching_corners" option.
|
||||
</p><p>
|
||||
This option will turn off errors that arise due to
|
||||
collinear edges touching in one corner (the "kissing corners" configuration).
|
||||
edges touching in one corner (the "kissing corners" configuration).
|
||||
By default, such edges will yield an error, as they
|
||||
form a zero-distance situation. With this option in place, no errors will be reported.
|
||||
</p><p>
|
||||
The following images illustrate the effect of the "without_touching" option.
|
||||
The following images illustrate the effect of the "without_touching_corners" option.
|
||||
The white line at the top of the bottom red shape is actually an edge pair indicating
|
||||
the zero-distance violation of the separation check:
|
||||
</p><p>
|
||||
|
|
@ -2914,16 +2914,16 @@ the zero-distance violation of the separation check:
|
|||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
Another option is "without_coincident" which turns off errors that arise
|
||||
Another option is "without_touching_edges" which turns off errors that arise
|
||||
at coincident edges. Formally such edges represent a zero-distance situation, hence
|
||||
are flagged by default. Turning off the check in this case can be helpful when
|
||||
separating a layer into two parts (e.g. thin/wide metal separation) and an error
|
||||
between touching regions is not desired.
|
||||
</p><p>
|
||||
The "without_coincident" option is a stronger version of "without_touching" and
|
||||
The "without_touching_edges" option is a stronger version of "without_touching_corners" and
|
||||
makes sense only for two-layer checks.
|
||||
</p><p>
|
||||
The following images illustrate the effect of the "without_coincident" option:
|
||||
The following images illustrate the effect of the "without_touching_edges" option:
|
||||
</p><p>
|
||||
<table>
|
||||
<tr>
|
||||
|
|
@ -3443,10 +3443,10 @@ each other is more or equal than min and less than max </li>
|
|||
but is more intuitive, as "projecting" is written with a condition, like
|
||||
"projecting < 2.um". Available operators are: "==", "<", "<=", ">" and ">=".
|
||||
Double-bounded ranges are also available, like: "0.5 <= projecting < 2.0". </li>
|
||||
<li><b>without_touching </b>: With this option present, touching corners (aka "kissing
|
||||
<li><b>without_touching_corners </b>: With this option present, touching corners (aka "kissing
|
||||
corners") will not yield errors. The default is to produce errors in these cases. </li>
|
||||
<li><b>without_coincident </b>: With this option present, coincident edges will not yield errors.
|
||||
This is a stronger version of "without_touching" and makes sense only for two-layer checks
|
||||
<li><b>without_touching_edges </b>: With this option present, coincident edges will not yield errors.
|
||||
This is a stronger version of "without_touching_corners" and makes sense only for two-layer checks
|
||||
or raw-mode input layers. It is listed here for completeness. </li>
|
||||
<li><b>transparent </b>: Performs the check without shielding (polygon layers only) </li>
|
||||
<li><b>shielded </b>: Performs the check with shielding (polygon layers only) </li>
|
||||
|
|
@ -3555,12 +3555,12 @@ space_connected = metal1_nets.space(0.4.um, props_eq + props_copy)
|
|||
</p><p>
|
||||
<h3>Touching shapes </h3>
|
||||
</p><p>
|
||||
The "without_touching" option will turn off errors that arise due to
|
||||
The "without_touching_corners" option will turn off errors that arise due to
|
||||
the "kissing corner" configuration (or "checkerboard pattern"). Formally
|
||||
this is a width violation across the diagonal, but when considering this
|
||||
configuration as disconnected boxes, no error should be reported.
|
||||
</p><p>
|
||||
The following images illustrate the effect of the "without_touching" option:
|
||||
The following images illustrate the effect of the "without_touching_corners" option:
|
||||
</p><p>
|
||||
<table>
|
||||
<tr>
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.4 KiB |
|
|
@ -322,14 +322,14 @@ module DRC
|
|||
end
|
||||
end
|
||||
|
||||
def without_touching(f = true)
|
||||
self._context("without_touching") do
|
||||
def without_touching_corners(f = true)
|
||||
self._context("without_touching_corners") do
|
||||
DRCZeroDistanceMode::new(f ? RBA::Region::IncludeZeroDistanceWhenOverlapping : RBA::Region::IncludeZeroDistanceWhenTouching)
|
||||
end
|
||||
end
|
||||
|
||||
def without_coincident(f = true)
|
||||
self._context("without_coincident") do
|
||||
def without_touching_edges(f = true)
|
||||
self._context("without_touching_edges") do
|
||||
DRCZeroDistanceMode::new(f ? RBA::Region::NeverIncludeZeroDistance : RBA::Region::IncludeZeroDistanceWhenTouching)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3687,10 +3687,10 @@ CODE
|
|||
# but is more intuitive, as "projecting" is written with a condition, like
|
||||
# "projecting < 2.um". Available operators are: "==", "<", "<=", ">" and ">=".
|
||||
# Double-bounded ranges are also available, like: "0.5 <= projecting < 2.0". @/li
|
||||
# @li @b without_touching @/b: With this option present, touching corners (aka "kissing
|
||||
# @li @b without_touching_corners @/b: With this option present, touching corners (aka "kissing
|
||||
# corners") will not yield errors. The default is to produce errors in these cases. @/li
|
||||
# @li @b without_coincident @/b: With this option present, coincident edges will not yield errors.
|
||||
# This is a stronger version of "without_touching" and makes sense only for two-layer checks
|
||||
# @li @b without_touching_edges @/b: With this option present, coincident edges will not yield errors.
|
||||
# This is a stronger version of "without_touching_corners" and makes sense only for two-layer checks
|
||||
# or raw-mode input layers. It is listed here for completeness. @/li
|
||||
# @li @b transparent @/b: Performs the check without shielding (polygon layers only) @/li
|
||||
# @li @b shielded @/b: Performs the check with shielding (polygon layers only) @/li
|
||||
|
|
@ -3799,12 +3799,12 @@ CODE
|
|||
#
|
||||
# @h3 Touching shapes @/h3
|
||||
#
|
||||
# The "without_touching" option will turn off errors that arise due to
|
||||
# The "without_touching_corners" option will turn off errors that arise due to
|
||||
# the "kissing corner" configuration (or "checkerboard pattern"). Formally
|
||||
# this is a width violation across the diagonal, but when considering this
|
||||
# configuration as disconnected boxes, no error should be reported.
|
||||
#
|
||||
# The following images illustrate the effect of the "without_touching" option:
|
||||
# The following images illustrate the effect of the "without_touching_corners" option:
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
@ -3934,14 +3934,14 @@ CODE
|
|||
#
|
||||
# @h3 Touching shapes @/h3
|
||||
#
|
||||
# Like \width and \space, the separation check also supports the "without_touching" option.
|
||||
# Like \width and \space, the separation check also supports the "without_touching_corners" option.
|
||||
#
|
||||
# This option will turn off errors that arise due to
|
||||
# edges touching in one corner (the "kissing corners" configuration).
|
||||
# By default, such edges will yield an error, as they
|
||||
# form a zero-distance situation. With this option in place, no errors will be reported.
|
||||
#
|
||||
# The following images illustrate the effect of the "without_touching" option.
|
||||
# The following images illustrate the effect of the "without_touching_corners" option.
|
||||
# The white line at the top of the bottom red shape is actually an edge pair indicating
|
||||
# the zero-distance violation of the separation check:
|
||||
#
|
||||
|
|
@ -3952,16 +3952,16 @@ CODE
|
|||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# Another option is "without_coincident" which turns off errors that arise
|
||||
# Another option is "without_touching_edges" which turns off errors that arise
|
||||
# at coincident edges. Formally such edges represent a zero-distance situation, hence
|
||||
# are flagged by default. Turning off the check in this case can be helpful when
|
||||
# separating a layer into two parts (e.g. thin/wide metal separation) and an error
|
||||
# between touching regions is not desired.
|
||||
#
|
||||
# The "without_coincident" option is a stronger version of "without_touching" and
|
||||
# The "without_touching_edges" option is a stronger version of "without_touching_corners" and
|
||||
# makes sense only for two-layer checks.
|
||||
#
|
||||
# The following images illustrate the effect of the "without_coincident" option:
|
||||
# The following images illustrate the effect of the "without_touching_edges" option:
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
|
|||
|
|
@ -14,21 +14,21 @@ l1.output(1, 0)
|
|||
l2.output(2, 0)
|
||||
|
||||
l1.width(600.nm).output(100, 0)
|
||||
l1.width(600.nm, without_touching).output(101, 0)
|
||||
l1.width(600.nm, without_coincident).output(102, 0)
|
||||
l1.width(600.nm, without_touching_corners).output(101, 0)
|
||||
l1.width(600.nm, without_touching_edges).output(102, 0)
|
||||
|
||||
l1.space(600.nm).output(200, 0)
|
||||
l1.space(600.nm, without_touching).output(201, 0)
|
||||
l1.space(600.nm, without_coincident).output(202, 0)
|
||||
l1.space(600.nm, without_touching_corners).output(201, 0)
|
||||
l1.space(600.nm, without_touching_edges).output(202, 0)
|
||||
l1_raw.space(600.nm).output(210, 0)
|
||||
l1_raw.space(600.nm, without_touching).output(211, 0)
|
||||
l1_raw.space(600.nm, without_coincident).output(212, 0)
|
||||
l1_raw.space(600.nm, without_touching_corners).output(211, 0)
|
||||
l1_raw.space(600.nm, without_touching_edges).output(212, 0)
|
||||
|
||||
l1.sep(l2, 600.nm).output(300, 0)
|
||||
l1.sep(l2, 600.nm, without_touching).output(301, 0)
|
||||
l1.sep(l2, 600.nm, without_coincident).output(302, 0)
|
||||
l1.sep(l2, 600.nm, without_touching_corners).output(301, 0)
|
||||
l1.sep(l2, 600.nm, without_touching_edges).output(302, 0)
|
||||
|
||||
l1.drc(space < 600.nm).output(400, 0)
|
||||
l1.drc(space(without_touching) < 600.nm).output(401, 0)
|
||||
l1.drc(space(without_coincident) < 600.nm).output(402, 0)
|
||||
l1.drc(space(without_touching_corners) < 600.nm).output(401, 0)
|
||||
l1.drc(space(without_touching_edges) < 600.nm).output(402, 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,24 +11,24 @@ l1 = input(1, 0)
|
|||
l1.output(1, 0)
|
||||
|
||||
l1.space(600.nm).output(100, 0)
|
||||
l1.space(600.nm, without_touching).output(101, 0)
|
||||
l1.space(600.nm, without_coincident).output(102, 0)
|
||||
l1.space(600.nm, without_touching_corners).output(101, 0)
|
||||
l1.space(600.nm, without_touching_edges).output(102, 0)
|
||||
l1.space(600.nm, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(103, 0)
|
||||
|
||||
l1.space(600.nm, projection).output(110, 0)
|
||||
l1.space(600.nm, projection, without_touching).output(111, 0)
|
||||
l1.space(600.nm, projection, without_coincident).output(112, 0)
|
||||
l1.space(600.nm, projection, without_touching_corners).output(111, 0)
|
||||
l1.space(600.nm, projection, without_touching_edges).output(112, 0)
|
||||
l1.space(600.nm, projection, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(113, 0)
|
||||
|
||||
l1.space(600.nm, square).output(120, 0)
|
||||
l1.space(600.nm, square, without_touching).output(121, 0)
|
||||
l1.space(600.nm, square, without_coincident).output(122, 0)
|
||||
l1.space(600.nm, square, without_touching_corners).output(121, 0)
|
||||
l1.space(600.nm, square, without_touching_edges).output(122, 0)
|
||||
l1.space(600.nm, square, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(123, 0)
|
||||
|
||||
l1.data.min_coherence = true
|
||||
|
||||
l1.space(600.nm).output(200, 0)
|
||||
l1.space(600.nm, without_touching).output(201, 0)
|
||||
l1.space(600.nm, without_coincident).output(202, 0)
|
||||
l1.space(600.nm, without_touching_corners).output(201, 0)
|
||||
l1.space(600.nm, without_touching_edges).output(202, 0)
|
||||
l1.space(600.nm, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(203, 0)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue