pep8 cleanup

This commit is contained in:
2011-01-01 07:20:34 +00:00
parent 2840e7b764
commit 7f3fe8a2df
47 changed files with 288 additions and 303 deletions

View File

@@ -57,7 +57,7 @@ for line in infile.readlines():
infile.close() infile.close()
# Major was changed to float, but minor is still a string # Major was changed to float, but minor is still a string
# Note: removed returning minor, this messes up with install path code in BLI module # Note: removed returning minor, messes up install path code in BLI module
if major: if major:
print "%.2f" % major print "%.2f" % major
else: else:

View File

@@ -22,11 +22,12 @@
This module has utility functions for renaming This module has utility functions for renaming
rna values in fcurves and drivers. rna values in fcurves and drivers.
The main function to use is: update_data_paths(...) The main function to use is: update_data_paths(...)
""" """
IS_TESTING = False IS_TESTING = False
class DataPathBuilder(object): class DataPathBuilder(object):
__slots__ = ("data_path", ) __slots__ = ("data_path", )
""" Dummy class used to parse fcurve and driver data paths. """ Dummy class used to parse fcurve and driver data paths.
@@ -37,7 +38,7 @@ class DataPathBuilder(object):
def __getattr__(self, attr): def __getattr__(self, attr):
str_value = ".%s" % attr str_value = ".%s" % attr
return DataPathBuilder(self.data_path + (str_value, )) return DataPathBuilder(self.data_path + (str_value, ))
def __getitem__(self, key): def __getitem__(self, key):
str_value = '["%s"]' % key str_value = '["%s"]' % key
return DataPathBuilder(self.data_path + (str_value, )) return DataPathBuilder(self.data_path + (str_value, ))
@@ -51,7 +52,7 @@ class DataPathBuilder(object):
if base is not Ellipsis: if base is not Ellipsis:
try: try:
# this only works when running with an old blender # this only works when running with an old blender
# where the old path will resolve # where the old path will resolve
base = eval("base" + item) base = eval("base" + item)
except: except:
base_new = Ellipsis base_new = Ellipsis
@@ -61,7 +62,7 @@ class DataPathBuilder(object):
try: try:
print("base." + item_new) print("base." + item_new)
base_new = eval("base." + item_new) base_new = eval("base." + item_new)
break # found, dont keep looking break # found, dont keep looking
except: except:
pass pass
@@ -77,7 +78,7 @@ import bpy
def id_iter(): def id_iter():
type_iter = type(bpy.data.objects) type_iter = type(bpy.data.objects)
for attr in dir(bpy.data): for attr in dir(bpy.data):
data_iter = getattr(bpy.data, attr, None) data_iter = getattr(bpy.data, attr, None)
if type(data_iter) == type_iter: if type(data_iter) == type_iter:
@@ -115,13 +116,13 @@ def find_path_new(id_data, data_path, rna_update_dict, rna_update_from_map):
# ignore ID props for now # ignore ID props for now
if data_path.startswith("["): if data_path.startswith("["):
return data_path return data_path
# recursive path fixing, likely will be one in most cases. # recursive path fixing, likely will be one in most cases.
data_path_builder = eval("DataPathBuilder(tuple())." + data_path) data_path_builder = eval("DataPathBuilder(tuple())." + data_path)
data_resolve = data_path_builder.resolve(id_data, rna_update_from_map) data_resolve = data_path_builder.resolve(id_data, rna_update_from_map)
path_new = [pair[0] for pair in data_resolve] path_new = [pair[0] for pair in data_resolve]
# print(data_resolve) # print(data_resolve)
data_base = id_data data_base = id_data
@@ -138,20 +139,20 @@ def find_path_new(id_data, data_path, rna_update_dict, rna_update_from_map):
# set this as the base for further properties # set this as the base for further properties
data_base = data data_base = data
data_path_new = "".join(path_new)[1:] # skip the first "." data_path_new = "".join(path_new)[1:] # skip the first "."
return data_path_new return data_path_new
def update_data_paths(rna_update): def update_data_paths(rna_update):
''' rna_update triple [(class_name, from, to), ...] ''' rna_update triple [(class_name, from, to), ...]
''' '''
# make a faster lookup dict # make a faster lookup dict
rna_update_dict = {} rna_update_dict = {}
for ren_class, ren_from, ren_to in rna_update: for ren_class, ren_from, ren_to in rna_update:
rna_update_dict.setdefault(ren_class, {})[ren_from] = ren_to rna_update_dict.setdefault(ren_class, {})[ren_from] = ren_to
rna_update_from_map = {} rna_update_from_map = {}
for ren_class, ren_from, ren_to in rna_update: for ren_class, ren_from, ren_to in rna_update:
rna_update_from_map.setdefault(ren_from, []).append(ren_to) rna_update_from_map.setdefault(ren_from, []).append(ren_to)
@@ -174,7 +175,7 @@ def update_data_paths(rna_update):
for tar in var.targets: for tar in var.targets:
id_data_other = tar.id id_data_other = tar.id
data_path = tar.data_path data_path = tar.data_path
if id_data_other and data_path: if id_data_other and data_path:
data_path_new = find_path_new(id_data_other, data_path, rna_update_dict, rna_update_from_map) data_path_new = find_path_new(id_data_other, data_path, rna_update_dict, rna_update_from_map)
# print(data_path_new) # print(data_path_new)
@@ -182,9 +183,7 @@ def update_data_paths(rna_update):
if not IS_TESTING: if not IS_TESTING:
tar.data_path = data_path_new tar.data_path = data_path_new
print("driver (%s): %s -> %s" % (id_data_other.name, data_path, data_path_new)) print("driver (%s): %s -> %s" % (id_data_other.name, data_path, data_path_new))
for action in anim_data_actions(anim_data): for action in anim_data_actions(anim_data):
for fcu in action.fcurves: for fcu in action.fcurves:
data_path = fcu.data_path data_path = fcu.data_path

View File

@@ -48,7 +48,7 @@ def _main():
pydoc.getpager = lambda: pydoc.plainpager pydoc.getpager = lambda: pydoc.plainpager
pydoc.Helper.getline = lambda self, prompt: None pydoc.Helper.getline = lambda self, prompt: None
pydoc.TextDoc.use_bold = lambda self, text: text pydoc.TextDoc.use_bold = lambda self, text: text
# Possibly temp. addons path # Possibly temp. addons path
from os.path import join, dirname, normpath from os.path import join, dirname, normpath
_sys.path.append(normpath(join(dirname(__file__), "..", "..", "addons", "modules"))) _sys.path.append(normpath(join(dirname(__file__), "..", "..", "addons", "modules")))

View File

@@ -137,13 +137,12 @@ class bpy_ops_submodule_op(object):
@staticmethod @staticmethod
def _scene_update(context): def _scene_update(context):
scene = context.scene scene = context.scene
if scene: # None in backgroud mode if scene: # None in backgroud mode
scene.update() scene.update()
else: else:
import bpy import bpy
for scene in bpy.data.scenes: for scene in bpy.data.scenes:
scene.update() scene.update()
__doc__ = property(_get_doc) __doc__ = property(_get_doc)
@@ -196,7 +195,8 @@ class bpy_ops_submodule_op(object):
as_string = op_as_string(idname) as_string = op_as_string(idname)
op_class = getattr(bpy.types, idname) op_class = getattr(bpy.types, idname)
descr = op_class.bl_rna.description descr = op_class.bl_rna.description
# XXX, workaround for not registering every __doc__ to save time on load. # XXX, workaround for not registering
# every __doc__ to save time on load.
if not descr: if not descr:
descr = op_class.__doc__ descr = op_class.__doc__
if not descr: if not descr:

View File

@@ -204,7 +204,7 @@ def module_names(path, recursive=False):
for filename in sorted(_os.listdir(path)): for filename in sorted(_os.listdir(path)):
if filename == "modules": if filename == "modules":
pass # XXX, hard coded exception. pass # XXX, hard coded exception.
elif filename.endswith(".py") and filename != "__init__.py": elif filename.endswith(".py") and filename != "__init__.py":
fullpath = join(path, filename) fullpath = join(path, filename)
modules.append((filename[0:-3], fullpath)) modules.append((filename[0:-3], fullpath))

View File

@@ -31,6 +31,7 @@ import bpy as _bpy
import os as _os import os as _os
import sys as _sys import sys as _sys
def _test_import(module_name, loaded_modules): def _test_import(module_name, loaded_modules):
import traceback import traceback
import time import time
@@ -203,13 +204,11 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
# deal with addons seperately # deal with addons seperately
addon_reset_all(reload_scripts) addon_reset_all(reload_scripts)
# run the active integration preset # run the active integration preset
filepath = preset_find(_bpy.context.user_preferences.inputs.active_keyconfig, "keyconfig") filepath = preset_find(_bpy.context.user_preferences.inputs.active_keyconfig, "keyconfig")
if filepath: if filepath:
keyconfig_set(filepath) keyconfig_set(filepath)
if reload_scripts: if reload_scripts:
import gc import gc
print("gc.collect() -> %d" % gc.collect()) print("gc.collect() -> %d" % gc.collect())
@@ -368,7 +367,6 @@ def addon_enable(module_name, default_set=True):
import bpy_types as _bpy_types import bpy_types as _bpy_types
import imp import imp
_bpy_types._register_immediate = False _bpy_types._register_immediate = False
def handle_error(): def handle_error():
@@ -376,7 +374,6 @@ def addon_enable(module_name, default_set=True):
traceback.print_exc() traceback.print_exc()
_bpy_types._register_immediate = True _bpy_types._register_immediate = True
# reload if the mtime changes # reload if the mtime changes
mod = sys.modules.get(module_name) mod = sys.modules.get(module_name)
if mod: if mod:
@@ -428,7 +425,7 @@ def addon_enable(module_name, default_set=True):
if not ext: if not ext:
ext = _bpy.context.user_preferences.addons.new() ext = _bpy.context.user_preferences.addons.new()
ext.module = module_name ext.module = module_name
_bpy_types._register_immediate = True _bpy_types._register_immediate = True
mod.__addon_enabled__ = True mod.__addon_enabled__ = True
@@ -471,7 +468,7 @@ def addon_disable(module_name, default_set=True):
addon = addons.get(module_name) addon = addons.get(module_name)
if addon: if addon:
addons.remove(addon) addons.remove(addon)
print("\tbpy.utils.addon_disable", module_name) print("\tbpy.utils.addon_disable", module_name)
@@ -483,10 +480,10 @@ def addon_reset_all(reload_scripts=False):
# RELEASE SCRIPTS: official scripts distributed in Blender releases # RELEASE SCRIPTS: official scripts distributed in Blender releases
paths = script_paths("addons") paths = script_paths("addons")
# CONTRIB SCRIPTS: good for testing but not official scripts yet # CONTRIB SCRIPTS: good for testing but not official scripts yet
paths += script_paths("addons_contrib") paths += script_paths("addons_contrib")
# EXTERN SCRIPTS: external projects scripts # EXTERN SCRIPTS: external projects scripts
paths += script_paths("addons_extern") paths += script_paths("addons_extern")
@@ -513,9 +510,9 @@ def addon_reset_all(reload_scripts=False):
def preset_find(name, preset_path, display_name=False): def preset_find(name, preset_path, display_name=False):
if not name: if not name:
return None return None
for directory in preset_paths(preset_path): for directory in preset_paths(preset_path):
if display_name: if display_name:
filename = "" filename = ""
for fn in _os.listdir(directory): for fn in _os.listdir(directory):
@@ -558,7 +555,7 @@ def keyconfig_set(filepath):
keyconfigs.remove(kc_dupe) keyconfigs.remove(kc_dupe)
else: else:
break break
kc_new.name = name kc_new.name = name
keyconfigs.active = kc_new keyconfigs.active = kc_new
@@ -595,4 +592,3 @@ def user_resource(type, path="", create=False):
target_path = "" target_path = ""
return target_path return target_path

