1. setmiterlimit
Sets the miter limit for line joins.
1.2. Stack Effects
| Level | Object |
|---|---|
0 |
|
| Level | Object |
|---|---|
(empty) |
Miter limit parameter set |
1.3. Description
setmiterlimit sets the miter limit parameter in the graphics state to num. This parameter controls when sharp miter joins are converted to bevel joins during stroking operations.
The miter limit is the maximum ratio of miter length to line width. When the ratio exceeds this limit (at very sharp angles), a bevel join is used instead of a miter join.
-
num ≥ 1.0: Required (values < 1.0 are treated as 1.0)
-
Higher values: Allow sharper angles before beveling
-
Lower values: Bevel more angles (1.0 bevels all)
-
Default: Typically 10.0
The miter limit only applies when the line join style is 0 (miter). It has no effect for round (1) or bevel (2) joins.
1.5. Examples
10 setmiterlimit
0 setlinejoin % Miter joins
drawSharpAngles
1 setmiterlimit % Minimum value
0 setlinejoin
drawAngles % All corners beveled
100 setmiterlimit % Very permissive
0 setlinejoin
drawVerySharpAngles % Even sharp angles stay mitered
% Same angle, different limits
gsave
1 setmiterlimit
0 0 moveto 50 10 lineto 100 0 lineto stroke
grestore
gsave
10 setmiterlimit
0 20 moveto 50 30 lineto 100 20 lineto stroke
grestore
1.6. Common Use Cases
1.6.1. Technical Drawing Standards
/TechnicalDrawing {
10 setmiterlimit % Standard
0 setlinejoin % Miter joins
0.5 setlinewidth
} def
1.6.2. Preventing Spikes
/SafeDrawing {
2 setmiterlimit % Conservative
0 setlinejoin
% Prevents extremely sharp spikes
} def
1.7. Common Pitfalls
| Only Affects Miter Joins - Has no effect unless line join is 0 (miter). |
1 setlinejoin % Round joins
1 setmiterlimit % No effect
| Minimum Value is 1 - Values less than 1.0 are clamped to 1.0. |
0.5 setmiterlimit
currentmiterlimit % Returns 1.0
| Width-Independent - Miter limit is a ratio, independent of line width. |
10 setmiterlimit
1 setlinewidth % Limit applies same
10 setlinewidth % Limit applies same
| Use 1.0 to Force Bevels - Minimum limit (1.0) bevels all corners. |
1.8. Error Conditions
| Error | Condition |
|---|---|
[ |
num is negative or NaN |
[ |
No operand on stack |
[ |
Operand not a number |
1.9. Implementation Notes
-
Values < 1.0 are clamped to 1.0 (no error)
-
Only meaningful for miter joins (line join = 0)
-
Ratio of miter length to line width
-
Fast parameter setting
-
Default typically 10.0
-
Widely supported (Level 1)
1.10. Miter Limit Formula
The relationship between miter limit and cutoff angle:
miterLimit = 1 / sin(θ/2) Where θ is the angle between line segments
Common values:
| Limit | Angle | Usage |
|---|---|---|
1.0 |
180° (straight) |
Bevels all (no miters) |
1.414 |
90° |
Bevels right angles and sharper |
2.0 |
~60° |
Bevels acute angles |
4.0 |
~29° |
Standard for CAD |
10.0 |
~11.5° |
PostScript default |
∞ |
0° |
Never bevels (allows all) |
1.11. Visual Effect
1.415 setmiterlimit
0 setlinejoin
% Corners at 90° and sharper: beveled
% Corners > 90°: mitered
100 setmiterlimit
0 setlinejoin
% Almost all corners: mitered
% Only extremely sharp angles: beveled
1.12. Miter Length Calculation
For a given angle, the miter length is:
miterLength = lineWidth / sin(θ/2)
ratio = miterLength / lineWidth
= 1 / sin(θ/2)
If ratio > miterLimit:
use bevel join
Else:
use miter join
1.13. See Also
-
setlinejoin- Set line join style -
currentmiterlimit- Get current miter limit -
setlinewidth- Set line width -
setlinecap- Set line cap style