forked from bartvdbraak/blender
Merging r38765 through r38817 from trunk into vgroup_modifiers.
This commit is contained in:
commit
ce20487fa7
@ -42,9 +42,9 @@ def replace_line(f, i, text, keep_indent=True):
|
||||
|
||||
l = data[i]
|
||||
ws = l[:len(l) - len(l.lstrip())]
|
||||
|
||||
|
||||
data[i] = "%s%s\n" % (ws, text)
|
||||
|
||||
|
||||
file_handle = open(f, 'w')
|
||||
file_handle.writelines(data)
|
||||
file_handle.close()
|
||||
@ -182,13 +182,13 @@ def cmake_get_src(f):
|
||||
|
||||
if new_path_rel != l:
|
||||
print("overly relative path:\n %s:%d\n %s\n %s" % (f, i, l, new_path_rel))
|
||||
|
||||
|
||||
## Save time. just replace the line
|
||||
# replace_line(f, i - 1, new_path_rel)
|
||||
|
||||
|
||||
else:
|
||||
raise Exception("non existant include %s:%d -> %s" % (f, i, new_file))
|
||||
|
||||
|
||||
# print(new_file)
|
||||
|
||||
global_h.update(set(sources_h))
|
||||
@ -206,7 +206,7 @@ def cmake_get_src(f):
|
||||
if ff not in sources_c:
|
||||
print(" missing: " + ff)
|
||||
'''
|
||||
|
||||
|
||||
# reset
|
||||
sources_h[:] = []
|
||||
sources_c[:] = []
|
||||
|
@ -30,7 +30,18 @@ Example linux usage
|
||||
Windows not supported so far
|
||||
"""
|
||||
|
||||
from project_info import *
|
||||
from project_info import (SIMPLE_PROJECTFILE,
|
||||
SOURCE_DIR,
|
||||
CMAKE_DIR,
|
||||
PROJECT_DIR,
|
||||
source_list,
|
||||
is_project_file,
|
||||
is_c_header,
|
||||
is_py,
|
||||
cmake_advanced_info,
|
||||
cmake_compiler_defines,
|
||||
)
|
||||
|
||||
|
||||
import os
|
||||
from os.path import join, dirname, normpath, relpath, exists
|
||||
|
@ -31,7 +31,17 @@ example linux usage
|
||||
python .~/blenderSVN/blender/build_files/cmake/cmake_qtcreator_project.py ~/blenderSVN/cmake
|
||||
"""
|
||||
|
||||
from project_info import *
|
||||
from project_info import (SIMPLE_PROJECTFILE,
|
||||
SOURCE_DIR,
|
||||
CMAKE_DIR,
|
||||
PROJECT_DIR,
|
||||
source_list,
|
||||
is_project_file,
|
||||
is_c_header,
|
||||
is_py,
|
||||
cmake_advanced_info,
|
||||
cmake_compiler_defines,
|
||||
)
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -8,11 +8,11 @@ from bge import constraints
|
||||
|
||||
# get object list
|
||||
objects = logic.getCurrentScene().objects
|
||||
|
||||
|
||||
# get object named Object1 and Object 2
|
||||
object_1 = objects["Object1"]
|
||||
object_2 = objects["Object2"]
|
||||
|
||||
|
||||
# want to use Edge constraint type
|
||||
constraint_type = 2
|
||||
|
||||
@ -31,7 +31,7 @@ edge_angle_y = 1.0
|
||||
edge_angle_z = 0.0
|
||||
|
||||
# create an edge constraint
|
||||
constraints.createConstraint( physics_id_1, physics_id_2,
|
||||
constraint_type,
|
||||
edge_position_x, edge_position_y, edge_position_z,
|
||||
edge_angle_x, edge_angle_y, edge_angle_z )
|
||||
constraints.createConstraint(physics_id_1, physics_id_2,
|
||||
constraint_type,
|
||||
edge_position_x, edge_position_y, edge_position_z,
|
||||
edge_angle_x, edge_angle_y, edge_angle_z)
|
||||
|
@ -6,29 +6,31 @@ createTexture() and removeTexture() are to be called from a module Python
|
||||
Controller.
|
||||
"""
|
||||
from bge import logic
|
||||
from bge import texture
|
||||
from bge import texture
|
||||
|
||||
|
||||
def createTexture(cont):
|
||||
"""Create a new Dynamic Texture"""
|
||||
object = cont.owner
|
||||
|
||||
|
||||
# get the reference pointer (ID) of the internal texture
|
||||
ID = texture.materialID(obj, 'IMoriginal.png')
|
||||
|
||||
# create a texture object
|
||||
|
||||
# create a texture object
|
||||
object_texture = texture.Texture(object, ID)
|
||||
|
||||
|
||||
# create a new source with an external image
|
||||
url = logic.expandPath("//newtexture.jpg")
|
||||
new_source = texture.ImageFFmpeg(url)
|
||||
|
||||
|
||||
# the texture has to be stored in a permanent Python object
|
||||
logic.texture = object_texture
|
||||
|
||||
|
||||
# update/replace the texture
|
||||
logic.texture.source = new_source
|
||||
logic.texture.refresh(False)
|
||||
|
||||
|
||||
def removeTexture(cont):
|
||||
"""Delete the Dynamic Texture, reversing back the final to its original state."""
|
||||
try:
|
||||
|
@ -9,14 +9,14 @@ from bge import logic
|
||||
|
||||
cont = logic.getCurrentController()
|
||||
obj = cont.owner
|
||||
|
||||
# the creation of the texture must be done once: save the
|
||||
|
||||
# the creation of the texture must be done once: save the
|
||||
# texture object in an attribute of bge.logic module makes it persistent
|
||||
if not hasattr(logic, 'video'):
|
||||
|
||||
|
||||
# identify a static texture by name
|
||||
matID = texture.materialID(obj, 'IMvideo.png')
|
||||
|
||||
|
||||
# create a dynamic texture that will replace the static texture
|
||||
logic.video = texture.Texture(obj, matID)
|
||||
|
||||
@ -24,7 +24,7 @@ if not hasattr(logic, 'video'):
|
||||
movie = logic.expandPath('//trailer_400p.ogg')
|
||||
logic.video.source = texture.VideoFFmpeg(movie)
|
||||
logic.video.source.scale = True
|
||||
|
||||
|
||||
# quick off the movie, but it wont play in the background
|
||||
logic.video.source.play()
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
"""
|
||||
Hello World Text Example
|
||||
++++++++++++++++++++++++
|
||||
|
||||
Blender Game Engine example of using the blf module. For this module to work we
|
||||
need to use the OpenGL wrapper :class:`~bgl` as well.
|
||||
"""
|
||||
@ -11,31 +12,33 @@ from bge import logic
|
||||
import bgl
|
||||
import blf
|
||||
|
||||
|
||||
def init():
|
||||
"""init function - runs once"""
|
||||
# create a new font object, use external ttf file
|
||||
font_path = logic.expandPath('//Zeyada.ttf')
|
||||
# store the font indice - to use later
|
||||
# store the font indice - to use later
|
||||
logic.font_id = blf.load(font_path)
|
||||
|
||||
# set the font drawing routine to run every frame
|
||||
# set the font drawing routine to run every frame
|
||||
scene = logic.getCurrentScene()
|
||||
scene.post_draw=[write]
|
||||
scene.post_draw = [write]
|
||||
|
||||
|
||||
def write():
|
||||
"""write on screen"""
|
||||
width = render.getWindowWidth()
|
||||
height = render.getWindowHeight()
|
||||
|
||||
|
||||
# OpenGL setup
|
||||
bgl.glMatrixMode(bgl.GL_PROJECTION)
|
||||
bgl.glLoadIdentity()
|
||||
bgl.gluOrtho2D(0, width, 0, height)
|
||||
bgl.glMatrixMode(bgl.GL_MODELVIEW)
|
||||
bgl.glLoadIdentity()
|
||||
|
||||
|
||||
# BLF drawing routine
|
||||
font_id = logic.font_id
|
||||
blf.position(font_id, (width*0.2), (height*0.3), 0)
|
||||
blf.position(font_id, (width * 0.2), (height * 0.3), 0)
|
||||
blf.size(font_id, 50, 72)
|
||||
blf.draw(font_id, "Hello World")
|
||||
|
@ -38,8 +38,11 @@ cp $SPHINXBASE/sphinx-out/contents.html $SPHINXBASE/sphinx-out/index.html
|
||||
ssh $SSH_USER@emo.blender.org 'rm -rf '$SSH_UPLOAD_FULL'/*'
|
||||
rsync --progress -avze "ssh -p 22" $SPHINXBASE/sphinx-out/* $SSH_HOST:$SSH_UPLOAD_FULL/
|
||||
|
||||
# symlink the dir to a static URL
|
||||
ssh $SSH_USER@emo.blender.org 'rm '$SSH_UPLOAD'/250PythonDoc && ln -s '$SSH_UPLOAD_FULL' '$SSH_UPLOAD'/250PythonDoc'
|
||||
## symlink the dir to a static URL
|
||||
#ssh $SSH_USER@emo.blender.org 'rm '$SSH_UPLOAD'/250PythonDoc && ln -s '$SSH_UPLOAD_FULL' '$SSH_UPLOAD'/250PythonDoc'
|
||||
|
||||
# better redirect
|
||||
ssh $SSH_USER@emo.blender.org 'echo "<html><head><title>Redirecting...</title><meta http-equiv=\"REFRESH\" content=\"0;url=../blender_python_api_'$BLENDER_VERSION'/\"></head><body>Redirecting...</body></html>" > '$SSH_UPLOAD'/250PythonDoc/index.html'
|
||||
|
||||
# pdf
|
||||
sphinx-build -b latex $SPHINXBASE/sphinx-in $SPHINXBASE/sphinx-out
|
||||
|
@ -33,6 +33,7 @@ import bpy as _bpy
|
||||
|
||||
error_duplicates = False
|
||||
|
||||
|
||||
def paths():
|
||||
# RELEASE SCRIPTS: official scripts distributed in Blender releases
|
||||
paths = _bpy.utils.script_paths("addons")
|
||||
|
@ -43,6 +43,7 @@ from . import utils, path, ops
|
||||
# fake operator module
|
||||
ops = ops.ops_fake_module
|
||||
|
||||
|
||||
def _main():
|
||||
import sys as _sys
|
||||
|
||||
|
@ -159,14 +159,19 @@ def axis_conversion(from_forward='Y', from_up='Z', to_forward='Y', to_up='Z'):
|
||||
raise Exception("invalid axis arguments passed, "
|
||||
"can't use up/forward on the same axis.")
|
||||
|
||||
value = reduce(int.__or__, (_axis_convert_num[a] << (i * 3) for i, a in enumerate((from_forward, from_up, to_forward, to_up))))
|
||||
value = reduce(int.__or__, (_axis_convert_num[a] << (i * 3)
|
||||
for i, a in enumerate((from_forward,
|
||||
from_up,
|
||||
to_forward,
|
||||
to_up,
|
||||
))))
|
||||
|
||||
for i, axis_lut in enumerate(_axis_convert_lut):
|
||||
if value in axis_lut:
|
||||
return Matrix(_axis_convert_matrix[i])
|
||||
assert(0)
|
||||
|
||||
|
||||
|
||||
def axis_conversion_ensure(operator, forward_attr, up_attr):
|
||||
"""
|
||||
Function to ensure an operator has valid axis conversion settings, intended
|
||||
@ -174,9 +179,9 @@ def axis_conversion_ensure(operator, forward_attr, up_attr):
|
||||
|
||||
:arg operator: the operator to access axis attributes from.
|
||||
:type operator: :class:`Operator`
|
||||
:arg forward_attr:
|
||||
:arg forward_attr: attribute storing the forward axis
|
||||
:type forward_attr: string
|
||||
:arg up_attr: the directory the *filepath* will be referenced from (normally the export path).
|
||||
:arg up_attr: attribute storing the up axis
|
||||
:type up_attr: string
|
||||
:return: True if the value was modified.
|
||||
:rtype: boolean
|
||||
@ -184,9 +189,9 @@ def axis_conversion_ensure(operator, forward_attr, up_attr):
|
||||
def validate(axis_forward, axis_up):
|
||||
if axis_forward[-1] == axis_up[-1]:
|
||||
axis_up = axis_up[0:-1] + 'XYZ'[('XYZ'.index(axis_up[-1]) + 1) % 3]
|
||||
|
||||
|
||||
return axis_forward, axis_up
|
||||
|
||||
|
||||
change = False
|
||||
|
||||
axis = getattr(operator, forward_attr), getattr(operator, up_attr)
|
||||
@ -203,7 +208,7 @@ def axis_conversion_ensure(operator, forward_attr, up_attr):
|
||||
|
||||
# return a tuple (free, object list), free is True if memory should be freed later with free_derived_objects()
|
||||
def create_derived_objects(scene, ob):
|
||||
if ob.parent and ob.parent.dupli_type != 'NONE':
|
||||
if ob.parent and ob.parent.dupli_type in {'VERTS', 'FACES'}:
|
||||
return False, None
|
||||
|
||||
if ob.dupli_type != 'NONE':
|
||||
|
@ -170,8 +170,8 @@ def edge_loops_from_faces(mesh, faces=None, seams=()):
|
||||
# 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
|
||||
# the original edge had 2 other edges
|
||||
if other_dir and flipped == False:
|
||||
flipped = True # only flip the list once
|
||||
context_loop.reverse()
|
||||
ed_adj[:] = []
|
||||
@ -259,13 +259,15 @@ def edge_loops_from_edges(mesh, edges=None):
|
||||
|
||||
def ngon_tesselate(from_data, indices, fix_loops=True):
|
||||
'''
|
||||
Takes a polyline of indices (fgon)
|
||||
and returns a list of face indicie lists.
|
||||
Designed to be used for importers that need indices for an fgon to create from existing verts.
|
||||
Takes a polyline of indices (fgon) and returns a list of face
|
||||
indicie lists. Designed to be used for importers that need indices for an
|
||||
fgon to create from existing verts.
|
||||
|
||||
from_data: either a mesh, or a list/tuple of vectors.
|
||||
indices: a list of indices to use this list is the ordered closed polyline to fill, and can be a subset of the data given.
|
||||
fix_loops: If this is enabled polylines that use loops to make multiple polylines are delt with correctly.
|
||||
indices: a list of indices to use this list is the ordered closed polyline
|
||||
to fill, and can be a subset of the data given.
|
||||
fix_loops: If this is enabled polylines that use loops to make multiple
|
||||
polylines are delt with correctly.
|
||||
'''
|
||||
|
||||
from mathutils.geometry import tesselate_polygon
|
||||
@ -276,7 +278,8 @@ def ngon_tesselate(from_data, indices, fix_loops=True):
|
||||
return []
|
||||
|
||||
def mlen(co):
|
||||
return abs(co[0]) + abs(co[1]) + abs(co[2]) # manhatten length of a vector, faster then length
|
||||
# manhatten length of a vector, faster then length
|
||||
return abs(co[0]) + abs(co[1]) + abs(co[2])
|
||||
|
||||
def vert_treplet(v, i):
|
||||
return v, vector_to_tuple(v, 6), i, mlen(v)
|
||||
@ -296,7 +299,8 @@ def ngon_tesselate(from_data, indices, fix_loops=True):
|
||||
else:
|
||||
verts = [from_data.vertices[i].co for ii, i in enumerate(indices)]
|
||||
|
||||
for i in range(len(verts) - 1, 0, -1): # same as reversed(xrange(1, len(verts))):
|
||||
# same as reversed(range(1, len(verts))):
|
||||
for i in range(len(verts) - 1, 0, -1):
|
||||
if verts[i][1] == verts[i - 1][0]:
|
||||
verts.pop(i - 1)
|
||||
|
||||
@ -304,14 +308,16 @@ def ngon_tesselate(from_data, indices, fix_loops=True):
|
||||
|
||||
else:
|
||||
'''
|
||||
Seperate this loop into multiple loops be finding edges that are used twice
|
||||
This is used by lightwave LWO files a lot
|
||||
Seperate this loop into multiple loops be finding edges that are
|
||||
used twice. This is used by lightwave LWO files a lot
|
||||
'''
|
||||
|
||||
if type(from_data) in (tuple, list):
|
||||
verts = [vert_treplet(Vector(from_data[i]), ii) for ii, i in enumerate(indices)]
|
||||
verts = [vert_treplet(Vector(from_data[i]), ii)
|
||||
for ii, i in enumerate(indices)]
|
||||
else:
|
||||
verts = [vert_treplet(from_data.vertices[i].co, ii) for ii, i in enumerate(indices)]
|
||||
verts = [vert_treplet(from_data.vertices[i].co, ii)
|
||||
for ii, i in enumerate(indices)]
|
||||
|
||||
edges = [(i, i - 1) for i in range(len(verts))]
|
||||
if edges:
|
||||
|
@ -16,7 +16,7 @@
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
# <pep8-80 compliant>
|
||||
|
||||
import bpy
|
||||
from bpy.props import StringProperty, BoolProperty, EnumProperty, IntProperty
|
||||
@ -54,21 +54,35 @@ class SelectPattern(bpy.types.Operator):
|
||||
else:
|
||||
pattern_match = (lambda a, b:
|
||||
fnmatch.fnmatchcase(a.upper(), b.upper()))
|
||||
|
||||
is_ebone = False
|
||||
obj = context.object
|
||||
if obj and obj.mode == 'POSE':
|
||||
items = obj.data.bones
|
||||
if not self.extend:
|
||||
bpy.ops.pose.select_all(action='DESELECT')
|
||||
elif obj and obj.type == 'ARMATURE' and obj.mode == 'EDIT':
|
||||
items = obj.data.edit_bones
|
||||
if not self.extend:
|
||||
bpy.ops.armature.select_all(action='DESELECT')
|
||||
is_ebone = True
|
||||
else:
|
||||
items = context.visible_objects
|
||||
if not self.extend:
|
||||
bpy.ops.object.select_all(action='DESELECT')
|
||||
|
||||
# Can be pose bones or objects
|
||||
for item in items:
|
||||
if pattern_match(item.name, self.pattern):
|
||||
item.select = True
|
||||
elif not self.extend:
|
||||
item.select = False
|
||||
|
||||
# hrmf, perhaps there should be a utility function for this.
|
||||
if is_ebone:
|
||||
item.select_head = True
|
||||
item.select_tail = True
|
||||
if item.use_connect:
|
||||
item_parent = item.parent
|
||||
if item_parent is not None:
|
||||
item_parent.select_tail = True
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
@ -107,7 +121,8 @@ class SelectCamera(bpy.types.Operator):
|
||||
|
||||
|
||||
class SelectHierarchy(bpy.types.Operator):
|
||||
'''Select object relative to the active objects position in the hierarchy'''
|
||||
'''Select object relative to the active objects position''' \
|
||||
'''in the hierarchy'''
|
||||
bl_idname = "object.select_hierarchy"
|
||||
bl_label = "Select Hierarchy"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
@ -332,53 +347,90 @@ class ShapeTransfer(bpy.types.Operator):
|
||||
ob_add_shape(ob_other, orig_key_name)
|
||||
|
||||
# editing the final coords, only list that stores wrapped coords
|
||||
target_shape_coords = [v.co for v in ob_other.active_shape_key.data]
|
||||
target_shape_coords = [v.co for v in
|
||||
ob_other.active_shape_key.data]
|
||||
|
||||
median_coords = [[] for i in range(len(me.vertices))]
|
||||
|
||||
# Method 1, edge
|
||||
if mode == 'OFFSET':
|
||||
for i, vert_cos in enumerate(median_coords):
|
||||
vert_cos.append(target_coords[i] + (orig_shape_coords[i] - orig_coords[i]))
|
||||
vert_cos.append(target_coords[i] +
|
||||
(orig_shape_coords[i] - orig_coords[i]))
|
||||
|
||||
elif mode == 'RELATIVE_FACE':
|
||||
for face in me.faces:
|
||||
i1, i2, i3, i4 = face.vertices_raw
|
||||
if i4 != 0:
|
||||
pt = barycentric_transform(orig_shape_coords[i1],
|
||||
orig_coords[i4], orig_coords[i1], orig_coords[i2],
|
||||
target_coords[i4], target_coords[i1], target_coords[i2])
|
||||
orig_coords[i4],
|
||||
orig_coords[i1],
|
||||
orig_coords[i2],
|
||||
target_coords[i4],
|
||||
target_coords[i1],
|
||||
target_coords[i2],
|
||||
)
|
||||
median_coords[i1].append(pt)
|
||||
|
||||
pt = barycentric_transform(orig_shape_coords[i2],
|
||||
orig_coords[i1], orig_coords[i2], orig_coords[i3],
|
||||
target_coords[i1], target_coords[i2], target_coords[i3])
|
||||
orig_coords[i1],
|
||||
orig_coords[i2],
|
||||
orig_coords[i3],
|
||||
target_coords[i1],
|
||||
target_coords[i2],
|
||||
target_coords[i3],
|
||||
)
|
||||
median_coords[i2].append(pt)
|
||||
|
||||
pt = barycentric_transform(orig_shape_coords[i3],
|
||||
orig_coords[i2], orig_coords[i3], orig_coords[i4],
|
||||
target_coords[i2], target_coords[i3], target_coords[i4])
|
||||
orig_coords[i2],
|
||||
orig_coords[i3],
|
||||
orig_coords[i4],
|
||||
target_coords[i2],
|
||||
target_coords[i3],
|
||||
target_coords[i4],
|
||||
)
|
||||
median_coords[i3].append(pt)
|
||||
|
||||
pt = barycentric_transform(orig_shape_coords[i4],
|
||||
orig_coords[i3], orig_coords[i4], orig_coords[i1],
|
||||
target_coords[i3], target_coords[i4], target_coords[i1])
|
||||
orig_coords[i3],
|
||||
orig_coords[i4],
|
||||
orig_coords[i1],
|
||||
target_coords[i3],
|
||||
target_coords[i4],
|
||||
target_coords[i1],
|
||||
)
|
||||
median_coords[i4].append(pt)
|
||||
|
||||
else:
|
||||
pt = barycentric_transform(orig_shape_coords[i1],
|
||||
orig_coords[i3], orig_coords[i1], orig_coords[i2],
|
||||
target_coords[i3], target_coords[i1], target_coords[i2])
|
||||
orig_coords[i3],
|
||||
orig_coords[i1],
|
||||
orig_coords[i2],
|
||||
target_coords[i3],
|
||||
target_coords[i1],
|
||||
target_coords[i2],
|
||||
)
|
||||
median_coords[i1].append(pt)
|
||||
|
||||
pt = barycentric_transform(orig_shape_coords[i2],
|
||||
orig_coords[i1], orig_coords[i2], orig_coords[i3],
|
||||
target_coords[i1], target_coords[i2], target_coords[i3])
|
||||
orig_coords[i1],
|
||||
orig_coords[i2],
|
||||
orig_coords[i3],
|
||||
target_coords[i1],
|
||||
target_coords[i2],
|
||||
target_coords[i3],
|
||||
)
|
||||
median_coords[i2].append(pt)
|
||||
|
||||
pt = barycentric_transform(orig_shape_coords[i3],
|
||||
orig_coords[i2], orig_coords[i3], orig_coords[i1],
|
||||
target_coords[i2], target_coords[i3], target_coords[i1])
|
||||
orig_coords[i2],
|
||||
orig_coords[i3],
|
||||
orig_coords[i1],
|
||||
target_coords[i2],
|
||||
target_coords[i3],
|
||||
target_coords[i1],
|
||||
)
|
||||
median_coords[i3].append(pt)
|
||||
|
||||
elif mode == 'RELATIVE_EDGE':
|
||||
@ -416,7 +468,8 @@ class ShapeTransfer(bpy.types.Operator):
|
||||
if use_clamp:
|
||||
# clamp to the same movement as the original
|
||||
# breaks copy between different scaled meshes.
|
||||
len_from = (orig_shape_coords[i] - orig_coords[i]).length
|
||||
len_from = (orig_shape_coords[i] -
|
||||
orig_coords[i]).length
|
||||
ofs = co - target_coords[i]
|
||||
ofs.length = len_from
|
||||
co = target_coords[i] + ofs
|
||||
@ -498,7 +551,13 @@ class JoinUVs(bpy.types.Operator):
|
||||
mesh_other.tag = True
|
||||
|
||||
if len(mesh_other.faces) != len_faces:
|
||||
self.report({'WARNING'}, "Object: %s, Mesh: '%s' has %d faces, expected %d\n" % (obj_other.name, mesh_other.name, len(mesh_other.faces), len_faces))
|
||||
self.report({'WARNING'}, "Object: %s, Mesh: "
|
||||
"'%s' has %d faces, expected %d\n"
|
||||
% (obj_other.name,
|
||||
mesh_other.name,
|
||||
len(mesh_other.faces),
|
||||
len_faces),
|
||||
)
|
||||
else:
|
||||
uv_other = mesh_other.uv_textures.active
|
||||
if not uv_other:
|
||||
|
@ -21,6 +21,7 @@
|
||||
import bpy
|
||||
from mathutils import Vector
|
||||
|
||||
|
||||
def GlobalBB_LQ(bb_world):
|
||||
|
||||
# Initialize the variables with the 8th vertex
|
||||
@ -33,7 +34,7 @@ def GlobalBB_LQ(bb_world):
|
||||
)
|
||||
|
||||
# Test against the other 7 verts
|
||||
for i in range (7):
|
||||
for i in range(7):
|
||||
|
||||
# X Range
|
||||
val = bb_world[i][0]
|
||||
@ -61,6 +62,7 @@ def GlobalBB_LQ(bb_world):
|
||||
|
||||
return (Vector((left, front, up)), Vector((right, back, down)))
|
||||
|
||||
|
||||
def GlobalBB_HQ(obj):
|
||||
|
||||
matrix_world = obj.matrix_world.copy()
|
||||
@ -80,7 +82,7 @@ def GlobalBB_HQ(obj):
|
||||
)
|
||||
|
||||
# Test against all other verts
|
||||
for i in range (len(verts)-1):
|
||||
for i in range(len(verts) - 1):
|
||||
|
||||
vco = matrix_world * verts[i].co
|
||||
|
||||
|
@ -110,6 +110,31 @@ class PlayRenderedAnim(bpy.types.Operator):
|
||||
cmd = [player_path]
|
||||
# extra options, fps controls etc.
|
||||
if preset == 'BLENDER24':
|
||||
# -----------------------------------------------------------------
|
||||
# Check blender is not 2.5x until it supports playback again
|
||||
try:
|
||||
process = subprocess.Popen([player_path, '--version'],
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
except:
|
||||
# ignore and allow the main execution to catch the problem.
|
||||
process = None
|
||||
|
||||
if process is not None:
|
||||
process.wait()
|
||||
out = process.stdout.read()
|
||||
process.stdout.close()
|
||||
out_split = out.strip().split()
|
||||
if out_split[0] == b'Blender':
|
||||
if not out_split[1].startswith(b'2.4'):
|
||||
self.report({'ERROR'},
|
||||
"Blender %s doesn't support playback: %r" %
|
||||
(out_split[1].decode(), player_path))
|
||||
return {'CANCELLED'}
|
||||
del out, out_split
|
||||
del process
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
opts = ["-a", "-f", str(rd.fps), str(rd.fps_base), file]
|
||||
cmd.extend(opts)
|
||||
elif preset == 'DJV':
|
||||
@ -146,5 +171,6 @@ class PlayRenderedAnim(bpy.types.Operator):
|
||||
self.report({'ERROR'},
|
||||
"Couldn't run external animation player with command "
|
||||
"%r\n%s" % (" ".join(cmd), str(e)))
|
||||
return {'CANCELLED'}
|
||||
|
||||
return {'FINISHED'}
|
||||
|
@ -41,11 +41,9 @@ class DATA_PT_empty(DataButtonsPanel, bpy.types.Panel):
|
||||
layout.prop(ob, "empty_draw_type", text="Display")
|
||||
|
||||
if ob.empty_draw_type == 'IMAGE':
|
||||
# layout.template_image(ob, "data", None)
|
||||
layout.template_ID(ob, "data", open="image.open", unlink="image.unlink")
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.prop(ob, "color", text="Transparency", index=3, slider=True)
|
||||
layout.prop(ob, "color", text="Transparency", index=3, slider=True)
|
||||
row = layout.row(align=True)
|
||||
row.prop(ob, "empty_image_offset", text="Offset X", index=0)
|
||||
row.prop(ob, "empty_image_offset", text="Offset Y", index=1)
|
||||
|
@ -394,6 +394,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
|
||||
col.operator("object.multires_higher_levels_delete", text="Delete Higher")
|
||||
col.operator("object.multires_reshape", text="Reshape")
|
||||
col.operator("object.multires_base_apply", text="Apply Base")
|
||||
col.prop(md, "use_subsurf_uv")
|
||||
col.prop(md, "show_only_control_edges")
|
||||
|
||||
layout.separator()
|
||||
|
@ -93,7 +93,7 @@ class WORLD_PT_world(WorldButtonsPanel, bpy.types.Panel):
|
||||
col.prop(world, "zenith_color")
|
||||
col.active = world.use_sky_blend
|
||||
row.column().prop(world, "ambient_color")
|
||||
|
||||
|
||||
row = layout.row()
|
||||
row.prop(world, "exposure")
|
||||
row.prop(world, "color_range")
|
||||
|
@ -60,7 +60,7 @@ class INFO_HT_header(bpy.types.Header):
|
||||
layout.template_running_jobs()
|
||||
|
||||
layout.template_reports_banner()
|
||||
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.operator("wm.splash", text="", icon='BLENDER', emboss=False)
|
||||
row.label(text=scene.statistics())
|
||||
|
@ -135,7 +135,7 @@ class NODE_MT_node(bpy.types.Menu):
|
||||
layout.operator("transform.resize")
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
||||
layout.operator("node.duplicate_move")
|
||||
layout.operator("node.delete")
|
||||
layout.operator("node.delete_reconnect")
|
||||
|
@ -1020,7 +1020,6 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
for i in range(4 - tot_row):
|
||||
split.separator()
|
||||
|
||||
|
||||
# Append missing scripts
|
||||
# First collect scripts that are used but have no script file.
|
||||
module_names = {mod.__name__ for mod, info in addons}
|
||||
|
@ -55,7 +55,7 @@ class VIEW3D_HT_header(bpy.types.Header):
|
||||
|
||||
row = layout.row()
|
||||
# Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode...
|
||||
row.template_header_3D()
|
||||
row.template_header_3D()
|
||||
|
||||
if obj:
|
||||
# Particle edit
|
||||
|
@ -58,6 +58,7 @@ def draw_gpencil_tools(context, layout):
|
||||
row = col.row()
|
||||
row.prop(context.tool_settings, "use_grease_pencil_sessions")
|
||||
|
||||
|
||||
# ********** default tools for objectmode ****************
|
||||
|
||||
class VIEW3D_PT_tools_objectmode(View3DPanel, bpy.types.Panel):
|
||||
|
@ -26,7 +26,7 @@ for obj in selection:
|
||||
# bpy.ops.export_scene.x3d(filepath=fn + ".x3d", use_selection=True)
|
||||
|
||||
obj.select = False
|
||||
|
||||
|
||||
print("written:", fn)
|
||||
|
||||
for obj in selection:
|
||||
|
@ -26,8 +26,8 @@ class CustomMenu(bpy.types.Menu):
|
||||
|
||||
|
||||
def draw_item(self, context):
|
||||
layout = self.layout
|
||||
layout.menu(CustomMenu.bl_idname)
|
||||
layout = self.layout
|
||||
layout.menu(CustomMenu.bl_idname)
|
||||
|
||||
|
||||
def register():
|
||||
|
@ -550,7 +550,7 @@ Material *material_pop_id(ID *id, int index)
|
||||
Material **mat;
|
||||
|
||||
if(index + 1 != (*totcol))
|
||||
memmove((*matar), (*matar) + 1, sizeof(void *) * ((*totcol) - (index + 1)));
|
||||
memmove((*matar)+index, (*matar)+(index+1), sizeof(void *) * ((*totcol) - (index + 1)));
|
||||
|
||||
(*totcol)--;
|
||||
|
||||
|
@ -465,12 +465,13 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
|
||||
return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0, 0);
|
||||
}
|
||||
|
||||
static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal)
|
||||
static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv)
|
||||
{
|
||||
SubsurfModifierData smd= {{NULL}};
|
||||
|
||||
smd.levels = smd.renderLevels = lvl;
|
||||
smd.flags |= eSubsurfModifierFlag_SubsurfUv;
|
||||
if(!plain_uv)
|
||||
smd.flags |= eSubsurfModifierFlag_SubsurfUv;
|
||||
if(simple)
|
||||
smd.subdivType = ME_SIMPLE_SUBSURF;
|
||||
if(optimal)
|
||||
@ -591,7 +592,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
|
||||
/* subdivide the mesh to highest level without displacements */
|
||||
cddm = CDDM_from_mesh(me, NULL);
|
||||
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
|
||||
origdm = subsurf_dm_create_local(ob, cddm, totlvl, 0, 0);
|
||||
origdm = subsurf_dm_create_local(ob, cddm, totlvl, 0, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
cddm->release(cddm);
|
||||
|
||||
/* calc disps */
|
||||
@ -626,7 +627,7 @@ static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl
|
||||
/* create subsurf DM from original mesh at high level */
|
||||
cddm = CDDM_from_mesh(me, NULL);
|
||||
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
|
||||
highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0);
|
||||
highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
|
||||
/* create multires DM from original mesh at low level */
|
||||
lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple);
|
||||
@ -830,7 +831,7 @@ static void multiresModifier_update(DerivedMesh *dm)
|
||||
else cddm = CDDM_from_mesh(me, NULL);
|
||||
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
|
||||
|
||||
highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0);
|
||||
highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
|
||||
/* create multires DM from original mesh and displacements */
|
||||
lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple);
|
||||
@ -884,7 +885,7 @@ static void multiresModifier_update(DerivedMesh *dm)
|
||||
else cddm = CDDM_from_mesh(me, NULL);
|
||||
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
|
||||
|
||||
subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0);
|
||||
subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
cddm->release(cddm);
|
||||
|
||||
multiresModifier_disp_run(dm, me, 1, 0, subdm->getGridData(subdm), mmd->totlvl);
|
||||
@ -927,7 +928,8 @@ DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, int loca
|
||||
return dm;
|
||||
|
||||
result = subsurf_dm_create_local(ob, dm, lvl,
|
||||
mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges);
|
||||
mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges,
|
||||
mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
|
||||
if(!local_mmd) {
|
||||
ccgdm = (CCGDerivedMesh*)result;
|
||||
@ -1633,7 +1635,7 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
|
||||
MEM_freeN(vertCos);
|
||||
|
||||
/* scaled ccgDM for tangent space of object with applied scale */
|
||||
dm= subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0);
|
||||
dm= subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
|
||||
cddm->release(cddm);
|
||||
|
||||
/*numGrids= dm->getNumGrids(dm);*/ /*UNUSED*/
|
||||
|
@ -37,12 +37,36 @@ MaterialsExporter::MaterialsExporter(COLLADASW::StreamWriter *sw): COLLADASW::Li
|
||||
|
||||
void MaterialsExporter::exportMaterials(Scene *sce, bool export_selected)
|
||||
{
|
||||
openLibrary();
|
||||
if(hasMaterials(sce)) {
|
||||
openLibrary();
|
||||
|
||||
MaterialFunctor mf;
|
||||
mf.forEachMaterialInScene<MaterialsExporter>(sce, *this, export_selected);
|
||||
MaterialFunctor mf;
|
||||
mf.forEachMaterialInScene<MaterialsExporter>(sce, *this, export_selected);
|
||||
|
||||
closeLibrary();
|
||||
closeLibrary();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool MaterialsExporter::hasMaterials(Scene *sce)
|
||||
{
|
||||
Base *base = (Base *)sce->base.first;
|
||||
|
||||
while(base) {
|
||||
Object *ob= base->object;
|
||||
int a;
|
||||
for(a = 0; a < ob->totcol; a++)
|
||||
{
|
||||
Material *ma = give_current_material(ob, a+1);
|
||||
|
||||
// no material, but check all of the slots
|
||||
if (!ma) continue;
|
||||
|
||||
return true;
|
||||
}
|
||||
base= base->next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void MaterialsExporter::operator()(Material *ma, Object *ob)
|
||||
|
@ -51,6 +51,9 @@ public:
|
||||
MaterialsExporter(COLLADASW::StreamWriter *sw);
|
||||
void exportMaterials(Scene *sce, bool export_selected);
|
||||
void operator()(Material *ma, Object *ob);
|
||||
|
||||
private:
|
||||
bool hasMaterials(Scene *sce);
|
||||
};
|
||||
|
||||
// used in forEachMaterialInScene
|
||||
|
@ -1115,10 +1115,11 @@ void init_userdef_do_versions(void)
|
||||
}
|
||||
if(U.pad_rot_angle==0)
|
||||
U.pad_rot_angle= 15;
|
||||
|
||||
if(U.flag & USER_CUSTOM_RANGE)
|
||||
vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
|
||||
|
||||
|
||||
/* signal for derivedmesh to use colorband */
|
||||
/* run incase this was on and is now off in the user prefs [#28096] */
|
||||
vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight):NULL);
|
||||
|
||||
if (bmain->versionfile <= 191) {
|
||||
strcpy(U.plugtexdir, U.textudir);
|
||||
strcpy(U.sounddir, "/");
|
||||
|
@ -2216,6 +2216,12 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
/* we might need to remove a link */
|
||||
if(in_out==SOCK_OUT)
|
||||
node_remove_extra_links(snode, link->tosock, link);
|
||||
|
||||
/* when linking to group outputs, update the socket type */
|
||||
/* XXX this should all be part of a generic update system */
|
||||
if (!link->tonode) {
|
||||
link->tosock->type = link->fromsock->type;
|
||||
}
|
||||
}
|
||||
else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) {
|
||||
/* automatically add new group socket */
|
||||
|
@ -101,6 +101,8 @@ static void sequencer_generic_props__internal(wmOperatorType *ot, int flag)
|
||||
|
||||
RNA_def_boolean(ot->srna, "replace_sel", 1, "Replace Selection", "replace the current selection");
|
||||
|
||||
RNA_def_boolean(ot->srna, "overlap", 0, "Allow Overlap", "Don't correct overlap on new sequence strips");
|
||||
|
||||
if(flag & SEQPROP_FILES)
|
||||
RNA_def_collection_runtime(ot->srna, "files", &RNA_OperatorFileListElement, "Files", "");
|
||||
}
|
||||
@ -250,7 +252,11 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
|
||||
seq_active_set(scene, seq);
|
||||
seq->flag |= SELECT;
|
||||
}
|
||||
|
||||
|
||||
if(RNA_boolean_get(op->ptr, "overlap") == FALSE) {
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -303,8 +309,9 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
|
||||
Scene *scene= CTX_data_scene(C); /* only for sound */
|
||||
Editing *ed= seq_give_editing(scene, TRUE);
|
||||
SeqLoadInfo seq_load;
|
||||
/* Sequence *seq; */ /* UNUSED */
|
||||
Sequence *seq;
|
||||
int tot_files;
|
||||
const short overlap= RNA_boolean_get(op->ptr, "overlap");
|
||||
|
||||
seq_load_operator_info(&seq_load, op);
|
||||
|
||||
@ -324,13 +331,21 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
|
||||
RNA_string_get(&itemptr, "name", file_only);
|
||||
BLI_join_dirfile(seq_load.path, sizeof(seq_load.path), dir_only, file_only);
|
||||
|
||||
/* seq= */ seq_load_func(C, ed->seqbasep, &seq_load);
|
||||
seq= seq_load_func(C, ed->seqbasep, &seq_load);
|
||||
|
||||
if(overlap == FALSE) {
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
}
|
||||
}
|
||||
RNA_END;
|
||||
}
|
||||
else {
|
||||
/* single file */
|
||||
/* seq= */ seq_load_func(C, ed->seqbasep, &seq_load);
|
||||
seq= seq_load_func(C, ed->seqbasep, &seq_load);
|
||||
|
||||
if(overlap == FALSE) {
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
}
|
||||
}
|
||||
|
||||
if (seq_load.tot_success==0) {
|
||||
@ -506,7 +521,11 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* last active name */
|
||||
strncpy(ed->act_imagedir, strip->dir, FILE_MAXDIR-1);
|
||||
|
||||
|
||||
if(RNA_boolean_get(op->ptr, "overlap") == FALSE) {
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -656,7 +675,9 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
if(RNA_boolean_get(op->ptr, "overlap") == FALSE) {
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
}
|
||||
|
||||
update_changed_seq_and_deps(scene, seq, 1, 1); /* runs calc_sequence */
|
||||
|
||||
|
@ -467,14 +467,17 @@ void initSnapping(TransInfo *t, wmOperator *op)
|
||||
/* use scene defaults only when transform is modal */
|
||||
else if (t->flag & T_MODAL)
|
||||
{
|
||||
if (ts->snap_flag & SCE_SNAP) {
|
||||
t->modifiers |= MOD_SNAP;
|
||||
}
|
||||
if(ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE))
|
||||
{
|
||||
if (ts->snap_flag & SCE_SNAP) {
|
||||
t->modifiers |= MOD_SNAP;
|
||||
}
|
||||
|
||||
t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) == SCE_SNAP_ROTATE);
|
||||
t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
t->tsnap.snap_self = !((t->settings->snap_flag & SCE_SNAP_NO_SELF) == SCE_SNAP_NO_SELF);
|
||||
t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) == SCE_SNAP_ROTATE);
|
||||
t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
t->tsnap.snap_self = !((t->settings->snap_flag & SCE_SNAP_NO_SELF) == SCE_SNAP_NO_SELF);
|
||||
t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
}
|
||||
}
|
||||
|
||||
t->tsnap.target = snap_target;
|
||||
|
@ -1371,9 +1371,6 @@ void GPU_shaderesult_set(GPUShadeInput *shi, GPUShadeResult *shr)
|
||||
mat->obcolalpha = 1;
|
||||
GPU_link(mat, "shade_alpha_obcolor", shr->combined, GPU_builtin(GPU_OBCOLOR), &shr->combined);
|
||||
}
|
||||
|
||||
if(gpu_do_color_management(mat))
|
||||
GPU_link(mat, "linearrgb_to_srgb", shr->combined, &shr->combined);
|
||||
}
|
||||
|
||||
static GPUNodeLink *GPU_blender_material(GPUMaterial *mat, Material *ma)
|
||||
@ -1408,6 +1405,10 @@ GPUMaterial *GPU_material_from_blender(Scene *scene, Material *ma)
|
||||
GPU_material_output_link(mat, outlink);
|
||||
}
|
||||
|
||||
if(gpu_do_color_management(mat))
|
||||
if(mat->outlink)
|
||||
GPU_link(mat, "linearrgb_to_srgb", mat->outlink, &mat->outlink);
|
||||
|
||||
/*if(!GPU_material_construct_end(mat)) {
|
||||
GPU_material_free(mat);
|
||||
mat= NULL;
|
||||
|
@ -627,6 +627,7 @@ typedef struct MultiresModifierData {
|
||||
|
||||
typedef enum {
|
||||
eMultiresModifierFlag_ControlEdges = (1<<0),
|
||||
eMultiresModifierFlag_PlainUv = (1<<1),
|
||||
} MultiresModifierFlag;
|
||||
|
||||
typedef struct FluidsimModifierData {
|
||||
|
@ -1364,13 +1364,13 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
|
||||
if(prop->noteflag)
|
||||
WM_main_add_notifier(prop->noteflag, ptr->id.data);
|
||||
}
|
||||
else {
|
||||
|
||||
if(!is_rna || (prop->flag & PROP_IDPROPERTY)) {
|
||||
/* WARNING! This is so property drivers update the display!
|
||||
* not especially nice */
|
||||
DAG_id_tag_update(ptr->id.data, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME);
|
||||
WM_main_add_notifier(NC_WINDOW, NULL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* must keep in sync with 'rna_property_update'
|
||||
|
@ -871,6 +871,11 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges);
|
||||
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "use_subsurf_uv", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "flags", eMultiresModifierFlag_PlainUv);
|
||||
RNA_def_property_ui_text(prop, "Subdivide UVs", "Use subsurf to subdivide UVs");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
}
|
||||
|
||||
static void rna_def_modifier_lattice(BlenderRNA *brna)
|
||||
|
@ -155,7 +155,8 @@ void WM_init(bContext *C, int argc, const char **argv)
|
||||
BPY_python_start(argc, argv);
|
||||
|
||||
BPY_driver_reset();
|
||||
BPY_app_handlers_reset();
|
||||
BPY_app_handlers_reset(); /* causes addon callbacks to be freed [#28068],
|
||||
* but this is actually what we want. */
|
||||
BPY_modules_load_user(C);
|
||||
#else
|
||||
(void)argc; /* unused */
|
||||
|
@ -434,9 +434,12 @@ static int playback_mode(int UNUSED(argc), const char **UNUSED(argv), void *UNUS
|
||||
{
|
||||
/* not if -b was given first */
|
||||
if (G.background == 0) {
|
||||
|
||||
// XXX playanim(argc, argv); /* not the same argc and argv as before */
|
||||
#if 0 /* TODO, bring player back? */
|
||||
playanim(argc, argv); /* not the same argc and argv as before */
|
||||
#else
|
||||
fprintf(stderr, "Playback mode not supported in blender 2.5x\n");
|
||||
exit(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
return -2;
|
||||
|
@ -28,6 +28,7 @@ SKIP_DIRS = ("extern",
|
||||
os.path.join("source", "tests"), # not this dir
|
||||
)
|
||||
|
||||
|
||||
def is_c_header(filename):
|
||||
ext = splitext(filename)[1]
|
||||
return (ext in (".h", ".hpp", ".hxx"))
|
||||
@ -41,13 +42,16 @@ def is_c(filename):
|
||||
def is_c_any(filename):
|
||||
return is_c(filename) or is_c_header(filename)
|
||||
|
||||
|
||||
def is_py(filename):
|
||||
ext = splitext(filename)[1]
|
||||
return (ext == ".py")
|
||||
|
||||
|
||||
def is_source_any(filename):
|
||||
return is_c_any(filename) or is_py(filename)
|
||||
|
||||
|
||||
def source_list(path, filename_check=None):
|
||||
for dirpath, dirnames, filenames in os.walk(path):
|
||||
|
||||
@ -67,7 +71,7 @@ def deprecations():
|
||||
/* *DEPRECATED* 2011/7/17 bgl.Buffer.list info text */
|
||||
|
||||
Or...
|
||||
|
||||
|
||||
# *DEPRECATED* 2010/12/22 some.py.func more info */
|
||||
|
||||
"""
|
||||
@ -105,12 +109,12 @@ def deprecations():
|
||||
if len(data) != 3:
|
||||
print(" poorly formatting line:\n"
|
||||
" %r:%d\n"
|
||||
" %s"%
|
||||
" %s" %
|
||||
(fn, i + 1, l)
|
||||
)
|
||||
else:
|
||||
data = datetime.datetime(*tuple([int(w) for w in data]))
|
||||
|
||||
|
||||
deprecations_ls.append((data, (fn, i + 1), info))
|
||||
except:
|
||||
print("Error file - %r:%d" % (fn, i + 1))
|
||||
@ -123,10 +127,11 @@ def deprecations():
|
||||
|
||||
return deprecations_ls
|
||||
|
||||
|
||||
def main():
|
||||
import datetime
|
||||
now = datetime.datetime.now()\
|
||||
|
||||
|
||||
deps = deprecations()
|
||||
|
||||
print("\nAll deprecations...")
|
||||
|
Loading…
Reference in New Issue
Block a user