View File

@@ -638,7 +638,7 @@ class OrderedMeta(RNAMeta):
# with doc generation 'self.properties.bl_rna.properties' can fail # with doc generation 'self.properties.bl_rna.properties' can fail
class Operator(StructRNA, metaclass=OrderedMeta): class Operator(StructRNA, metaclass=OrderedMeta):
__slots__ = () __slots__ = ()
def __getattribute__(self, attr): def __getattribute__(self, attr):
properties = StructRNA.path_resolve(self, "properties") properties = StructRNA.path_resolve(self, "properties")
bl_rna = getattr(properties, "bl_rna", None) bl_rna = getattr(properties, "bl_rna", None)
@@ -745,7 +745,7 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
import bpy.utils import bpy.utils
layout = self.layout layout = self.layout
if not searchpaths: if not searchpaths:
layout.label("* Missing Paths *") layout.label("* Missing Paths *")

View File

@@ -60,7 +60,7 @@ def rna_idprop_ui_prop_clear(item, prop):
def rna_idprop_context_value(context, context_member, property_type): def rna_idprop_context_value(context, context_member, property_type):
space = context.space_data space = context.space_data
if space is None or isinstance(space, bpy.types.SpaceProperties): if space is None or isinstance(space, bpy.types.SpaceProperties):
pin_id = space.pin_id pin_id = space.pin_id
else: else:

View File

@@ -25,83 +25,87 @@ import bgl
import sys import sys
def cutPoint(text, length):
"Returns position of the last space found before 'length' chars"
l = length
c = text[l]
while c != ' ':
l -= 1
if l == 0: return length # no space found
c = text[l]
return l
def textWrap(text, length = 70): def cutPoint(text, length):
lines = [] "Returns position of the last space found before 'length' chars"
while len(text) > 70: l = length
cpt = cutPoint(text, length) c = text[l]
line, text = text[:cpt], text[cpt + 1:] while c != ' ':
lines.append(line) l -= 1
lines.append(text) if l == 0:
return lines return length # no space found
c = text[l]
return l
def textWrap(text, length=70):
lines = []
while len(text) > 70:
cpt = cutPoint(text, length)
line, text = text[:cpt], text[cpt + 1:]
lines.append(line)
lines.append(text)
return lines
def write_sysinfo(op): def write_sysinfo(op):
output_filename = "system-info.txt" output_filename = "system-info.txt"
warnings = 0 warnings = 0
notices = 0 notices = 0
if output_filename in bpy.data.texts.keys(): if output_filename in bpy.data.texts.keys():
output = bpy.data.texts[output_filename] output = bpy.data.texts[output_filename]
output.clear() output.clear()
else: else:
output = bpy.data.texts.new(name=output_filename) output = bpy.data.texts.new(name=output_filename)
header = '= Blender {} System Information =\n'.format(bpy.app.version_string) header = '= Blender {} System Information =\n'.format(bpy.app.version_string)
lilies = '{}\n\n'.format(len(header)*'=') lilies = '{}\n\n'.format(len(header) * '=')
firstlilies = '{}\n'.format(len(header)*'=') firstlilies = '{}\n'.format(len(header) * '=')
output.write(firstlilies) output.write(firstlilies)
output.write(header) output.write(header)
output.write(lilies) output.write(lilies)
# build info # build info
output.write('\nBlender:\n') output.write('\nBlender:\n')
output.write(lilies) output.write(lilies)
output.write('version {}, revision {}. {}\n'.format(bpy.app.version_string, bpy.app.build_revision, bpy.app.build_type)) output.write('version {}, revision {}. {}\n'.format(bpy.app.version_string, bpy.app.build_revision, bpy.app.build_type))
output.write('build date: {}, {}\n'.format(bpy.app.build_date, bpy.app.build_time)) output.write('build date: {}, {}\n'.format(bpy.app.build_date, bpy.app.build_time))
output.write('platform: {}\n'.format(bpy.app.build_platform)) output.write('platform: {}\n'.format(bpy.app.build_platform))
output.write('binary path: {}\n'.format(bpy.app.binary_path)) output.write('binary path: {}\n'.format(bpy.app.binary_path))
output.write('build cflags: {}\n'.format(bpy.app.build_cflags)) output.write('build cflags: {}\n'.format(bpy.app.build_cflags))
output.write('build cxxflags: {}\n'.format(bpy.app.build_cxxflags)) output.write('build cxxflags: {}\n'.format(bpy.app.build_cxxflags))
output.write('build linkflags: {}\n'.format(bpy.app.build_linkflags)) output.write('build linkflags: {}\n'.format(bpy.app.build_linkflags))
output.write('build system: {}\n'.format(bpy.app.build_system)) output.write('build system: {}\n'.format(bpy.app.build_system))
# python info # python info
output.write('\nPython:\n') output.write('\nPython:\n')
output.write(lilies) output.write(lilies)
output.write('version: {}\n'.format(sys.version)) output.write('version: {}\n'.format(sys.version))
output.write('paths:\n') output.write('paths:\n')
for p in sys.path: for p in sys.path:
output.write('\t{}\n'.format(p)) output.write('\t{}\n'.format(p))
output.write('\nDirectories:\n') output.write('\nDirectories:\n')
output.write(lilies) output.write(lilies)
output.write('scripts: {}\n'.format(bpy.utils.script_paths())) output.write('scripts: {}\n'.format(bpy.utils.script_paths()))
output.write('user scripts: {}\n'.format(bpy.utils.user_script_path())) output.write('user scripts: {}\n'.format(bpy.utils.user_script_path()))
output.write('datafiles: {}\n'.format(bpy.utils.user_resource('DATAFILES'))) output.write('datafiles: {}\n'.format(bpy.utils.user_resource('DATAFILES')))
output.write('config: {}\n'.format(bpy.utils.user_resource('CONFIG'))) output.write('config: {}\n'.format(bpy.utils.user_resource('CONFIG')))
output.write('scripts : {}\n'.format(bpy.utils.user_resource('SCRIPTS'))) output.write('scripts : {}\n'.format(bpy.utils.user_resource('SCRIPTS')))
output.write('autosave: {}\n'.format(bpy.utils.user_resource('AUTOSAVE'))) output.write('autosave: {}\n'.format(bpy.utils.user_resource('AUTOSAVE')))
output.write('tempdir: {}\n'.format(bpy.app.tempdir)) output.write('tempdir: {}\n'.format(bpy.app.tempdir))
output.write('\nOpenGL\n') output.write('\nOpenGL\n')
output.write(lilies) output.write(lilies)
output.write('renderer:\t{}\n'.format(bgl.glGetString(bgl.GL_RENDERER))) output.write('renderer:\t{}\n'.format(bgl.glGetString(bgl.GL_RENDERER)))
output.write('vendor:\t\t{}\n'.format(bgl.glGetString(bgl.GL_VENDOR))) output.write('vendor:\t\t{}\n'.format(bgl.glGetString(bgl.GL_VENDOR)))
output.write('version:\t{}\n'.format(bgl.glGetString(bgl.GL_VERSION))) output.write('version:\t{}\n'.format(bgl.glGetString(bgl.GL_VERSION)))
output.write('extensions:\n') output.write('extensions:\n')
glext = bgl.glGetString(bgl.GL_EXTENSIONS) glext = bgl.glGetString(bgl.GL_EXTENSIONS)
glext = textWrap(glext, 70) glext = textWrap(glext, 70)
for l in glext: for l in glext:
output.write('\t\t{}\n'.format(l)) output.write('\t\t{}\n'.format(l))
op.report({'INFO'}, "System information generated in 'system-info.txt'") op.report({'INFO'}, "System information generated in 'system-info.txt'")

View File

@@ -699,5 +699,6 @@ class UpdateAnimData(bpy.types.Operator):
if __name__ == "__main__": if __name__ == "__main__":
bpy.ops.anim.update_data_paths() bpy.ops.anim.update_data_paths()
def register(): def register():
pass pass

View File

@@ -82,9 +82,9 @@ def get_console(console_id):
namespace["__builtins__"] = sys.modules["builtins"] namespace["__builtins__"] = sys.modules["builtins"]
namespace["bpy"] = bpy namespace["bpy"] = bpy
namespace["C"] = bpy.context namespace["C"] = bpy.context
namespace.update(__import__("mathutils").__dict__) # from mathutils import * namespace.update(__import__("mathutils").__dict__) # from mathutils import *
namespace.update(__import__("math").__dict__) # from math import * namespace.update(__import__("math").__dict__) # from math import *
console = InteractiveConsole(locals=namespace, filename="<blender_console>") console = InteractiveConsole(locals=namespace, filename="<blender_console>")
@@ -186,7 +186,7 @@ def execute(context):
# restore the stdin # restore the stdin
sys.stdin = stdin_backup sys.stdin = stdin_backup
# execute any hooks # execute any hooks
for func, args in execute.hooks: for func, args in execute.hooks:
func(*args) func(*args)

View File

@@ -34,7 +34,7 @@ class BvhImporter(bpy.types.Operator, ImportHelper):
'''Load a OBJ Motion Capture File''' '''Load a OBJ Motion Capture File'''
bl_idname = "import_anim.bvh" bl_idname = "import_anim.bvh"
bl_label = "Import BVH" bl_label = "Import BVH"
filename_ext = ".bvh" filename_ext = ".bvh"
filter_glob = StringProperty(default="*.bvh", options={'HIDDEN'}) filter_glob = StringProperty(default="*.bvh", options={'HIDDEN'})

View File

