146 lines
4.3 KiB
Python
146 lines
4.3 KiB
Python
|
|
import bpy
|
|
from bpy_extras import view3d_utils
|
|
|
|
|
|
class RP_OT_add_material(bpy.types.Operator):
|
|
bl_label = "Add Ui Material"
|
|
bl_idname = "rigpicker.add_mat"
|
|
#bl_options = {'REGISTER', 'UNDO'}
|
|
|
|
def execute(self,context):
|
|
scene = context.scene
|
|
|
|
mat = bpy.data.materials.new('UI')
|
|
mat.use_nodes = True
|
|
|
|
for node in mat.node_tree.nodes:
|
|
if node.type == 'OUTPUT_MATERIAL':
|
|
mat_output = node
|
|
else:
|
|
mat.node_tree.nodes.remove(node)
|
|
|
|
emission = mat.node_tree.nodes.new('ShaderNodeEmission')
|
|
mat.node_tree.links.new(emission.outputs[0],mat_output.inputs[0])
|
|
|
|
|
|
if not context.object.data.materials:
|
|
context.object.data.materials.append(mat)
|
|
else:
|
|
context.object.material_slots[0].material = mat
|
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
class RP_OT_remove_material(bpy.types.Operator):
|
|
bl_label = "Remove Ui Material"
|
|
bl_idname = "rigpicker.remove_mat"
|
|
#bl_options = {'REGISTER', 'UNDO'}
|
|
|
|
def execute(self,context):
|
|
scene = context.scene
|
|
#print(self.shape_type)
|
|
for mat in context.object.data.materials:
|
|
bpy.data.materials.remove(mat)
|
|
context.area.tag_redraw()
|
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
class RP_OT_eyedropper_material(bpy.types.Operator):
|
|
"""Tooltip"""
|
|
bl_idname = "rigpicker.eyedropper_mat"
|
|
bl_label = "Eye Dropper mat"
|
|
#bl_options = {'REGISTER', 'UNDO'}
|
|
|
|
#first_mouse_x = IntProperty()
|
|
#first_value = FloatProperty()
|
|
|
|
|
|
def modal(self, context, event):
|
|
context.area.tag_redraw()
|
|
|
|
context.window.cursor_modal_set("EYEDROPPER")
|
|
|
|
scene = context.scene
|
|
region = context.region
|
|
rv3d = context.region_data
|
|
|
|
if event.type == 'LEFTMOUSE' and event.value == 'RELEASE':
|
|
self.mouse = event.mouse_region_x, event.mouse_region_y
|
|
|
|
dg = context.evaluated_depsgraph_get()
|
|
|
|
view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, self.mouse)
|
|
ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, self.mouse)
|
|
|
|
raycast = scene.ray_cast(dg, ray_origin, view_vector)
|
|
|
|
if raycast[0]==True:
|
|
ob = raycast[4]
|
|
|
|
if ob.data.materials:
|
|
mat = ob.data.materials[0]
|
|
for shape in [o for o in context.selected_objects if o.type in ('MESH','CURVE','FONT')]:
|
|
if not shape.data.materials:
|
|
shape.data.materials.append(mat)
|
|
else:
|
|
shape.material_slots[0].material = mat
|
|
|
|
|
|
#context.space_data.draw_handler_remove(self._handle, 'WINDOW')
|
|
|
|
context.window.cursor_modal_restore()
|
|
|
|
for ob in self.temp_ob:
|
|
bpy.data.objects.remove(ob)
|
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
#return {'FINISHED'}
|
|
|
|
elif event.type in {'RIGHTMOUSE', 'ESC'}:
|
|
#context.object.location.x = self.first_value
|
|
context.window.cursor_modal_restore()
|
|
|
|
for ob in self.temp_ob:
|
|
bpy.data.objects.remove(ob)
|
|
return {'CANCELLED'}
|
|
|
|
return {'RUNNING_MODAL'}
|
|
|
|
|
|
def invoke(self, context, event):
|
|
scene = context.scene
|
|
#self.local_cursor = tuple(context.space_data.cursor.location)
|
|
#self.cursor = tuple(context.scene.cursor.location)
|
|
|
|
curves =[o for o in context.visible_objects if o.type in ('CURVE', 'FONT')]
|
|
|
|
self.temp_ob = []
|
|
|
|
dg = bpy.context.evaluated_depsgraph_get()
|
|
|
|
for c in curves:
|
|
mesh = bpy.data.meshes.new_from_object(c.evaluated_get(dg))
|
|
copy = bpy.data.objects.new(c.name+'_tmp', mesh)
|
|
copy.matrix_world = c.matrix_world
|
|
for mat in c.data.materials:
|
|
copy.data.materials.append(mat)
|
|
scene.collection.objects.link(copy)
|
|
self.temp_ob.append(copy)
|
|
#args = (self,context)
|
|
#self._handle = context.space_data.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL')
|
|
context.window_manager.modal_handler_add(self)
|
|
|
|
return {'RUNNING_MODAL'}
|
|
|
|
|
|
classes = (
|
|
RP_OT_add_material,
|
|
RP_OT_remove_material,
|
|
RP_OT_eyedropper_material,
|
|
)
|
|
|
|
register, unregister = bpy.utils.register_classes_factory(classes) |