1. setmiterlimit

Sets the miter limit for line joins.

1.1. Syntax

num setmiterlimit → –

1.2. Stack Effects

Table 1. Before
Level Object

0

num (miter limit value, ≥ 1.0)

Table 2. After
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.4. PostScript Level

Level 1 and later

1.5. Examples

Standard miter limit
10 setmiterlimit
0 setlinejoin  % Miter joins
drawSharpAngles
Force all bevels
1 setmiterlimit  % Minimum value
0 setlinejoin
drawAngles  % All corners beveled
Permissive miter limit
100 setmiterlimit  % Very permissive
0 setlinejoin
drawVerySharpAngles  % Even sharp angles stay mitered
Comparing limits
% 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.6.3. Angle-Adaptive Limits

/SetLimitForAngle {
  % angle in degrees on stack
  2 div sin      % sin(angle/2)
  1 exch div     % 1/sin(angle/2)
  setmiterlimit
} def

% Allow 30-degree angles
30 SetLimitForAngle

1.6.4. Consistent Corner Treatment

/UniformCorners {
  % Bevel all sharp corners
  1.415 setmiterlimit  % Bevels angles < 90°
  0 setlinejoin
} 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

[rangecheck]

num is negative or NaN

[stackunderflow]

No operand on stack

[typecheck]

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

Never bevels (allows all)

1.11. Visual Effect

Low Limit (1.415)
1.415 setmiterlimit
0 setlinejoin
% Corners at 90° and sharper: beveled
% Corners > 90°: mitered
High Limit (100)
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


Back to top

Copyright © 2025 Ribose. PostScript is a trademark of Adobe. Distributed under the MIT License.