@@ -30,19 +30,19 @@ from mathutils import Vector, Euler, Matrix
class bvh_node_class(object): class bvh_node_class(object):
__slots__ = ( __slots__ = (
'name',# bvh joint name 'name', # bvh joint name
'parent',# bvh_node_class type or None for no parent 'parent', # bvh_node_class type or None for no parent
'children',# a list of children of this type. 'children', # a list of children of this type.
'rest_head_world',# worldspace rest location for the head of this node 'rest_head_world', # worldspace rest location for the head of this node
'rest_head_local',# localspace rest location for the head of this node 'rest_head_local', # localspace rest location for the head of this node
'rest_tail_world',# # worldspace rest location for the tail of this node 'rest_tail_world', # worldspace rest location for the tail of this node
'rest_tail_local',# # worldspace rest location for the tail of this node 'rest_tail_local', # worldspace rest location for the tail of this node
'channels',# list of 6 ints, -1 for an unused channel, otherwise an index for the BVH motion data lines, lock triple then rot triple 'channels', # list of 6 ints, -1 for an unused channel, otherwise an index for the BVH motion data lines, lock triple then rot triple
'rot_order',# a triple of indicies as to the order rotation is applied. [0,1,2] is x/y/z - [None, None, None] if no rotation. 'rot_order', # a triple of indicies as to the order rotation is applied. [0,1,2] is x/y/z - [None, None, None] if no rotation.
'anim_data',# a list one tuple's one for each frame. (locx, locy, locz, rotx, roty, rotz) 'anim_data', # a list one tuple's one for each frame. (locx, locy, locz, rotx, roty, rotz)
'has_loc',# Conveinience function, bool, same as (channels[0]!=-1 or channels[1]!=-1 channels[2]!=-1) 'has_loc', # Conveinience function, bool, same as (channels[0]!=-1 or channels[1]!=-1 channels[2]!=-1)
'has_rot',# Conveinience function, bool, same as (channels[3]!=-1 or channels[4]!=-1 channels[5]!=-1) 'has_rot', # Conveinience function, bool, same as (channels[3]!=-1 or channels[4]!=-1 channels[5]!=-1)
'temp')# use this for whatever you want 'temp') # use this for whatever you want
def __init__(self, name, rest_head_world, rest_head_local, parent, channels, rot_order): def __init__(self, name, rest_head_world, rest_head_local, parent, channels, rot_order):
self.name = name self.name = name
@@ -58,7 +58,6 @@ class bvh_node_class(object):
self.has_loc = channels[0] != -1 or channels[1] != -1 or channels[2] != -1 self.has_loc = channels[0] != -1 or channels[1] != -1 or channels[2] != -1
self.has_rot = channels[3] != -1 or channels[4] != -1 or channels[5] != -1 self.has_rot = channels[3] != -1 or channels[4] != -1 or channels[5] != -1
self.children = [] self.children = []
# list of 6 length tuples: (lx,ly,lz, rx,ry,rz) # list of 6 length tuples: (lx,ly,lz, rx,ry,rz)
@@ -105,9 +104,7 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
# Split by whitespace. # Split by whitespace.
file_lines = [ll for ll in [l.split() for l in file_lines] if ll] file_lines = [ll for ll in [l.split() for l in file_lines] if ll]
# Create Hirachy as empties # Create Hirachy as empties
if file_lines[0][0].lower() == 'hierarchy': if file_lines[0][0].lower() == 'hierarchy':
#print 'Importing the BVH Hierarchy for:', file_path #print 'Importing the BVH Hierarchy for:', file_path
pass pass
@@ -119,9 +116,8 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
channelIndex = -1 channelIndex = -1
lineIdx = 0 # An index for the file.
lineIdx = 0 # An index for the file. while lineIdx < len(file_lines) - 1:
while lineIdx < len(file_lines) -1:
#... #...
if file_lines[lineIdx][0].lower() == 'root' or file_lines[lineIdx][0].lower() == 'joint': if file_lines[lineIdx][0].lower() == 'root' or file_lines[lineIdx][0].lower() == 'joint':
@@ -137,9 +133,9 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
#print '%snode: %s, parent: %s' % (len(bvh_nodes_serial) * ' ', name, bvh_nodes_serial[-1]) #print '%snode: %s, parent: %s' % (len(bvh_nodes_serial) * ' ', name, bvh_nodes_serial[-1])
lineIdx += 2 # Incriment to the next line (Offset) lineIdx += 2 # Incriment to the next line (Offset)
rest_head_local = Vector((float(file_lines[lineIdx][1]), float(file_lines[lineIdx][2]), float(file_lines[lineIdx][3]))) * GLOBAL_SCALE rest_head_local = Vector((float(file_lines[lineIdx][1]), float(file_lines[lineIdx][2]), float(file_lines[lineIdx][3]))) * GLOBAL_SCALE
lineIdx += 1 # Incriment to the next line (Channels) lineIdx += 1 # Incriment to the next line (Channels)
# newChannel[Xposition, Yposition, Zposition, Xrotation, Yrotation, Zrotation] # newChannel[Xposition, Yposition, Zposition, Xrotation, Yrotation, Zrotation]
# newChannel references indecies to the motiondata, # newChannel references indecies to the motiondata,
@@ -150,7 +146,7 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
rot_count = 0 rot_count = 0
for channel in file_lines[lineIdx][2:]: for channel in file_lines[lineIdx][2:]:
channel = channel.lower() channel = channel.lower()
channelIndex += 1 # So the index points to the right channel channelIndex += 1 # So the index points to the right channel
if channel == 'xposition': if channel == 'xposition':
my_channel[0] = channelIndex my_channel[0] = channelIndex
elif channel == 'yposition': elif channel == 'yposition':
@@ -173,8 +169,7 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
channels = file_lines[lineIdx][2:] channels = file_lines[lineIdx][2:]
my_parent = bvh_nodes_serial[-1] # account for none my_parent = bvh_nodes_serial[-1] # account for none
# Apply the parents offset accumletivly # Apply the parents offset accumletivly
if my_parent is None: if my_parent is None:
@@ -188,24 +183,23 @@ def read_bvh(context, file_path, ROT_MODE='XYZ', GLOBAL_SCALE=1.0):
bvh_nodes_serial.append(bvh_node) bvh_nodes_serial.append(bvh_node)
# Account for an end node # Account for an end node
if file_lines[lineIdx][0].lower() == 'end' and file_lines[lineIdx][1].lower() == 'site': # There is somtimes a name after 'End Site' but we will ignore it. if file_lines[lineIdx][0].lower() == 'end' and file_lines[lineIdx][1].lower() == 'site': # There is somtimes a name after 'End Site' but we will ignore it.
lineIdx += 2 # Incriment to the next line (Offset) lineIdx += 2 # Incriment to the next line (Offset)
rest_tail = Vector((float(file_lines[lineIdx][1]), float(file_lines[lineIdx][2]), float(file_lines[lineIdx][3]))) * GLOBAL_SCALE rest_tail = Vector((float(file_lines[lineIdx][1]), float(file_lines[lineIdx][2]), float(file_lines[lineIdx][3]))) * GLOBAL_SCALE
bvh_nodes_serial[-1].rest_tail_world = bvh_nodes_serial[-1].rest_head_world + rest_tail bvh_nodes_serial[-1].rest_tail_world = bvh_nodes_serial[-1].rest_head_world + rest_tail
bvh_nodes_serial[-1].rest_tail_local = bvh_nodes_serial[-1].rest_head_local + rest_tail bvh_nodes_serial[-1].rest_tail_local = bvh_nodes_serial[-1].rest_head_local + rest_tail
# Just so we can remove the Parents in a uniform way- End end never has kids # Just so we can remove the Parents in a uniform way- End end never has kids
# so this is a placeholder # so this is a placeholder
bvh_nodes_serial.append(None) bvh_nodes_serial.append(None)
if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0] == '}': # == ['}'] if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0] == '}': # == ['}']
bvh_nodes_serial.pop() # Remove the last item bvh_nodes_serial.pop() # Remove the last item
if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0].lower() == 'motion': if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0].lower() == 'motion':
#print '\nImporting motion data' #print '\nImporting motion data'
lineIdx += 3 # Set the cursor to the first frame lineIdx += 3 # Set the cursor to the first frame
break break
lineIdx += 1 lineIdx += 1
@@ -307,7 +301,7 @@ def bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME=1, IMPORT_LOOP=
# Parent the objects # Parent the objects
for bvh_node in bvh_nodes.values(): for bvh_node in bvh_nodes.values():
bvh_node.temp.makeParent([bvh_node_child.temp for bvh_node_child in bvh_node.children], 1, 0) # ojbs, noninverse, 1 = not fast. bvh_node.temp.makeParent([bvh_node_child.temp for bvh_node_child in bvh_node.children], 1, 0) # ojbs, noninverse, 1 = not fast.
# Offset # Offset
for bvh_node in bvh_nodes.values(): for bvh_node in bvh_nodes.values():
@@ -318,7 +312,7 @@ def bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME=1, IMPORT_LOOP=
for name, bvh_node in bvh_nodes.items(): for name, bvh_node in bvh_nodes.items():
if not bvh_node.children: if not bvh_node.children:
ob_end = add_ob(name + '_end') ob_end = add_ob(name + '_end')
bvh_node.temp.makeParent([ob_end], 1, 0) # ojbs, noninverse, 1 = not fast. bvh_node.temp.makeParent([ob_end], 1, 0) # ojbs, noninverse, 1 = not fast.
ob_end.loc = bvh_node.rest_tail_local ob_end.loc = bvh_node.rest_tail_local
@@ -334,7 +328,7 @@ def bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME=1, IMPORT_LOOP=
bvh_node.temp.rot = rx, ry, rz bvh_node.temp.rot = rx, ry, rz
bvh_node.temp.insertIpoKey(Blender.Object.IpoKeyTypes.LOCROT) # XXX invalid bvh_node.temp.insertIpoKey(Blender.Object.IpoKeyTypes.LOCROT) # XXX invalid
scn.update(1) scn.update(1)
return objects return objects
@@ -396,7 +390,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
if (bone.head - bone.tail).length < 0.001: if (bone.head - bone.tail).length < 0.001:
if bvh_node.parent: if bvh_node.parent:
ofs = bvh_node.parent.rest_head_local - bvh_node.parent.rest_tail_local ofs = bvh_node.parent.rest_head_local - bvh_node.parent.rest_tail_local
if ofs.length: # is our parent zero length also?? unlikely if ofs.length: # is our parent zero length also?? unlikely
bone.tail = bone.tail + ofs bone.tail = bone.tail + ofs
else: else:
bone.tail.y = bone.tail.y + average_bone_length bone.tail.y = bone.tail.y + average_bone_length
@@ -446,7 +440,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
(2, 1, 0): 'ZYX'} (2, 1, 0): 'ZYX'}
for bvh_node in bvh_nodes.values(): for bvh_node in bvh_nodes.values():
bone_name = bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. bone_name = bvh_node.temp # may not be the same name as the bvh_node, could have been shortened.
pose_bone = pose_bones[bone_name] pose_bone = pose_bones[bone_name]
pose_bone.rotation_mode = eul_order_lookup[tuple(bvh_node.rot_order)] pose_bone.rotation_mode = eul_order_lookup[tuple(bvh_node.rot_order)]
@@ -459,8 +453,8 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
context.scene.update() context.scene.update()
bpy.ops.pose.select_all() # set bpy.ops.pose.select_all() # set
bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ??? bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ???
#XXX action = Blender.Armature.NLA.NewAction("Action") #XXX action = Blender.Armature.NLA.NewAction("Action")
@@ -475,7 +469,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
# Replace the bvh_node.temp (currently an editbone) # Replace the bvh_node.temp (currently an editbone)
# With a tuple (pose_bone, armature_bone, bone_rest_matrix, bone_rest_matrix_inv) # With a tuple (pose_bone, armature_bone, bone_rest_matrix, bone_rest_matrix_inv)
for bvh_node in bvh_nodes.values(): for bvh_node in bvh_nodes.values():
bone_name = bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. bone_name = bvh_node.temp # may not be the same name as the bvh_node, could have been shortened.
pose_bone = pose_bones[bone_name] pose_bone = pose_bones[bone_name]
rest_bone = arm_data.bones[bone_name] rest_bone = arm_data.bones[bone_name]
bone_rest_matrix = rest_bone.matrix_local.rotation_part() bone_rest_matrix = rest_bone.matrix_local.rotation_part()
@@ -498,7 +492,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
prev_euler = [Euler() for i in range(len(bvh_nodes))] prev_euler = [Euler() for i in range(len(bvh_nodes))]
# Animate the data, the last used bvh_node will do since they all have the same number of frames # Animate the data, the last used bvh_node will do since they all have the same number of frames
for frame_current in range(len(bvh_node.anim_data)-1): # skip the first frame (rest frame) for frame_current in range(len(bvh_node.anim_data) - 1): # skip the first frame (rest frame)
# print frame_current # print frame_current
# if frame_current==40: # debugging # if frame_current==40: # debugging
@@ -537,7 +531,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
for cu in action.fcurves: for cu in action.fcurves:
if IMPORT_LOOP: if IMPORT_LOOP:
pass # 2.5 doenst have cyclic now? pass # 2.5 doenst have cyclic now?
for bez in cu.keyframe_points: for bez in cu.keyframe_points:
bez.interpolation = 'LINEAR' bez.interpolation = 'LINEAR'
@@ -564,5 +558,5 @@ def load(operator, context, filepath="", rotate_mode='NATIVE', scale=1.0, use_cy
IMPORT_LOOP=use_cyclic) IMPORT_LOOP=use_cyclic)
print('Done in %.4f\n' % (time.time() - t1)) print('Done in %.4f\n' % (time.time() - t1))
return {'FINISHED'} return {'FINISHED'}

