Hem Feature Sample

Description

Demonstrates creating a new sheet metal hem feature.

Code Samples

import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
       
        # get active design        
        product = app.activeProduct
        design = adsk.fusion.Design.cast(product)
         
        # get the root component
        rootComp = design.rootComponent

        # get features
        features = rootComp.features
        hemFeatures = features.hemFeatures

        # get geometry from body to create hems
        brepBodies = rootComp.bRepBodies
        body = brepBodies.item(0)
        edges = body.edges

        # get inputs for an open hem
        gap = adsk.core.ValueInput.createByReal(0.2)
        length = adsk.core.ValueInput.createByReal(2.0)
        openHemFeatureInput = hemFeatures.createHemFeatureInput()
        edge = edges.item(0)
        isFlipped = False
        bendPositionType = adsk.fusion.BendPositionTypes.StartEdgeBendPositionType;

        # create an open hem using specified values
        openHemFeatureInput.setOpenHem(edge, length, gap, isFlipped, bendPositionType)
        hemFeature = hemFeatures.add(openHemFeatureInput)

        # get inputs for a rolled hem
        radius = adsk.core.ValueInput.createByReal(0.3)
        angle = adsk.core.ValueInput.createByReal(4.5)
        rolledHemFeatureInput = hemFeatures.createHemFeatureInput()
        edge = edges.item(5)

        # use same flip and bend position as before to create a rolled hem
        rolledHemFeatureInput.setRolledHem(edge, radius, angle, isFlipped, bendPositionType)
        hemFeature = hemFeatures.add(rolledHemFeatureInput)
           
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
#include <Core/Application/Application.h>
#include <Core/Application/Document.h>
#include <Core/Application/ValueInput.h>
#include <Core/UserInterface/UserInterface.h>

#include <Fusion/Components/Component.h>
#include <Fusion/BRep/BRepBodies.h>
#include <Fusion/BRep/BRepBody.h>
#include <Fusion/BRep/BRepEdge.h>
#include <Fusion/BRep/BRepEdges.h>
#include <Fusion/Features/Features.h>
#include <Fusion/SheetMetal/HemFeature.h>
#include <Fusion/SheetMetal/HemFeatureInput.h>
#include <Fusion/SheetMetal/HemFeatures.h>
#include <Fusion/Fusion/Design.h>

using namespace adsk::core;
using namespace adsk::fusion;

Ptr<UserInterface> ui;

extern "C" XI_EXPORT bool run(const char* context)
{
    Ptr<Application> app = Application::get();
    if (!app)
        return false;

    ui = app->userInterface();
    if (!ui)
        return false;


    // Get active design
    Ptr<Product> product = app->activeProduct();
    if (!product)
        return false;

    Ptr<Design> design = product;
    if (!design)
        return false;

    // Get root component in this design
    Ptr<Component> rootComp = design->rootComponent();
    if (!rootComp)
        return false;

    // Get hem features
    Ptr<Features> features = rootComp->features();
    if (!features)
        return false;

    Ptr<HemFeatures> hemFeatures = features->hemFeatures();
    if (!hemFeatures)
        return false;

    Ptr<BRepBodies> bodies = rootComp->bRepBodies();

    Ptr<BRepBody> body = bodies->item(0);

    Ptr<BRepEdges> edges = body->edges();

    // Create an open hem
    Ptr<ValueInput> gap = ValueInput::createByReal(0.2);

    Ptr<ValueInput> length = ValueInput::createByReal(2.0);

    Ptr<HemFeatureInput> openHemFeatureInput = hemFeatures->createHemFeatureInput();

    Ptr<BRepEdge> edge = edges->item(0);

    bool isFlipped = false;

    BendPositionTypes bendPositionType = BendPositionTypes::StartEdgeBendPositionType;


    // Create the feature
    Ptr<HemFeature> openHemFeature = hemFeatures->add(openHemFeatureInput);

    // Create a rolled hem
    Ptr<ValueInput> radius = ValueInput::createByReal(0.3);

    Ptr<ValueInput> angle = ValueInput::createByReal(4.5);

    Ptr<HemFeatureInput> rolledHemFeatureInput = hemFeatures->createHemFeatureInput();

    Ptr<BRepEdge> edge = edges->item(5);

    // Use same bend position and flip options as previous hem

    // Create the feature
    Ptr<HemFeature> rolledHemFeature = hemFeatures->add(rolledHemFeatureInput);


    return true;
}