diff --git a/intern/mikktspace/mikktspace.c b/intern/mikktspace/mikktspace.c index 8d51816b132..0342ae0146f 100644 --- a/intern/mikktspace/mikktspace.c +++ b/intern/mikktspace/mikktspace.c @@ -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++) + 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] 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", diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c index 66aa8e3f498..c8b0900f217 100644 --- a/source/blender/blenkernel/intern/library_query.c +++ b/source/blender/blenkernel/intern/library_query.c @@ -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) { diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 16e15e78185..85322408099 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -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; } diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c index 98cdbadb87d..057d53ea458 100644 --- a/source/blender/editors/gpencil/gpencil_ops.c +++ b/source/blender/editors/gpencil/gpencil_ops.c @@ -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 ------------------------------------- */ diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index a3686cb37d6..321d4b3e1f5 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -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); }