Here's a script that reads a CSV file and creates spheres. I extended it so that instead of just the center of the sphere it also reads the radius from the CSV. I use the temporary B-Rep capabilities of Fusion to create the spheres and a direct modeling document to speed up the process. I was also curious about one other thing and made an option where it will either create one single body for all spheres or a body for each sphere. For a single body, it takes 1.3 seconds to create 1000 spheres and for individual bodies it takes 5.08 seconds. Interactively, Fusion wouldn't let you create them as a single body but through the API you can. I haven't found that it causes any issues but I wouldn't want to do a lot of additional modeling with a model like that. It's a valid solid model for the modeling kernel but Fusion simplifies it further.
For fun, here's an example of the result where I set one of the center spheres to be a light source.

There are samples in the documentation that demonstrate exporting models in different formats. However, if you want to create a 2D drawing and export that, you'll need to do it interactively because there isn't any API support for the drawing functionality.
Here's my code and I've attached the CSV I tested with which I created with an Excel macro and a random number function.
import adsk.core, adsk.fusion, adsk.cam, traceback
import time
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
# Create a new document.
doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
des = app.activeProduct
root = des.rootComponent
bodies = root.bRepBodies
# Make sure it is a direct modeling document.
des.designType = adsk.fusion.DesignTypes.DirectDesignType
# Open and read the CSV file into a list.
with open("C:\\Temp\\Spheres.csv", "r") as coordFile:
content = coordFile.readlines()
content = [x.strip() for x in content]
# Remove the first item, which is the header line.
del content[0]
tBrep = adsk.fusion.TemporaryBRepManager.get()
mainBody = None
# Flag used to indicate if a single body should be
# created or a body for each sphere.
singleBody = False
startTime = time.time()
cnt = 0
for line in content:
pieces = line.split(',')
x = float(pieces[0])
y = float(pieces[1])
z = float(pieces[2])
radius = float(pieces[3])
# Create a sphere.
center = adsk.core.Point3D.create(x,y,z)
sphereBody = tBrep.createSphere(center, radius)
cnt += 1
if not singleBody:
# Add this sphere as a body.
body = bodies.add(sphereBody)
body.name = 'Sphere ' + str(cnt)
else:
# Combine this sphere with any existing spheres.
if mainBody:
tBrep.booleanOperation(mainBody, sphereBody, adsk.fusion.BooleanTypes.UnionBooleanType)
else:
mainBody = sphereBody
if singleBody:
body = bodies.add(mainBody)
body.name = 'Combined Sphere Bodies'
ui.messageBox('Total time for {} spheres: {}'.format(cnt, time.time() - startTime) )
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
---------------------------------------------------------------
Brian EkinsInventor and Fusion 360 API Expert
Website/Blog:
https://EkinsSolutions.com