def get_area_breakdown(model, property_ids=None, stop_if_no_area=True,
    sum_bar_area=True):
    """
    Gets a breakdown of the area by property region.

    Parameters
    ----------
    property_ids : List[int] / int
        list of property ID
    stop_if_no_area : bool; default=True
        prevents crashing if there are no elements
    sum_bar_area : bool; default=True
        sum the areas for CBAR/CBEAM/CROD/CONROD/CTUBE elements
        True : get the area of the model by property id
        False : only get the cross sectional properties

    Returns
    -------
    pids_to_area : Dict[int pid] : float area
        the pid to area dictionary

    TODO: What about CONRODs?
    #'PBRSECT',
    #'PBCOMP',
    #'PBMSECT',
    #'PBEAM3',
    #'PBEND',
    #'PIHEX',
    #'PCOMPS',

    """
    skip_props = {'PSOLID', 'PLPLANE', 'PPLANE', 'PELAS', 'PDAMP', 'PBUSH',
        'PBUSH1D', 'PBUSH2D', 'PELAST', 'PDAMPT', 'PBUSHT', 'PDAMP5',
        'PFAST', 'PGAP', 'PRAC2D', 'PRAC3D', 'PCONEAX', 'PLSOLID', 'PCOMPS',
        'PVISC', 'PBCOMP', 'PBEND', 'PIHEX', 'PBEND', 'PACABS', 'PAABSF',
        'PACBAR'}
    bar_properties = {'PBAR', 'PBARL', 'PBEAM', 'PBEAML', 'PROD', 'PTUBE',
        'PBEAM3'}
    pid_eids = model.get_element_ids_dict_with_pids(property_ids,
        stop_if_no_eids=stop_if_no_area, msg=
        ' which is required by get_area_breakdown')
    pids_to_area = {}
    for pid, eids in pid_eids.items():
        prop = model.properties[pid]
        areas = []
        if prop.type in ['PSHELL', 'PCOMP', 'PSHEAR', 'PCOMPG']:
            for eid in eids:
                elem = model.elements[eid]
                if elem.type in ['CQUADX']:
                    continue
                try:
                    areas.append(elem.Area())
                except AttributeError:
                    print(prop)
                    print(elem)
                    raise
        elif prop.type in bar_properties:
            for eid in eids:
                elem = model.elements[eids[0]]
                area = elem.Area()
                if sum_bar_area:
                    neids = len(eids)
                    areas = [area * neids]
                else:
                    areas = [area]
        elif prop.type in skip_props:
            pass
        elif prop.type in ['PBRSECT', 'PBMSECT']:
            model.log.warning('skipping:\n%s' % prop)
            continue
        else:
            raise NotImplementedError(prop)
        if areas:
            pids_to_area[pid] = sum(areas)
    has_area = len(pids_to_area)
    if not has_area:
        msg = 'No elements with area were found'
        model.log.warning(msg)
        if stop_if_no_area:
            raise RuntimeError(msg)
    return pids_to_area
