(self, fns : list, output : str, st : settings)
| 100 | class context: |
| 101 | |
| 102 | def __init__(self, fns : list, output : str, st : settings): |
| 103 | self.fns = fns |
| 104 | self.is_substituted = False |
| 105 | self.settings = st |
| 106 | self.fs = [] |
| 107 | |
| 108 | if self.settings.detailed_element_substitution: |
| 109 | for fn in fns: |
| 110 | bfn = os.path.basename(fn) |
| 111 | substituted_fn = bfn + ".substituted.ifc" |
| 112 | |
| 113 | if os.path.exists(substituted_fn): |
| 114 | self.is_substituted = True |
| 115 | self.fs.append(ifcopenshell.open(substituted_fn)) |
| 116 | else: |
| 117 | self.fs.append(ifcopenshell.open(fn)) |
| 118 | |
| 119 | if self.settings.voxel_prefiltering: |
| 120 | if self.settings.element_categories: |
| 121 | self.elems = self.prefilter_elements_using_voxelization(exclude=('IfcOpeningElement', 'IfcSpace')) |
| 122 | else: |
| 123 | self.elems = self.prefilter_elements_using_voxelization(include=self.settings.element_categories) |
| 124 | elif self.settings.element_categories: |
| 125 | self.elems = reduce(operator.add, itertools.chain.from_iterable((map(f.by_type, self.settings.element_categories) for f in self.fs))) |
| 126 | elif self.settings.element_guids: |
| 127 | def wrap_try(fn, default = None): |
| 128 | def inner(): |
| 129 | try: |
| 130 | return fn() |
| 131 | except: |
| 132 | return default |
| 133 | return inner |
| 134 | self.elems = sum((list(map(wrap_try(f.by_guid), self.settings.element_guids)) for f in self.fs), []) |
| 135 | else: |
| 136 | self.elems = [inst for f in self.fs for inst in f.by_type('IfcProduct') if not inst.is_a('IfcOpeningElement') or inst.is_a('IfcSpace')] |
| 137 | |
| 138 | if not self.is_substituted and self.settings.detailed_element_substitution: |
| 139 | substituted_files = [] |
| 140 | for fn, f in zip(self.fns, self.fs): |
| 141 | bfn = os.path.basename(fn) |
| 142 | substituted_fn = bfn + ".substituted.ifc" |
| 143 | substituted_files.append((self.substitute_detailed_elements(f, include=self.elems), f)) |
| 144 | substituted_files[-1][0].write(substituted_fn) |
| 145 | self.fs, self.orig_files = zip(*substituted_files) |
| 146 | |
| 147 | self.opening_elems = list(itertools.chain.from_iterable([rel.RelatedOpeningElement for rel in getattr(el, "HasOpenings", ())] for el in self.elems)) |
| 148 | openings = self.extract_geometry(include=self.opening_elems) |
| 149 | data = self.extract_geometry(include=self.elems) |
| 150 | |
| 151 | openings = self.remove_narrow(openings) |
| 152 | data = self.remove_narrow(data) |
| 153 | |
| 154 | all_geom = openings + data |
| 155 | |
| 156 | if self.settings.existing_mapping: |
| 157 | my_mapping = json.load(open('epeck_mapping.json')) |
| 158 | def deser(strs): |
| 159 | return tuple(utils.to_opaque(tuple(map(utils.create_epeck, st.split(' ')))) for st in strs) |
nothing calls this directly
no test coverage detected