View File

@@ -32,14 +32,13 @@ import os
def save(operator, context, filepath="", use_modifiers=True, use_normals=True, use_uv_coords=True, use_colors=True): def save(operator, context, filepath="", use_modifiers=True, use_normals=True, use_uv_coords=True, use_colors=True):
def rvec3d(v): def rvec3d(v):
return round(v[0], 6), round(v[1], 6), round(v[2], 6) return round(v[0], 6), round(v[1], 6), round(v[2], 6)
def rvec2d(v): def rvec2d(v):
return round(v[0], 6), round(v[1], 6) return round(v[0], 6), round(v[1], 6)
scene = context.scene scene = context.scene
obj = context.object obj = context.object
@@ -94,15 +93,14 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u
# incase # incase
color = uvcoord = uvcoord_key = normal = normal_key = None color = uvcoord = uvcoord_key = normal = normal_key = None
mesh_verts = mesh.vertices # save a lookup mesh_verts = mesh.vertices # save a lookup
ply_verts = [] # list of dictionaries ply_verts = [] # list of dictionaries
# vdict = {} # (index, normal, uv) -> new index # vdict = {} # (index, normal, uv) -> new index
vdict = [{} for i in range(len(mesh_verts))] vdict = [{} for i in range(len(mesh_verts))]
ply_faces = [[] for f in range(len(mesh.faces))] ply_faces = [[] for f in range(len(mesh.faces))]
vert_count = 0 vert_count = 0
for i, f in enumerate(mesh.faces): for i, f in enumerate(mesh.faces):
smooth = f.use_smooth smooth = f.use_smooth
if not smooth: if not smooth:
normal = tuple(f.normal) normal = tuple(f.normal)
@@ -110,7 +108,7 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u
if faceUV: if faceUV:
uv = active_uv_layer[i] uv = active_uv_layer[i]
uv = uv.uv1, uv.uv2, uv.uv3, uv.uv4 # XXX - crufty :/ uv = uv.uv1, uv.uv2, uv.uv3, uv.uv4 # XXX - crufty :/
if vertexColors: if vertexColors:
col = active_col_layer[i] col = active_col_layer[i]
col = col.color1[:], col.color2[:], col.color3[:], col.color4[:] col = col.color1[:], col.color2[:], col.color3[:], col.color4[:]
@@ -136,13 +134,12 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u
color = col[j] color = col[j]
color = int(color[0] * 255.0), int(color[1] * 255.0), int(color[2] * 255.0) color = int(color[0] * 255.0), int(color[1] * 255.0), int(color[2] * 255.0)
key = normal_key, uvcoord_key, color key = normal_key, uvcoord_key, color
vdict_local = vdict[vidx] vdict_local = vdict[vidx]
pf_vidx = vdict_local.get(key) # Will be None initially pf_vidx = vdict_local.get(key) # Will be None initially
if pf_vidx is None: # same as vdict_local.has_key(key) if pf_vidx is None: # same as vdict_local.has_key(key)
pf_vidx = vdict_local[key] = vert_count pf_vidx = vdict_local[key] = vert_count
ply_verts.append((vidx, normal, uvcoord, color)) ply_verts.append((vidx, normal, uvcoord, color))
vert_count += 1 vert_count += 1
@@ -176,13 +173,13 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u
file.write('end_header\n') file.write('end_header\n')
for i, v in enumerate(ply_verts): for i, v in enumerate(ply_verts):
file.write('%.6f %.6f %.6f ' % mesh_verts[v[0]].co[:]) # co file.write('%.6f %.6f %.6f ' % mesh_verts[v[0]].co[:]) # co
if use_normals: if use_normals:
file.write('%.6f %.6f %.6f ' % v[1]) # no file.write('%.6f %.6f %.6f ' % v[1]) # no
if use_uv_coords: if use_uv_coords:
file.write('%.6f %.6f ' % v[2]) # uv file.write('%.6f %.6f ' % v[2]) # uv
if use_colors: if use_colors:
file.write('%u %u %u' % v[3]) # col file.write('%u %u %u' % v[3]) # col
file.write('\n') file.write('\n')
for pf in ply_faces: for pf in ply_faces:
@@ -202,5 +199,5 @@ def save(operator, context, filepath="", use_modifiers=True, use_normals=True, u
if is_editmode: if is_editmode:
Blender.Window.EditMode(1, '', 0) Blender.Window.EditMode(1, '', 0)
""" """
return {'FINISHED'} return {'FINISHED'}

View File

@@ -66,9 +66,11 @@ class Export3DS(bpy.types.Operator, ExportHelper):
def menu_func_export(self, context): def menu_func_export(self, context):
self.layout.operator(Export3DS.bl_idname, text="3D Studio (.3ds)") self.layout.operator(Export3DS.bl_idname, text="3D Studio (.3ds)")
def menu_func_import(self, context): def menu_func_import(self, context):
self.layout.operator(Import3DS.bl_idname, text="3D Studio (.3ds)") self.layout.operator(Import3DS.bl_idname, text="3D Studio (.3ds)")
def register(): def register():
bpy.types.INFO_MT_file_import.append(menu_func_import) bpy.types.INFO_MT_file_import.append(menu_func_import)
bpy.types.INFO_MT_file_export.append(menu_func_export) bpy.types.INFO_MT_file_export.append(menu_func_export)
@@ -84,4 +86,3 @@ def unregister():
if __name__ == "__main__": if __name__ == "__main__":
register() register()

View File

@@ -40,19 +40,18 @@ class ImportOBJ(bpy.types.Operator, ImportHelper):
filename_ext = ".obj" filename_ext = ".obj"
filter_glob = StringProperty(default="*.obj;*.mtl", options={'HIDDEN'}) filter_glob = StringProperty(default="*.obj;*.mtl", options={'HIDDEN'})
CREATE_SMOOTH_GROUPS = BoolProperty(name="Smooth Groups", description="Surround smooth groups by sharp edges", default= True) CREATE_SMOOTH_GROUPS = BoolProperty(name="Smooth Groups", description="Surround smooth groups by sharp edges", default=True)
CREATE_FGONS = BoolProperty(name="NGons as FGons", description="Import faces with more then 4 verts as fgons", default= True) CREATE_FGONS = BoolProperty(name="NGons as FGons", description="Import faces with more then 4 verts as fgons", default=True)
CREATE_EDGES = BoolProperty(name="Lines as Edges", description="Import lines and faces with 2 verts as edge", default= True) CREATE_EDGES = BoolProperty(name="Lines as Edges", description="Import lines and faces with 2 verts as edge", default=True)
SPLIT_OBJECTS = BoolProperty(name="Object", description="Import OBJ Objects into Blender Objects", default= True) SPLIT_OBJECTS = BoolProperty(name="Object", description="Import OBJ Objects into Blender Objects", default=True)
SPLIT_GROUPS = BoolProperty(name="Group", description="Import OBJ Groups into Blender Objects", default= True) SPLIT_GROUPS = BoolProperty(name="Group", description="Import OBJ Groups into Blender Objects", default=True)
# old comment: only used for user feedback # old comment: only used for user feedback
# disabled this option because in old code a handler for it disabled SPLIT* params, it's not passed to load_obj # disabled this option because in old code a handler for it disabled SPLIT* params, it's not passed to load_obj
# KEEP_VERT_ORDER = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True) # KEEP_VERT_ORDER = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True)
ROTATE_X90 = BoolProperty(name="-X90", description="Rotate X 90.", default= True) ROTATE_X90 = BoolProperty(name="-X90", description="Rotate X 90.", default=True)
CLAMP_SIZE = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0) CLAMP_SIZE = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0)
POLYGROUPS = BoolProperty(name="Poly Groups", description="Import OBJ groups as vertex groups.", default= True) POLYGROUPS = BoolProperty(name="Poly Groups", description="Import OBJ groups as vertex groups.", default=True)
IMAGE_SEARCH = BoolProperty(name="Image Search", description="Search subdirs for any assosiated images (Warning, may be slow)", default= True) IMAGE_SEARCH = BoolProperty(name="Image Search", description="Search subdirs for any assosiated images (Warning, may be slow)", default=True)
def execute(self, context): def execute(self, context):
# print("Selected: " + context.active_object.name) # print("Selected: " + context.active_object.name)
@@ -74,19 +73,19 @@ class ExportOBJ(bpy.types.Operator, ExportHelper):
# to the class instance from the operator settings before calling. # to the class instance from the operator settings before calling.
# context group # context group
use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default= False) use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False)
use_all_scenes = BoolProperty(name="All Scenes", description="", default= False) use_all_scenes = BoolProperty(name="All Scenes", description="", default=False)
use_animation = BoolProperty(name="Animation", description="", default= False) use_animation = BoolProperty(name="Animation", description="", default=False)
# object group # object group
use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers (preview resolution)", default= True) use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers (preview resolution)", default=True)
use_rotate_x90 = BoolProperty(name="Rotate X90", description="", default= True) use_rotate_x90 = BoolProperty(name="Rotate X90", description="", default=True)
# extra data group # extra data group
use_edges = BoolProperty(name="Edges", description="", default=True) use_edges = BoolProperty(name="Edges", description="", default=True)
use_normals = BoolProperty(name="Normals", description="", default=False) use_normals = BoolProperty(name="Normals", description="", default=False)
use_hq_normals = BoolProperty(name="High Quality Normals", description="", default=True) use_hq_normals = BoolProperty(name="High Quality Normals", description="", default=True)
use_uvs = BoolProperty(name="UVs", description="", default= True) use_uvs = BoolProperty(name="UVs", description="", default=True)
use_materials = BoolProperty(name="Materials", description="", default=True) use_materials = BoolProperty(name="Materials", description="", default=True)
copy_images = BoolProperty(name="Copy Images", description="", default=False) copy_images = BoolProperty(name="Copy Images", description="", default=False)
use_triangles = BoolProperty(name="Triangulate", description="", default=False) use_triangles = BoolProperty(name="Triangulate", description="", default=False)
@@ -94,11 +93,10 @@ class ExportOBJ(bpy.types.Operator, ExportHelper):
use_nurbs = BoolProperty(name="Nurbs", description="", default=False) use_nurbs = BoolProperty(name="Nurbs", description="", default=False)
# grouping group # grouping group
use_blen_objects = BoolProperty(name="Objects as OBJ Objects", description="", default= True) use_blen_objects = BoolProperty(name="Objects as OBJ Objects", description="", default=True)
group_by_object = BoolProperty(name="Objects as OBJ Groups ", description="", default= False) group_by_object = BoolProperty(name="Objects as OBJ Groups ", description="", default=False)
group_by_material = BoolProperty(name="Material Groups", description="", default= False) group_by_material = BoolProperty(name="Material Groups", description="", default=False)
keep_vertex_order = BoolProperty(name="Keep Vertex Order", description="", default= False) keep_vertex_order = BoolProperty(name="Keep Vertex Order", description="", default=False)
def execute(self, context): def execute(self, context):
from . import export_obj from . import export_obj
@@ -117,6 +115,7 @@ def register():
bpy.types.INFO_MT_file_import.append(menu_func_import) bpy.types.INFO_MT_file_import.append(menu_func_import)
bpy.types.INFO_MT_file_export.append(menu_func_export) bpy.types.INFO_MT_file_export.append(menu_func_export)
def unregister(): def unregister():
bpy.types.INFO_MT_file_import.remove(menu_func_import) bpy.types.INFO_MT_file_import.remove(menu_func_import)
bpy.types.INFO_MT_file_export.remove(menu_func_export) bpy.types.INFO_MT_file_export.remove(menu_func_export)

