Community
Fusion API and Scripts
Got a new add-in to share? Need something specialized to be scripted? Ask questions or share what you’ve discovered with the community.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

BaseFeature.updateBody causes downstream failures

0 REPLIES 0
Reply
Message 1 of 1
ginavenolia
177 Views, 0 Replies

BaseFeature.updateBody causes downstream failures

ginavenolia
Contributor
Contributor

I'm working on an add-in which creates a body and can later be used to replace that same body with a modified version, based on external conditions. This code was working fine until a few months ago, perhaps with the February release. Something changed with Fusion so that every time my add-in replaced an existing body, the body name would increment and any features that depended on that body would lose track of it. This hits me right in the use-case, and I've not been able to find a workaround.

 

I've isolated the behavior in a simple script (below) in hopes of finding a workaround or fix. The first time this script is run it creates a sphere, a cylinder, each in their own BaseFeature, and cuts one from the other. On subsequent runs it replaces the sphere within its BaseFeature. After the second run, note three things:

 

  1. The sphere is now named "Body3", not "Body1" as expected.
  2. The cylinder is no longer translucent.
  3. The Combine feature fails because it no longer knows its target body, which used to be the sphere.

The first two problems are weird but tolerable. The third is what's causing me grief. Can anyone shed any light on this?

 

Thanks,

-Gina

 

 

app = adsk.core.Application.get()
design = adsk.fusion.Design.cast(app.activeProduct)
component: adsk.fusion.Component = design.rootComponent
tbrm = adsk.fusion.TemporaryBRepManager.get()

if component.features.baseFeatures.count == 0:
    sphereFeature = component.features.baseFeatures.add()
    sphereFeature.startEdit()
    sphere = tbrm.createSphere(adsk.core.Point3D.create(0, 0, 1), 1)
    component.bRepBodies.add(sphere, sphereFeature)
    sphereFeature.finishEdit()

    cylinderFeature = component.features.baseFeatures.add()
    cylinderFeature.startEdit()
    cylinder = tbrm.createCylinderOrCone(adsk.core.Point3D.create(1, 1, 0), 1, adsk.core.Point3D.create(1, 1, 2), 1)
    component.bRepBodies.add(cylinder, cylinderFeature)
    cylinderFeature.finishEdit()

    cylinderFeature.bodies.item(0).opacity = 0.5

    tools = adsk.core.ObjectCollection.create()
    tools.add(cylinderFeature.bodies.item(0))
    input = component.features.combineFeatures.createInput(sphereFeature.bodies.item(0), tools)
    input.isKeepToolBodies = True
    input.operation = adsk.fusion.FeatureOperations.CutFeatureOperation
    combineFeature = component.features.combineFeatures.add(input)
else:
    sphereFeature = component.features.baseFeatures.item(0)

    rolledTimelineObject = design.timeline.item(design.timeline.markerPosition - 1)
    sphereFeature.timelineObject.rollTo(rollBefore = True)

    sphereFeature.startEdit()
    sphere = tbrm.createSphere(adsk.core.Point3D.create(0, 0, random.uniform(0.5, 1.5)), 1)
    sphereFeature.updateBody(sphereFeature.bodies.item(0), sphere)
    sphereFeature.finishEdit()

    rolledTimelineObject.rollTo(rollBefore=False)

 

 

0 Likes

BaseFeature.updateBody causes downstream failures

I'm working on an add-in which creates a body and can later be used to replace that same body with a modified version, based on external conditions. This code was working fine until a few months ago, perhaps with the February release. Something changed with Fusion so that every time my add-in replaced an existing body, the body name would increment and any features that depended on that body would lose track of it. This hits me right in the use-case, and I've not been able to find a workaround.

 

I've isolated the behavior in a simple script (below) in hopes of finding a workaround or fix. The first time this script is run it creates a sphere, a cylinder, each in their own BaseFeature, and cuts one from the other. On subsequent runs it replaces the sphere within its BaseFeature. After the second run, note three things:

 

  1. The sphere is now named "Body3", not "Body1" as expected.
  2. The cylinder is no longer translucent.
  3. The Combine feature fails because it no longer knows its target body, which used to be the sphere.

The first two problems are weird but tolerable. The third is what's causing me grief. Can anyone shed any light on this?

 

Thanks,

-Gina

 

 

app = adsk.core.Application.get()
design = adsk.fusion.Design.cast(app.activeProduct)
component: adsk.fusion.Component = design.rootComponent
tbrm = adsk.fusion.TemporaryBRepManager.get()

if component.features.baseFeatures.count == 0:
    sphereFeature = component.features.baseFeatures.add()
    sphereFeature.startEdit()
    sphere = tbrm.createSphere(adsk.core.Point3D.create(0, 0, 1), 1)
    component.bRepBodies.add(sphere, sphereFeature)
    sphereFeature.finishEdit()

    cylinderFeature = component.features.baseFeatures.add()
    cylinderFeature.startEdit()
    cylinder = tbrm.createCylinderOrCone(adsk.core.Point3D.create(1, 1, 0), 1, adsk.core.Point3D.create(1, 1, 2), 1)
    component.bRepBodies.add(cylinder, cylinderFeature)
    cylinderFeature.finishEdit()

    cylinderFeature.bodies.item(0).opacity = 0.5

    tools = adsk.core.ObjectCollection.create()
    tools.add(cylinderFeature.bodies.item(0))
    input = component.features.combineFeatures.createInput(sphereFeature.bodies.item(0), tools)
    input.isKeepToolBodies = True
    input.operation = adsk.fusion.FeatureOperations.CutFeatureOperation
    combineFeature = component.features.combineFeatures.add(input)
else:
    sphereFeature = component.features.baseFeatures.item(0)

    rolledTimelineObject = design.timeline.item(design.timeline.markerPosition - 1)
    sphereFeature.timelineObject.rollTo(rollBefore = True)

    sphereFeature.startEdit()
    sphere = tbrm.createSphere(adsk.core.Point3D.create(0, 0, random.uniform(0.5, 1.5)), 1)
    sphereFeature.updateBody(sphereFeature.bodies.item(0), sphere)
    sphereFeature.finishEdit()

    rolledTimelineObject.rollTo(rollBefore=False)

 

 

0 REPLIES 0

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report