forked from bartvdbraak/blender
Added a button to the UI of "Distance from Camera" color/alpha/thickness
modifiers to fill the Range Min/Max entries by the min/max distance between selected mesh objects and the active camera.
This commit is contained in:
parent
9a0b816416
commit
abc2e3efd1
@ -25,6 +25,7 @@ if "bpy" in locals():
|
||||
_modules = (
|
||||
"add_mesh_torus",
|
||||
"animsys_update",
|
||||
"freestyle",
|
||||
"image",
|
||||
"mesh",
|
||||
"nla",
|
||||
|
62
release/scripts/startup/bl_operators/freestyle.py
Normal file
62
release/scripts/startup/bl_operators/freestyle.py
Normal file
@ -0,0 +1,62 @@
|
||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
import bpy
|
||||
|
||||
from bpy.props import (EnumProperty, StringProperty)
|
||||
|
||||
|
||||
class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator):
|
||||
'''Fill the Range Min/Max entries by the min/max distance between selected mesh objects and the active camera.'''
|
||||
bl_idname = "scene.freestyle_fill_range_by_selection"
|
||||
bl_label = "Fill Range by Selection"
|
||||
|
||||
type = EnumProperty(name="Type", description="Type of the modifier to work on.",
|
||||
items=[("COLOR", "Color", "Color modifier type."),
|
||||
("ALPHA", "Alpha", "Alpha modifier type."),
|
||||
("THICKNESS", "Thickness", "Thickness modifier type.")])
|
||||
name = StringProperty(name="Name", description="Name of the modifier to work on.")
|
||||
|
||||
def execute(self, context):
|
||||
rl = context.scene.render.layers.active
|
||||
lineset = rl.freestyle_settings.linesets.active
|
||||
linestyle = lineset.linestyle
|
||||
# Find the modifier to work on
|
||||
if self.type == 'COLOR':
|
||||
m = linestyle.color_modifiers[self.name]
|
||||
elif self.type == 'ALPHA':
|
||||
m = linestyle.alpha_modifiers[self.name]
|
||||
else:
|
||||
m = linestyle.thickness_modifiers[self.name]
|
||||
# Find the active camera
|
||||
camera = context.scene.camera
|
||||
# Find selected mesh objects
|
||||
selection = [ob for ob in context.scene.objects if ob.select and ob.type == 'MESH']
|
||||
if len(selection) > 0:
|
||||
# Compute the min/max distance between selected mesh objects and the camera
|
||||
min_dist = float('inf')
|
||||
max_dist = -min_dist
|
||||
for ob in selection:
|
||||
for vert in ob.data.vertices:
|
||||
dist = (ob.matrix_world * vert.co - camera.location).length
|
||||
min_dist = min(dist, min_dist)
|
||||
max_dist = max(dist, max_dist)
|
||||
# Fill the Range Min/Max entries with the computed distances
|
||||
m.range_min = min_dist
|
||||
m.range_max = max_dist
|
||||
return {'FINISHED'}
|
@ -366,6 +366,9 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
|
||||
|
||||
elif modifier.type == "DISTANCE_FROM_CAMERA":
|
||||
self.draw_modifier_color_ramp_common(box, modifier, True)
|
||||
prop = box.operator("scene.freestyle_fill_range_by_selection")
|
||||
prop.type = 'COLOR'
|
||||
prop.name = modifier.name
|
||||
|
||||
elif modifier.type == "MATERIAL":
|
||||
row = box.row()
|
||||
@ -399,6 +402,9 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
|
||||
|
||||
elif modifier.type == "DISTANCE_FROM_CAMERA":
|
||||
self.draw_modifier_curve_common(box, modifier, True, False)
|
||||
prop = box.operator("scene.freestyle_fill_range_by_selection")
|
||||
prop.type = 'ALPHA'
|
||||
prop.name = modifier.name
|
||||
|
||||
elif modifier.type == "MATERIAL":
|
||||
box.prop(modifier, "material_attr", text="")
|
||||
@ -422,6 +428,9 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
|
||||
|
||||
elif modifier.type == "DISTANCE_FROM_CAMERA":
|
||||
self.draw_modifier_curve_common(box, modifier, True, True)
|
||||
prop = box.operator("scene.freestyle_fill_range_by_selection")
|
||||
prop.type = 'THICKNESS'
|
||||
prop.name = modifier.name
|
||||
|
||||
elif modifier.type == "MATERIAL":
|
||||
box.prop(modifier, "material_attr", text="")
|
||||
|
Loading…
Reference in New Issue
Block a user