Hello,
I assume there is a context for cylinder or cone. Otherwise it seems that there is no way to calculate that. For the example the snapshot shows. There are two cone surfaces: interior and exterior. We can differentiate it by the normal on parameter point (0.5, 0.5).
Thanks,
Marshal
import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
face = adsk.fusion.BRepFace.cast(ui.activeSelections.item(0).entity)
res, normal = face.evaluator.getNormalAtParameter(adsk.core.Point2D.create(0.5, 0.5))
ui.messageBox('Axis is {}, {}, {}'.format(normal.x, normal.y, normal.z))
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

Marshal Tu
Fusion Developer
>