1. currentmiterlimit

Returns current miter limit value.

1.1. Syntax

– currentmiterlimit → num

1.2. Stack Effects

Table 1. Before
Level Object

(empty)

Table 2. After
Level Object

0

num (miter limit value, ≥ 1.0)

1.3. Description

currentmiterlimit returns the current miter limit parameter from the graphics state. This is the value most recently set by setmiterlimit.

The miter limit controls when sharp miter joins are converted to bevel joins. It is the ratio of miter length to line width. When this ratio exceeds the miter limit, a bevel join is used instead.

  • Default: typically 10.0

  • Minimum: 1.0

  • Higher values: allow sharper angles before beveling

  • Lower values: bevel more angles

1.4. PostScript Level

Level 1 and later

1.5. Examples

Querying current miter limit
10 setmiterlimit
currentmiterlimit
% Stack: 10
Saving and restoring miter limit
currentmiterlimit       % Save
/savedLimit exch def

1 setmiterlimit         % Change (bevel all)
drawSharpAngles

savedLimit setmiterlimit % Restore
Increasing miter limit
currentmiterlimit
2 mul
setmiterlimit

1.6. Common Use Cases

1.6.1. Miter Limit Preservation

/DrawWithNoMiters {
  currentmiterlimit     % Save
  1 setmiterlimit       % Minimum (bevel all)

  drawShape

  setmiterlimit         % Restore
} def

1.6.2. Adaptive Miter Handling

/DrawWithAngle {
  % angle on stack
  dup 30 lt {
    % Very sharp angle
    1 setmiterlimit     % Force bevel
  } {
    % Normal angle
    10 setmiterlimit    % Allow miters
  } ifelse

  drawAngle
  currentmiterlimit setmiterlimit
} def

1.6.3. Miter Limit Scaling

/ScaleMiterLimit {
  % factor
  currentmiterlimit mul
  setmiterlimit
} def

% Double sensitivity
2 ScaleMiterLimit

1.7. Common Pitfalls

Only Affects Miter Joins - Miter limit only applies when line join is 0 (miter).
1 setlinejoin           % Round join
1 setmiterlimit         % Has no effect
currentmiterlimit       % Returns 1, but not used
Minimum Value is 1 - Values less than 1 are clamped to 1.
0.5 setmiterlimit
currentmiterlimit       % Returns 1.0
Low Value Bevels All - Use 1.0 to bevel all sharp corners.

1.8. Error Conditions

Error Condition

[stackoverflow]

No room on operand stack

1.9. Implementation Notes

  • Very fast query operation

  • No modification to graphics state

  • Returns number ≥ 1.0

  • Default is typically 10.0

  • Only meaningful for miter joins

  • Widely supported (Level 1)

1.10. Miter Limit Behavior

The miter limit determines the cutoff angle:

Limit  Cutoff Angle (approx)
-----  --------------------
1.0    90° (bevels all)
1.414  90°
2.0    60°
4.0    29°
10.0   11° (default)
∞      0° (never bevel)

Formula:

miterLimit = 1 / sin(angle/2)

1.11. Visual Effect

% Very permissive (sharp miters)
100 setmiterlimit
drawSharpCorners

% Very restrictive (bevels most)
1 setmiterlimit
drawSharpCorners

1.12. See Also


Back to top

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