Example #1
0
    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()
Example #2
0
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
Example #3
0
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
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
    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()
Example #8
0
 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()
Example #9
0
 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()