How to select the faces after combining BRep bodies to use revolve feature.

How to select the faces after combining BRep bodies to use revolve feature.

Anonymous
Not applicable
445 Views
0 Replies
Message 1 of 1

How to select the faces after combining BRep bodies to use revolve feature.

Anonymous
Not applicable

I have got into a new problem with this. I would really appreciate it if you could help to.

1) I am combining the bodies so that  I can use the revolve feature. But after combining two bodies I am not being able to select the face that I want to revolve. In the user interface, I can select the face and revolve it to starting face of the next body. However, with the script, I am not being able to select the end face of the 1st body to revolve. 

 

 

# I have attached the 2 Brep bodies made and combined with script. The blue line is sketeched to make axis line for revolve. Using UI i can select the faces but with script I could not slect the face of body to revolev.

 

Could you please look into the code and help me to figure out how to solve this issue. I would really appreciate your help. 

 

Screen Shot 2020-03-01 at 8.26.58 PM.pngScreen Shot 2020-03-01 at 8.26.29 PM.pngScreen Shot 2020-03-01 at 8.27.48 PM.png

 

#Fusion360API Python script
import adsk.core, adsk.fusion, traceback
import time

def run(context):
    ui = None
    try:
        # data file path
        path = '/Users/rizal/Desktop/20mm_cubeCoordinates.txt'

        app = adsk.core.Application.get()
        ui  = app.userInterface
        
        # new document
        # app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        des = adsk.fusion.Design.cast(app.activeProduct)

        # direct design
        des.designType = adsk.fusion.DesignTypes.DirectDesignType

        # time
        startTime = time.time()

        # read file
        data = readData(path)

        # point3D
        pnt3D = adsk.core.Point3D
        pnts = [pnt3D.create(x, y, z) for (x, y, z) in data]

        # create cylinder
        radius =0.035
        cylinders = initCylinders(pnts, radius)

        # add bodies
        root = des.rootComponent
        bodies = root.bRepBodies

        # for i in range(bodies.count-1):

        [bodies.add(cyl) for cyl in cylinders]

    
#################
        #Sketching lines to make axis for revolve 
        sketches = root.sketches
        xyPlane = root.xYConstructionPlane
        sketch = sketches.add(xyPlane)

        lines = sketch.sketchCurves.sketchLines
        axisline = lines.addByTwoPoints(
            adsk.core.Point3D.create(pnts[1].x,pnts[1].y,pnts[1].z),
            adsk.core.Point3D.create(pnts[1].x,pnts[1].y,pnts[1].z+0.5))

        
        
        #Collection object to store bodies for combine operation
        coll = adsk.core.ObjectCollection.create()
        coll.add(bodies.item(1))

        
        combine = root.features.combineFeatures
        combineInput = combine.createInput(bodies.item(0),coll)
    
        body = combine.add(combineInput)

        # face1 = body.faces[2]
        # face2 = body.faces[3]
        
        # revolves = root.features.revolveFeatures
        # revInput = revolves.createInput(face1,axisline,adsk.fusion.FeatureOperations.JoinFeatureOperation)
        # revInput.setOneSideToExtent(face2)

        # ext = revolves.add(revInput)
        # # for i in range(bodies.count-1):



############
        # fin
        des.designType = adsk.fusion.DesignTypes.ParametricDesignType
        msg = '-- Done --\nBodyCount : {}\nTime : {}'.format(
            len(cylinders),time.time() - startTime)
        ui.messageBox(msg)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

def initCylinders(
    pnts :list,
    radius :float
    ) -> list:

    tmpMgr = adsk.fusion.TemporaryBRepManager.get()
    cyls = []
    for idx in range(2):
        # creating vector to orient epllipse along the path
        vec = adsk.core.Vector3D.create(pnts[idx].x,pnts[idx].y,pnts[idx].z)

        #creating elliptical cylinder with major radius 0.02 and minor radius 0.01 and direction of vector 
        cyl = tmpMgr.createEllipticalCylinderOrCone(
            pnts[idx],0.02, 0.01, pnts[idx + 1], 0.02, vec)

        if cyl:
            cyls.append(cyl)
    
    return cyls

def readData(
    path :str
    ) -> list:

    with open(path, 'r', buffering = -1, encoding = 'utf-8-sig') as f:
        lst = f.readlines()
    
    data = [s.replace('\n', '').split(',') for s in lst]

    app  :adsk.core.Application = adsk.core.Application.get()
    des  :adsk.fusion.Design = app.activeProduct
    um = des.unitsManager
    conv = um.convert(1, um.defaultLengthUnits, um.internalUnits)

    return [(float(x) * conv, float(y) * conv, float(z) * conv) for (x,y,z) in data]

 

 

 

0 Likes
446 Views
0 Replies
Replies (0)