Message 1 of 3
Time increase when a script is executed successively on the same document
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
Here is a code that creates 200 components every time it is executed:
import adsk.core, adsk.fusion, traceback import random import time import math def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface # x = [[0,1,1,0,0], [1,2,2,0,0,1,1], [0,2,2,0], [0,1,1,0,0]] # y = [[0,0,1,1,0], [0,0,2,2,1,1,0], [0,0,1,0], [0,0,1,1,0]] # h = [0.2, 0.5, 0.1, 0.2] numIteration = 200 trans = adsk.core.Matrix3D.create() transformTrans = adsk.core.Matrix3D.create() transformRot = adsk.core.Matrix3D.create() transformFlip = adsk.core.Matrix3D.create() vector = adsk.core.Vector3D.create(0.0, 0.0, 0.0) vectorY = adsk.core.Vector3D.create(0.0, 1.0, 0.0) vectorZ = adsk.core.Vector3D.create(0.0, 0.0, 1.0) origin = adsk.core.Point3D.create(0.0, 0.0, 0.0) design = adsk.fusion.Design.cast(app.activeProduct) design.designType = adsk.fusion.DesignTypes.DirectDesignType rootComponent = design.rootComponent start_time = time.time() for i in range(0, numIteration): # n = random.randint(0, 3) trans.setToIdentity() vector.x = 100*random.random() vector.y = 100*random.random() vector.z = 0.0 if random.random() > 0.5: transformFlip.setToRotation(math.pi, vectorY, origin) trans.transformBy(transformFlip) transformRot.setToRotation(random.random()*math.pi, vectorZ, origin) trans.transformBy(transformRot) transformTrans.translation = vector trans.transformBy(transformTrans) occ = rootComponent.occurrences.addNewComponent(trans) # comp = occ.component # sketches = comp.sketches # sketchesPlane = comp.xYConstructionPlane # # sketch = sketches.add(sketchesPlane) # sketch.isComputeDeferred = True # sketch.isLightBulbOn = False # # lines = sketch.sketchCurves.sketchLines # # for j in range(0, len(x[n])-1): # lines.addByTwoPoints(adsk.core.Point3D.create(x[n][j], y[n][j], 0), adsk.core.Point3D.create(x[n][j+1], y[n][j+1], 0)) # # sketch.isComputeDeferred = False # # distance = adsk.core.ValueInput.createByReal(h[n]) # extrudes = comp.features.extrudeFeatures # extrude = extrudes.addSimple(sketch.profiles.item(0), distance, adsk.fusion.FeatureOperations.NewBodyFeatureOperation) # extrude.dissolve() elapsed_time = time.time() - start_time app.activeViewport.fit() app.activeViewport.refresh() adsk.doEvents() print('{:.2f}s'.format(elapsed_time)) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
And here are the elapsed times for successive run on my machine (Intel i7-3770K, RAM 16GB, NVidia GTX 960, Windows 7):
- Run 1: 0.69s
- Run 2: 1.44s
- Run 3: 2.47s
- Run 4: 3.55s
- Run 5: 4.92s
Here are the same results with all the lines uncommented (sketch and extrusion):
- Run 1: 5.64s
- Run 2: 12.64s
- Run 3: 20.63s
- Run 4: 29.38s
- Run 5: 37.47s
Why ?
Does it take so much time to refresh the viewport with the components added at each iteration?
Thank you
Jérôme Briot, Freelance engineer - Mechanical design and prototyping
3D Print Plus / Pro | IDF Import | GitHub To Fusion 360 | Tube Bending Data Exchanger | Slice Data Export
Memory Used | Basic Calculator | Check Computer Specifications | Import spline from any CSV file