View File

@@ -768,7 +768,7 @@ def _write(context, filepath,
else: else:
objects = scene.objects objects = scene.objects
full_path= ''.join(context_name) full_path = ''.join(context_name)
# erm... bit of a problem here, this can overwrite files when exporting frames. not too bad. # erm... bit of a problem here, this can overwrite files when exporting frames. not too bad.
# EXPORT THE FILE. # EXPORT THE FILE.
@@ -789,7 +789,6 @@ def _write(context, filepath,
EXPORT_POLYGROUPS, EXPORT_POLYGROUPS,
EXPORT_CURVE_AS_NURBS) EXPORT_CURVE_AS_NURBS)
scene.frame_set(orig_frame, 0.0) scene.frame_set(orig_frame, 0.0)
# Restore old active scene. # Restore old active scene.
@@ -825,7 +824,7 @@ def save(operator, context, filepath="",
use_animation=False, use_animation=False,
): ):
_write(context, filepath, _write(context, filepath,
EXPORT_TRI=use_triangles, EXPORT_TRI=use_triangles,
EXPORT_EDGES=use_edges, EXPORT_EDGES=use_edges,
EXPORT_NORMALS=use_normals, EXPORT_NORMALS=use_normals,

View File

@@ -58,11 +58,12 @@ class ImportMDD(bpy.types.Operator, ImportHelper):
from . import import_mdd from . import import_mdd
return import_mdd.load(self, context, **self.as_keywords(ignore=("filter_glob",))) return import_mdd.load(self, context, **self.as_keywords(ignore=("filter_glob",)))
class ExportMDD(bpy.types.Operator, ExportHelper): class ExportMDD(bpy.types.Operator, ExportHelper):
'''Animated mesh to MDD vertex keyframe file''' '''Animated mesh to MDD vertex keyframe file'''
bl_idname = "export_shape.mdd" bl_idname = "export_shape.mdd"
bl_label = "Export MDD" bl_label = "Export MDD"
filename_ext = ".mdd" filename_ext = ".mdd"
filter_glob = StringProperty(default="*.mdd", options={'HIDDEN'}) filter_glob = StringProperty(default="*.mdd", options={'HIDDEN'})

View File

@@ -39,7 +39,7 @@ def zero_file(filepath):
If a file fails, this replaces it with 1 char, better not remove it? If a file fails, this replaces it with 1 char, better not remove it?
''' '''
file = open(filepath, 'w') file = open(filepath, 'w')
file.write('\n') # apparently macosx needs some data in a blank file? file.write('\n') # apparently macosx needs some data in a blank file?
file.close() file.close()
@@ -84,13 +84,13 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
numframes = frame_end - frame_start + 1 numframes = frame_end - frame_start + 1
fps = float(fps) fps = float(fps)
f = open(filepath, 'wb') #no Errors yet:Safe to create file f = open(filepath, 'wb') # no Errors yet:Safe to create file
# Write the header # Write the header
f.write(pack(">2i", numframes, numverts)) f.write(pack(">2i", numframes, numverts))
# Write the frame times (should we use the time IPO??) # Write the frame times (should we use the time IPO??)
f.write(pack(">%df" % (numframes), *[frame / fps for frame in range(numframes)])) # seconds f.write(pack(">%df" % (numframes), *[frame / fps for frame in range(numframes)])) # seconds
#rest frame needed to keep frames in sync #rest frame needed to keep frames in sync
""" """
@@ -102,7 +102,7 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
me.transform(mat_flip * obj.matrix_world) me.transform(mat_flip * obj.matrix_world)
f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co])) f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co]))
for frame in range(frame_start, frame_end + 1):#in order to start at desired frame for frame in range(frame_start, frame_end + 1): # in order to start at desired frame
""" """
Blender.Set('curframe', frame) Blender.Set('curframe', frame)
me_tmp.getFromObject(obj.name) me_tmp.getFromObject(obj.name)
@@ -127,5 +127,5 @@ def save(operator, context, filepath="", frame_start=1, frame_end=300, fps=25):
Blender.Set('curframe', orig_frame) Blender.Set('curframe', orig_frame)
""" """
scene.frame_set(orig_frame) scene.frame_set(orig_frame)
return {'FINISHED'} return {'FINISHED'}

View File

@@ -36,10 +36,10 @@ from struct import unpack
def load(operator, context, filepath, frame_start=0, frame_step=1): def load(operator, context, filepath, frame_start=0, frame_step=1):
scene = context.scene scene = context.scene
obj = context.object obj = context.object
print('\n\nimporting mdd %r' % filepath) print('\n\nimporting mdd %r' % filepath)
if bpy.ops.object.mode_set.poll(): if bpy.ops.object.mode_set.poll():
@@ -68,37 +68,34 @@ def load(operator, context, filepath, frame_start=0, frame_step=1):
new_shapekey.name = ("frame_%.4d" % fr) new_shapekey.name = ("frame_%.4d" % fr)
new_shapekey_name = new_shapekey.name new_shapekey_name = new_shapekey.name
obj.active_shape_key_index = len(obj.data.shape_keys.keys)-1 obj.active_shape_key_index = len(obj.data.shape_keys.keys) - 1
index = len(obj.data.shape_keys.keys)-1 index = len(obj.data.shape_keys.keys) - 1
obj.show_only_shape_key = True obj.show_only_shape_key = True
verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys)-1].data verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys) - 1].data
for v in verts: # 12 is the size of 3 floats
for v in verts: # 12 is the size of 3 floats
v.co[:] = unpack('>3f', file.read(12)) v.co[:] = unpack('>3f', file.read(12))
#me.update() #me.update()
obj.show_only_shape_key = False obj.show_only_shape_key = False
# insert keyframes # insert keyframes
shape_keys = obj.data.shape_keys shape_keys = obj.data.shape_keys
scene.frame_current -= 1 scene.frame_current -= 1
obj.data.shape_keys.keys[index].value = 0.0 obj.data.shape_keys.keys[index].value = 0.0
shape_keys.keys[len(obj.data.shape_keys.keys)-1].keyframe_insert("value") shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value")
scene.frame_current += 1 scene.frame_current += 1
obj.data.shape_keys.keys[index].value = 1.0 obj.data.shape_keys.keys[index].value = 1.0
shape_keys.keys[len(obj.data.shape_keys.keys)-1].keyframe_insert("value") shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value")
scene.frame_current += 1 scene.frame_current += 1
obj.data.shape_keys.keys[index].value = 0.0 obj.data.shape_keys.keys[index].value = 0.0
shape_keys.keys[len(obj.data.shape_keys.keys)-1].keyframe_insert("value") shape_keys.keys[len(obj.data.shape_keys.keys) - 1].keyframe_insert("value")
obj.data.update() obj.data.update()
for i in range(frames): for i in range(frames):
UpdateMesh(obj, i) UpdateMesh(obj, i)

View File

@@ -552,7 +552,6 @@ class IsolateTypeRender(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
class ClearAllRestrictRender(bpy.types.Operator): class ClearAllRestrictRender(bpy.types.Operator):
'''Reveal all render objects by setting the hide render flag''' '''Reveal all render objects by setting the hide render flag'''
bl_idname = "object.hide_render_clear_all" bl_idname = "object.hide_render_clear_all"

View File

@@ -123,21 +123,21 @@ def align_objects(align_x, align_y, align_z, align_mode, relative_to):
# Align Mode # Align Mode
if relative_to == 'OPT_4': # Active relative if relative_to == 'OPT_4': # Active relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_x = obj_loc[0] - negative_x - size_active_x obj_x = obj_loc[0] - negative_x - size_active_x
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_x = obj_loc[0] - positive_x + size_active_x obj_x = obj_loc[0] - positive_x + size_active_x
else: # Everything else relative else: # Everything else relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_x = obj_loc[0] - negative_x obj_x = obj_loc[0] - negative_x
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_x = obj_loc[0] - positive_x obj_x = obj_loc[0] - positive_x
if align_mode == 'OPT_2': # All relative if align_mode == 'OPT_2': # All relative
obj_x = obj_loc[0] - center_x obj_x = obj_loc[0] - center_x
# Relative To # Relative To
@@ -156,26 +156,24 @@ def align_objects(align_x, align_y, align_z, align_mode, relative_to):
obj.location[0] = loc_x obj.location[0] = loc_x
if align_y: if align_y:
# Align Mode # Align Mode
if relative_to == 'OPT_4': # Active relative if relative_to == 'OPT_4': # Active relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_y = obj_loc[1] - negative_y - size_active_y obj_y = obj_loc[1] - negative_y - size_active_y
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_y = obj_loc[1] - positive_y + size_active_y obj_y = obj_loc[1] - positive_y + size_active_y
else: # Everything else relative else: # Everything else relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_y = obj_loc[1] - negative_y obj_y = obj_loc[1] - negative_y
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_y = obj_loc[1] - positive_y obj_y = obj_loc[1] - positive_y
if align_mode == 'OPT_2': # All relative if align_mode == 'OPT_2': # All relative
obj_y = obj_loc[1] - center_y obj_y = obj_loc[1] - center_y
# Relative To # Relative To
@@ -194,26 +192,23 @@ def align_objects(align_x, align_y, align_z, align_mode, relative_to):
obj.location[1] = loc_y obj.location[1] = loc_y
if align_z: if align_z:
# Align Mode # Align Mode
if relative_to == 'OPT_4': # Active relative
if relative_to == 'OPT_4': # Active relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_z = obj_loc[2] - negative_z - size_active_z obj_z = obj_loc[2] - negative_z - size_active_z
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_z = obj_loc[2] - positive_z + size_active_z obj_z = obj_loc[2] - positive_z + size_active_z
else: # Everything else relative else: # Everything else relative
if align_mode == 'OPT_1': if align_mode == 'OPT_1':
obj_z = obj_loc[2] - negative_z obj_z = obj_loc[2] - negative_z
elif align_mode == 'OPT_3': elif align_mode == 'OPT_3':
obj_z = obj_loc[2] - positive_z obj_z = obj_loc[2] - positive_z
if align_mode == 'OPT_2': # All relative if align_mode == 'OPT_2': # All relative
obj_z = obj_loc[2] - center_z obj_z = obj_loc[2] - center_z
# Relative To # Relative To

View File

@@ -86,6 +86,7 @@ def randomize_selected(seed, delta, loc, rot, scale, scale_even):
from bpy.props import * from bpy.props import *
class RandomizeLocRotSize(bpy.types.Operator): class RandomizeLocRotSize(bpy.types.Operator):
'''Randomize objects loc/rot/scale''' '''Randomize objects loc/rot/scale'''
bl_idname = "object.randomize_transform" bl_idname = "object.randomize_transform"

View File

@@ -29,7 +29,7 @@ class AddPresetBase():
- preset_subdir ''' - preset_subdir '''
# bl_idname = "script.preset_base_add" # bl_idname = "script.preset_base_add"
# bl_label = "Add a Python Preset" # bl_label = "Add a Python Preset"
bl_options = {'REGISTER'} # only because invoke_props_popup requires. bl_options = {'REGISTER'} # only because invoke_props_popup requires.
name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="") name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="")
remove_active = bpy.props.BoolProperty(default=False, options={'HIDDEN'}) remove_active = bpy.props.BoolProperty(default=False, options={'HIDDEN'})
@@ -42,13 +42,13 @@ class AddPresetBase():
def execute(self, context): def execute(self, context):
import os import os
if hasattr(self, "pre_cb"): if hasattr(self, "pre_cb"):
self.pre_cb(context) self.pre_cb(context)
preset_menu_class = getattr(bpy.types, self.preset_menu) preset_menu_class = getattr(bpy.types, self.preset_menu)
if not self.remove_active: if not self.remove_active:
if not self.name: if not self.name:
return {'FINISHED'} return {'FINISHED'}
@@ -62,7 +62,7 @@ class AddPresetBase():
return {'CANCELLED'} return {'CANCELLED'}
filepath = os.path.join(target_path, filename) + ".py" filepath = os.path.join(target_path, filename) + ".py"
if hasattr(self, "add"): if hasattr(self, "add"):
self.add(context, filepath) self.add(context, filepath)
else: else:
@@ -352,6 +352,7 @@ class WM_MT_operator_presets(bpy.types.Menu):
preset_operator = "script.execute_preset" preset_operator = "script.execute_preset"
def register(): def register():
pass pass

