Merge branch 'master' into blender2.8
This commit is contained in:
@@ -112,8 +112,8 @@ if 'cmake' in builder:
|
|||||||
chroot_name = 'buildbot_' + deb_name + '_i686'
|
chroot_name = 'buildbot_' + deb_name + '_i686'
|
||||||
cuda_chroot_name = 'buildbot_' + deb_name + '_x86_64'
|
cuda_chroot_name = 'buildbot_' + deb_name + '_x86_64'
|
||||||
targets = ['player', 'blender', 'cuda']
|
targets = ['player', 'blender', 'cuda']
|
||||||
cmake_extra_options.extend(["-DCMAKE_C_COMPILER=/usr/bin/gcc-6",
|
cmake_extra_options.extend(["-DCMAKE_C_COMPILER=/usr/bin/gcc-7",
|
||||||
"-DCMAKE_CXX_COMPILER=/usr/bin/g++-6"])
|
"-DCMAKE_CXX_COMPILER=/usr/bin/g++-7"])
|
||||||
|
|
||||||
cmake_options.append("-C" + os.path.join(blender_dir, cmake_config_file))
|
cmake_options.append("-C" + os.path.join(blender_dir, cmake_config_file))
|
||||||
|
|
||||||
|
|||||||
@@ -1726,9 +1726,6 @@ def write_rst_contents(basepath):
|
|||||||
for info, info_desc in INFO_DOCS:
|
for info, info_desc in INFO_DOCS:
|
||||||
fw(" %s <%s>\n\n" % (info_desc, info))
|
fw(" %s <%s>\n\n" % (info_desc, info))
|
||||||
fw("\n")
|
fw("\n")
|
||||||
fw("- :ref:`Blender/Python Add-on Tutorial: a step by step guide on")
|
|
||||||
fw(" how to write an add-on from scratch <blender_manual:advanced_scripting_addon_tutorial>`\n")
|
|
||||||
fw("\n")
|
|
||||||
|
|
||||||
fw(title_string("Application Modules", "=", double=True))
|
fw(title_string("Application Modules", "=", double=True))
|
||||||
fw(".. toctree::\n")
|
fw(".. toctree::\n")
|
||||||
|
|||||||
@@ -530,7 +530,7 @@ void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_
|
|||||||
|
|
||||||
addSampler(sampler);
|
addSampler(sampler);
|
||||||
|
|
||||||
std::string target = translate_id(bone_name) + "/transform";
|
std::string target = get_joint_id(bone, ob_arm) + "/transform";
|
||||||
addChannel(COLLADABU::URI(empty, sampler_id), target);
|
addChannel(COLLADABU::URI(empty, sampler_id), target);
|
||||||
|
|
||||||
closeAnimation();
|
closeAnimation();
|
||||||
|
|||||||
@@ -924,8 +924,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
cent[2] = 0.0f;
|
cent[2] = 0.0f;
|
||||||
|
|
||||||
cu->xof = cu->xof - (cent[0] / cu->fsize);
|
cu->xof = cu->xof - cent[0];
|
||||||
cu->yof = cu->yof - (cent[1] / cu->fsize);
|
cu->yof = cu->yof - cent[1];
|
||||||
|
|
||||||
tot_change++;
|
tot_change++;
|
||||||
cu->id.tag |= LIB_TAG_DOIT;
|
cu->id.tag |= LIB_TAG_DOIT;
|
||||||
|
|||||||
@@ -570,8 +570,7 @@ static bool raycastEditMesh(
|
|||||||
}
|
}
|
||||||
|
|
||||||
SnapObjectData_EditMesh *sod = NULL;
|
SnapObjectData_EditMesh *sod = NULL;
|
||||||
|
BVHTreeFromEditMesh *treedata = NULL;
|
||||||
BVHTreeFromEditMesh *treedata;
|
|
||||||
|
|
||||||
void **sod_p;
|
void **sod_p;
|
||||||
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob, &sod_p)) {
|
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob, &sod_p)) {
|
||||||
@@ -1840,8 +1839,7 @@ static bool snapEditMesh(
|
|||||||
float local_scale = normalize_v3(ray_normal_local);
|
float local_scale = normalize_v3(ray_normal_local);
|
||||||
|
|
||||||
SnapObjectData_EditMesh *sod = NULL;
|
SnapObjectData_EditMesh *sod = NULL;
|
||||||
|
BVHTreeFromEditMesh *treedata = NULL;
|
||||||
BVHTreeFromEditMesh *treedata;
|
|
||||||
|
|
||||||
void **sod_p;
|
void **sod_p;
|
||||||
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob, &sod_p)) {
|
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob, &sod_p)) {
|
||||||
|
|||||||
@@ -217,9 +217,27 @@ static void where_is_ik_bone(bPoseChannel *pchan, float ik_mat[3][3]) // nr =
|
|||||||
copy_m4_m3(ikmat, ik_mat);
|
copy_m4_m3(ikmat, ik_mat);
|
||||||
|
|
||||||
if (pchan->parent)
|
if (pchan->parent)
|
||||||
mul_m4_series(pchan->pose_mat, pchan->parent->pose_mat, pchan->chan_mat, ikmat);
|
mul_m4_m4m4(pchan->pose_mat, pchan->parent->pose_mat, pchan->chan_mat);
|
||||||
else
|
else
|
||||||
mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, ikmat);
|
copy_m4_m4(pchan->pose_mat, pchan->chan_mat);
|
||||||
|
|
||||||
|
#ifdef USE_NONUNIFORM_SCALE
|
||||||
|
/* apply IK mat, but as if the bones have uniform scale since the IK solver
|
||||||
|
* is not aware of non-uniform scale */
|
||||||
|
float scale[3];
|
||||||
|
mat4_to_size(scale, pchan->pose_mat);
|
||||||
|
normalize_v3_length(pchan->pose_mat[0], scale[1]);
|
||||||
|
normalize_v3_length(pchan->pose_mat[2], scale[1]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
mul_m4_m4m4(pchan->pose_mat, pchan->pose_mat, ikmat);
|
||||||
|
|
||||||
|
#ifdef USE_NONUNIFORM_SCALE
|
||||||
|
float ik_scale[3];
|
||||||
|
mat3_to_size(ik_scale, ik_mat);
|
||||||
|
normalize_v3_length(pchan->pose_mat[0], scale[0] * ik_scale[0]);
|
||||||
|
normalize_v3_length(pchan->pose_mat[2], scale[2] * ik_scale[2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* calculate head */
|
/* calculate head */
|
||||||
copy_v3_v3(pchan->pose_head, pchan->pose_mat[3]);
|
copy_v3_v3(pchan->pose_head, pchan->pose_mat[3]);
|
||||||
@@ -308,6 +326,10 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree)
|
|||||||
/* change length based on bone size */
|
/* change length based on bone size */
|
||||||
length = bone->length * len_v3(R_bonemat[1]);
|
length = bone->length * len_v3(R_bonemat[1]);
|
||||||
|
|
||||||
|
/* basis must be pure rotation */
|
||||||
|
normalize_m3(R_bonemat);
|
||||||
|
normalize_m3(R_parmat);
|
||||||
|
|
||||||
/* compute rest basis and its inverse */
|
/* compute rest basis and its inverse */
|
||||||
copy_m3_m3(rest_basis, bone->bone_mat);
|
copy_m3_m3(rest_basis, bone->bone_mat);
|
||||||
transpose_m3_m3(irest_basis, bone->bone_mat);
|
transpose_m3_m3(irest_basis, bone->bone_mat);
|
||||||
@@ -317,11 +339,7 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree)
|
|||||||
mul_m3_m3m3(full_basis, iR_parmat, R_bonemat);
|
mul_m3_m3m3(full_basis, iR_parmat, R_bonemat);
|
||||||
mul_m3_m3m3(basis, irest_basis, full_basis);
|
mul_m3_m3m3(basis, irest_basis, full_basis);
|
||||||
|
|
||||||
/* basis must be pure rotation */
|
|
||||||
normalize_m3(basis);
|
|
||||||
|
|
||||||
/* transform offset into local bone space */
|
/* transform offset into local bone space */
|
||||||
normalize_m3(iR_parmat);
|
|
||||||
mul_m3_v3(iR_parmat, start);
|
mul_m3_v3(iR_parmat, start);
|
||||||
|
|
||||||
IK_SetTransform(seg, start, rest_basis, basis, length);
|
IK_SetTransform(seg, start, rest_basis, basis, length);
|
||||||
@@ -545,18 +563,6 @@ void iksolver_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan
|
|||||||
tree->pchan[a]->flag |= POSE_CHAIN;
|
tree->pchan[a]->flag |= POSE_CHAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NONUNIFORM_SCALE
|
|
||||||
float (*pchan_scale_data)[3] = MEM_mallocN(sizeof(float[3]) * tree->totchannel, __func__);
|
|
||||||
|
|
||||||
for (a = 0; a < tree->totchannel; a++) {
|
|
||||||
mat4_to_size(pchan_scale_data[a], tree->pchan[a]->pose_mat);
|
|
||||||
|
|
||||||
/* make uniform at y scale since this controls the length */
|
|
||||||
normalize_v3_length(tree->pchan[a]->pose_mat[0], pchan_scale_data[a][1]);
|
|
||||||
normalize_v3_length(tree->pchan[a]->pose_mat[2], pchan_scale_data[a][1]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 5. execute the IK solver */
|
/* 5. execute the IK solver */
|
||||||
execute_posetree(scene, ob, tree);
|
execute_posetree(scene, ob, tree);
|
||||||
|
|
||||||
@@ -571,14 +577,6 @@ void iksolver_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan
|
|||||||
where_is_ik_bone(tree->pchan[a], tree->basis_change[a]);
|
where_is_ik_bone(tree->pchan[a], tree->basis_change[a]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NONUNIFORM_SCALE
|
|
||||||
for (a = 0; a < tree->totchannel; a++) {
|
|
||||||
normalize_v3_length(tree->pchan[a]->pose_mat[0], pchan_scale_data[a][0]);
|
|
||||||
normalize_v3_length(tree->pchan[a]->pose_mat[2], pchan_scale_data[a][2]);
|
|
||||||
}
|
|
||||||
MEM_freeN(pchan_scale_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 7. and free */
|
/* 7. and free */
|
||||||
BLI_remlink(&pchan_root->iktree, tree);
|
BLI_remlink(&pchan_root->iktree, tree);
|
||||||
free_posetree(tree);
|
free_posetree(tree);
|
||||||
|
|||||||
@@ -3919,12 +3919,18 @@ static void rna_def_userdef_system(BlenderRNA *brna)
|
|||||||
|
|
||||||
prop = RNA_def_property(srna, "dpi", PROP_INT, PROP_NONE);
|
prop = RNA_def_property(srna, "dpi", PROP_INT, PROP_NONE);
|
||||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||||
RNA_def_property_ui_text(prop, "DPI", "Font size and resolution for display");
|
RNA_def_property_ui_text(prop, "DPI",
|
||||||
|
"DPI for addons to use when drawing custom user interface elements. Controlled by "
|
||||||
|
"operating system settings and Blender UI scale, with a reference value of 72 DPI. "
|
||||||
|
"Note that since this value includes a user defined scale, it is not always the "
|
||||||
|
"actual monitor DPI");
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "pixel_size", PROP_FLOAT, PROP_NONE);
|
prop = RNA_def_property(srna, "pixel_size", PROP_FLOAT, PROP_NONE);
|
||||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||||
RNA_def_property_float_sdna(prop, NULL, "pixelsize");
|
RNA_def_property_float_sdna(prop, NULL, "pixelsize");
|
||||||
RNA_def_property_ui_text(prop, "Pixel Size", "");
|
RNA_def_property_ui_text(prop, "Pixel Size",
|
||||||
|
"Suggested line thickness and point size in pixels, for addons drawing custom user "
|
||||||
|
"interface elements. Controlled by operating system settings and Blender UI scale");
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "font_path_ui", PROP_STRING, PROP_FILEPATH);
|
prop = RNA_def_property(srna, "font_path_ui", PROP_STRING, PROP_FILEPATH);
|
||||||
RNA_def_property_string_sdna(prop, NULL, "font_path_ui");
|
RNA_def_property_string_sdna(prop, NULL, "font_path_ui");
|
||||||
|
|||||||
@@ -2697,7 +2697,8 @@ PyDoc_STRVAR(BPy_EnumProperty_doc,
|
|||||||
" :icon: An icon string identifier or integer icon value\n"
|
" :icon: An icon string identifier or integer icon value\n"
|
||||||
" (e.g. returned by :class:`bpy.types.UILayout.icon`)\n"
|
" (e.g. returned by :class:`bpy.types.UILayout.icon`)\n"
|
||||||
" :number: Unique value used as the identifier for this item (stored in file data).\n"
|
" :number: Unique value used as the identifier for this item (stored in file data).\n"
|
||||||
" Use when the identifier may need to change.\n"
|
" Use when the identifier may need to change. If the *ENUM_FLAG* option is used,\n"
|
||||||
|
" the values are bitmasks and should be powers of two.\n"
|
||||||
"\n"
|
"\n"
|
||||||
" When an item only contains 4 items they define ``(identifier, name, description, number)``.\n"
|
" When an item only contains 4 items they define ``(identifier, name, description, number)``.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|||||||
@@ -418,6 +418,11 @@ void WM_window_set_dpi(wmWindow *win)
|
|||||||
{
|
{
|
||||||
int auto_dpi = GHOST_GetDPIHint(win->ghostwin);
|
int auto_dpi = GHOST_GetDPIHint(win->ghostwin);
|
||||||
|
|
||||||
|
/* Clamp auto DPI to 96, since our font/interface drawing does not work well
|
||||||
|
* with lower sizes. The main case we are interested in supporting is higher
|
||||||
|
* DPI. If a smaller UI is desired it is still possible to adjust UI scale. */
|
||||||
|
auto_dpi = MAX2(auto_dpi, 96);
|
||||||
|
|
||||||
/* Lazily init UI scale size, preserving backwards compatibility by
|
/* Lazily init UI scale size, preserving backwards compatibility by
|
||||||
* computing UI scale from ratio of previous DPI and auto DPI */
|
* computing UI scale from ratio of previous DPI and auto DPI */
|
||||||
if (U.ui_scale == 0) {
|
if (U.ui_scale == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user