mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
Release new optimised patterns with caching for polygon metadata
This commit is contained in:
@@ -129,12 +129,14 @@ class IfcCutter:
|
||||
self.background_elements = []
|
||||
self.cut_polygons = []
|
||||
self.template_variables = {}
|
||||
self.metadata = {}
|
||||
self.data_dir = ''
|
||||
self.ifc_filenames = []
|
||||
self.ifc_files = {}
|
||||
self.resolved_pixels = set()
|
||||
self.should_get_background = False
|
||||
self.text_pickle_file = 'text.pickle'
|
||||
self.metadata_pickle_file = 'metadata.pickle'
|
||||
self.cut_pickle_file = 'cut.pickle'
|
||||
self.should_recut = True
|
||||
self.should_extract = True
|
||||
@@ -173,6 +175,10 @@ class IfcCutter:
|
||||
print('# Get cut polygons')
|
||||
self.get_cut_polygons()
|
||||
print('# Timer logged at {:.2f} seconds'.format(time.time() - start_time))
|
||||
start_time = time.time()
|
||||
print('# Get cut polygon metadata')
|
||||
self.get_cut_polygon_metadata()
|
||||
print('# Timer logged at {:.2f} seconds'.format(time.time() - start_time))
|
||||
|
||||
if not self.should_get_background:
|
||||
return
|
||||
@@ -627,6 +633,25 @@ class IfcCutter:
|
||||
else:
|
||||
self.get_pickled_cut_polygons()
|
||||
|
||||
def get_cut_polygon_metadata(self):
|
||||
if not self.should_extract:
|
||||
if os.path.isfile(self.metadata_pickle_file):
|
||||
with open(self.metadata_pickle_file, 'rb') as metadata_file:
|
||||
self.metadata = pickle.load(metadata_file)
|
||||
|
||||
for polygon in self.cut_polygons:
|
||||
if polygon['global_id'] in self.metadata:
|
||||
polygon['metadata'] = self.metadata[polygon['global_id']]
|
||||
return
|
||||
|
||||
for polygon in self.cut_polygons:
|
||||
metadata = { 'classes': self.get_classes(self.get_ifc_element(polygon['global_id']), 'cut') }
|
||||
self.metadata[polygon['global_id']] = metadata
|
||||
polygon['metadata'] = metadata
|
||||
|
||||
with open(self.metadata_pickle_file, 'wb') as metadata_file:
|
||||
pickle.dump(self.metadata, metadata_file, protocol=pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
def pickle_cut_polygons(self):
|
||||
with open(self.cut_pickle_file, 'wb') as pickle_file:
|
||||
pickle.dump(self.cut_polygons, pickle_file, protocol=pickle.HIGHEST_PROTOCOL)
|
||||
@@ -641,7 +666,7 @@ class IfcCutter:
|
||||
with multiprocessing.Pool(9) as p:
|
||||
results = p.map(do_cut, process_data)
|
||||
for result in results:
|
||||
polygons = [self.get_polygon_metadata(p, 'cut') for p in result if p['points']]
|
||||
polygons = [p for p in result if p['points']]
|
||||
self.cut_polygons.extend(polygons)
|
||||
|
||||
def get_polygon_metadata(self, polygon, position):
|
||||
@@ -805,7 +830,6 @@ class SvgWriter():
|
||||
self.svg.defs.add(External(child))
|
||||
|
||||
def add_patterns(self):
|
||||
return
|
||||
tree = ET.parse('{}templates/patterns.svg'.format(self.ifc_cutter.data_dir))
|
||||
root = tree.getroot()
|
||||
for child in root.getchildren():
|
||||
|
||||
@@ -5,3 +5,17 @@
|
||||
.leader { marker-end: url(#leader-marker); }
|
||||
.stair { marker-start: url(#stair-marker-start); marker-end: url(#stair-marker-end); }
|
||||
.solid {}
|
||||
.material-diagonal1 { fill: url(#diagonal1); }
|
||||
.material-diagonal2 { fill: url(#diagonal2); }
|
||||
.material-diagonal3 { fill: url(#diagonal3); }
|
||||
.material-crosshatch1 { fill: url(#crosshatch1); }
|
||||
.material-crosshatch2 { fill: url(#crosshatch2); }
|
||||
.material-crosshatch3 { fill: url(#crosshatch3); }
|
||||
.material-brick { fill: url(#brick); }
|
||||
.material-earth { fill: url(#earth); }
|
||||
.material-glass { fill: url(#glass); }
|
||||
.material-liquid { fill: url(#liquid); }
|
||||
.material-grass { fill: url(#grass); }
|
||||
.material-honeycomb { fill: url(#honeycomb); }
|
||||
.material-sand { fill: url(#sand); }
|
||||
.material-concrete { fill: url(#concrete); }
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 821 KiB After Width: | Height: | Size: 64 KiB |
Reference in New Issue
Block a user