View File

@@ -21,11 +21,12 @@
import bpy import bpy
from bpy.props import * from bpy.props import *
def write_svg(fw, mesh, image_width, image_height, face_iter): def write_svg(fw, mesh, image_width, image_height, face_iter):
# for making an XML compatible string # for making an XML compatible string
from xml.sax.saxutils import escape from xml.sax.saxutils import escape
from os.path import basename from os.path import basename
fw('<?xml version="1.0" standalone="no"?>\n') fw('<?xml version="1.0" standalone="no"?>\n')
fw('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" \n') fw('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" \n')
fw(' "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n') fw(' "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')
@@ -126,7 +127,6 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
for f in mesh_source.faces: for f in mesh_source.faces:
tot_verts += len(f.vertices) tot_verts += len(f.vertices)
faces_source = mesh_source.faces faces_source = mesh_source.faces
# get unique UV's incase there are many overlapping which slow down filling. # get unique UV's incase there are many overlapping which slow down filling.
@@ -145,7 +145,6 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
mesh_new_materials = [] mesh_new_materials = []
mesh_new_face_vertices = [] mesh_new_face_vertices = []
current_vert = 0 current_vert = 0
for face_data in face_hash_3: for face_data in face_hash_3:
@@ -167,7 +166,7 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
mesh.faces.foreach_set("material_index", mesh_new_materials) mesh.faces.foreach_set("material_index", mesh_new_materials)
mesh.update(calc_edges=True) mesh.update(calc_edges=True)
obj_solid = bpy.data.objects.new("uv_temp_solid", mesh) obj_solid = bpy.data.objects.new("uv_temp_solid", mesh)
obj_wire = bpy.data.objects.new("uv_temp_wire", mesh) obj_wire = bpy.data.objects.new("uv_temp_wire", mesh)
base_solid = scene.objects.link(obj_solid) base_solid = scene.objects.link(obj_solid)
@@ -177,11 +176,10 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
# place behind the wire # place behind the wire
obj_solid.location = 0, 0, -1 obj_solid.location = 0, 0, -1
obj_wire.material_slots[0].link = 'OBJECT' obj_wire.material_slots[0].link = 'OBJECT'
obj_wire.material_slots[0].material = material_wire obj_wire.material_slots[0].material = material_wire
# setup the camera # setup the camera
cam = bpy.data.cameras.new("uv_temp") cam = bpy.data.cameras.new("uv_temp")
cam.type = 'ORTHO' cam.type = 'ORTHO'
@@ -204,7 +202,6 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
material_wire.use_shadeless = True material_wire.use_shadeless = True
material_wire.diffuse_color = 0, 0, 0 material_wire.diffuse_color = 0, 0, 0
# scene render settings # scene render settings
scene.render.use_raytrace = False scene.render.use_raytrace = False
scene.render.alpha_mode = 'STRAIGHT' scene.render.alpha_mode = 'STRAIGHT'
@@ -217,11 +214,11 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
if image_width > image_height: if image_width > image_height:
scene.render.pixel_aspect_y = image_width / image_height scene.render.pixel_aspect_y = image_width / image_height
elif image_width < image_height: elif image_width < image_height:
scene.render.pixel_aspect_x = image_height /image_width scene.render.pixel_aspect_x = image_height / image_width
scene.frame_start = 1 scene.frame_start = 1
scene.frame_end = 1 scene.frame_end = 1
scene.render.file_format = 'PNG' scene.render.file_format = 'PNG'
scene.render.filepath = filepath scene.render.filepath = filepath
@@ -236,13 +233,12 @@ def write_png(fw, mesh_source, image_width, image_height, face_iter):
bpy.data.cameras.remove(cam) bpy.data.cameras.remove(cam)
bpy.data.meshes.remove(mesh) bpy.data.meshes.remove(mesh)
bpy.data.materials.remove(material_wire) bpy.data.materials.remove(material_wire)
for mat_solid in material_solids: for mat_solid in material_solids:
bpy.data.materials.remove(mat_solid) bpy.data.materials.remove(mat_solid)
class ExportUVLayout(bpy.types.Operator): class ExportUVLayout(bpy.types.Operator):
"""Export UV layout to file""" """Export UV layout to file"""
@@ -328,7 +324,6 @@ class ExportUVLayout(bpy.types.Operator):
if is_editmode: if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT', toggle=False) bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
mesh = obj.data mesh = obj.data
mode = self.mode mode = self.mode

View File

@@ -85,10 +85,10 @@ class BRUSH_OT_set_active_number(bpy.types.Operator):
number = IntProperty(name="number", number = IntProperty(name="number",
description="Brush number") description="Brush number")
_attr_dict = {"sculpt" : "use_paint_sculpt", _attr_dict = {"sculpt": "use_paint_sculpt",
"vertex_paint": "use_paint_vertex", "vertex_paint": "use_paint_vertex",
"weight_paint": "use_paint_weight", "weight_paint": "use_paint_weight",
"image_paint" : "use_paint_texture"} "image_paint": "use_paint_texture"}
def execute(self, context): def execute(self, context):
attr = self._attr_dict.get(self.mode) attr = self._attr_dict.get(self.mode)
@@ -102,6 +102,7 @@ class BRUSH_OT_set_active_number(bpy.types.Operator):
return {'CANCELLED'} return {'CANCELLED'}
class WM_OT_context_set_boolean(bpy.types.Operator): class WM_OT_context_set_boolean(bpy.types.Operator):
'''Set a context value.''' '''Set a context value.'''
bl_idname = "wm.context_set_boolean" bl_idname = "wm.context_set_boolean"
@@ -668,7 +669,6 @@ class WM_OT_doc_edit(bpy.types.Operator):
return wm.invoke_props_dialog(self, width=600) return wm.invoke_props_dialog(self, width=600)
from bpy.props import * from bpy.props import *
@@ -689,7 +689,7 @@ class WM_OT_properties_edit(bpy.types.Operator):
'''Internal use (edit a property data_path)''' '''Internal use (edit a property data_path)'''
bl_idname = "wm.properties_edit" bl_idname = "wm.properties_edit"
bl_label = "Edit Property" bl_label = "Edit Property"
bl_options = {'REGISTER'} # only because invoke_props_popup requires. bl_options = {'REGISTER'} # only because invoke_props_popup requires.
data_path = rna_path data_path = rna_path
property = rna_property property = rna_property
@@ -803,6 +803,7 @@ class WM_OT_keyconfig_activate(bpy.types.Operator):
bpy.utils.keyconfig_set(self.filepath) bpy.utils.keyconfig_set(self.filepath)
return {'FINISHED'} return {'FINISHED'}
class WM_OT_sysinfo(bpy.types.Operator): class WM_OT_sysinfo(bpy.types.Operator):
'''Generate System Info''' '''Generate System Info'''
bl_idname = "wm.sysinfo" bl_idname = "wm.sysinfo"
@@ -813,6 +814,7 @@ class WM_OT_sysinfo(bpy.types.Operator):
sys_info.write_sysinfo(self) sys_info.write_sysinfo(self)
return {'FINISHED'} return {'FINISHED'}
def register(): def register():
pass pass

View File

@@ -54,7 +54,7 @@ class BONE_PT_transform(BoneButtonsPanel, bpy.types.Panel):
def poll(cls, context): def poll(cls, context):
if context.edit_bone: if context.edit_bone:
return True return True
ob = context.object ob = context.object
return ob and ob.mode == 'POSE' and context.bone return ob and ob.mode == 'POSE' and context.bone

View File

@@ -62,7 +62,7 @@ class DATA_PT_context_curve(CurveButtonsPanel, bpy.types.Panel):
if ob: if ob:
layout.template_ID(ob, "data") layout.template_ID(ob, "data")
elif curve: elif curve:
layout.template_ID(space, "pin_id") # XXX: broken layout.template_ID(space, "pin_id") # XXX: broken
class DATA_PT_shape_curve(CurveButtonsPanel, bpy.types.Panel): class DATA_PT_shape_curve(CurveButtonsPanel, bpy.types.Panel):

View File

@@ -60,13 +60,13 @@ class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
col.prop(md, "use_bone_envelopes", text="Bone Envelopes") col.prop(md, "use_bone_envelopes", text="Bone Envelopes")
split = layout.split() split = layout.split()
col = split.split() col = split.split()
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column() sub = col.column()
sub.active = bool(md.vertex_group) sub.active = bool(md.vertex_group)
sub.prop(md, "invert_vertex_group") sub.prop(md, "invert_vertex_group")
col = layout.column() col = layout.column()
col.prop(md, "use_multi_modifier") col.prop(md, "use_multi_modifier")

View File

