Source code for pyNastran.bdf.mesh_utils.add_remove_mesh

from typing import Optional
import os
from pathlib import Path
from pyNastran.utils import PathLike, print_bad_path
from pyNastran.bdf.bdf import BDF

[docs] def add_remove_mesh(bdf_filename: PathLike, bdf_add_remove_filenames: list[tuple[str, PathLike]]=None, ) -> BDF: # check that files exist assert os.path.exists(bdf_filename), print_bad_path(bdf_filename) for add_remove, bdf_filenamei in bdf_add_remove_filenames: assert add_remove in {'add', 'remove'}, (add_remove, bdf_filenamei) assert os.path.exists(bdf_filenamei), print_bad_path(bdf_filenamei) model_root = BDF(debug=False) model_root._parse = False model_root.read_bdf(bdf_filename, xref=False) slot_to_type_map = model_root._slot_to_type_map slot_names = list(slot_to_type_map.keys()) string_groups = [ # dict[str] 'params', 'dmig', 'dmi', 'dmiax', 'dti', ] dict_list_groups = [ # dict[spc_id][list_index] 'loads', 'spcs', 'spcoffs', 'mpcs', ] group_names = string_groups + dict_list_groups for group_name in group_names: # temp to check special cards assert group_name in slot_names, (group_name, slot_names) for add_remove, bdf_filenamei in bdf_add_remove_filenames: modeli = BDF() modeli._parse = False modeli.read_bdf(bdf_filenamei, xref=False) log = modeli.log #print(modeli.elements) for slot_name in slot_names: if not hasattr(modeli, slot_name): # panlsts continue root_group = getattr(model_root, slot_name) modeli_group = getattr(modeli, slot_name) if root_group is None and modeli_group is None: continue if isinstance(root_group, (list, dict)): if len(root_group) == 0 and len(modeli_group) == 0: continue log.debug(slot_name) if add_remove == 'add': if slot_name in dict_list_groups: # spcs, mpcs log.warning(f'adding {slot_name}') # for idi, card_lines in modeli_group.items(): # del root_group[idi] elif slot_name in string_groups: for idi, card_lines in modeli_group.items(): log.debug(slot_name, card_lines[0]) root_group[idi] = card_lines else: # CQUAD4, CONM2 for idi, card_lines in modeli_group.items(): log.debug(slot_name, card_lines[0]) root_group[idi] = card_lines else: # remove if slot_name in dict_list_groups: # spcs, mpcs log.warning(f'removing {slot_name}') for idi, card_lines in modeli_group.items(): del root_group[idi] elif slot_name in string_groups: for idi, card_lines in modeli_group.items(): del root_group[idi] else: # CQUAD4, CONM2 for idi, card_lines in modeli_group.items(): if not isinstance(card_lines, list): # CORD2R continue print(card_lines) msgi = str((slot_name, card_lines[0])) log.debug(msgi) del root_group[idi]
#for