Some bug fixes, doc update, test updates.

This commit is contained in:
Matthias Koefferlein 2021-01-16 00:32:06 +01:00
parent 111b49f0ef
commit 4460c294b0
24 changed files with 648 additions and 115 deletions

View File

@ -231,6 +231,10 @@ run_demo gen, "input.space(1.2, euclidian)", "drc_space1.png"
run_demo gen, "input.notch(1.2, euclidian)", "drc_space2.png"
run_demo gen, "input.isolated(1.2, euclidian)", "drc_space3.png"
run_demo gen, "input.drc(space(euclidian) < 1.2)", "drc_space1u.png"
run_demo gen, "input.drc(notch(euclidian) < 1.2)", "drc_space2u.png"
run_demo gen, "input.drc(isolated(euclidian) < 1.2)", "drc_space3u.png"
class Gen
def produce(s1, s2)
pts = [
@ -264,6 +268,7 @@ end
gen = Gen::new
run_demo gen, "input1.separation(input2, 1.2, euclidian)", "drc_separation1.png"
run_demo gen, "input1.drc(separation(input2, euclidian) < 1.2)", "drc_separation1u.png"
class Gen
def produce(s1, s2)
@ -442,6 +447,10 @@ gen = Gen::new
run_demo gen, "input1.enclosing(input2, 2.0.um)", "drc_enc1.png"
run_demo gen, "input1.enclosing(input2, 2.0.um, projection)", "drc_enc2.png"
run_demo gen, "input1.drc(enclosing(input2) < 2.0.um)", "drc_enc1u.png"
run_demo gen, "input1.drc(enclosing(input2,\n"+
" projection) < 2.0.um)", "drc_enc2u.png"
class Gen
def produce(s1, s2)
@ -473,6 +482,10 @@ gen = Gen::new
run_demo gen, "input1.overlap(input2, 2.0.um)", "drc_overlap1.png"
run_demo gen, "input1.overlap(input2, 2.0.um, projection)", "drc_overlap2.png"
run_demo gen, "input1.drc(overlap(input2) < 2.0.um)", "drc_overlap1u.png"
run_demo gen, "input1.drc(overlap(input2,\n"+
" projection) < 2.0.um)", "drc_overlap2u.png"
class Gen
def produce(s1, s2)

View File

@ -464,12 +464,12 @@ static db::CompoundRegionOperationNode *new_separation_check (db::CompoundRegion
static db::CompoundRegionOperationNode *new_overlap_check (db::CompoundRegionOperationNode *other, db::Coord d, bool whole_edges, db::metrics_type metrics, const tl::Variant &ignore_angle, const tl::Variant &min_projection, const tl::Variant &max_projection, bool shielded, db::OppositeFilter opposite_filter, db::RectFilter rect_filter, bool negative)
{
return new_check_node (other, db::OverlapRelation, true, d, whole_edges, metrics, ignore_angle, min_projection, max_projection, shielded, opposite_filter, rect_filter, negative);
return new_check_node (other, db::WidthRelation, true, d, whole_edges, metrics, ignore_angle, min_projection, max_projection, shielded, opposite_filter, rect_filter, negative);
}
static db::CompoundRegionOperationNode *new_inside_check (db::CompoundRegionOperationNode *other, db::Coord d, bool whole_edges, db::metrics_type metrics, const tl::Variant &ignore_angle, const tl::Variant &min_projection, const tl::Variant &max_projection, bool shielded, db::OppositeFilter opposite_filter, db::RectFilter rect_filter, bool negative)
static db::CompoundRegionOperationNode *new_enclosing_check (db::CompoundRegionOperationNode *other, db::Coord d, bool whole_edges, db::metrics_type metrics, const tl::Variant &ignore_angle, const tl::Variant &min_projection, const tl::Variant &max_projection, bool shielded, db::OppositeFilter opposite_filter, db::RectFilter rect_filter, bool negative)
{
return new_check_node (other, db::InsideRelation, true, d, whole_edges, metrics, ignore_angle, min_projection, max_projection, shielded, opposite_filter, rect_filter, negative);
return new_check_node (other, db::OverlapRelation, true, d, whole_edges, metrics, ignore_angle, min_projection, max_projection, shielded, opposite_filter, rect_filter, negative);
}
static db::CompoundRegionOperationNode *new_perimeter_filter (db::CompoundRegionOperationNode *input, bool inverse, db::coord_traits<db::Coord>::perimeter_type pmin, db::coord_traits<db::Coord>::perimeter_type pmax)
@ -669,7 +669,7 @@ Class<db::CompoundRegionOperationNode> decl_CompoundRegionOperationNode ("db", "
gsi::constructor ("new_overlap_check", &new_overlap_check, gsi::arg ("other"), gsi::arg ("d"), gsi::arg ("whole_edges", false), gsi::arg ("metrics", db::Euclidian, "Euclidian"), gsi::arg ("ignore_angle", tl::Variant (), "default"), gsi::arg ("min_projection", tl::Variant (), "0"), gsi::arg ("max_projection", tl::Variant (), "max."), gsi::arg ("shielded", true), gsi::arg ("opposite_filter", db::NoOppositeFilter, "NoOppositeFilter"), gsi::arg ("rect_filter", db::NoSideAllowed, "NoSideAllowed"), gsi::arg ("negative", false),
"@brief Creates a node providing an overlap check.\n"
) +
gsi::constructor ("new_inside_check", &new_inside_check, gsi::arg ("other"), gsi::arg ("d"), gsi::arg ("whole_edges", false), gsi::arg ("metrics", db::Euclidian, "Euclidian"), gsi::arg ("ignore_angle", tl::Variant (), "default"), gsi::arg ("min_projection", tl::Variant (), "0"), gsi::arg ("max_projection", tl::Variant (), "max."), gsi::arg ("shielded", true), gsi::arg ("opposite_filter", db::NoOppositeFilter, "NoOppositeFilter"), gsi::arg ("rect_filter", db::NoSideAllowed, "NoSideAllowed"), gsi::arg ("negative", false),
gsi::constructor ("new_enclosing_check", &new_enclosing_check, gsi::arg ("other"), gsi::arg ("d"), gsi::arg ("whole_edges", false), gsi::arg ("metrics", db::Euclidian, "Euclidian"), gsi::arg ("ignore_angle", tl::Variant (), "default"), gsi::arg ("min_projection", tl::Variant (), "0"), gsi::arg ("max_projection", tl::Variant (), "max."), gsi::arg ("shielded", true), gsi::arg ("opposite_filter", db::NoOppositeFilter, "NoOppositeFilter"), gsi::arg ("rect_filter", db::NoSideAllowed, "NoSideAllowed"), gsi::arg ("negative", false),
"@brief Creates a node providing an inside (enclosure) check.\n"
) +
gsi::constructor ("new_perimeter_filter", &new_perimeter_filter, gsi::arg ("input"), gsi::arg ("inverse", false), gsi::arg ("pmin", 0), gsi::arg ("pmax", std::numeric_limits<db::coord_traits<db::Coord>::perimeter_type>::max (), "max"),

View File

@ -54,7 +54,6 @@ module DRC
# @li \global#length @/li
# @li \global#middle @/li
# @li \global#notch @/li
# @li \global#odd_polygons @/li
# @li \global#outside @/li
# @li \global#overlap @/li
# @li \global#overlapping @/li
@ -887,22 +886,6 @@ CODE
CODE
end
# %DRC%
# @name odd_polygons
# @brief Selects all polygons which are non-orientable
# @synopsis expression.odd_polygons
#
# Non-orientable polygons are for example "8"-shape polygons. Such polygons are
# usually considered harmful as their definition of covered area is depending on the
# wrap count rule in place.
#
# This operation can be used as a plain function in which case it acts on primary
# shapes or can be used as method on another DRC expression.
def odd_polygons
return DRCOpNodeFilter::new(@engine, self, :new_strange_polygons_filter, "odd_polygon")
end
# %DRC%
# @name rectangles
# @brief Selects all polygons which are rectangles
@ -1874,7 +1857,7 @@ class DRCOpNodeCheck < DRCOpNodeWithCompare
factory = { :width => :new_width_check, :space => :new_space_check,
:notch => :new_notch_check, :separation => :new_separation_check,
:isolated => :new_isolated_check, :overlap => :new_overlap_check,
:enclosing => :new_inside_check }[self.check]
:enclosing => :new_enclosing_check }[self.check]
oargs = []
if self.other

View File

@ -664,7 +664,7 @@ CODE
# @synopsis area (in condition)
# @synopsis area(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.area" (see \Layer#area) and returns the total area of the
# polygons in the layer.
#
@ -677,7 +677,7 @@ CODE
# @synopsis hulls
# @synopsis hulls(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.hulls" (see \Layer#hulls). Without a layer
# argument, "hulls" represents a hull contour extractor for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#hulls for more details).
@ -688,29 +688,18 @@ CODE
# @synopsis holes
# @synopsis holes(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.holes" (see \Layer#hulls). Without a layer
# argument, "holes" represents a hole extractor for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#hulls for more details).
# %DRC%
# @name odd_polygons
# @brief Selects all polygons which are non-orientable
# @synopsis odd_polygons
# @synopsis odd_polygons(layer)
#
# This function can be used with a layer argument in which case it
# is equivalent to "layer.odd_polygons" (see \Layer#odd_polygons). Without a layer
# argument, "odd_polygons" represents an odd polygon filter for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#odd_polygons for more details).
# %DRC%
# @name perimeter
# @brief Computes the total perimeter or in universal DRC context: selects the primary shape if the perimeter is meeting the condition
# @synopsis perimeter (in condition)
# @synopsis perimeter(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.perimeter" (see \Layer#perimeter) and returns the
# total perimeter of all polygons in the layer.
#
@ -723,7 +712,7 @@ CODE
# @synopsis rectangles
# @synopsis rectangles(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.rectangles" (see \Layer#rectangles). Without a layer
# argument, "rectangles" represents the rectangles filter for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#rectangles for more details).
@ -734,7 +723,7 @@ CODE
# @synopsis squares
# @synopsis squares(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.squares" (see \Layer#squares). Without a layer
# argument, "squares" represents the rectangles filter for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#squares for more details).
@ -745,7 +734,7 @@ CODE
# @synopsis rectilinear
# @synopsis rectilinear(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.rectilinear" (see \Layer#rectilinear). Without a layer
# argument, "rectilinear" represents the rectilinear polygons filter for primary shapes in
# \DRC# expressions (see \Layer#drc and \DRC#rectilinear for more details).
@ -756,7 +745,7 @@ CODE
# @synopsis length (in condition)
# @synopsis length(layer)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.length" (see \Layer#length). Without a layer
# argument, "length" represents the edge length filter on the primary shape edges in
# \DRC# expressions (see \Layer#drc and \DRC#length for more details). In this context,
@ -777,7 +766,6 @@ CODE
holes
hulls
length
odd_polygons
perimeter
rectangles
rectilinear
@ -797,7 +785,7 @@ CODE
# @synopsis corners([ options ]) (in condition)
# @synopsis corners(layer [, options ])
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.corners" (see \Layer#corners). Without a layer
# argument, "corners" represents the corner generator/filter in primary shapes for
# \DRC# expressions (see \Layer#drc and \DRC#corners for more details).
@ -820,7 +808,7 @@ CODE
# @synopsis extent_refs([ options ])
# @synopsis extent_refs(layer, [ options ])
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.extent_refs" (see \Layer#extent_refs). Without a layer
# argument, "extent_refs" represents the partial extents extractor on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#extent_refs for more details).
@ -831,7 +819,7 @@ CODE
# @synopsis extents([ enlargement ])
# @synopsis extents(layer, [ enlargement ])
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.extents" (see \Layer#extents). Without a layer
# argument, "extents" represents the extents generator on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#extents for more details).
@ -842,7 +830,7 @@ CODE
# @synopsis middle([ options ])
# @synopsis middle(layer, [ options ])
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.middle" (see \Layer#middle). Without a layer
# argument, "middle" represents the bounding box center marker generator on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#middle for more details).
@ -853,7 +841,7 @@ CODE
# @synopsis rounded_corners(inner, outer, n)
# @synopsis rounded_corners(layer, inner, outer, n)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.rounded_corners" (see \Layer#rounded_corners). Without a layer
# argument, "rounded_corners" represents the corner rounding algorithm on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#rounded_corners for more details).
@ -866,7 +854,7 @@ CODE
# @synopsis sized(layer, d [, mode])
# @synopsis sized(layer, dx, dy [, mode]))
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.sized" (see \Layer#sized). Without a layer
# argument, "sized" represents the polygon sizer on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#sized for more details).
@ -877,7 +865,7 @@ CODE
# @synopsis smoothed(d)
# @synopsis smoothed(layer, d)
#
# This function can be used with a layer argument in which case it
# This function can be used with a layer argument. In this case it
# is equivalent to "layer.smoothed" (see \Layer#smoothed). Without a layer
# argument, "smoothed" represents the polygon smoother on primary shapes within
# \DRC# expressions (see \Layer#drc and \DRC#smoothed for more details).
@ -971,14 +959,39 @@ CODE
# @synopsis enclosing(other [, options ]) (in conditions)
# @synopsis enclosing(layer, other [, options ])
#
# This function can be used with a layer argument in which case it
# This check verifies if the polygons of the input layer are enclosing the shapes
# of the other input layer by a certain distance.
# It has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc. This check also features
# opposite and rectangle filtering. See \Layer#separation for details about opposite and
# rectangle error filtering.
#
# @h3 Classic mode @/h3
#
# This function can be used in classic mode with a layer argument. In this case it
# is equivalent to "layer.enclosing" (see \Layer#enclosing).
#
# The version without the first layer is intended for use within \DRC# expressions
# together with the \Layer#drc method. In this case, this function needs to be
# @code
# # classic "enclosing" check for < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = enclosing(in, other, 0.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# The version without a first layer is intended for use within \DRC# expressions
# together with the "universal DRC" method \Layer#drc. In this case, this function needs to be
# put into a condition to specify the check constraints. The other options
# of \Layer#enclosing (e.g. metrics, projection constraints, angle limits etc.)
# apply to this version too.
# apply to this version too:
#
# @code
# # universal DRC "enclosing" check for < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = in.drc(enclosing(other) < 0.2.um)
# @/code
#
# The conditions may involve an upper and lower limit. The following examples
# illustrate the use of this function with conditions:
@ -1001,6 +1014,13 @@ CODE
# With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
# the primary shape. Without an upper limit only, the first edge of the marker is attached to the
# primary shape while the second edge is attached to the shape of the "other" layer.
#
# @table
# @tr
# @td @img(/images/drc_enc1u.png) @/td
# @td @img(/images/drc_enc2u.png) @/td
# @/tr
# @/table
# %DRC%
# @name separation
@ -1009,7 +1029,45 @@ CODE
# @synopsis separation(layer, other [, options ])
#
# Provides a separation check (primary layer vs. another layer). Like \enclosing this
# function provides a two-layer check. See there for details how to use this function.
# function provides a two-layer check, but checking the distance rather than the
# overlap.
# This check has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc. This check also features
# opposite and rectangle filtering. See \Layer#separation for details about opposite and
# rectangle error filtering.
#
# @h3 Classic mode @/h3
#
# Like \enclosing, this function is available as a classic DRC function with a layer as the first
# argument and as an \DRC expression operator for use with \Layer#drc.
#
# @code
# # classic "separation" check for distance < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = separation(in, other, 0.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# For use with the "universal DRC" put the separation expression into the "drc"
# function call and use a condition to specify the constraint:
#
# @code
# # universal DRC "separation" check for distance < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = in.drc(separation(other) < 0.2.um)
# @/code
#
# \enclosing explains the constraints and how the
# work in generating error markers.
#
# @table
# @tr
# @td @img(/images/drc_separation1u.png) @/td
# @/tr
# @/table
# %DRC%
# @name overlap
@ -1017,8 +1075,42 @@ CODE
# @synopsis overlap(other [, options ]) (in conditions)
# @synopsis overlap(layer, other [, options ])
#
# Provides an overlap check (primary layer vs. another layer). Like \enclosing this
# function provides a two-layer check. See there for details how to use this function.
# Provides an overlap check (primary layer vs. another layer).
# This check has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc. This check also features
# opposite and rectangle filtering. See \Layer#separation for details about opposite and
# rectangle error filtering.
#
# @h3 Classic mode @/h3
#
# Like other checks, this function is available as a classic DRC function with a layer as the first
# argument and as an \DRC expression operator for use with \Layer#drc.
#
# @code
# # classic "overlap" check for < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = overlap(in, other, 0.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# For use with the "unversal DRC" put the separation expression into the "drc"
# function call and use a condition to specify the constraint:
#
# @code
# # universal DRC "overlap" check for < 0.2 um
# in = layer(1, 0)
# other = layer(2, 0)
# errors = in.drc(overlap(other) < 0.2.um)
# @/code
#
# @table
# @tr
# @td @img(/images/drc_overlap1u.png) @/td
# @td @img(/images/drc_overlap2u.png) @/td
# @/tr
# @/table
# %DRC%
# @name width
@ -1026,26 +1118,44 @@ CODE
# @synopsis width([ options ]) (in conditions)
# @synopsis width(layer [, options ])
#
# This function can be used with a layer argument in which case it
# A width check is a check for the distance of edges of the same polygon.
#
# @h3 Classic mode @/h3
#
# This function can be used in classic mode with a layer argument. In this case it
# is equivalent to "layer.width" (see \Layer#width).
#
# @code
# # classic "width" check for width < 2 um
# in = layer(1, 0)
# errors = width(in, 0.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# The version without a layer is intended for use within \DRC# expressions
# together with the \Layer#drc method. In this case, this function needs to be
# together with the "universal DRC" method \Layer#drc. In this case, this function needs to be
# put into a condition to specify the check constraints. The other options
# of \Layer#width (e.g. metrics, projection constraints, angle limits etc.)
# apply to this version too.
# apply to this version too:
#
# @code
# # universal DRC check for width < 2 um
# in = layer(1, 0)
# errors = in.drc(width < 0.2.um)
# @/code
#
# The conditions may involve an upper and lower limit. The following examples
# illustrate the use of this function with conditions:
#
# @code
# out = in.drc(width < 0.2.um)
# out = in.drc(width <= 0.2.um)
# out = in.drc(width > 0.2.um)
# out = in.drc(width >= 0.2.um)
# out = in.drc(width == 0.2.um)
# out = in.drc(width != 0.2.um)
# out = in.drc(0.1.um <= width < 0.2.um)
# errors = in.drc(width < 0.2.um)
# errors = in.drc(width <= 0.2.um)
# errors = in.drc(width > 0.2.um)
# errors = in.drc(width >= 0.2.um)
# errors = in.drc(width == 0.2.um)
# errors = in.drc(width != 0.2.um)
# errors = in.drc(0.1.um <= width < 0.2.um)
# @/code
#
# @table
@ -1079,8 +1189,46 @@ CODE
# @synopsis space([ options ]) (in conditions)
# @synopsis space(layer [, options ])
#
# Provides a space check on the primary layer. Like \width this
# function provides a single-layer check. See there for details how to use this function.
# "space" looks for spacing violations between edges of the same polygon (intra-polygon checks)
# and between different polygons (inter-polygon checks).
# \notch is similar function that provides only intra-polygon space checks. \isolated
# is the version checking inter-polygon distance only.
# The check has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc.
#
# @h3 Classic mode @/h3
#
# This function can be used in classic mode with a layer argument. In this case it
# is equivalent to "layer.space" (see \Layer#space). In this mode, "space" is applicable to edge
# layers too.
#
# @code
# # classic "space" check for space < 0.2 um
# in = layer(1, 0)
# errors = space(in, 0.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# The version without a layer is intended for use within \DRC# expressions
# together with the "universal DRC" method \Layer#drc. In this case, this function needs to be
# put into a condition to specify the check constraints. The other options
# of \Layer#space (e.g. metrics, projection constraints, angle limits etc.)
# apply to this version too:
#
# @code
# # universal DRC check for space < 0.2.um
# in = layer(1, 0)
# errors = in.drc(space < 0.2.um)
# @/code
#
# See \enclosing for more details about the various ways to specify conditions.
#
# @table
# @tr
# @td @img(/images/drc_space1u.png) @/td
# @/tr
# @/table
# %DRC%
# @name notch
@ -1088,8 +1236,91 @@ CODE
# @synopsis notch([ options ]) (in conditions)
# @synopsis notch(layer [, options ])
#
# Provides a intra-polygon space check for polygons from the primary layer. Like \width this
# function provides a single-layer check. See there for details how to use this function.
# Provides a intra-polygon space check for polygons. It is similar to
# \space, but checks intra-polygon space only.
# It has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc.
#
# @h3 Classic mode @/h3
#
# This function can be used in classic mode with a layer argument. In this case it
# is equivalent to "layer.notch" (see \Layer#notch).
#
# @code
# # classic "notch" check for space < 1.2 um
# in = layer(1, 0)
# errors = notch(in, 1.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# The version without a layer is intended for use within \DRC# expressions
# together with the "universal DRC" method \Layer#drc. In this case, this function needs to be
# put into a condition to specify the check constraints. The other options
# of \Layer#notch (e.g. metrics, projection constraints, angle limits etc.)
# apply to this version too:
#
# @code
# # universal DRC "notch" check for space < 1.2.um
# in = layer(1, 0)
# errors = in.drc(notch < 1.2.um)
# @/code
#
# See \enclosing for more details about the various ways to specify conditions.
#
# @table
# @tr
# @td @img(/images/drc_space2u.png) @/td
# @/tr
# @/table
# %DRC%
# @name isolated
# @brief Performs an isolation (inter-polygon space) check
# @synopsis isolated([ options ]) (in conditions)
# @synopsis iso([ options ]) (in conditions)
# @synopsis isolated(layer [, options ])
# @synopsis iso(layer [, options ])
#
# Provides a intra-polygon space check for polygons. It is similar to
# \space, but checks inter-polygon space only. "iso" is a synonym for "isolated".
# This check has manifold options. See \Layer#width for the basic options such
# as metrics, projection and angle constraints etc. This check also features
# opposite and rectangle filtering. See \Layer#separation for details about opposite and
# rectangle error filtering.
#
# @h3 Classic mode @/h3
#
# This function can be used in classic mode with a layer argument. In this case it
# is equivalent to "layer.isolated" (see \Layer#isolated).
#
# @code
# # classic "isolated" check for space < 1.2 um
# in = layer(1, 0)
# errors = isolated(in, 1.2.um)
# @/code
#
# @h3 Universal DRC @/h3
#
# The version without a layer is intended for use within \DRC# expressions
# together with the "universal DRC" method \Layer#drc. In this case, this function needs to be
# put into a condition to specify the check constraints. The other options
# of \Layer#isolated (e.g. metrics, projection constraints, angle limits etc.)
# apply to this version too:
#
# @code
# # universal DRC "isolated" check for space < 1.2.um
# in = layer(1, 0)
# errors = in.drc(isolated < 1.2.um)
# @/code
#
# See \enclosing for more details about the various ways to specify conditions.
#
# @table
# @tr
# @td @img(/images/drc_space3u.png) @/td
# @/tr
# @/table
%w(
enclosing

View File

@ -2975,6 +2975,9 @@ CODE
# @brief A width check
# @synopsis layer.width(value [, options])
#
# @b Note: @/b "width" is available as an operator for the "universal DRC" function \Layer#drc within
# the \DRC framework. This variant has more options and is more intuitive to use. See \global#width for more details.
#
# This method performs a width check and returns a collection of edge pairs.
# A width check can be performed on polygon and edge layers. On edge layers, all
# edges are checked against all other edges. If two edges form a "back to back" relation
@ -3050,7 +3053,7 @@ CODE
#
# There is an alternative notation for the check using the "universal DRC" function ("\Layer#drc").
# This notation is more intuitive and allows checking for widths bigger than a certain value
# or within a certain range.
# or within a certain range. See "\global#width" for details.
#
# Apart from that it provides the same options than the plain width check.
# Follow this link for the documentation of this feature: \global#width.
@ -3074,6 +3077,9 @@ CODE
# @brief A space check
# @synopsis layer.space(value [, options])
#
# @b Note: @/b "space" is available as an operator for the "universal DRC" function \Layer#drc within
# the \DRC framework. This variant has more options and is more intuitive to use. See \global#space for more details.
#
# This method performs a space check and returns a collection of edge pairs.
# A space check can be performed on polygon and edge layers. On edge layers, all
# edges are checked against all other edges. If two edges form a "face to face" relation
@ -3094,6 +3100,8 @@ 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.
#
# For the manifold options of this function see the \width method description.
#
# The following image shows the effect of the space check:
#
# @table
@ -3109,6 +3117,9 @@ CODE
# @synopsis layer.isolated(value [, options])
# @synopsis layer.iso(value [, options])
#
# @b Note: @/b "isolated" and "iso" are available as operators for the "universal DRC" function \Layer#drc within
# the \DRC framework. These variants have more options and are more intuitive to use. See \global#isolated for more details.
#
# See \space for a description of this method.
# In contrast to \space, this
# method is available for polygon layers only, since only on such layers
@ -3129,6 +3140,9 @@ CODE
# @brief An intra-region spacing check
# @synopsis layer.notch(value [, options])
#
# @b Note: @/b "notch" is available as an operator for the "universal DRC" function \Layer#drc within
# the \DRC framework. This variant has more options and is more intuitive to use. See \global#notch for more details.
#
# See \space for a description of this method.
# In contrast to \space, this
# method is available for polygon layers only, since only on such layers
@ -3149,6 +3163,10 @@ CODE
# @synopsis layer.separation(other_layer, value [, options])
# @synopsis layer.sep(other_layer, value [, options])
#
# @b Note: @/b "separation" and "sep" are available as operators for the "universal DRC" function \drc within
# the \DRC framework. These variants have more options and are more intuitive to use.
# See \global#separation for more details.
#
# This method performs a two-layer spacing check. Like \space, this method
# can be applied to edge or polygon layers. Locations where edges of the layer
# are closer than the specified distance to the other layer are reported
@ -3160,8 +3178,7 @@ CODE
# layers touch are also reported. More specifically, the case of zero spacing
# will also trigger an error while for \space it will not.
#
# As for the other DRC methods, merged semantics applies. The options available
# are the same than for \width.
# As for the other DRC methods, merged semantics applies.
# 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.
#
@ -3173,6 +3190,8 @@ CODE
# @/tr
# @/table
#
# @h3 opposite and rectangle error filtering @/h3
#
# The options for the separation check are those available for the \width or \space
# method plus opposite and rectangle error filtering.
#
@ -3244,6 +3263,10 @@ CODE
# @brief An overlap check
# @synopsis layer.overlap(other_layer, value [, options])
#
# @b Note: @/b "overlap" is available as an operator for the "universal DRC" function \drc within
# the \DRC framework. This variant has more options and is more intuitive to use.
# See \global#overlap for more details.
#
# This method checks whether layer and other_layer overlap by at least the
# given length. Locations, where this is not the case will be reported in form
# of edge pair error markers.
@ -3283,6 +3306,10 @@ CODE
# @synopsis layer.enclosing(other_layer, value [, options])
# @synopsis layer.enc(other_layer, value [, options])
#
# @b Note: @/b "enclosing" and "enc" are available as operators for the "universal DRC" function \drc within
# the \DRC framework. These variants have more options and are more intuitive to use.
# See \global#enclosing for more details.
#
# This method checks whether layer encloses (is bigger than) other_layer by the
# given dimension. Locations, where this is not the case will be reported in form
# of edge pair error markers.

View File

@ -36,7 +36,7 @@ See <a href="/about/drc_ref_netter.xml#antenna_check">Netter#antenna_check</a> f
<li><tt>area(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.area" (see <a href="/about/drc_ref_layer.xml#area">Layer#area</a>) and returns the total area of the
polygons in the layer.
</p><p>
@ -339,7 +339,7 @@ See <a href="/about/drc_ref_netter.xml#connect_implicit">Netter#connect_implicit
<li><tt>corners(layer [, options ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.corners" (see <a href="/about/drc_ref_layer.xml#corners">Layer#corners</a>). Without a layer
argument, "corners" represents the corner generator/filter in primary shapes for
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#corners">DRC#corners</a> for more details).
@ -523,14 +523,39 @@ See <a href="/about/drc_ref_source.xml#edges">Source#edges</a> for a description
<li><tt>enclosing(layer, other [, options ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This check verifies if the polygons of the input layer are enclosing the shapes
of the other input layer by a certain distance.
It has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc. This check also features
opposite and rectangle filtering. See <a href="/about/drc_ref_layer.xml#separation">Layer#separation</a> for details about opposite and
rectangle error filtering.
</p><p>
<h3>Classic mode </h3>
</p><p>
This function can be used in classic mode with a layer argument. In this case it
is equivalent to "layer.enclosing" (see <a href="/about/drc_ref_layer.xml#enclosing">Layer#enclosing</a>).
</p><p>
The version without the first layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> method. In this case, this function needs to be
<pre>
# classic "enclosing" check for &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = enclosing(in, other, 0.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
The version without a first layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the "universal DRC" method <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>. In this case, this function needs to be
put into a condition to specify the check constraints. The other options
of <a href="/about/drc_ref_layer.xml#enclosing">Layer#enclosing</a> (e.g. metrics, projection constraints, angle limits etc.)
apply to this version too.
apply to this version too:
</p><p>
<pre>
# universal DRC "enclosing" check for &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = in.drc(enclosing(other) &lt; 0.2.um)
</pre>
</p><p>
The conditions may involve an upper and lower limit. The following examples
illustrate the use of this function with conditions:
@ -553,6 +578,13 @@ primary shape where the condition is met.
With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
the primary shape. Without an upper limit only, the first edge of the marker is attached to the
primary shape while the second edge is attached to the shape of the "other" layer.
</p><p>
<table>
<tr>
<td><img src="/images/drc_enc1u.png"/></td>
<td><img src="/images/drc_enc2u.png"/></td>
</tr>
</table>
</p>
<a name="error"/><h2>"error" - Prints an error</h2>
<keyword name="error"/>
@ -580,7 +612,7 @@ See <a href="/about/drc_ref_source.xml#extent">Source#extent</a> for a descripti
<li><tt>extent_refs(layer, [ options ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.extent_refs" (see <a href="/about/drc_ref_layer.xml#extent_refs">Layer#extent_refs</a>). Without a layer
argument, "extent_refs" represents the partial extents extractor on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#extent_refs">DRC#extent_refs</a> for more details).
@ -593,7 +625,7 @@ argument, "extent_refs" represents the partial extents extractor on primary shap
<li><tt>extents(layer, [ enlargement ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.extents" (see <a href="/about/drc_ref_layer.xml#extents">Layer#extents</a>). Without a layer
argument, "extents" represents the extents generator on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#extents">DRC#extents</a> for more details).
@ -648,7 +680,7 @@ out = in.drc(primary &amp; foreign.sized(0.5.um))
<li><tt>holes(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.holes" (see <a href="/about/drc_ref_layer.xml#hulls">Layer#hulls</a>). Without a layer
argument, "holes" represents a hole extractor for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#hulls">DRC#hulls</a> for more details).
@ -661,7 +693,7 @@ argument, "holes" represents a hole extractor for primary shapes in
<li><tt>hulls(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.hulls" (see <a href="/about/drc_ref_layer.xml#hulls">Layer#hulls</a>). Without a layer
argument, "hulls" represents a hull contour extractor for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#hulls">DRC#hulls</a> for more details).
@ -775,6 +807,56 @@ as method to an expression. See there for more details: <a href="/about/drc_ref_
<p>
"iso" is the short form for <a href="#isolated">isolated</a>.
</p>
<a name="isolated"/><h2>"isolated" - Performs an isolation (inter-polygon space) check</h2>
<keyword name="isolated"/>
<p>Usage:</p>
<ul>
<li><tt>isolated([ options ]) (in conditions)</tt></li>
<li><tt>iso([ options ]) (in conditions)</tt></li>
<li><tt>isolated(layer [, options ])</tt></li>
<li><tt>iso(layer [, options ])</tt></li>
</ul>
<p>
Provides a intra-polygon space check for polygons. It is similar to
<a href="#space">space</a>, but checks inter-polygon space only. "iso" is a synonym for "isolated".
This check has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc. This check also features
opposite and rectangle filtering. See <a href="/about/drc_ref_layer.xml#separation">Layer#separation</a> for details about opposite and
rectangle error filtering.
</p><p>
<h3>Classic mode </h3>
</p><p>
This function can be used in classic mode with a layer argument. In this case it
is equivalent to "layer.isolated" (see <a href="/about/drc_ref_layer.xml#isolated">Layer#isolated</a>).
</p><p>
<pre>
# classic "isolated" check for space &lt; 1.2 um
in = layer(1, 0)
errors = isolated(in, 1.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
The version without a layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the "universal DRC" method <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>. In this case, this function needs to be
put into a condition to specify the check constraints. The other options
of <a href="/about/drc_ref_layer.xml#isolated">Layer#isolated</a> (e.g. metrics, projection constraints, angle limits etc.)
apply to this version too:
</p><p>
<pre>
# universal DRC "isolated" check for space &lt; 1.2.um
in = layer(1, 0)
errors = in.drc(isolated &lt; 1.2.um)
</pre>
</p><p>
See <a href="#enclosing">enclosing</a> for more details about the various ways to specify conditions.
</p><p>
<table>
<tr>
<td><img src="/images/drc_space3u.png"/></td>
</tr>
</table>
</p>
<a name="l2n_data"/><h2>"l2n_data" - Gets the internal <class_doc href="LayoutToNetlist">LayoutToNetlist</class_doc> object for the default <a href="#Netter">Netter</a></h2>
<keyword name="l2n_data"/>
<p>Usage:</p>
@ -847,7 +929,7 @@ For further methods on the source object see <a href="#Source">Source</a>.
<li><tt>length(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.length" (see <a href="/about/drc_ref_layer.xml#length">Layer#length</a>). Without a layer
argument, "length" represents the edge length filter on the primary shape edges in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#length">DRC#length</a> for more details). In this context,
@ -934,7 +1016,7 @@ See also <a href="#max_area_ratio">max_area_ratio</a> for the other option affec
<li><tt>middle(layer, [ options ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.middle" (see <a href="/about/drc_ref_layer.xml#middle">Layer#middle</a>). Without a layer
argument, "middle" represents the bounding box center marker generator on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#middle">DRC#middle</a> for more details).
@ -998,8 +1080,43 @@ Resets the tile borders - see <a href="#tile_borders">tile_borders</a> for a des
<li><tt>notch(layer [, options ])</tt></li>
</ul>
<p>
Provides a intra-polygon space check for polygons from the primary layer. Like <a href="#width">width</a> this
function provides a single-layer check. See there for details how to use this function.
Provides a intra-polygon space check for polygons. It is similar to
<a href="#space">space</a>, but checks intra-polygon space only.
It has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc.
</p><p>
<h3>Classic mode </h3>
</p><p>
This function can be used in classic mode with a layer argument. In this case it
is equivalent to "layer.notch" (see <a href="/about/drc_ref_layer.xml#notch">Layer#notch</a>).
</p><p>
<pre>
# classic "notch" check for space &lt; 1.2 um
in = layer(1, 0)
errors = notch(in, 1.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
The version without a layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the "universal DRC" method <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>. In this case, this function needs to be
put into a condition to specify the check constraints. The other options
of <a href="/about/drc_ref_layer.xml#notch">Layer#notch</a> (e.g. metrics, projection constraints, angle limits etc.)
apply to this version too:
</p><p>
<pre>
# universal DRC "notch" check for space &lt; 1.2.um
in = layer(1, 0)
errors = in.drc(notch &lt; 1.2.um)
</pre>
</p><p>
See <a href="#enclosing">enclosing</a> for more details about the various ways to specify conditions.
</p><p>
<table>
<tr>
<td><img src="/images/drc_space2u.png"/></td>
</tr>
</table>
</p>
<a name="odd_polygons"/><h2>"odd_polygons" - Selects all polygons which are non-orientable</h2>
<keyword name="odd_polygons"/>
@ -1009,7 +1126,7 @@ function provides a single-layer check. See there for details how to use this fu
<li><tt>odd_polygons(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.odd_polygons" (see <a href="/about/drc_ref_layer.xml#odd_polygons">Layer#odd_polygons</a>). Without a layer
argument, "odd_polygons" represents an odd polygon filter for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#odd_polygons">DRC#odd_polygons</a> for more details).
@ -1054,8 +1171,42 @@ as method to an expression. See there for more details: <a href="/about/drc_ref_
<li><tt>overlap(layer, other [, options ])</tt></li>
</ul>
<p>
Provides an overlap check (primary layer vs. another layer). Like <a href="#enclosing">enclosing</a> this
function provides a two-layer check. See there for details how to use this function.
Provides an overlap check (primary layer vs. another layer).
This check has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc. This check also features
opposite and rectangle filtering. See <a href="/about/drc_ref_layer.xml#separation">Layer#separation</a> for details about opposite and
rectangle error filtering.
</p><p>
<h3>Classic mode </h3>
</p><p>
Like other checks, this function is available as a classic DRC function with a layer as the first
argument and as an <a href="#DRC">DRC</a> expression operator for use with <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>.
</p><p>
<pre>
# classic "overlap" check for &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = overlap(in, other, 0.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
For use with the "unversal DRC" put the separation expression into the "drc"
function call and use a condition to specify the constraint:
</p><p>
<pre>
# universal DRC "overlap" check for &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = in.drc(overlap(other) &lt; 0.2.um)
</pre>
</p><p>
<table>
<tr>
<td><img src="/images/drc_overlap1u.png"/></td>
<td><img src="/images/drc_overlap2u.png"/></td>
</tr>
</table>
</p>
<a name="overlapping"/><h2>"overlapping" - Selects shapes overlapping with other shapes</h2>
<keyword name="overlapping"/>
@ -1103,7 +1254,7 @@ This function creates a path object. The arguments are the same than for the
<li><tt>perimeter(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.perimeter" (see <a href="/about/drc_ref_layer.xml#perimeter">Layer#perimeter</a>) and returns the
total perimeter of all polygons in the layer.
</p><p>
@ -1159,7 +1310,7 @@ is called on.
<li><tt>rectangles(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.rectangles" (see <a href="/about/drc_ref_layer.xml#rectangles">Layer#rectangles</a>). Without a layer
argument, "rectangles" represents the rectangles filter for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#rectangles">DRC#rectangles</a> for more details).
@ -1172,7 +1323,7 @@ argument, "rectangles" represents the rectangles filter for primary shapes in
<li><tt>rectilinear(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.rectilinear" (see <a href="/about/drc_ref_layer.xml#rectilinear">Layer#rectilinear</a>). Without a layer
argument, "rectilinear" represents the rectilinear polygons filter for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#rectilinear">DRC#rectilinear</a> for more details).
@ -1263,7 +1414,7 @@ about this extractor.
<li><tt>rounded_corners(layer, inner, outer, n)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.rounded_corners" (see <a href="/about/drc_ref_layer.xml#rounded_corners">Layer#rounded_corners</a>). Without a layer
argument, "rounded_corners" represents the corner rounding algorithm on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#rounded_corners">DRC#rounded_corners</a> for more details).
@ -1312,7 +1463,45 @@ See <a href="/about/drc_ref_source.xml#select">Source#select</a> for a descripti
</ul>
<p>
Provides a separation check (primary layer vs. another layer). Like <a href="#enclosing">enclosing</a> this
function provides a two-layer check. See there for details how to use this function.
function provides a two-layer check, but checking the distance rather than the
overlap.
This check has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc. This check also features
opposite and rectangle filtering. See <a href="/about/drc_ref_layer.xml#separation">Layer#separation</a> for details about opposite and
rectangle error filtering.
</p><p>
<h3>Classic mode </h3>
</p><p>
Like <a href="#enclosing">enclosing</a>, this function is available as a classic DRC function with a layer as the first
argument and as an <a href="#DRC">DRC</a> expression operator for use with <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>.
</p><p>
<pre>
# classic "separation" check for distance &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = separation(in, other, 0.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
For use with the "universal DRC" put the separation expression into the "drc"
function call and use a condition to specify the constraint:
</p><p>
<pre>
# universal DRC "separation" check for distance &lt; 0.2 um
in = layer(1, 0)
other = layer(2, 0)
errors = in.drc(separation(other) &lt; 0.2.um)
</pre>
</p><p>
<a href="#enclosing">enclosing</a> explains the constraints and how the
work in generating error markers.
</p><p>
<table>
<tr>
<td><img src="/images/drc_separation1u.png"/></td>
</tr>
</table>
</p>
<a name="silent"/><h2>"silent" - Resets verbose mode</h2>
<keyword name="silent"/>
@ -1333,7 +1522,7 @@ This function is equivalent to "verbose(false)" (see <a href="#verbose">verbose<
<li><tt>sized(layer, dx, dy [, mode]))</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.sized" (see <a href="/about/drc_ref_layer.xml#sized">Layer#sized</a>). Without a layer
argument, "sized" represents the polygon sizer on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#sized">DRC#sized</a> for more details).
@ -1346,7 +1535,7 @@ argument, "sized" represents the polygon sizer on primary shapes within
<li><tt>smoothed(layer, d)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.smoothed" (see <a href="/about/drc_ref_layer.xml#smoothed">Layer#smoothed</a>). Without a layer
argument, "smoothed" represents the polygon smoother on primary shapes within
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#smoothed">DRC#smoothed</a> for more details).
@ -1396,8 +1585,46 @@ For further methods on the source object see <a href="#Source">Source</a>.
<li><tt>space(layer [, options ])</tt></li>
</ul>
<p>
Provides a space check on the primary layer. Like <a href="#width">width</a> this
function provides a single-layer check. See there for details how to use this function.
"space" looks for spacing violations between edges of the same polygon (intra-polygon checks)
and between different polygons (inter-polygon checks).
<a href="#notch">notch</a> is similar function that provides only intra-polygon space checks. <a href="#isolated">isolated</a>
is the version checking inter-polygon distance only.
The check has manifold options. See <a href="/about/drc_ref_layer.xml#width">Layer#width</a> for the basic options such
as metrics, projection and angle constraints etc.
</p><p>
<h3>Classic mode </h3>
</p><p>
This function can be used in classic mode with a layer argument. In this case it
is equivalent to "layer.space" (see <a href="/about/drc_ref_layer.xml#space">Layer#space</a>). In this mode, "space" is applicable to edge
layers too.
</p><p>
<pre>
# classic "space" check for space &lt; 0.2 um
in = layer(1, 0)
errors = space(in, 0.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
The version without a layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the "universal DRC" method <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>. In this case, this function needs to be
put into a condition to specify the check constraints. The other options
of <a href="/about/drc_ref_layer.xml#space">Layer#space</a> (e.g. metrics, projection constraints, angle limits etc.)
apply to this version too:
</p><p>
<pre>
# universal DRC check for space &lt; 0.2.um
in = layer(1, 0)
errors = in.drc(space &lt; 0.2.um)
</pre>
</p><p>
See <a href="#enclosing">enclosing</a> for more details about the various ways to specify conditions.
</p><p>
<table>
<tr>
<td><img src="/images/drc_space1u.png"/></td>
</tr>
</table>
</p>
<a name="squares"/><h2>"squares" - Selects all polygons which are squares</h2>
<keyword name="squares"/>
@ -1407,7 +1634,7 @@ function provides a single-layer check. See there for details how to use this fu
<li><tt>squares(layer)</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
This function can be used with a layer argument. In this case it
is equivalent to "layer.squares" (see <a href="/about/drc_ref_layer.xml#squares">Layer#squares</a>). Without a layer
argument, "squares" represents the rectangles filter for primary shapes in
<a href="/about/drc_ref_drc.xml">DRC</a> expressions (see <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> and <a href="/about/drc_ref_drc.xml#squares">DRC#squares</a> for more details).
@ -1569,26 +1796,44 @@ In verbose mode, more output is generated in the log file
<li><tt>width(layer [, options ])</tt></li>
</ul>
<p>
This function can be used with a layer argument in which case it
A width check is a check for the distance of edges of the same polygon.
</p><p>
<h3>Classic mode </h3>
</p><p>
This function can be used in classic mode with a layer argument. In this case it
is equivalent to "layer.width" (see <a href="/about/drc_ref_layer.xml#width">Layer#width</a>).
</p><p>
<pre>
# classic "width" check for width &lt; 2 um
in = layer(1, 0)
errors = width(in, 0.2.um)
</pre>
</p><p>
<h3>Universal DRC </h3>
</p><p>
The version without a layer is intended for use within <a href="/about/drc_ref_drc.xml">DRC</a> expressions
together with the <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> method. In this case, this function needs to be
together with the "universal DRC" method <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>. In this case, this function needs to be
put into a condition to specify the check constraints. The other options
of <a href="/about/drc_ref_layer.xml#width">Layer#width</a> (e.g. metrics, projection constraints, angle limits etc.)
apply to this version too.
apply to this version too:
</p><p>
<pre>
# universal DRC check for width &lt; 2 um
in = layer(1, 0)
errors = in.drc(width &lt; 0.2.um)
</pre>
</p><p>
The conditions may involve an upper and lower limit. The following examples
illustrate the use of this function with conditions:
</p><p>
<pre>
out = in.drc(width &lt; 0.2.um)
out = in.drc(width &lt;= 0.2.um)
out = in.drc(width &gt; 0.2.um)
out = in.drc(width &gt;= 0.2.um)
out = in.drc(width == 0.2.um)
out = in.drc(width != 0.2.um)
out = in.drc(0.1.um &lt;= width &lt; 0.2.um)
errors = in.drc(width &lt; 0.2.um)
errors = in.drc(width &lt;= 0.2.um)
errors = in.drc(width &gt; 0.2.um)
errors = in.drc(width &gt;= 0.2.um)
errors = in.drc(width == 0.2.um)
errors = in.drc(width != 0.2.um)
errors = in.drc(0.1.um &lt;= width &lt; 0.2.um)
</pre>
</p><p>
<table>

View File

@ -769,6 +769,10 @@ See <a href="#enclosing">enclosing</a> for a description of that method
<li><tt>layer.enc(other_layer, value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"enclosing" and "enc" are available as operators for the "universal DRC" function <a href="#drc">drc</a> within
the <a href="#DRC">DRC</a> framework. These variants have more options and are more intuitive to use.
See <a href="/about/drc_ref_global.xml#enclosing">enclosing</a> for more details.
</p><p>
This method checks whether layer encloses (is bigger than) other_layer by the
given dimension. Locations, where this is not the case will be reported in form
of edge pair error markers.
@ -1332,6 +1336,9 @@ See <a href="#isolated">isolated</a> for a description of that method
<li><tt>layer.iso(value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"isolated" and "iso" are available as operators for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
the <a href="#DRC">DRC</a> framework. These variants have more options and are more intuitive to use. See <a href="/about/drc_ref_global.xml#isolated">isolated</a> for more details.
</p><p>
See <a href="#space">space</a> for a description of this method.
In contrast to <a href="#space">space</a>, this
method is available for polygon layers only, since only on such layers
@ -1735,6 +1742,9 @@ is <a href="#select_not_overlapping">select_not_overlapping</a>.
<li><tt>layer.notch(value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"notch" is available as an operator for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
the <a href="#DRC">DRC</a> framework. This variant has more options and is more intuitive to use. See <a href="/about/drc_ref_global.xml#notch">notch</a> for more details.
</p><p>
See <a href="#space">space</a> for a description of this method.
In contrast to <a href="#space">space</a>, this
method is available for polygon layers only, since only on such layers
@ -1870,6 +1880,10 @@ This method is available for edge layers. The argument must be a polygon layer.
<li><tt>layer.overlap(other_layer, value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"overlap" is available as an operator for the "universal DRC" function <a href="#drc">drc</a> within
the <a href="#DRC">DRC</a> framework. This variant has more options and is more intuitive to use.
See <a href="/about/drc_ref_global.xml#overlap">overlap</a> for more details.
</p><p>
This method checks whether layer and other_layer overlap by at least the
given length. Locations, where this is not the case will be reported in form
of edge pair error markers.
@ -2392,6 +2406,10 @@ See <a href="#separation">separation</a> for a description of that method
<li><tt>layer.sep(other_layer, value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"separation" and "sep" are available as operators for the "universal DRC" function <a href="#drc">drc</a> within
the <a href="#DRC">DRC</a> framework. These variants have more options and are more intuitive to use.
See <a href="/about/drc_ref_global.xml#separation">separation</a> for more details.
</p><p>
This method performs a two-layer spacing check. Like <a href="#space">space</a>, this method
can be applied to edge or polygon layers. Locations where edges of the layer
are closer than the specified distance to the other layer are reported
@ -2403,8 +2421,7 @@ In contrast to the <a href="#space">space</a> and related methods, locations whe
layers touch are also reported. More specifically, the case of zero spacing
will also trigger an error while for <a href="#space">space</a> it will not.
</p><p>
As for the other DRC methods, merged semantics applies. The options available
are the same than for <a href="#width">width</a>.
As for the other DRC methods, merged semantics applies.
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.
</p><p>
@ -2416,6 +2433,8 @@ The following image shows the effect of the separation check (input1: red, input
</tr>
</table>
</p><p>
<h3>opposite and rectangle error filtering </h3>
</p><p>
The options for the separation check are those available for the <a href="#width">width</a> or <a href="#space">space</a>
method plus opposite and rectangle error filtering.
</p><p>
@ -2600,6 +2619,9 @@ not modify the layer but returns a snapped copy.
<li><tt>layer.space(value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"space" is available as an operator for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
the <a href="#DRC">DRC</a> framework. This variant has more options and is more intuitive to use. See <a href="/about/drc_ref_global.xml#space">space</a> for more details.
</p><p>
This method performs a space check and returns a collection of edge pairs.
A space check can be performed on polygon and edge layers. On edge layers, all
edges are checked against all other edges. If two edges form a "face to face" relation
@ -2620,6 +2642,8 @@ Like for the <a href="#width">width</a> method, merged semantics applies.
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.
</p><p>
For the manifold options of this function see the <a href="#width">width</a> method description.
</p><p>
The following image shows the effect of the space check:
</p><p>
<table>
@ -2796,6 +2820,9 @@ The following image shows the effect of the "moved" method:
<li><tt>layer.width(value [, options])</tt></li>
</ul>
<p>
<b>Note: </b>"width" is available as an operator for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
the <a href="#DRC">DRC</a> framework. This variant has more options and is more intuitive to use. See <a href="/about/drc_ref_global.xml#width">width</a> for more details.
</p><p>
This method performs a width check and returns a collection of edge pairs.
A width check can be performed on polygon and edge layers. On edge layers, all
edges are checked against all other edges. If two edges form a "back to back" relation
@ -2871,7 +2898,7 @@ The following images show the effect of various forms of the width check:
</p><p>
There is an alternative notation for the check using the "universal DRC" function ("<a href="/about/drc_ref_layer.xml#drc">Layer#drc</a>").
This notation is more intuitive and allows checking for widths bigger than a certain value
or within a certain range.
or within a certain range. See "<a href="/about/drc_ref_global.xml#width">width</a>" for details.
</p><p>
Apart from that it provides the same options than the plain width check.
Follow this link for the documentation of this feature: <a href="/about/drc_ref_global.xml#width">width</a>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -13,7 +13,11 @@
<file alias="drc_space1.png">doc/images/drc_space1.png</file>
<file alias="drc_space2.png">doc/images/drc_space2.png</file>
<file alias="drc_space3.png">doc/images/drc_space3.png</file>
<file alias="drc_space1u.png">doc/images/drc_space1u.png</file>
<file alias="drc_space2u.png">doc/images/drc_space2u.png</file>
<file alias="drc_space3u.png">doc/images/drc_space3u.png</file>
<file alias="drc_separation1.png">doc/images/drc_separation1.png</file>
<file alias="drc_separation1u.png">doc/images/drc_separation1u.png</file>
<file alias="drc_separation2.png">doc/images/drc_separation2.png</file>
<file alias="drc_separation3.png">doc/images/drc_separation3.png</file>
<file alias="drc_separation4.png">doc/images/drc_separation4.png</file>
@ -29,8 +33,12 @@
<file alias="drc_raw3.png">doc/images/drc_raw3.png</file>
<file alias="drc_enc1.png">doc/images/drc_enc1.png</file>
<file alias="drc_enc2.png">doc/images/drc_enc2.png</file>
<file alias="drc_enc1u.png">doc/images/drc_enc1u.png</file>
<file alias="drc_enc2u.png">doc/images/drc_enc2u.png</file>
<file alias="drc_overlap1.png">doc/images/drc_overlap1.png</file>
<file alias="drc_overlap2.png">doc/images/drc_overlap2.png</file>
<file alias="drc_overlap1u.png">doc/images/drc_overlap1u.png</file>
<file alias="drc_overlap2u.png">doc/images/drc_overlap2u.png</file>
<file alias="drc_start_segments1.png">doc/images/drc_start_segments1.png</file>
<file alias="drc_start_segments2.png">doc/images/drc_start_segments2.png</file>
<file alias="drc_end_segments1.png">doc/images/drc_end_segments1.png</file>

View File

@ -35,6 +35,5 @@ l1.output(1, 0)
l1.odd_polygons.output(10, 0)
l1.drc(smoothed(0.5)).output(100, 0)
l1.drc(odd_polygons).output(101, 0)
l1.drc(rounded_corners(1.0, 0.5, 8)).output(102, 0)

Binary file not shown.

View File

@ -42,5 +42,5 @@ l1.drc(isolated(projection, not_opposite) < 1.0).output(144, 0)
# enclosing, overlap
l2.drc(enclosing(l1, projection) < 1.0).polygons.output(150, 0)
l1.drc(overlap(l2, projection) < 1.0).polygons.output(151, 0)
l1.drc(overlap(l2, projection) < 2.0).polygons.output(151, 0)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.