MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / __init__

Method __init__

src/exterior-shell-extractor/main.py:102–176  ·  view source on GitHub ↗
(self, fns : list, output : str, st : settings)

Source from the content-addressed store, hash-verified

100class 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)

Callers

nothing calls this directly

Calls 15

extract_geometryMethod · 0.95
remove_narrowMethod · 0.95
create_mappingMethod · 0.95
apply_mappingMethod · 0.95
apply_openingsMethod · 0.95
unionMethod · 0.95
openMethod · 0.80
valuesMethod · 0.80
openFunction · 0.50
appendMethod · 0.45

Tested by

no test coverage detected