Model.hm_flangedetectionfindmates#

Model.hm_flangedetectionfindmates(max_search_dist, min_search_dist, mode=0, percent_mate_area_tol=0., search_scope=0)#

Runs the flange detection mating functions for finding flanges mating ‘groups’. This must be preceded by a call to Model.hm_flangedetectionfindflanges().

max_search_dist and min_search_dist are mandatory.

All other parameters are optional and have default values. Parameters can be specified in any order.

Parameters:
  • max_search_dist (double) – The maximum distance for the proximity search.

  • min_search_dist (double) – The minimum distance for the proximity search.

  • mode (int) –

    0 - Perform flange-to-flange mating only (default)

    1 - Perform flange-to-everything mating

  • percent_mate_area_tol (double) – The minimum mating area percentage required for valid mating. Default value 0.1.

  • search_scope (int) – Reserved for future development.

Returns:

Example#

Find 2D flanges from elements in all components , use a min width of 2 , a max width of 20 and a feature angle of 20 , and write out all flange details to a file named C:/temp / flanges.txt#
import hm
import hm.entities as ent

model = hm.Model()

flangesfile = open("C:/temp/flanges.txt", "w")

comps = hm.Collection(model, ent.Component)

model.hm_flangedetectioninit(collection=comps)

model.hm_flangedetectionsetparams(max_width=20.0, min_width=2.0, feature_angle=20.0)

model.hm_flangedetectionfindflanges(find=1)

_, result = model.hm_flangedetectiongetnumberofflanges()
n=result.numberOfFlanges

if n > 0:
    flangesfile.write(f"Number of flanges = {n}\n")
    flangesfile.write("Flanges details \n")

    for i in range(0,n):
        _, result = model.hm_flangedetectiongetflangedetails(index=i)

        entityType = result.entityType
        dimension = result.dimension
        detectionType = result.detectionType
        flangeEntityIDs = result.flangeEntityIDs
        freeBoundaryEntityIDs = result.freeBoundaryEntityIDs
        connectedBoundaryEntityIDs = result.connectedBoundaryEntityIDs
        minWidth = result.minWidth
        maxWidth = result.maxWidth
        length = result.length
        hasHoles = result.hasHoles
        isInfinite = result.isInfinite

        Details = [
            entityType,
            dimension,
            detectionType,
            flangeEntityIDs,
            freeBoundaryEntityIDs,
            connectedBoundaryEntityIDs,
            minWidth,
            maxWidth,
            length,
            hasHoles,
            isInfinite
        ]

        flangesfile.write(f"details = {Details}\n")
        print(i)
        status, result = model.hm_flangedetectiongetflangemidline(index=i,offset_distance=5.0)

        print("pointCoordinates",result.pointCoordinates)
        Coordinates = result.pointCoordinates
        for points in Coordinates:
            midPoint=points.midPoint

            flangesfile.write(f"midline = {midPoint}\n")


    model.hm_flangedetectionfindmates(max_search_dist=10.0, min_search_dist=0.0)

    _, result = model.hm_flangedetectiongetnumberofmatinggroups()
    m = result.numberOfMatingGroups

    if m>0:
        for i in range(0,m):
            _,result = model.hm_flangedetectiongetmatinggroupdetails(index=i)

            matingGroupDetails = result.matingGroupDetails
            for details in matingGroupDetails:
                memberType = details.memberType
                memberContents = details.memberContents

                flangesfile.write(f"memberType = {memberType}\n")
                flangesfile.write(f"memberContents = {memberContents}\n")
    else:
        flangesfile.write("Flange mates not detected.\n")

else:
    flangesfile.write("Flanges not detected.\n")


model.hm_flangedetectionend()

flangesfile.close()