-
Notifications
You must be signed in to change notification settings - Fork 33
/
__init__.py
85 lines (56 loc) · 3.98 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
84
85
bl_info = {
"name" : "JRemesh Tools",
"author" : "jayanam",
"description" : "Quad Remesh tools for Blender 2.8 - 4.x",
"blender" : (2, 80, 0),
"version" : (4, 0, 0, 1),
"location" : "View3D",
"warning" : "",
"category" : "Object"
}
import bpy
from bpy.props import *
from . jrt_panel import JRT_PT_Panel
from . jrt_remesh_op import JRT_OT_Remesh
from . jrt_pref import JRemeshPrefs
remesher_items = [ ("Instant Meshes", "Instant Meshes", "", 0),
("Blender Quadriflow", "Blender Quadriflow", "", 1)
]
bpy.types.Scene.remesher = bpy.props.EnumProperty(items=remesher_items,
name="Remesher",
default="Instant Meshes")
# Scene properties Instant Meshes
bpy.types.Scene.deterministic = bpy.props.BoolProperty(name="Deterministic", description="Prefer (slower) deterministic algorithms", default = False)
bpy.types.Scene.dominant = bpy.props.BoolProperty(name="Dominant", description="Generate a tri/quad dominant mesh instead of a pure tri/quad mesh", default = False)
bpy.types.Scene.intrinsic = bpy.props.BoolProperty(name="Intrinsic", description="Intrinsic mode", default = False)
bpy.types.Scene.boundaries = bpy.props.BoolProperty(name="Boundaries", description="Align to boundaries (only applies when the mesh is not closed)", default =False)
bpy.types.Scene.vertex_count = bpy.props.IntProperty(name="Vertex Count", description="Desired vertex count of the output mesh", default=4000, min=10, max=500000)
bpy.types.Scene.crease = bpy.props.IntProperty(name="Crease Degree", description="Dihedral angle threshold for creases", default=0, min=0, max=100)
bpy.types.Scene.smooth = bpy.props.IntProperty(name="Smooth iterations", description="Number of smoothing & ray tracing reprojection steps", default=2, min=0, max=10)
# Scene properties Quadriflow
bpy.types.Scene.qf_use_mesh_sym = bpy.props.BoolProperty(name="Use Mesh Symmetry", description="Generates a symmetrical mesh using the Mesh Symmetry options.", default = False)
bpy.types.Scene.qf_preserve_sharp = bpy.props.BoolProperty(name="Preserve Sharp", description="Tells the algorithm to try to preserve sharp features of the mesh. Enabling this could make the operator slower depending on the complexity of the mesh.", default = True)
bpy.types.Scene.qf_preserve_mesh_boundary = bpy.props.BoolProperty(name="Preserve Mesh Boundary", description="Tells the algorithm to try to preserve the original volume of the mesh. Enabling this could make the operator slower depending on the complexity of the mesh.", default = False)
bpy.types.Scene.qf_preserve_paint_mask = bpy.props.BoolProperty(name="Preserve Paint Mask", description="Reprojects the Paint Mask onto the new mesh.", default = False)
bpy.types.Scene.qf_smooth_normals = bpy.props.BoolProperty(name="Smooth Normals", description="Applies the Smooth Normals operator to the resulting mesh.", default = False)
bpy.types.Scene.qf_face_count = bpy.props.IntProperty(name="Number of Faces", description="Input target number of faces in the new mesh.", default=2000, min=1, max=1000000)
# Common properties
bpy.types.Scene.rm_triangulate = bpy.props.BoolProperty(name="Triangulate", description="Add a triangulate modifier to the mesh before remeshing", default = False)
bpy.types.Scene.rm_fill_holes = bpy.props.BoolProperty(name="Fill holes", description="Try to fill the holes after remeshig (make manifold)", default = False)
addon_keymaps = []
classes = ( JRT_PT_Panel, JRT_OT_Remesh, JRemeshPrefs )
def register():
for c in classes:
bpy.utils.register_class(c)
# add keymap entry
kc = bpy.context.window_manager.keyconfigs.addon
km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
def unregister():
for c in classes:
bpy.utils.unregister_class(c)
# remove keymap entry
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
if __name__ == "__main__":
register()