-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path__init__.py
83 lines (63 loc) · 2.35 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# -*- coding: utf-8 -*-
import os
import sys
import bpy
from bpy_extras.io_utils import ImportHelper
from bpy.props import CollectionProperty
from io_image_as_mesh.image_as_mesh import create_mesh_from_image
bl_info = {
"name": "Image as Mesh Importer",
"description": "Import Image as Mesh.",
"author": "Banbury",
"version": (1, 4, 0),
"blender": (3, 51, 0),
"location": "File > Import",
"wiki_url": "",
"category": "Import-Export"}
class ImageAsMeshOps(bpy.types.Operator, ImportHelper):
"""LDR Importer Operator"""
bl_idname = "import_scene.image_as_mesh"
bl_description = "Import an image as a mesh."
bl_label = "Import Image as Mesh"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_options = {'REGISTER', 'UNDO', 'PRESET'}
# File type filter in file browser
# filename_ext: ".png"
filter_glob: bpy.props.StringProperty(
default="*.png",
options={'HIDDEN'}
)
files: CollectionProperty(type=bpy.types.PropertyGroup)
subdivide: bpy.props.BoolProperty(
name="Subdivide", description="Creates smaller triangles.")
def execute(self, context):
dir = os.path.dirname(self.filepath)
for f in self.files:
path = os.path.join(dir, f.name)
img = bpy.data.images.load(path, check_existing=True)
obj = create_mesh_from_image(img)
if self.subdivide:
sub = obj.modifiers.new(name="Subsurf", type="SUBSURF")
sub.subdivision_type = 'SIMPLE'
sub.levels = 3
sub.render_levels = 3
dec = obj.modifiers.new(name="Decimate", type="DECIMATE")
dec.decimate_type = 'COLLAPSE'
dec.ratio = 0.1
dec.use_symmetry = True
dec.use_collapse_triangulate = True
return {'FINISHED'}
def menu_import(self, context):
"""Import menu listing label"""
self.layout.operator(ImageAsMeshOps.bl_idname, text="Image as Mesh (.png)")
def register():
"""Register Menu Listing"""
bpy.utils.register_class(ImageAsMeshOps)
bpy.types.TOPBAR_MT_file_import.append(menu_import)
def unregister():
"""Unregister Menu Listing"""
bpy.utils.unregister_class(ImageAsMeshOps)
bpy.types.TOPBAR_MT_file_import.remove(menu_import)
if __name__ == "__main__":
register()