@@ -68,7 +68,8 @@ class OBJECT_PT_transform(ObjectButtonsPanel, bpy.types.Panel):
row.column().prop(ob, "scale") row.column().prop(ob, "scale")
layout.prop(ob, "rotation_mode") layout.prop(ob, "rotation_mode")
class OBJECT_PT_delta_transform(ObjectButtonsPanel, bpy.types.Panel): class OBJECT_PT_delta_transform(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Delta Transform" bl_label = "Delta Transform"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}

View File

@@ -550,17 +550,16 @@ class ConstraintButtonsPanel():
col.prop(con, "axis_x", text="X") col.prop(con, "axis_x", text="X")
col.prop(con, "axis_y", text="Y") col.prop(con, "axis_y", text="Y")
col.prop(con, "axis_z", text="Z") col.prop(con, "axis_z", text="Z")
if con.pivot_type == 'CONE_TWIST': if con.pivot_type == 'CONE_TWIST':
layout.label(text="Limits:") layout.label(text="Limits:")
split = layout.split() split = layout.split()
col = split.column(align=True) col = split.column(align=True)
col.prop(con, "use_angular_limit_x", text="Angular X") col.prop(con, "use_angular_limit_x", text="Angular X")
col.prop(con, "use_angular_limit_y", text="Angular Y") col.prop(con, "use_angular_limit_y", text="Angular Y")
col.prop(con, "use_angular_limit_z", text="Angular Z") col.prop(con, "use_angular_limit_z", text="Angular Z")
col = split.column() col = split.column()
col.prop(con, "limit_cone_min", text="") col.prop(con, "limit_cone_min", text="")
col = split.column() col = split.column()
@@ -569,7 +568,7 @@ class ConstraintButtonsPanel():
elif con.pivot_type == 'GENERIC_6_DOF': elif con.pivot_type == 'GENERIC_6_DOF':
layout.label(text="Limits:") layout.label(text="Limits:")
split = layout.split() split = layout.split()
col = split.column(align=True) col = split.column(align=True)
col.prop(con, "use_limit_x", text="X") col.prop(con, "use_limit_x", text="X")
col.prop(con, "use_limit_y", text="Y") col.prop(con, "use_limit_y", text="Y")
@@ -577,12 +576,12 @@ class ConstraintButtonsPanel():
col.prop(con, "use_angular_limit_x", text="Angular X") col.prop(con, "use_angular_limit_x", text="Angular X")
col.prop(con, "use_angular_limit_y", text="Angular Y") col.prop(con, "use_angular_limit_y", text="Angular Y")
col.prop(con, "use_angular_limit_z", text="Angular Z") col.prop(con, "use_angular_limit_z", text="Angular Z")
col = split.column() col = split.column()
col.prop(con, "limit_generic_min", text="") col.prop(con, "limit_generic_min", text="")
col = split.column() col = split.column()
col.prop(con, "limit_generic_max", text="") col.prop(con, "limit_generic_max", text="")
def CLAMP_TO(self, context, layout, con): def CLAMP_TO(self, context, layout, con):
self.target_template(layout, con) self.target_template(layout, con)

View File

@@ -337,7 +337,7 @@ class RENDER_PT_output(RenderButtonsPanel, bpy.types.Panel):
col.prop(rd, "jpeg2k_ycc") col.prop(rd, "jpeg2k_ycc")
elif file_format in ('CINEON', 'DPX'): elif file_format in ('CINEON', 'DPX'):
split = layout.split() split = layout.split()
split.label("FIXME: hard coded Non-Linear, Gamma:1.0") split.label("FIXME: hard coded Non-Linear, Gamma:1.0")
''' '''
@@ -491,7 +491,7 @@ class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Sampled Motion Blur" bl_label = "Sampled Motion Blur"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER'} COMPAT_ENGINES = {'BLENDER_RENDER'}
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
rd = context.scene.render rd = context.scene.render
@@ -527,7 +527,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel, bpy.types.Panel):
row.menu("RENDER_MT_presets", text=bpy.types.RENDER_MT_presets.bl_label) row.menu("RENDER_MT_presets", text=bpy.types.RENDER_MT_presets.bl_label)
row.operator("render.preset_add", text="", icon="ZOOMIN") row.operator("render.preset_add", text="", icon="ZOOMIN")
row.operator("render.preset_add", text="", icon="ZOOMOUT").remove_active = True row.operator("render.preset_add", text="", icon="ZOOMOUT").remove_active = True
split = layout.split() split = layout.split()
col = split.column() col = split.column()

View File

@@ -229,7 +229,7 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
f.write("# Keying Set: %s\n" % ks.name) f.write("# Keying Set: %s\n" % ks.name)
f.write("import bpy\n\n") f.write("import bpy\n\n")
f.write("scene= bpy.data.scenes[0]\n\n") # XXX, why not use the current scene? f.write("scene= bpy.data.scenes[0]\n\n") # XXX, why not use the current scene?
# Add KeyingSet and set general settings # Add KeyingSet and set general settings
f.write("# Keying Set Level declarations\n") f.write("# Keying Set Level declarations\n")
@@ -238,7 +238,7 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
if not ks.is_path_absolute: if not ks.is_path_absolute:
f.write("ks.is_path_absolute = False\n") f.write("ks.is_path_absolute = False\n")
f.write("\n") f.write("\n")
f.write("ks.bl_options = %r\n" % ks.bl_options) f.write("ks.bl_options = %r\n" % ks.bl_options)
f.write("\n") f.write("\n")

View File

@@ -103,7 +103,7 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, bpy.types.Panel):
if tex_collection: if tex_collection:
row = layout.row() row = layout.row()
row.template_list(idblock, "texture_slots", idblock, "active_texture_index", rows=2) row.template_list(idblock, "texture_slots", idblock, "active_texture_index", rows=2)
col = row.column(align=True) col = row.column(align=True)
@@ -143,7 +143,6 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, bpy.types.Panel):
split.prop(tex, "type", text="") split.prop(tex, "type", text="")
class TEXTURE_PT_preview(TextureButtonsPanel, bpy.types.Panel): class TEXTURE_PT_preview(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Preview" bl_label = "Preview"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -394,7 +393,7 @@ class TEXTURE_PT_image_sampling(TextureTypePanel, bpy.types.Panel):
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
idblock = context_tex_datablock(context) idblock = context_tex_datablock(context)
tex = context.texture tex = context.texture
slot = context.texture_slot slot = context.texture_slot
@@ -410,7 +409,7 @@ class TEXTURE_PT_image_sampling(TextureTypePanel, bpy.types.Panel):
col.prop(tex, "use_flip_axis", text="Flip X/Y Axis") col.prop(tex, "use_flip_axis", text="Flip X/Y Axis")
col = split.column() col = split.column()
#Only for Material based textures, not for Lamp/World... #Only for Material based textures, not for Lamp/World...
if isinstance(idblock, bpy.types.Material): if isinstance(idblock, bpy.types.Material):
col.prop(tex, "use_normal_map") col.prop(tex, "use_normal_map")
@@ -900,7 +899,7 @@ class TEXTURE_PT_influence(TextureSlotPanel, bpy.types.Panel):
sub = row.row() sub = row.row()
sub.active = getattr(tex, toggle) sub.active = getattr(tex, toggle)
sub.prop(tex, factor, text=name, slider=True) sub.prop(tex, factor, text=name, slider=True)
return sub # XXX, temp. use_map_normal needs to override. return sub # XXX, temp. use_map_normal needs to override.
if isinstance(idblock, bpy.types.Material): if isinstance(idblock, bpy.types.Material):
if idblock.type in ('SURFACE', 'WIRE'): if idblock.type in ('SURFACE', 'WIRE'):
@@ -939,13 +938,13 @@ class TEXTURE_PT_influence(TextureSlotPanel, bpy.types.Panel):
#sub.prop(tex, "default_value", text="Amount", slider=True) #sub.prop(tex, "default_value", text="Amount", slider=True)
elif idblock.type == 'HALO': elif idblock.type == 'HALO':
layout.label(text="Halo:") layout.label(text="Halo:")
split = layout.split() split = layout.split()
col = split.column() col = split.column()
factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", "Color") factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", "Color")
factor_but(col, "use_map_alpha", "alpha_factor", "Alpha") factor_but(col, "use_map_alpha", "alpha_factor", "Alpha")
col = split.column() col = split.column()
factor_but(col, "use_map_raymir", "raymir_factor", "Size") factor_but(col, "use_map_raymir", "raymir_factor", "Size")
factor_but(col, "use_map_hardness", "hardness_factor", "Hardness") factor_but(col, "use_map_hardness", "hardness_factor", "Hardness")

View File

@@ -152,7 +152,7 @@ class WORLD_PT_indirect_lighting(WorldButtonsPanel, bpy.types.Panel):
split = layout.split() split = layout.split()
split.prop(light, "indirect_factor", text="Factor") split.prop(light, "indirect_factor", text="Factor")
split.prop(light, "indirect_bounces", text="Bounces") split.prop(light, "indirect_bounces", text="Bounces")
if light.gather_method == 'RAYTRACE': if light.gather_method == 'RAYTRACE':
layout.label(text="Only works with Approximate gather method") layout.label(text="Only works with Approximate gather method")

View File

@@ -20,6 +20,7 @@
import bpy import bpy
# used for DopeSheet, NLA, and Graph Editors # used for DopeSheet, NLA, and Graph Editors
def dopesheet_filter(layout, context): def dopesheet_filter(layout, context):
dopesheet = context.space_data.dopesheet dopesheet = context.space_data.dopesheet
@@ -100,7 +101,7 @@ class DOPESHEET_HT_header(bpy.types.Header):
if st.mode == 'DOPESHEET': if st.mode == 'DOPESHEET':
dopesheet_filter(layout, context) dopesheet_filter(layout, context)
elif st.mode in ('ACTION','SHAPEKEY'): elif st.mode in ('ACTION', 'SHAPEKEY'):
layout.template_ID(st, "action", new="action.new") layout.template_ID(st, "action", new="action.new")
if st.mode != 'GPENCIL': if st.mode != 'GPENCIL':

View File

@@ -57,9 +57,9 @@ class FILEBROWSER_HT_header(bpy.types.Header):
row = layout.row(align=True) row = layout.row(align=True)
row.active = params.use_filter row.active = params.use_filter
row.prop(params, "use_filter_folder", text="") row.prop(params, "use_filter_folder", text="")
if params.filter_glob: if params.filter_glob:
#if st.operator and hasattr(st.operator, "filter_glob"): #if st.operator and hasattr(st.operator, "filter_glob"):
# row.prop(params, "filter_glob", text="") # row.prop(params, "filter_glob", text="")

View File

@@ -188,7 +188,7 @@ class GRAPH_MT_key(bpy.types.Menu):
layout.separator() layout.separator()
layout.operator_menu_enum("graph.handle_type", "type", text="Handle Type") layout.operator_menu_enum("graph.handle_type", "type", text="Handle Type")
layout.operator_menu_enum("graph.interpolation_type", "type", text="Interpolation Mode") layout.operator_menu_enum("graph.interpolation_type", "type", text="Interpolation Mode")
layout.separator() layout.separator()
layout.operator("graph.clean") layout.operator("graph.clean")
layout.operator("graph.sample") layout.operator("graph.sample")

View File

@@ -250,7 +250,8 @@ class IMAGE_MT_uvs(bpy.types.Menu):
layout.separator() layout.separator()
layout.menu("IMAGE_MT_uvs_showhide") layout.menu("IMAGE_MT_uvs_showhide")
class IMAGE_MT_uvs_select_mode(bpy.types.Menu): class IMAGE_MT_uvs_select_mode(bpy.types.Menu):
bl_label = "UV Select Mode" bl_label = "UV Select Mode"
@@ -259,9 +260,9 @@ class IMAGE_MT_uvs_select_mode(bpy.types.Menu):
layout.operator_context = 'INVOKE_REGION_WIN' layout.operator_context = 'INVOKE_REGION_WIN'
toolsettings = context.tool_settings toolsettings = context.tool_settings
# do smart things depending on whether uv_select_sync is on # do smart things depending on whether uv_select_sync is on
if toolsettings.use_uv_select_sync: if toolsettings.use_uv_select_sync:
prop = layout.operator("wm.context_set_value", text="Vertex", icon='VERTEXSEL') prop = layout.operator("wm.context_set_value", text="Vertex", icon='VERTEXSEL')
prop.value = "(True, False, False)" prop.value = "(True, False, False)"
@@ -287,7 +288,7 @@ class IMAGE_MT_uvs_select_mode(bpy.types.Menu):
prop = layout.operator("wm.context_set_string", text="Face", icon='UV_FACESEL') prop = layout.operator("wm.context_set_string", text="Face", icon='UV_FACESEL')
prop.value = "FACE" prop.value = "FACE"
prop.data_path = "tool_settings.uv_select_mode" prop.data_path = "tool_settings.uv_select_mode"
prop = layout.operator("wm.context_set_string", text="Island", icon='UV_ISLANDSEL') prop = layout.operator("wm.context_set_string", text="Island", icon='UV_ISLANDSEL')
prop.value = "ISLAND" prop.value = "ISLAND"
prop.data_path = "tool_settings.uv_select_mode" prop.data_path = "tool_settings.uv_select_mode"

View File

