Files
fusion360/demo/demo.py
2022-09-21 21:50:43 +02:00

58 lines
1.8 KiB
Python

# Fusion360API Python script
import adsk.core, adsk.fusion, adsk.cam, traceback
import math, random
# Number of divisions during one revolution
COUNT = 60
def run(context):
ui = None
try:
app: adsk.core.Application = adsk.core.Application.get()
ui = app.userInterface
# get state
vi :adsk.core.Viewport = app.activeViewport
camera :adsk.core.Camera = vi.camera #This is a deep copy.
eye :adsk.core.Point3D = camera.eye
tgt :adsk.core.Point3D = camera.target
up :adsk.core.Vector3D = camera.upVector
baseArea = camera.viewExtents
# get matrix
front :adsk.core.Vector3D = eye.vectorTo(tgt)
right :adsk.core.Vector3D = up.copy()
right = right.crossProduct(front)
mat :adsk.core.Matrix3D = adsk.core.Matrix3D.create()
mat.setWithCoordinateSystem(tgt, right, front, up)
# get position & ratio
unit = math.radians(360 // COUNT)
rads = [unit] * COUNT
ratios = [random.uniform(0.1, 5.0) for _ in range(COUNT)]
if 360 % COUNT != 0:
rads.append(math.radians(360 % COUNT))
ratios.append(1)
# show
camera.isSmoothTransition = False
for rad, ratio in zip(rads, ratios):
mat.setToRotation(rad, up, tgt)
eye.transformBy(mat)
up.transformBy(mat)
mat.setToRotation(rad, right, tgt)
eye.transformBy(mat)
up.transformBy(mat)
# mat.setToRotation(rad, front, tgt)
camera.eye = eye
camera.upVector = up
# zoom = baseArea * ratio
# camera.viewExtents = zoom
vi.camera = camera
vi.refresh()
adsk.doEvents()
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))