Alan S,
Option 3 is what we are after also, but also option to map from attribute (or layer) as we will need to define on feature attributes and not the code directly. Since we layer based on critical attributes anyhow, mapping from layer would probably be simplest, and is how we have mapped from Terramodel, Geocivil and 12D in the past.
Mapping options similar to the old Terramodel map file would be good. This allows the user to define what to where, including options to reference existing code/layer name, fixed name, auto incrementing, etc (take the onus of you). Below is the definition from TM. Wouldn't need fields 6 & 7, but an option to export surface triangulation as strings would be good.
# The fields are as follows:
#
# 1) Record Name Filter
# (Wildcard characters are allowed e.g. Record Name ES*)
# DEFAULT is special keyword used to specify default values
#
# 2) Number of characters to use from the Record Name
# (0 = Don't use the Terramodel Record Name
# Up to 8 characters can be used (4 for main code, 4 for subcode)
#
# 3) Number of characters to use from the Record's layername
# (0 = Don't use the Record's layername
#
# 4) Fixed name
# (Only used if previous two values are 0. Doesn't use Record Name or Record layername)
#
# 5) Auto increment (OFF, ON)
# (If ON, an incremented string number is suffixed to the string code,
# right-justified and filled to three spaces
# If OFF, no string number is created in the GENIO file and
# MOSS applies its own string numbering during import)
#
# 6) Block height (NONE, INSERT, MODEL)
# (NONE, block height is -999 Null
# INSERT, block height is from insertion point
# MODEL, block height is interpolated from DTM layer in field 7)
#
# 7) Name of DTM layer if field 6 is MODEL
#
#Examples:
#ES*,0,0,EP,ON,NONE
#DEFAULT,0,0,S,ON,MODEL,POINTS
State Growth TM to MOSS map.msx
Rob