コード例 #1
0
    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        texture_filename = "objects/original_texture.png"
        texture = os.path.join(path, texture_filename)

        original_filename = "objects/original.obj"
        original = os.path.join(path, original_filename)

        modified_filename = "objects/modified.obj"
        modified = os.path.join(path, modified_filename)

        image = TextureLoader(texture).load_texture()
        original_face_to_vt, original_edges, original_vt = ObjectLoader(
            original).load_obj()
        modified_face_to_vt, modified_edges, modified_vt = ObjectLoader(
            modified).load_obj()
        SeamEquilizer(modified_edges, modified_vt).equilize()
        self.image_transformer = ImageTransformer(image, original_face_to_vt,
                                                  original_vt,
                                                  modified_face_to_vt,
                                                  modified_vt)

        self.path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        self.transformations = range(0, 12)
        self.face_transformations = range(0, 6)
コード例 #2
0
    def test_patternfy(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        texture_filename = "objects/original_texture.png"
        texture = os.path.join(path, texture_filename)

        original_filename = "objects/original.obj"
        original = os.path.join(path, original_filename)

        modified_filename = "objects/modified.obj"
        modified = os.path.join(path, modified_filename)

        save_filename = "test/temp/output.png"
        save = os.path.join(path, save_filename)

        image = TextureLoader(texture).load_texture()
        original_face_to_vt, original_edges, original_vt = ObjectLoader(
            original).load_obj()
        modified_face_to_vt, modified_edges, modified_vt = ObjectLoader(
            modified).load_obj()
        SeamEquilizer(modified_edges, modified_vt).equilize()
        image_transformer = ImageTransformer(image, original_face_to_vt,
                                             original_vt, modified_face_to_vt,
                                             modified_vt)
        transformed_image = image_transformer.transform()
        transformed_image.save(save)

        expected_filename = "objects/expected_output.png"
        expected = os.path.join(path, expected_filename)

        self.assertTrue(
            self.image_equal(save, expected),
            expected_filename + " and " + save_filename + " are not equal")
コード例 #3
0
    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        filename = "objects/modified.obj"
        file_location = os.path.join(path, filename)
        new_object = ObjectLoader(file_location)
        f_to_vts, edges_to_vts, vts = new_object.load_obj()

        self.equilizer = SeamEquilizer(edges_to_vts, vts)
コード例 #4
0
    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        filename = "objects/original.obj"
        file_location = os.path.join(path, filename)

        self.loader = ObjectLoader(file_location)
コード例 #5
0
class ObjectLoaderTest(unittest.TestCase):

    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        filename = "objects/original.obj"
        file_location = os.path.join(path, filename)

        self.loader = ObjectLoader(file_location)

    def test_load_object(self):
        f_to_vts, edges_to_vts, vts = self.loader.load_obj()

        expected_vts = [[0.189, 0.6133], [0.189, 0.729], [0.0733, 0.729], [0.0733, 0.6133], [0.073, 0.8024], [0.1887, 0.8024], [0.1887, 0.9181], [0.073, 0.9181], [0.254, 0.7993], [0.3697, 0.7993], [0.3697, 0.915], [0.254, 0.915], [0.4426, 0.7869], [0.5583, 0.7869], [0.5583, 0.9026], [0.4426, 0.9026], [0.6388, 0.789], [0.7545, 0.789], [0.7545, 0.9047], [0.6388, 0.9047], [0.8142, 0.801], [0.9299, 0.801], [0.9299, 0.8763], [0.8142, 0.8763]]
        expected_edges_to_vts = {(1, 2): [[1, 2], [22, 21]], (7, 8): [[7, 8], [20, 19]], (6, 7): [[6, 7], [16, 15]], (4, 6): [[10, 11], [13, 16]], (5, 6): [[5, 6], [12, 11]], (4, 1): [[4, 1], [10, 9]], (2, 8): [[18, 19], [21, 24]], (8, 5): [[8, 5], [24, 23]], (2, 3): [[2, 3], [18, 17]], (3, 7): [[14, 15], [17, 20]], (5, 1): [[12, 9], [23, 22]], (3, 4): [[3, 4], [14, 13]]}
        expected_f_to_vts = {0: [1, 2, 3, 4], 1: [5, 6, 7, 8], 2: [9, 10, 11, 12], 3: [13, 14, 15, 16], 4: [17, 18, 19, 20], 5: [21, 22, 23, 24]}

        assert f_to_vts == expected_f_to_vts
        assert edges_to_vts == expected_edges_to_vts
        assert vts == expected_vts

    def test_read_obj_file(self):
        vts, faces = self.loader.read_obj_file()

        expected_vts = [[0.189, 0.6133], [0.189, 0.729], [0.0733, 0.729], [0.0733, 0.6133], [0.073, 0.8024], [0.1887, 0.8024], [0.1887, 0.9181], [0.073, 0.9181], [0.254, 0.7993], [0.3697, 0.7993], [0.3697, 0.915], [0.254, 0.915], [0.4426, 0.7869], [0.5583, 0.7869], [0.5583, 0.9026], [0.4426, 0.9026], [0.6388, 0.789], [0.7545, 0.789], [0.7545, 0.9047], [0.6388, 0.9047], [0.8142, 0.801], [0.9299, 0.801], [0.9299, 0.8763], [0.8142, 0.8763]]
        expected_faces = [[[1, 1, 1], [2, 2, 1], [3, 3, 1], [4, 4, 1]], [[5, 5, 2], [6, 6, 2], [7, 7, 2], [8, 8, 2]], [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]], [[4, 13, 4], [3, 14, 4], [7, 15, 4], [6, 16, 4]], [[3, 17, 5], [2, 18, 5], [8, 19, 5], [7, 20, 5]], [[2, 21, 6], [1, 22, 6], [5, 23, 6], [8, 24, 6]]]

        assert vts == expected_vts
        assert faces == expected_faces

    def test_parse_coordinates(self):
        test_string = "vt 0.1887 0.8024 0.0000"
        parsed_result = self.loader.parse_coordinates(test_string)

        assert parsed_result == [0.1887, 0.8024]

    def test_parse_face(self):
        test_string = "f 1/9/3 4/10/3 6/11/3 5/12/3"
        parsed_result = self.loader.parse_face(test_string)

        assert parsed_result == [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]

    def test_extract_vt_index(self):
        test_face = [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]
        extracted_vt_index = self.loader.extract_vt_index(test_face)

        assert extracted_vt_index == [9, 10, 11, 12]

    def test_map_faces_to_vts(self):
        test_faces = [[[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]],[[1, 1, 3], [4, 2, 3], [6, 3, 3], [5, 4, 3]]]
        f_to_vts = self.loader.map_faces_to_vts(test_faces)
        expected_f_to_vts = {0:[9, 10, 11, 12], 1:[1, 2, 3, 4]}

        assert f_to_vts == expected_f_to_vts

    def test_parse_edges(self):
        test_face = [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]
        edges_to_vts = {}
        edges_to_vts = self.loader.parse_edges(test_face, edges_to_vts)

        expected_edges_to_vts = {(5, 1): [[12, 9]], (6, 5): [[11, 12]], (4, 6): [[10, 11]], (1, 4): [[9, 10]]}
        assert edges_to_vts == expected_edges_to_vts

        test_additional_face = [[5, 90, 3], [1, 120, 3]]
        edges_to_vts = self.loader.parse_edges(test_additional_face, edges_to_vts)

        expected_edges_to_vts = {(5, 1): [[12, 9], [90, 120]], (6, 5): [[11, 12]], (4, 6): [[10, 11]], (1, 4): [[9, 10]]}
        assert edges_to_vts == expected_edges_to_vts

    def test_map_edges_to_vts(self):
        test_faces = [[[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]], [[1, 90, 3], [5, 120, 3]]]
        edges_to_vts = self.loader.map_edges_to_vts(test_faces)
        expected_edges_to_vts = {(5, 1): [[12, 9], [120, 90]], (6, 5): [[11, 12]], (4, 6): [[10, 11]], (1, 4): [[9, 10]]}

        assert edges_to_vts == expected_edges_to_vts