@@ -69,7 +69,6 @@ class INFO_HT_header(bpy.types.Header):
# XXX: this should be right-aligned to the RHS of the region # XXX: this should be right-aligned to the RHS of the region
layout.operator("wm.window_fullscreen_toggle", icon='FULLSCREEN_ENTER', text="") layout.operator("wm.window_fullscreen_toggle", icon='FULLSCREEN_ENTER', text="")
# XXX: BEFORE RELEASE, MOVE FILE MENU OUT OF INFO!!! # XXX: BEFORE RELEASE, MOVE FILE MENU OUT OF INFO!!!
""" """
row = layout.row(align=True) row = layout.row(align=True)
@@ -82,7 +81,7 @@ class INFO_HT_header(bpy.types.Header):
row = layout.row() row = layout.row()
row.enabled = sinfo.show_report_operator row.enabled = sinfo.show_report_operator
row.operator("info.report_replay") row.operator("info.report_replay")
row.menu("INFO_MT_report") row.menu("INFO_MT_report")
""" """
@@ -220,6 +219,7 @@ class INFO_MT_curve_add(bpy.types.Menu):
layout.operator("curve.primitive_nurbs_circle_add", icon='CURVE_NCIRCLE', text="Nurbs Circle") layout.operator("curve.primitive_nurbs_circle_add", icon='CURVE_NCIRCLE', text="Nurbs Circle")
layout.operator("curve.primitive_nurbs_path_add", icon='CURVE_PATH', text="Path") layout.operator("curve.primitive_nurbs_path_add", icon='CURVE_PATH', text="Path")
class INFO_MT_edit_curve_add(bpy.types.Menu): class INFO_MT_edit_curve_add(bpy.types.Menu):
bl_idname = "INFO_MT_edit_curve_add" bl_idname = "INFO_MT_edit_curve_add"
bl_label = "Add" bl_label = "Add"
@@ -231,9 +231,9 @@ class INFO_MT_edit_curve_add(bpy.types.Menu):
layout.operator_context = 'INVOKE_REGION_WIN' layout.operator_context = 'INVOKE_REGION_WIN'
if is_surf: if is_surf:
INFO_MT_surface_add.draw(self, context) INFO_MT_surface_add.draw(self, context)
else: else:
INFO_MT_curve_add.draw(self, context) INFO_MT_curve_add.draw(self, context)
class INFO_MT_surface_add(bpy.types.Menu): class INFO_MT_surface_add(bpy.types.Menu):

View File

@@ -390,7 +390,7 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, bpy.types.Panel):
col.label(text="Frame Still %d:%d" % (strip.frame_still_start, strip.frame_still_end)) col.label(text="Frame Still %d:%d" % (strip.frame_still_start, strip.frame_still_end))
elem = False elem = False
if strip.type == 'IMAGE': if strip.type == 'IMAGE':
elem = strip.getStripElem(frame_current) elem = strip.getStripElem(frame_current)
elif strip.type == 'MOVIE': elif strip.type == 'MOVIE':
@@ -684,7 +684,7 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, bpy.types.Panel):
layout.template_ID(strip, "scene_camera") layout.template_ID(strip, "scene_camera")
sce = strip.scene sce = strip.scene
layout.label(text="Original frame range: "+ str(sce.frame_start) +" - "+ str(sce.frame_end) + " (" + str(sce.frame_end-sce.frame_start+1) + ")") layout.label(text="Original frame range: %d-%d (%d)" % (sce.frame_start, sce.frame_end, sce.frame_end - sce.frame_start + 1))
class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel): class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel):
@@ -793,7 +793,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, bpy.types.Panel):
render = context.scene.render render = context.scene.render
col = layout.column() col = layout.column()
col.active = False #Currently only opengl preview works! col.active = False # Currently only opengl preview works!
col.prop(render, "use_sequencer_gl_preview", text="Open GL Preview") col.prop(render, "use_sequencer_gl_preview", text="Open GL Preview")
col = layout.column() col = layout.column()
#col.active = render.use_sequencer_gl_preview #col.active = render.use_sequencer_gl_preview

View File

@@ -73,11 +73,11 @@ class TIME_HT_header(bpy.types.Header):
sub.operator("screen.animation_play", text="", icon='PAUSE') sub.operator("screen.animation_play", text="", icon='PAUSE')
row.operator("screen.keyframe_jump", text="", icon='NEXT_KEYFRAME').next = True row.operator("screen.keyframe_jump", text="", icon='NEXT_KEYFRAME').next = True
row.operator("screen.frame_jump", text="", icon='FF').end = True row.operator("screen.frame_jump", text="", icon='FF').end = True
layout.prop(scene, "sync_mode", text="") layout.prop(scene, "sync_mode", text="")
layout.separator() layout.separator()
row = layout.row(align=True) row = layout.row(align=True)
row.prop(tools, "use_keyframe_insert_auto", text="", toggle=True) row.prop(tools, "use_keyframe_insert_auto", text="", toggle=True)
if screen.is_animation_playing and tools.use_keyframe_insert_auto: if screen.is_animation_playing and tools.use_keyframe_insert_auto:

View File

@@ -808,6 +808,7 @@ class USERPREF_PT_input(InputKeyMapPanel):
#print("runtime", time.time() - start) #print("runtime", time.time() - start)
class USERPREF_MT_addons_dev_guides(bpy.types.Menu): class USERPREF_MT_addons_dev_guides(bpy.types.Menu):
bl_label = "Addons develoment guides" bl_label = "Addons develoment guides"
@@ -848,21 +849,21 @@ class USERPREF_PT_addons(bpy.types.Panel):
modules = [] modules = []
loaded_modules = set() loaded_modules = set()
# RELEASE SCRIPTS: official scripts distributed in Blender releases # RELEASE SCRIPTS: official scripts distributed in Blender releases
paths = bpy.utils.script_paths("addons") paths = bpy.utils.script_paths("addons")
# CONTRIB SCRIPTS: good for testing but not official scripts yet # CONTRIB SCRIPTS: good for testing but not official scripts yet
# if folder addons_contrib/ exists, scripts in there will be loaded too # if folder addons_contrib/ exists, scripts in there will be loaded too
paths += bpy.utils.script_paths("addons_contrib") paths += bpy.utils.script_paths("addons_contrib")
# EXTERN SCRIPTS: external projects scripts # EXTERN SCRIPTS: external projects scripts
# if folder addons_extern/ exists, scripts in there will be loaded too # if folder addons_extern/ exists, scripts in there will be loaded too
paths += bpy.utils.script_paths("addons_extern") paths += bpy.utils.script_paths("addons_extern")
if bpy.app.debug: if bpy.app.debug:
t_main = time.time() t_main = time.time()
# fake module importing # fake module importing
def fake_module(mod_name, mod_path, speedy=True): def fake_module(mod_name, mod_path, speedy=True):
if bpy.app.debug: if bpy.app.debug:
@@ -953,11 +954,11 @@ class USERPREF_PT_addons(bpy.types.Panel):
col = split.column() col = split.column()
col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM') col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
col.prop(context.window_manager, "addon_filter", text="Filter", expand=True) col.prop(context.window_manager, "addon_filter", text="Filter", expand=True)
# menu to open webpages with addons development guides # menu to open webpages with addons development guides
col.separator() col.separator()
col.label(text = ' Online Documentation', icon = 'INFO') col.label(text=" Online Documentation", icon='INFO')
col.menu('USERPREF_MT_addons_dev_guides', text='Addons Developer Guides') col.menu("USERPREF_MT_addons_dev_guides", text="Addons Developer Guides")
col = split.column() col = split.column()

View File

@@ -128,6 +128,7 @@ class USERPREF_MT_keyconfigs(bpy.types.Menu):
bl_label = "KeyPresets" bl_label = "KeyPresets"
preset_subdir = "keyconfig" preset_subdir = "keyconfig"
preset_operator = "wm.keyconfig_activate" preset_operator = "wm.keyconfig_activate"
def draw(self, context): def draw(self, context):
props = self.layout.operator("wm.context_set_value", text="Blender (default)") props = self.layout.operator("wm.context_set_value", text="Blender (default)")
props.data_path = "window_manager.keyconfigs.active" props.data_path = "window_manager.keyconfigs.active"
@@ -379,7 +380,7 @@ class InputKeyMapPanel(bpy.types.Panel):
subcol = subsplit.column() subcol = subsplit.column()
row = subcol.row(align=True) row = subcol.row(align=True)
#row.prop_search(wm.keyconfigs, "active", wm, "keyconfigs", text="Key Config:") #row.prop_search(wm.keyconfigs, "active", wm, "keyconfigs", text="Key Config:")
text = bpy.path.display_name(context.window_manager.keyconfigs.active.name) text = bpy.path.display_name(context.window_manager.keyconfigs.active.name)
if not text: if not text:
@@ -387,7 +388,7 @@ class InputKeyMapPanel(bpy.types.Panel):
row.menu("USERPREF_MT_keyconfigs", text=text) row.menu("USERPREF_MT_keyconfigs", text=text)
row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMIN") row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMIN")
row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMOUT").remove_active = True row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMOUT").remove_active = True
# layout.context_pointer_set("keyconfig", wm.keyconfigs.active) # layout.context_pointer_set("keyconfig", wm.keyconfigs.active)
# row.operator("wm.keyconfig_remove", text="", icon='X') # row.operator("wm.keyconfig_remove", text="", icon='X')
@@ -605,7 +606,7 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
f.write("import bpy\n") f.write("import bpy\n")
f.write("import os\n\n") f.write("import os\n\n")
f.write("wm = bpy.context.window_manager\n") f.write("wm = bpy.context.window_manager\n")
f.write("kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0])\n\n") # keymap must be created by caller f.write("kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0])\n\n") # keymap must be created by caller
# Generate a list of keymaps to export: # Generate a list of keymaps to export:
# #

View File

@@ -647,6 +647,7 @@ class VIEW3D_MT_select_face(bpy.types.Menu): # XXX no matching enum
# ********** Object menu ********** # ********** Object menu **********
class VIEW3D_MT_object(bpy.types.Menu): class VIEW3D_MT_object(bpy.types.Menu):
bl_context = "objectmode" bl_context = "objectmode"
bl_label = "Object" bl_label = "Object"
@@ -1418,7 +1419,7 @@ class VIEW3D_MT_edit_mesh_extrude(bpy.types.Menu):
if mesh.total_edge_sel and (select_mode[0] or select_mode[1]): if mesh.total_edge_sel and (select_mode[0] or select_mode[1]):
menu += ["EDGE"] menu += ["EDGE"]
if mesh.total_vert_sel and select_mode[0]: if mesh.total_vert_sel and select_mode[0]:
menu += ["VERT"] menu += ["VERT"]
# should never get here # should never get here
return menu return menu

View File

@@ -1077,9 +1077,9 @@ class VIEW3D_PT_tools_weightpaint(View3DPanel, bpy.types.Panel):
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
ob = context.active_object ob = context.active_object
col = layout.column() col = layout.column()
col.active = ob.vertex_groups.active != None col.active = ob.vertex_groups.active != None
col.operator("object.vertex_group_normalize_all", text="Normalize All") col.operator("object.vertex_group_normalize_all", text="Normalize All")

View File

@@ -48,7 +48,7 @@ def file_list_py(path):
def is_pep8(path): def is_pep8(path):
print(path) print(path)
f = open(path, 'r') f = open(path, 'r', encoding="utf8")
for i in range(PEP8_SEEK_COMMENT): for i in range(PEP8_SEEK_COMMENT):
line = f.readline() line = f.readline()
if line.startswith("# <pep8"): if line.startswith("# <pep8"):