pep8 corrections and no need to use C's _OT_ syntax when accessing operator names from py

This commit is contained in:
Campbell Barton 2009-12-17 01:21:55 +00:00
parent 8d996df7ce
commit c3b978828c
4 changed files with 334 additions and 322 deletions

@ -258,7 +258,7 @@ class Mesh(bpy_types.ID):
'''
OTHER_INDEX = 2,3,0,1 # opposite face index
if faces is None:
faces= self.faces
@ -270,13 +270,13 @@ class Mesh(bpy_types.ID):
edge_keys = f.edge_keys
for i, edkey in enumerate(f.edge_keys):
edges.setdefault(edkey, []).append(edge_keys[OTHER_INDEX[i]])
for edkey in seams:
edges[edkey] = []
# Collect edge loops here
edge_loops = []
edge_loops = []
for edkey, ed_adj in edges.items():
if 0 <len(ed_adj) < 3: # 1 or 2
# Seek the first edge
@ -286,22 +286,22 @@ class Mesh(bpy_types.ID):
other_dir = ed_adj[1]
else:
other_dir = None
ed_adj[:] = []
flipped = False
while 1:
# from knowing the last 2, look for th next.
ed_adj = edges[context_loop[-1]]
if len(ed_adj) != 2:
if other_dir and flipped==False: # the original edge had 2 other edges
flipped = True # only flip the list once
context_loop.reverse()
ed_adj[:] = []
context_loop.append(other_dir) # save 1 lookiup
ed_adj = edges[context_loop[-1]]
if len(ed_adj) != 2:
ed_adj[:] = []
@ -309,14 +309,14 @@ class Mesh(bpy_types.ID):
else:
ed_adj[:] = []
break
i = ed_adj.index(context_loop[-2])
context_loop.append( ed_adj[ not i] )
# Dont look at this again
ed_adj[:] = []
return edge_loops

@ -50,8 +50,8 @@ img_format_exts = {
'THEORA':'ogg',
}
movie_formats = ('QUICKTIME_QTKIT',
'QUICKTIME_CARBONTKIT',
movie_formats = ('QUICKTIME_QTKIT',
'QUICKTIME_CARBONTKIT',
'AVIRAW',
'AVIJPEG',
'AVICODEC',
@ -62,30 +62,30 @@ movie_formats = ('QUICKTIME_QTKIT',
def guess_player_path(preset):
if preset == 'BLENDER24':
player_path = 'blender'
if platform.system() == 'Darwin':
test_path = '/Applications/blender 2.49.app/Contents/MacOS/blender'
elif platform.system() == 'Windows':
test_path = '/Program Files/Blender Foundation/Blender/blender.exe'
if os.path.exists(test_path):
player_path = test_path
elif preset == 'DJV':
player_path = 'djv_view'
if platform.system() == 'Darwin':
test_path = '/Applications/djv-0.8.2.app/Contents/Resources/bin/djv_view'
if os.path.exists(test_path):
player_path = test_path
elif preset == 'FRAMECYCLER':
player_path = 'framecycler'
elif preset == 'RV':
player_path = 'rv'
return player_path
@ -100,15 +100,15 @@ class PlayRenderedAnim(bpy.types.Operator):
sce = context.scene
rd = sce.render_data
prefs = context.user_preferences
preset = prefs.filepaths.animation_player_preset
player_path = prefs.filepaths.animation_player
file_path = bpy.utils.expandpath(rd.output_path)
# try and guess a command line if it doesn't exist
if player_path == '':
player_path = guess_player_path(preset)
# doesn't support ### frame notation yet
if rd.file_format in movie_formats:
file = "%s%04d_%04d" % (file_path, sce.start_frame, sce.end_frame)
@ -116,10 +116,10 @@ class PlayRenderedAnim(bpy.types.Operator):
file = "%s%04d" % (file_path, sce.start_frame)
elif preset in ('FRAMECYCLER', 'RV'):
file = "%s#" % file_path
if rd.file_extensions:
file += '.' + img_format_exts[rd.file_format]
cmd = [player_path]
# extra options, fps controls etc.
if preset == 'BLENDER24':
@ -146,4 +146,4 @@ class PlayRenderedAnim(bpy.types.Operator):
return('FINISHED',)
bpy.ops.add(PlayRenderedAnim)
bpy.ops.add(PlayRenderedAnim)

@ -23,229 +23,241 @@
import bpy
def extend(obj, operator, EXTEND_MODE):
me = obj.data
me_verts = me.verts
# script will fail without UVs
if not me.active_uv_texture:
me.add_uv_texture()
# Toggle Edit mode
is_editmode = (obj.mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT')
#t = sys.time()
edge_average_lengths = {}
OTHER_INDEX = 2,3,0,1
FAST_INDICIES = 0,2,1,3 # order is faster
def extend_uvs(face_source, face_target, edge_key):
'''
Takes 2 faces,
Projects its extends its UV coords onto the face next to it.
Both faces must share an edge.
'''
def face_edge_vs(vi):
# assume a quad
return [(vi[0], vi[1]), (vi[1], vi[2]), (vi[2], vi[3]), (vi[3], vi[0])]
vidx_source = face_source.verts
vidx_target = face_target.verts
faceUVsource = me.active_uv_texture.data[face_source.index]
uvs_source = [faceUVsource.uv1,faceUVsource.uv2,faceUVsource.uv3,faceUVsource.uv4]
faceUVtarget = me.active_uv_texture.data[face_target.index]
uvs_target = [faceUVtarget.uv1,faceUVtarget.uv2,faceUVtarget.uv3,faceUVtarget.uv4]
# vertex index is the key, uv is the value
uvs_vhash_source = dict( [ (vindex, uvs_source[i]) for i, vindex in enumerate(vidx_source)] )
uvs_vhash_target = dict( [ (vindex, uvs_target[i]) for i, vindex in enumerate(vidx_target)] )
edge_idxs_source = face_edge_vs(vidx_source)
edge_idxs_target = face_edge_vs(vidx_target)
source_matching_edge = -1
target_matching_edge = -1
edge_key_swap = edge_key[1], edge_key[0]
try: source_matching_edge = edge_idxs_source.index(edge_key)
except: source_matching_edge = edge_idxs_source.index(edge_key_swap)
try: target_matching_edge = edge_idxs_target.index(edge_key)
except: target_matching_edge = edge_idxs_target.index(edge_key_swap)
edgepair_inner_source = edge_idxs_source[source_matching_edge]
edgepair_inner_target = edge_idxs_target[target_matching_edge]
edgepair_outer_source = edge_idxs_source[OTHER_INDEX[source_matching_edge]]
edgepair_outer_target = edge_idxs_target[OTHER_INDEX[target_matching_edge]]
if edge_idxs_source[source_matching_edge] == edge_idxs_target[target_matching_edge]:
iA= 0; iB= 1 # Flipped, most common
else: # The normals of these faces must be different
iA= 1; iB= 0
# Set the target UV's touching source face, no tricky calc needed,
uvs_vhash_target[edgepair_inner_target[0]][:] = uvs_vhash_source[edgepair_inner_source[iA]]
uvs_vhash_target[edgepair_inner_target[1]][:] = uvs_vhash_source[edgepair_inner_source[iB]]
me = obj.data
me_verts = me.verts
# script will fail without UVs
if not me.active_uv_texture:
me.add_uv_texture()
# Set the 2 UV's on the target face that are not touching
# for this we need to do basic expaning on the source faces UV's
if EXTEND_MODE == 'LENGTH':
try: # divide by zero is possible
'''
measure the length of each face from the middle of each edge to the opposite
allong the axis we are copying, use this
'''
i1a= edgepair_outer_target[iB]
i2a= edgepair_inner_target[iA]
if i1a>i2a: i1a, i2a = i2a, i1a
i1b= edgepair_outer_source[iB]
i2b= edgepair_inner_source[iA]
if i1b>i2b: i1b, i2b = i2b, i1b
# print edge_average_lengths
factor = edge_average_lengths[i1a, i2a][0] / edge_average_lengths[i1b, i2b][0]
except:
# Div By Zero?
factor = 1.0
uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] +factor * (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]])
uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] +factor * (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]])
else:
# same as above but with no factor
uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] + (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]])
uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] + (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]])
# Toggle Edit mode
is_editmode = (obj.mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT')
#t = sys.time()
edge_average_lengths = {}
OTHER_INDEX = 2, 3, 0, 1
FAST_INDICIES = 0, 2, 1, 3 # order is faster
def extend_uvs(face_source, face_target, edge_key):
'''
Takes 2 faces,
Projects its extends its UV coords onto the face next to it.
Both faces must share an edge.
'''
def face_edge_vs(vi):
# assume a quad
return [(vi[0], vi[1]), (vi[1], vi[2]), (vi[2], vi[3]), (vi[3], vi[0])]
vidx_source = face_source.verts
vidx_target = face_target.verts
faceUVsource = me.active_uv_texture.data[face_source.index]
uvs_source = [faceUVsource.uv1, faceUVsource.uv2, faceUVsource.uv3, faceUVsource.uv4]
faceUVtarget = me.active_uv_texture.data[face_target.index]
uvs_target = [faceUVtarget.uv1, faceUVtarget.uv2, faceUVtarget.uv3, faceUVtarget.uv4]
# vertex index is the key, uv is the value
uvs_vhash_source = dict([(vindex, uvs_source[i]) for i, vindex in enumerate(vidx_source)])
uvs_vhash_target = dict([(vindex, uvs_target[i]) for i, vindex in enumerate(vidx_target)])
edge_idxs_source = face_edge_vs(vidx_source)
edge_idxs_target = face_edge_vs(vidx_target)
source_matching_edge = -1
target_matching_edge = -1
edge_key_swap = edge_key[1], edge_key[0]
try:
source_matching_edge = edge_idxs_source.index(edge_key)
except:
source_matching_edge = edge_idxs_source.index(edge_key_swap)
try:
target_matching_edge = edge_idxs_target.index(edge_key)
except:
target_matching_edge = edge_idxs_target.index(edge_key_swap)
if me.active_uv_texture == None:
me.add_uv_texture
face_act = me.faces.active
if face_act == -1:
operator.report({'ERROR'}, "No active face.")
return
face_sel= [f for f in me.faces if len(f.verts) == 4 and f.selected]
face_act_local_index = -1
for i, f in enumerate(face_sel):
if f.index == face_act:
face_act_local_index = i
break
if face_act_local_index == -1:
operator.report({'ERROR'}, "Active face not selected.")
return
# Modes
# 0 unsearched
# 1:mapped, use search from this face. - removed!!
# 2:all siblings have been searched. dont search again.
face_modes = [0] * len(face_sel)
face_modes[face_act_local_index] = 1 # extend UV's from this face.
# Edge connectivty
edge_faces = {}
for i, f in enumerate(face_sel):
for edkey in f.edge_keys:
try: edge_faces[edkey].append(i)
except: edge_faces[edkey] = [i]
#SEAM = me.edges.seam
if EXTEND_MODE == 'LENGTH':
edge_loops = me.edge_loops(face_sel, [ed.key for ed in me.edges if ed.seam] )
me_verts = me.verts
for loop in edge_loops:
looplen = [0.0]
for ed in loop:
edge_average_lengths[ed] = looplen
looplen[0] += (me_verts[ed[0]].co - me_verts[ed[1]].co).length
looplen[0] = looplen[0] / len(loop)
# remove seams, so we dont map accross seams.
for ed in me.edges:
if ed.seam:
# remove the edge pair if we can
try: del edge_faces[ed.key]
except: pass
# Done finding seams
# face connectivity - faces around each face
# only store a list of indicies for each face.
face_faces = [[] for i in range(len(face_sel))]
for edge_key, faces in edge_faces.items():
if len(faces) == 2: # Only do edges with 2 face users for now
face_faces[faces[0]].append((faces[1], edge_key))
face_faces[faces[1]].append((faces[0], edge_key))
# Now we know what face is connected to what other face, map them by connectivity
ok = True
while ok:
ok = False
for i in range(len(face_sel)):
if face_modes[i] == 1: # searchable
for f_sibling, edge_key in face_faces[i]:
if face_modes[f_sibling] == 0:
face_modes[f_sibling] = 1 # mapped and search from.
extend_uvs(face_sel[i], face_sel[f_sibling], edge_key)
face_modes[i] = 1 # we can map from this one now.
ok= True # keep searching
face_modes[i] = 2 # dont search again
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT')
else:
me.update()
edgepair_inner_source = edge_idxs_source[source_matching_edge]
edgepair_inner_target = edge_idxs_target[target_matching_edge]
edgepair_outer_source = edge_idxs_source[OTHER_INDEX[source_matching_edge]]
edgepair_outer_target = edge_idxs_target[OTHER_INDEX[target_matching_edge]]
if edge_idxs_source[source_matching_edge] == edge_idxs_target[target_matching_edge]:
iA = 0 # Flipped, most common
iB = 1
else: # The normals of these faces must be different
iA = 1
iB = 0
# Set the target UV's touching source face, no tricky calc needed,
uvs_vhash_target[edgepair_inner_target[0]][:] = uvs_vhash_source[edgepair_inner_source[iA]]
uvs_vhash_target[edgepair_inner_target[1]][:] = uvs_vhash_source[edgepair_inner_source[iB]]
# Set the 2 UV's on the target face that are not touching
# for this we need to do basic expaning on the source faces UV's
if EXTEND_MODE == 'LENGTH':
try: # divide by zero is possible
'''
measure the length of each face from the middle of each edge to the opposite
allong the axis we are copying, use this
'''
i1a = edgepair_outer_target[iB]
i2a = edgepair_inner_target[iA]
if i1a > i2a:
i1a, i2a = i2a, i1a
i1b = edgepair_outer_source[iB]
i2b = edgepair_inner_source[iA]
if i1b > i2b:
i1b, i2b = i2b, i1b
# print edge_average_lengths
factor = edge_average_lengths[i1a, i2a][0] / edge_average_lengths[i1b, i2b][0]
except:
# Div By Zero?
factor = 1.0
uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] + factor * (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]])
uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] + factor * (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]])
else:
# same as above but with no factors
uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] + (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]])
uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] + (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]])
if me.active_uv_texture == None:
me.add_uv_texture
face_act = me.faces.active
if face_act == -1:
operator.report({'ERROR'}, "No active face.")
return
face_sel = [f for f in me.faces if len(f.verts) == 4 and f.selected]
face_act_local_index = -1
for i, f in enumerate(face_sel):
if f.index == face_act:
face_act_local_index = i
break
if face_act_local_index == -1:
operator.report({'ERROR'}, "Active face not selected.")
return
# Modes
# 0 unsearched
# 1:mapped, use search from this face. - removed!!
# 2:all siblings have been searched. dont search again.
face_modes = [0] * len(face_sel)
face_modes[face_act_local_index] = 1 # extend UV's from this face.
# Edge connectivty
edge_faces = {}
for i, f in enumerate(face_sel):
for edkey in f.edge_keys:
try:
edge_faces[edkey].append(i)
except:
edge_faces[edkey] = [i]
#SEAM = me.edges.seam
if EXTEND_MODE == 'LENGTH':
edge_loops = me.edge_loops(face_sel, [ed.key for ed in me.edges if ed.seam])
me_verts = me.verts
for loop in edge_loops:
looplen = [0.0]
for ed in loop:
edge_average_lengths[ed] = looplen
looplen[0] += (me_verts[ed[0]].co - me_verts[ed[1]].co).length
looplen[0] = looplen[0] / len(loop)
# remove seams, so we dont map accross seams.
for ed in me.edges:
if ed.seam:
# remove the edge pair if we can
try:
del edge_faces[ed.key]
except:
pass
# Done finding seams
# face connectivity - faces around each face
# only store a list of indicies for each face.
face_faces = [[] for i in range(len(face_sel))]
for edge_key, faces in edge_faces.items():
if len(faces) == 2: # Only do edges with 2 face users for now
face_faces[faces[0]].append((faces[1], edge_key))
face_faces[faces[1]].append((faces[0], edge_key))
# Now we know what face is connected to what other face, map them by connectivity
ok = True
while ok:
ok = False
for i in range(len(face_sel)):
if face_modes[i] == 1: # searchable
for f_sibling, edge_key in face_faces[i]:
if face_modes[f_sibling] == 0:
face_modes[f_sibling] = 1 # mapped and search from.
extend_uvs(face_sel[i], face_sel[f_sibling], edge_key)
face_modes[i] = 1 # we can map from this one now.
ok = True # keep searching
face_modes[i] = 2 # dont search again
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT')
else:
me.update()
def main(context, operator):
obj = context.active_object
obj = context.active_object
extend(obj, operator, operator.properties.mode)
extend(obj, operator, operator.properties.mode)
class FollowActiveQuads(bpy.types.Operator):
'''Follow UVs from active quads along continuous face loops.'''
bl_idname = "uv.follow_active_quads"
bl_label = "Follow Active Quads"
'''Follow UVs from active quads along continuous face loops.'''
bl_idname = "uv.follow_active_quads"
bl_label = "Follow Active Quads"
bl_register = True
bl_undo = True
bl_register = True
bl_undo = True
mode = bpy.props.EnumProperty(items=(("EVEN", "Client", "Space all UVs evently"), ("LENGTH", "Length", "Average space UVs edge length of each loop.")),
name="Edge Length Mode",
description="Method to space UV edge loops",
default="LENGTH")
mode = bpy.props.EnumProperty(items=(("EVEN", "Client", "Space all UVs evently"), ("LENGTH", "Length", "Average space UVs edge length of each loop.")),
name="Edge Length Mode",
description="Method to space UV edge loops",
default="LENGTH")
def poll(self, context):
obj = context.active_object
return (obj is not None and obj.type == 'MESH')
def poll(self, context):
obj = context.active_object
return (obj is not None and obj.type == 'MESH')
def execute(self, context):
main(context, self)
return ('FINISHED',)
def execute(self, context):
main(context, self)
return ('FINISHED',)
bpy.ops.add(FollowActiveQuads)
@ -257,5 +269,4 @@ menu_func = (lambda self, context: self.layout.operator(FollowActiveQuads.bl_idn
menu_item = dynamic_menu.add(bpy.types.VIEW3D_MT_uv_map, menu_func)
if __name__ == '__main__':
bpy.ops.uv.follow_active_quads()
bpy.ops.uv.follow_active_quads()

@ -30,14 +30,14 @@ KM_HIERARCHY = [
('Markers', 'EMPTY', 'WINDOW', []), # markers (per region)
('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
('Grease Pencil', 'EMPTY', 'WINDOW', []), # grease pencil stuff (per region)
('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation
('Animation_Channels', 'EMPTY', 'WINDOW', []),
('Buttons Generic', 'PROPERTIES', 'WINDOW', []), # align context menu
('TimeLine', 'TIMELINE', 'WINDOW', []),
('Outliner', 'OUTLINER', 'WINDOW', []),
('View3D', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform)
('Pose', 'EMPTY', 'WINDOW', []),
('Object Mode', 'EMPTY', 'WINDOW', []),
@ -60,13 +60,13 @@ KM_HIERARCHY = [
('GraphEdit Keys', 'GRAPH_EDITOR', 'WINDOW', [
('GraphEdit Generic', 'GRAPH_EDITOR', 'WINDOW', [])
]),
('Image', 'IMAGE_EDITOR', 'WINDOW', [
('UVEdit', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image
('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [])
]),
('Node Generic', 'NODE_EDITOR', 'WINDOW', [
('Node', 'NODE_EDITOR', 'WINDOW', [])
]),
@ -84,8 +84,8 @@ KM_HIERARCHY = [
('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', []),
('Logic Generic', 'LOGIC_EDITOR', 'WINDOW', []),
('Console', 'CONSOLE', 'WINDOW', []),
('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
('Gesture Border', 'EMPTY', 'WINDOW', []),
('Standard Modal Map', 'EMPTY', 'WINDOW', []),
@ -143,9 +143,9 @@ class USERPREF_PT_interface(bpy.types.Panel):
userpref = context.user_preferences
view = userpref.view
row = layout.row()
col = row.column()
col.label(text="Display:")
@ -171,7 +171,7 @@ class USERPREF_PT_interface(bpy.types.Panel):
row.separator()
row.separator()
col = row.column()
col.label(text="View Manipulation:")
col.prop(view, "auto_depth")
@ -187,7 +187,7 @@ class USERPREF_PT_interface(bpy.types.Panel):
row.separator()
row.separator()
col = row.column()
#Toolbox doesn't exist yet
#col.label(text="Toolbox:")
@ -379,7 +379,7 @@ class USERPREF_PT_system(bpy.types.Panel):
col.separator()
col.separator()
#column = split.column()
#colsplit = column.split(percentage=0.85)
@ -394,7 +394,7 @@ class USERPREF_PT_system(bpy.types.Panel):
#col.separator()
#col.prop(system, "use_textured_fonts")
column = split.column()
colsplit = column.split(percentage=0.85)
@ -426,15 +426,15 @@ class USERPREF_PT_system(bpy.types.Panel):
split.label()
split.label(text="Colors:")
split.label(text="Direction:")
split = column.split(percentage=0.1)
if lamp0.enabled == True:
split.prop(lamp0, "enabled", text="", icon='OUTLINER_OB_LAMP')
else:
split.prop(lamp0, "enabled", text="", icon='LAMP_DATA')
col = split.column()
col.active = lamp0.enabled
row = col.row()
@ -443,19 +443,19 @@ class USERPREF_PT_system(bpy.types.Panel):
row = col.row()
row.label(text="Specular:")
row.prop(lamp0, "specular_color", text="")
col = split.column()
col.active = lamp0.enabled
col.prop(lamp0, "direction", text="")
split = column.split(percentage=0.1)
if lamp1.enabled == True:
split.prop(lamp1, "enabled", text="", icon='OUTLINER_OB_LAMP')
else:
split.prop(lamp1, "enabled", text="", icon='LAMP_DATA')
col = split.column()
col.active = lamp1.enabled
row = col.row()
@ -464,19 +464,19 @@ class USERPREF_PT_system(bpy.types.Panel):
row = col.row()
row.label(text="Specular:")
row.prop(lamp1, "specular_color", text="")
col = split.column()
col.active = lamp1.enabled
col.prop(lamp1, "direction", text="")
split = column.split(percentage=0.1)
if lamp2.enabled == True:
split.prop(lamp2, "enabled", text="", icon='OUTLINER_OB_LAMP')
else:
split.prop(lamp2, "enabled", text="", icon='LAMP_DATA')
col = split.column()
col.active = lamp2.enabled
row = col.row()
@ -485,16 +485,16 @@ class USERPREF_PT_system(bpy.types.Panel):
row = col.row()
row.label(text="Specular:")
row.prop(lamp2, "specular_color", text="")
col = split.column()
col.active = lamp2.enabled
col.prop(lamp2, "direction", text="")
column.separator()
column.separator()
column.separator()
col = column.column()
col.prop(system, "use_weight_color_range", text="Custom Weight Paint Range")
@ -502,7 +502,7 @@ class USERPREF_PT_system(bpy.types.Panel):
sub.active = system.use_weight_color_range
sub.template_color_ramp(system, "weight_color_range", expand=True)
class USERPREF_PT_theme(bpy.types.Panel):
@ -1253,12 +1253,12 @@ class USERPREF_PT_input(bpy.types.Panel):
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'INPUT')
def draw_entry(self, kc, entry, col, level = 0):
idname, spaceid, regionid, children = entry
km = kc.find_keymap(idname, space_type = spaceid, region_type = regionid)
if km:
self.draw_km(kc, km, children, col, level)
@ -1267,89 +1267,89 @@ class USERPREF_PT_input(bpy.types.Panel):
if level == 0:
level = 0.0001 # Tweak so that a percentage of 0 won't split by half
indent = level*indentpx / bpy.context.region.width
split=layout.split(percentage=indent)
col = split.column()
col = split.column()
return col
def draw_km(self, kc, km, children, layout, level):
km = km.active()
layout.set_context_pointer("keymap", km)
col = self.indented_layout(layout, level)
row = col.row()
row.prop(km, "children_expanded", text="", no_bg=True)
row.label(text=km.name)
row.label()
row.label()
if km.user_defined:
row.operator("WM_OT_keymap_restore", text="Restore")
row.operator("wm.keymap_restore", text="Restore")
else:
row.operator("WM_OT_keymap_edit", text="Edit")
row.operator("wm.keymap_edit", text="Edit")
if km.children_expanded:
if children:
# Put the Parent key map's entries in a 'global' sub-category
# equal in hierarchy to the other children categories
subcol = self.indented_layout(col, level + 1)
subrow = subcol.row()
subrow.prop(km, "items_expanded", text="", no_bg=True)
subrow.prop(km, "items_expanded", text="", no_bg=True)
subrow.label(text="%s (Global)" % km.name)
else:
km.items_expanded = True
# Key Map items
if km.items_expanded:
for kmi in km.items:
self.draw_kmi(kc, km, kmi, col, level + 1)
# "Add New" at end of keymap item list
col = self.indented_layout(col, level+1)
subcol = col.split(percentage=0.2).column()
subcol.active = km.user_defined
subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
col.separator()
# Child key maps
if children:
subcol = col.column()
row = subcol.row()
for entry in children:
self.draw_entry(kc, entry, col, level + 1)
def draw_kmi(self, kc, km, kmi, layout, level):
layout.set_context_pointer("keyitem", kmi)
col = self.indented_layout(layout, level)
col.enabled = km.user_defined
if km.user_defined:
col = col.column(align=True)
box = col.box()
else:
box = col.column()
split = box.split(percentage=0.4)
# header bar
row = split.row()
row.prop(kmi, "expanded", text="", no_bg=True)
row.prop(kmi, "active", text="", no_bg=True)
if km.modal:
row.prop(kmi, "propvalue", text="")
else:
row.label(text=kmi.name)
row = split.row()
row.prop(kmi, "map_type", text="")
if kmi.map_type == 'KEYBOARD':
@ -1364,22 +1364,22 @@ class USERPREF_PT_input(bpy.types.Panel):
row.prop(kmi, "type", text="")
else:
row.label()
row.operator("wm.keyitem_remove", text="", icon='X')
# Expanded, additional event settings
if kmi.expanded:
box = col.box()
if kmi.map_type not in ('TEXTINPUT', 'TIMER'):
split = box.split(percentage=0.4)
sub = split.row()
if km.modal:
sub.prop(kmi, "propvalue", text="")
else:
sub.prop(kmi, "idname", text="")
sub = split.column()
subrow = sub.row(align=True)
@ -1407,13 +1407,13 @@ class USERPREF_PT_input(bpy.types.Panel):
for pname in dir(props):
if not props.is_property_hidden(pname):
flow.prop(props, pname)
# Modal key maps attached to this operator
# Modal key maps attached to this operator
if not km.modal:
kmm = kc.find_keymap_modal(kmi.idname)
if kmm:
self.draw_km(kc, kmm, None, layout, level + 1)
def draw_input_prefs(self, inputs, layout):
# General settings
row = layout.row()
@ -1428,7 +1428,7 @@ class USERPREF_PT_input(bpy.types.Panel):
sub.label(text="Select With:")
sub.row().prop(inputs, "select_mouse", expand=True)
sub = col.column()
sub.label(text="Double Click:")
sub.prop(inputs, "double_click_time", text="Speed")
@ -1464,31 +1464,31 @@ class USERPREF_PT_input(bpy.types.Panel):
sub.prop(inputs, "ndof_rotate_speed", text="Orbit Speed")
row.separator()
def draw_filtered(self, kc, layout):
for km in kc.keymaps:
filtered_items = [kmi for kmi in km.items if kmi.name.lower().find(kc.filter.lower()) != -1]
if len(filtered_items) != 0:
km = km.active()
col = layout.column()
col.set_context_pointer("keymap", km)
row = col.row()
row.label(text=km.name, icon="DOT")
row.label()
row.label()
if km.user_defined:
row.operator("WM_OT_keymap_restore", text="Restore")
row.operator("wm.keymap_restore", text="Restore")
else:
row.operator("WM_OT_keymap_edit", text="Edit")
row.operator("wm.keymap_edit", text="Edit")
for kmi in filtered_items:
self.draw_kmi(kc, km, kmi, col, 1)
def draw_hierarchy(self, defkc, layout):
for entry in KM_HIERARCHY:
self.draw_entry(defkc, entry, layout)
@ -1502,26 +1502,26 @@ class USERPREF_PT_input(bpy.types.Panel):
inputs = userpref.inputs
split = layout.split(percentage=0.25)
# Input settings
self.draw_input_prefs(inputs, split)
# Keymap Settings
col = split.column()
# kc = wm.active_keyconfig
kc = wm.default_keyconfig
sub = col.column()
subsplit = sub.split()
subcol = subsplit.column()
subcol.prop_object(wm, "active_keyconfig", wm, "keyconfigs", text="Configuration:")
subcol = subsplit.column()
subcol.prop(kc, "filter", icon="VIEWZOOM")
col.separator()
if kc.filter != "":
self.draw_filtered(kc, col)
else:
@ -1699,3 +1699,4 @@ bpy.ops.add(WM_OT_keymap_edit)
bpy.ops.add(WM_OT_keymap_restore)
bpy.ops.add(WM_OT_keyitem_add)
bpy.ops.add(WM_OT_keyitem_remove)