コード例 #6
0
ファイル: test_loaders.py プロジェクト: swipswaps/Patternfy
    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        filename = "objects/original.obj"
        file_location = os.path.join(path, filename)

        self.loader = ObjectLoader(file_location)
コード例 #7
0
ファイル: test_loaders.py プロジェクト: swipswaps/Patternfy
class ObjectLoaderTest(unittest.TestCase):
    def setUp(self):
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        filename = "objects/original.obj"
        file_location = os.path.join(path, filename)

        self.loader = ObjectLoader(file_location)

    def test_load_object(self):
        f_to_vts, edges_to_vts, vts = self.loader.load_obj()

        expected_vts = [[0.189, 0.6133], [0.189, 0.729], [0.0733, 0.729],
                        [0.0733, 0.6133], [0.073, 0.8024], [0.1887, 0.8024],
                        [0.1887, 0.9181], [0.073, 0.9181], [0.254, 0.7993],
                        [0.3697, 0.7993], [0.3697, 0.915], [0.254, 0.915],
                        [0.4426, 0.7869], [0.5583, 0.7869], [0.5583, 0.9026],
                        [0.4426, 0.9026], [0.6388, 0.789], [0.7545, 0.789],
                        [0.7545, 0.9047], [0.6388, 0.9047], [0.8142, 0.801],
                        [0.9299, 0.801], [0.9299, 0.8763], [0.8142, 0.8763]]
        expected_edges_to_vts = {
            (1, 2): [[1, 2], [22, 21]],
            (7, 8): [[7, 8], [20, 19]],
            (6, 7): [[6, 7], [16, 15]],
            (4, 6): [[10, 11], [13, 16]],
            (5, 6): [[5, 6], [12, 11]],
            (4, 1): [[4, 1], [10, 9]],
            (2, 8): [[18, 19], [21, 24]],
            (8, 5): [[8, 5], [24, 23]],
            (2, 3): [[2, 3], [18, 17]],
            (3, 7): [[14, 15], [17, 20]],
            (5, 1): [[12, 9], [23, 22]],
            (3, 4): [[3, 4], [14, 13]]
        }
        expected_f_to_vts = {
            0: [1, 2, 3, 4],
            1: [5, 6, 7, 8],
            2: [9, 10, 11, 12],
            3: [13, 14, 15, 16],
            4: [17, 18, 19, 20],
            5: [21, 22, 23, 24]
        }

        assert f_to_vts == expected_f_to_vts
        assert edges_to_vts == expected_edges_to_vts
        assert vts == expected_vts

    def test_read_obj_file(self):
        vts, faces = self.loader.read_obj_file()

        expected_vts = [[0.189, 0.6133], [0.189, 0.729], [0.0733, 0.729],
                        [0.0733, 0.6133], [0.073, 0.8024], [0.1887, 0.8024],
                        [0.1887, 0.9181], [0.073, 0.9181], [0.254, 0.7993],
                        [0.3697, 0.7993], [0.3697, 0.915], [0.254, 0.915],
                        [0.4426, 0.7869], [0.5583, 0.7869], [0.5583, 0.9026],
                        [0.4426, 0.9026], [0.6388, 0.789], [0.7545, 0.789],
                        [0.7545, 0.9047], [0.6388, 0.9047], [0.8142, 0.801],
                        [0.9299, 0.801], [0.9299, 0.8763], [0.8142, 0.8763]]
        expected_faces = [[[1, 1, 1], [2, 2, 1], [3, 3, 1], [4, 4, 1]],
                          [[5, 5, 2], [6, 6, 2], [7, 7, 2], [8, 8, 2]],
                          [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]],
                          [[4, 13, 4], [3, 14, 4], [7, 15, 4], [6, 16, 4]],
                          [[3, 17, 5], [2, 18, 5], [8, 19, 5], [7, 20, 5]],
                          [[2, 21, 6], [1, 22, 6], [5, 23, 6], [8, 24, 6]]]

        assert vts == expected_vts
        assert faces == expected_faces

    def test_parse_coordinates(self):
        test_string = "vt 0.1887 0.8024 0.0000"
        parsed_result = self.loader.parse_coordinates(test_string)

        assert parsed_result == [0.1887, 0.8024]

    def test_parse_face(self):
        test_string = "f 1/9/3 4/10/3 6/11/3 5/12/3"
        parsed_result = self.loader.parse_face(test_string)

        assert parsed_result == [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]

    def test_extract_vt_index(self):
        test_face = [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]
        extracted_vt_index = self.loader.extract_vt_index(test_face)

        assert extracted_vt_index == [9, 10, 11, 12]

    def test_map_faces_to_vts(self):
        test_faces = [[[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]],
                      [[1, 1, 3], [4, 2, 3], [6, 3, 3], [5, 4, 3]]]
        f_to_vts = self.loader.map_faces_to_vts(test_faces)
        expected_f_to_vts = {0: [9, 10, 11, 12], 1: [1, 2, 3, 4]}

        assert f_to_vts == expected_f_to_vts

    def test_parse_edges(self):
        test_face = [[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]]
        edges_to_vts = {}
        edges_to_vts = self.loader.parse_edges(test_face, edges_to_vts)

        expected_edges_to_vts = {
            (5, 1): [[12, 9]],
            (6, 5): [[11, 12]],
            (4, 6): [[10, 11]],
            (1, 4): [[9, 10]]
        }
        assert edges_to_vts == expected_edges_to_vts

        test_additional_face = [[5, 90, 3], [1, 120, 3]]
        edges_to_vts = self.loader.parse_edges(test_additional_face,
                                               edges_to_vts)

        expected_edges_to_vts = {
            (5, 1): [[12, 9], [90, 120]],
            (6, 5): [[11, 12]],
            (4, 6): [[10, 11]],
            (1, 4): [[9, 10]]
        }
        assert edges_to_vts == expected_edges_to_vts

    def test_map_edges_to_vts(self):
        test_faces = [[[1, 9, 3], [4, 10, 3], [6, 11, 3], [5, 12, 3]],
                      [[1, 90, 3], [5, 120, 3]]]
        edges_to_vts = self.loader.map_edges_to_vts(test_faces)
        expected_edges_to_vts = {
            (5, 1): [[12, 9], [120, 90]],
            (6, 5): [[11, 12]],
            (4, 6): [[10, 11]],
            (1, 4): [[9, 10]]
        }

        assert edges_to_vts == expected_edges_to_vts