corner_edges()
Generates error segments around corners of specified inside angles.
See also: dve_drc()
Syntax
dve_drc (corner_edges (inLayer, segmentLength, beginningAngle,
endingAngle) [,msgString]);
where:
| inLayer | A polygon layer |
| segmentLength | A real value in layout units that represents the length of the error segment that will be drawn around the corner |
| beginningAngle | A real value that represents the minimum angle that will be selected |
| endingAngle | A real value that represents the max angle that will be selected |
| msgString | A string value that will be attached to the selected error segments |
Example 1
decl lyrCond = dve_import_layer ("cond"); decl lyrError101 = dve_export_layer ("error101"); decl lyrEdgesCvex = NULL; decl lyrEdgesStub = NULL; decl lyrStub = NULL; lyrEdgesCvex = dve_drc (corner_edges (lyrCond, 0.5, 1, 91)); lyrEdgesStub = dve_drc (single_clearance (lyrEdgesCvex) < 3.0, DVE_RN_POLARITY, DVE_RV_INSIDE, DVE_RN_TEMPLATE, DVE_RV_OPPOSITE, DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL, DVE_RN_STRUCTURE, DVE_RV_SAME_POLYGON); lyrStub = dve_quadout (lyrEdgesStub); lyrError101 += dve_drc (all_edges (lyrStub), "Stub");
Example 2
Consider some geometry with a chamfer corner and a rule to check the width of 2.0:

drc_error += dve_drc(width(cond) < 2, "Conductor width less than 2.0 um");
This rule fails to detect the error because the default template for width() is DVE_RV_OPPOSITE. The rectangular opposite template from the bottom edge hits the sloping edge, but the template from the sloping edge misses the bottom edge. We can change this by using an arc template with a specified curvature. This does detect the error but also has false errors at the top. The solution is to restrict the test to act between
- an orthogonal (90 degrees) corner
- an obtuse ( > 90 degrees < 180 degrees ) corner
so that we miss the false errors between pairs of obtuse corners. We can pick out these corners with the corner_edges command:a_orth= dve_drc(corner_edges(lyrCond, 0.2, 89.9, 90.1), "orthogonal corner"); a_obtuse= dve_drc(corner_edges(lyrCond , 0.2, 90.1, 179.9), "obtuse corner");

Note
The program only holds angles to 0.1 degree precision. Also, we don't test the orthogonal corner for exactly 90 degrees, because this might fail if the whole geometry was at a different angle.Then we apply the equivalent of a width test from the orthogonal to obtuse corners. This is done using a double_clearance rule, from the inside of each edge at the orthogonal and obtuse corners:
drc_error += dve_drc(double_clearance(a_orth, a_obtuse) < 2.0, "test width from orthogonal to obtuse corners", DVE_RN_POLARITY_FROM, DVE_RV_INSIDE, DVE_RN_POLARITY_TO, DVE_RV_INSIDE, DVE_RN_TEMPLATE_FROM, DVE_RV_OPPOSITE, DVE_RN_TEMPLATE_TO, DVE_RV_ARC_OPPOSITE, DVE_RN_SEPARATE, DVE_RV_SEPARATE);


Note
The qualifier DVE_RV_SEPARATE is used to apply the test only to non-intersecting edges.
Edge Selection Based on Grid
Edge Selection Based on Grid selection function includes: off_grid().
Privacy
Statement
|
Terms of Use
|
Legal |
Contact Us
|
© Agilent 2000-2008 ![]()