Merge branch 'master' into blender2.8

This commit is contained in:
Julian Eisel
2016-10-07 00:22:21 +02:00
7 changed files with 47 additions and 103 deletions

View File

@@ -579,13 +579,16 @@ static void MergeVertsFast(int piTriList_in_and_out[], STmpVert pTmpVert[], cons
{
// make bbox
int c=0, l=0, channel=0;
float fvMin[3] = {INFINITY, INFINITY, INFINITY};
float fvMax[3] = {-INFINITY, -INFINITY, -INFINITY};
float fvMin[3], fvMax[3];
float dx=0, dy=0, dz=0, fSep=0;
for (l=iL_in; l<=iR_in; l++)
for (c=0; c<3; c++)
{ fvMin[c]=pTmpVert[iL_in].vert[c]; fvMax[c]=fvMin[c]; }
for (l=(iL_in+1); l<=iR_in; l++) {
for (c=0; c<3; c++) {
if (fvMin[c]>pTmpVert[l].vert[c]) fvMin[c]=pTmpVert[l].vert[c];
else if (fvMax[c]<pTmpVert[l].vert[c]) fvMax[c]=pTmpVert[l].vert[c];
if (fvMax[c]<pTmpVert[l].vert[c]) fvMax[c]=pTmpVert[l].vert[c];
}
}
dx = fvMax[0]-fvMin[0];
dy = fvMax[1]-fvMin[1];

View File

@@ -126,24 +126,12 @@ set BUILD_DIR=%BUILD_DIR%_%TARGET%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
if "%target%"=="Release" (
rem for vc12 check for both cuda 7.5 and 8
if "%BUILD_VS_VER%"=="12" (
if "%CUDA_PATH_V7_5%"=="" (
echo Cuda 7.5 Not found, aborting!
if "%CUDA_PATH%"=="" (
echo Cuda Not found, aborting!
goto EOF
)
)
if "%CUDA_PATH_V8_0%"=="" (
echo Cuda 8.0 Not found, aborting!
goto EOF
)
if "%BUILD_VS_VER%"=="12" (
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake" -DCUDA_NVCC_EXECUTABLE:FILEPATH=%CUDA_PATH_V7_5%/bin/nvcc.exe -DCUDA_NVCC8_EXECUTABLE:FILEPATH=%CUDA_PATH_V8_0%/bin/nvcc.exe
)
if "%BUILD_VS_VER%"=="14" (
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake" -DCUDA_NVCC_EXECUTABLE:FILEPATH=%CUDA_PATH_V8_0%/bin/nvcc.exe -DCUDA_NVCC8_EXECUTABLE:FILEPATH=%CUDA_PATH_V8_0%/bin/nvcc.exe
)
-C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake"
)
:DetectMSVC

View File

@@ -1006,10 +1006,10 @@ class WM_OT_doc_view(Operator):
doc_id = doc_id
if bpy.app.version_cycle == "release":
_prefix = ("http://www.blender.org/documentation/blender_python_api_%s%s_release" %
_prefix = ("https://www.blender.org/api/blender_python_api_%s%s_release" %
("_".join(str(v) for v in bpy.app.version[:2]), bpy.app.version_char))
else:
_prefix = ("http://www.blender.org/documentation/blender_python_api_%s" %
_prefix = ("https://www.blender.org/api/blender_python_api_%s" %
"_".join(str(v) for v in bpy.app.version))
def execute(self, context):
@@ -1023,79 +1023,6 @@ class WM_OT_doc_view(Operator):
return {'FINISHED'}
'''
class WM_OT_doc_edit(Operator):
"""Edit online reference docs"""
bl_idname = "wm.doc_edit"
bl_label = "Edit Documentation"
doc_id = doc_id
doc_new = doc_new
_url = "http://www.mindrones.com/blender/svn/xmlrpc.php"
def _send_xmlrpc(self, data_dict):
print("sending data:", data_dict)
import xmlrpc.client
user = "blenderuser"
pwd = "blender>user"
docblog = xmlrpc.client.ServerProxy(self._url)
docblog.metaWeblog.newPost(1, user, pwd, data_dict, 1)
def execute(self, context):
doc_id = self.doc_id
doc_new = self.doc_new
class_name, class_prop = doc_id.split('.')
if not doc_new:
self.report({'ERROR'}, "No input given for '%s'" % doc_id)
return {'CANCELLED'}
# check if this is an operator
op_name = class_name.upper() + '_OT_' + class_prop
op_class = getattr(bpy.types, op_name, None)
# Upload this to the web server
upload = {}
if op_class:
rna = op_class.bl_rna
doc_orig = rna.description
if doc_orig == doc_new:
return {'RUNNING_MODAL'}
print("op - old:'%s' -> new:'%s'" % (doc_orig, doc_new))
upload["title"] = 'OPERATOR %s:%s' % (doc_id, doc_orig)
else:
rna = getattr(bpy.types, class_name).bl_rna
doc_orig = rna.properties[class_prop].description
if doc_orig == doc_new:
return {'RUNNING_MODAL'}
print("rna - old:'%s' -> new:'%s'" % (doc_orig, doc_new))
upload["title"] = 'RNA %s:%s' % (doc_id, doc_orig)
upload["description"] = doc_new
self._send_xmlrpc(upload)
return {'FINISHED'}
def draw(self, context):
layout = self.layout
layout.label(text="Descriptor ID: '%s'" % self.doc_id)
layout.prop(self, "doc_new", text="")
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_props_dialog(self, width=600)
'''
rna_path = StringProperty(
name="Property Edit",
description="Property data_path edit",

View File

@@ -254,6 +254,21 @@ static void library_foreach_paint(LibraryForeachIDData *data, Paint *paint)
FOREACH_FINALIZE_VOID;
}
static void library_foreach_ID_as_subdata_link(
ID *id, LibraryIDLinkCallback callback, void *user_data, int flag, LibraryForeachIDData *data)
{
if (flag & IDWALK_RECURSE) {
/* Defer handling into main loop, recursively calling BKE_library_foreach_ID_link in IDWALK_RECURSE case is
* troublesome, see T49553. */
if (!BLI_gset_haskey(data->ids_handled, id)) {
BLI_gset_add(data->ids_handled, id);
BLI_LINKSTACK_PUSH(data->ids_todo, id);
}
}
else {
BKE_library_foreach_ID_link(id, callback, user_data, flag);
}
}
/**
* Loop over all of the ID's this datablock links to.
@@ -271,6 +286,8 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
data.ids_handled = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
BLI_LINKSTACK_INIT(data.ids_todo);
BLI_gset_add(data.ids_handled, id);
}
else {
data.ids_handled = NULL;
@@ -315,7 +332,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
CALLBACK_INVOKE(scene->clip, IDWALK_USER);
if (scene->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)scene->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)scene->nodetree, callback, user_data, flag, &data);
}
/* DO NOT handle scene->basact here, it's doubling with the loop over whole scene->base later,
* since basact is just a pointer to one of those items. */
@@ -570,7 +587,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
}
if (material->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)material->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)material->nodetree, callback, user_data, flag, &data);
}
CALLBACK_INVOKE(material->group, IDWALK_USER);
break;
@@ -581,7 +598,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
Tex *texture = (Tex *) id;
if (texture->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)texture->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)texture->nodetree, callback, user_data, flag, &data);
}
CALLBACK_INVOKE(texture->ima, IDWALK_USER);
if (texture->env) {
@@ -614,7 +631,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
}
if (lamp->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)lamp->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)lamp->nodetree, callback, user_data, flag, &data);
}
break;
}
@@ -654,7 +671,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
}
if (world->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)world->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)world->nodetree, callback, user_data, flag, &data);
}
break;
}
@@ -751,7 +768,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
}
if (linestyle->nodetree) {
/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
BKE_library_foreach_ID_link((ID *)linestyle->nodetree, callback, user_data, flag);
library_foreach_ID_as_subdata_link((ID *)linestyle->nodetree, callback, user_data, flag, &data);
}
for (lsm = linestyle->color_modifiers.first; lsm; lsm = lsm->next) {

View File

@@ -3049,6 +3049,14 @@ static bool constructive_modifier_is_deform_modified(ModifierData *md)
ScrewModifierData *smd = (ScrewModifierData *)md;
return smd->ob_axis != NULL && object_moves_in_time(smd->ob_axis);
}
else if (md->type == eModifierType_MeshSequenceCache) {
/* NOTE: Not ideal because it's unknown whether topology changes or not.
* This will be detected later, so by assuming it's only deformation
* going on here we allow to bake deform-only mesh to Alembic and have
* proper motion blur after that.
*/
return true;
}
return false;
}

View File

@@ -144,7 +144,7 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "data_path_primary", "user_preferences.edit.grease_pencil_eraser_radius");
/* Interpolation */
WM_keymap_add_item(keymap, "GPENCIL_OT_interpolate", EKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "GPENCIL_OT_interpolate", EKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
WM_keymap_add_item(keymap, "GPENCIL_OT_interpolate_sequence", EKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0);
/* Sculpting ------------------------------------- */

View File

@@ -2639,6 +2639,7 @@ static void ui_draw_separator(const rcti *rect, uiWidgetColors *wcol)
glEnable(GL_BLEND);
glColor4ubv(col);
glLineWidth(1.0f);
sdrawline(rect->xmin, y, rect->xmax, y);
glDisable(GL_BLEND);
}