Hope your dog issues are resolved successfully. I'm inserting some error checking in the macro, and I need a minimum acceptable step width and depth. Using "Architectural standards for starship deckplans" by Christopher Thrash as a guide, minimum stair width should be 2.5' with 2' between railings. (Should railing thickness be fixed or variable?) Step tread depth is a little trickier, but my best guess (at least until I can get to the library and check their copy of "Architectural Graphic Standards") is that anything less than 6" would be a hazard. At the moment, all errors are fatal and end the macro. What do you think?

EDIT: Here is the revised code without the minimums but with railing support. I'm breaking it into sections for comments.
Code:
MACRO MyStairC
savesettings
selsave
rdoff
sgetname sOldSheet
Save current map setting and sheet.
Code:
gv vStepWidth 5
gv vStepWidth ^DEnter stairway width [5]:
ifn vStepWidth MSC_Error1
ifz vStepWidth MSC_Error1
gv vStepDepth 1
gv vStepDepth ^DEnter step spacing [1]:
ifn vStepDepth MSC_Error1
ifz vStepDepth MSC_Error1
gv vRailWidth 0.2
gv vRailWidth ^DEnter railing width [0.2]
ifn vRailWidth MSC_Error0
gv vTreadWidth vStepWidth-2*vRailWidth 
ifn vTreadWidth MSC_Error2
lwidth vStepWidth
iferr MSC_Done
gp pCenter ^DCenter:
iferr MSC_Done
gp pStart ^DStarting point:
iferr MSC_Done
gdist vRadius pCenter pStart
ifn vRadius-vStepWidth/2 MSC_Error3
Input and check data for errors.
Code:
sset SYMBOLS FLAT
color 16
fstyle Solid
lstyle Solid
setlayer UP AND DOWN
arcs pCenter pStart ^D
gp pEndPt @0,0
selbyp
outlineb
Draw staircase background.
Code:
gbrng vStartAngle pCenter pStart
ifz vRailWidth MSC_NoRail
color 14
lwidth vRailWidth
offset1 (vStepWidth-vRailWidth)/2
pStart pCenter
pStart <vStartAngle,1;
outlineb
:MSC_NoRail
Draw the railings if necessary.
Code:
gbrng vEndAngle pCenter pEndPt
gv vStepAngle vStepDepth*180/(3.141592654*vRadius)
ifn vStartAngle-vEndAngle MSC_SkipAdjust
gv vEndAngle vEndAngle+360
:MSC_SkipAdjust
gn nNumSteps (vEndAngle-vStartAngle)/vStepAngle
gv vStepAngle (vEndAngle-vStartAngle)/nNumSteps
gv vEdgeAngle vStartAngle
color 0
Calculate initial and constant angles required. Note how the step angle is recalculated to evenly divide into the angular width of the staircase.
Code:
:MSC_Step
gv vRiserAngle vEdgeAngle+vStepAngle
ifp vRiserAngle-vEndAngle MSC_Done
lwidth 0
setlayer UP AND DOWN
line ref pCenter <vRiserAngle,vRadius-vTreadWidth/2 <vRiserAngle,vTreadWidth
golayer UP AND DOWN SHADING
gv vShadowAngle vRiserAngle-vStepAngle/3
lwidth vTreadWidth
fstyle solid 20 Bitmap
arcr pCenter vRadius vShadowAngle vRiserAngle ESC
lwidth vStepWidth
fstyle solid 10 Bitmap
arcr pCenter vRadius vStartAngle vRiserAngle ESC
gv vEdgeAngle vRiserAngle
goto MSC_Step
Draw the step edges, shadows and shading.
Code:
:MSC_Error0
msgbox ERROR! Invalid data entered.
The previously entered data
must be greater than zero.

goto MSC_Done
:MSC_Error1
msgbox ERROR! Invalid data entered.
The previously entered
data must be greater than
or equal to zero.

goto MSC_Done
:MSC_Error2
msgbox ERROR! No space between railings.
The width of the staircase is less
than the combined width of both hand
rails leaving no space between them.

goto MSC_Done
:MSC_Error3
msgbox ERROR! Radius of staircase too small.
The distance from the center of the
staircase to the center of the first
step is less than half of the width
of the step.
Display whatever error message is required.
Code:
:MSC_Done
sset sOldSheet
rdon
selrest
getsettings
ENDM
Restore map settings and old sheet name.

--

Dalton "who think macros without error traps are asking for trouble" Spence