def test_paths(self): for d in self.drawings: try: closed = len(d.polygons_closed) == len(d.paths) except: log.error('Failed on %s!', d.filename, exc_info=True) closed = False self.assertTrue(closed) for i in range(len(d.paths)): self.assertTrue(d.polygons_closed[i].is_valid) self.assertTrue(d.polygons_closed[i].area > tol.zero) export_dict = d.export(file_type='dict') export_svg = d.export(file_type='svg') d.simplify() split = d.split() log.info('Split %s into %d bodies, checking identifiers', d.filename, len(split)) for body in split: body.identifier if len(d.root) == 1: d.apply_obb()
def smooth_inside(path, polygon, max_smoothing=.25, max_overlap=.05, chunks=None): """ """ path = np.asanyarray(path) if not trimesh.util.is_shape(path, (-1, 2)): raise ValueError('input path must be (-1,2)!') if isinstance(chunks, int): result = np.vstack([ smooth_inside(path=i, polygon=polygon, max_smoothing=max_smoothing) for i in np.array_split(path, chunks) ]) return result polygon_test = polygon.buffer(max_overlap) if not polygon_test.contains(LineString(path)): raise ValueError('input polygon doesn\'t contain path!') for smooth in np.linspace(0.0, max_smoothing, 10)[1:][::-1]: path_smooth = trimesh.path.simplify.resample_spline(path, smooth=smooth, degree=3) if polygon_test.contains(LineString(path_smooth)): log.info('Smoothed path inside polygon by %f', smooth) return path_smooth log.info('Unable to smooth path beyond original') return path
def simplify_inside(path, polygon, max_distance=.1): path_test = LineString(path) polygon_test = polygon.buffer(1e-3) if not polygon_test.contains(path_test): raise ValueError('input polygon doesn\'t contain path!') for simplify in np.linspace(0.0, max_distance, 10)[1:][::-1]: path_simple = path_test.simplify(simplify) if polygon_test.contains(path_simple): log.info('Simplified path inside polygon by %f', simplify) return np.array(path_simple.coords) log.info('Unable to simply path beyond original') return path
def setUp(self): self.drawings = deque() file_list = os.listdir(TEST_DIR) tic = time_function() for filename in file_list: file_path = os.path.join(TEST_DIR, filename) tic_load = time_function() drawing = trimesh.load(file_path) toc_load = time_function() log.info('loaded %s in %f', filename, toc_load - tic_load) drawing.filename = filename drawing.process() self.drawings.append(drawing) toc = time_function() log.info('Successfully loaded %i drawings from %i files in %f seconds', len(self.drawings), len(file_list), toc - tic) self.drawings = list(self.drawings)
def setUp(self): self.drawings = deque() file_list = os.listdir(TEST_DIR) tic = time_function() for filename in file_list: file_path = os.path.join(TEST_DIR, filename) tic_load = time_function() drawing = trimesh.load(file_path) toc_load = time_function() log.info('loaded %s in %f', filename, toc_load-tic_load) drawing.filename = filename drawing.process() self.drawings.append(drawing) toc = time_function() log.info('Successfully loaded %i drawings from %i files in %f seconds', len(self.drawings), len(file_list), toc-tic) self.drawings = list(self.drawings)
def test_paths(self): for d in self.drawings: self.assertTrue(len(d.paths) == len(d.polygons_closed)) for i in range(len(d.paths)): if not d.polygons_closed[i].is_valid: r = d.polygons_closed[i].buffer(0.0) d.show() self.assertTrue(d.polygons_closed[i].is_valid) self.assertTrue(d.polygons_closed[i].area > tol.zero) d.export('dict') d.export('svg') d.simplify() split = d.split() log.info('Split %s into %d bodies, checking identifiers', d.filename, len(split)) for body in split: try: body.identifier() except: log.error('Fatal error in computing identifier for %s!', d.filename, exc_info=True)
def test_paths(self): for d in self.drawings: try: closed = len(d.polygons_closed) == len(d.paths) except: log.error('Failed on %s!', d.filename, exc_info=True) closed = False self.assertTrue(closed) for i in range(len(d.paths)): self.assertTrue(d.polygons_closed[i].is_valid) self.assertTrue(d.polygons_closed[i].area > tol.zero) export_dict = d.export('dict') export_svg = d.export('svg') d.simplify() split = d.split() log.info('Split %s into %d bodies, checking identifiers', d.filename, len(split)) for body in split: body.identifier()
def test_subset(self): for d in self.drawings[:10]: if len(d.vertices) > 150: continue log.info('Checking medial axis on %s', d.filename) m = d.medial_axis()