Add beams inside mechanical at fastener holes automatically

Options
Erik Kostson
Erik Kostson Member, Employee Posts: 124
First Answer Name Dropper First Anniversary Ansys Employee
edited March 25 in Structures

Say we have multiple fastener holes (defined say as named selections), how can we then add automatically beams inside mechanical?

Best Answer

  • Erik Kostson
    Erik Kostson Member, Employee Posts: 124
    First Answer Name Dropper First Anniversary Ansys Employee
    edited March 25 Answer ✓
    Options

    Below is the code for the automatic beam creation inside mechanical:

    It needs to have a cross section folder, and named selections created - each named selection is of the 2 edges that are to be connected by the beam. Beam will be connected to these 2 edges via 2 fixed joints (MPC rigid). Finally a Bolt-Pretension is added to the new beam.

    model = ExtAPI.DataModel.Project.Model
    analysis=model.Analyses[0]
    ns=model.NamedSelections.Children
    construction_geometry = model.AddConstructionGeometry() # add folder
     # add line object
    for n in ns: # get named sel. hole edge pair needs to be there (so 2 edges)
        nId=n.Location.Ids
        a = construction_geometry.AddConstructionLine()
        pointlist=[]
        for edge in nId:
            e = ExtAPI.DataModel.GeoData.GeoEntityById(edge)
            if str(e.CurveType) =="GeoCurveCircle":
                ce=e.Centroid # get centre of hole
                #print(ce)
                pointlist.append((ce[0],ce[1],ce[2])) # beam points at the centre
                points=a.CreatePoints(pointlist)
        for i in range(0,len(points)-1):
            edge_collection_5 = a.CreateStraightLines([points[i],points[i+1]], [(0,1)]) # create the points and add beam
        beam=a.AddToGeometry() # create beam
        geobeam=beam.Bodies[0] # 
        treebody=ExtAPI.DataModel.Project.Model.Geometry.GetBody(geobeam) # get tree body beam
        cross_sec=ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.CrossSections)[0].AddCircularCrossSection()
        cross_sec.Radius = Quantity(float(e.Radius), "m")
        treebody.CrossSectionSelection=cross_sec
        connections = Model.Connections
        connectiongroup = connections.AddConnectionGroup()
        j=0
        for edge in nId: # create mpc rigid connections
            joint = connectiongroup.AddJoint()
            selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
            selection.Ids=[geobeam.Vertices[j].Id]
            joint.MobileLocation = selection
            selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
            selection.Ids=[edge]
            joint.ReferenceLocation = selection
            j=j+1
        bopr=analysis.AddBoltPretension()
        bopr.SetDefineBy(1,BoltLoadDefineBy.Load)
        load = Quantity(1000,'N')
        bopr.Preload.Output.Field.Output.SetDiscreteValue(0,load)
        selection = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
        selection.Ids=[geobeam.Edges[0].Id]
        bopr.Location=selection
    
    
    
This discussion has been closed.