Merge branch 'master' into sculpt-dev
|
@ -1231,7 +1231,7 @@ function(find_python_package
|
|||
set(WITH_PYTHON_INSTALL_${_upper_package} OFF PARENT_SCOPE)
|
||||
else()
|
||||
message(STATUS "${package} found at '${PYTHON_${_upper_package}_PATH}'")
|
||||
|
||||
|
||||
if(NOT "${relative_include_dir}" STREQUAL "")
|
||||
set(_relative_include_dir "${package}/${relative_include_dir}")
|
||||
unset(PYTHON_${_upper_package}_INCLUDE_DIRS CACHE)
|
||||
|
|
|
@ -38,7 +38,7 @@ PROJECT_NAME = Blender
|
|||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = "V2.92"
|
||||
PROJECT_NUMBER = "V2.93"
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
|
|
@ -170,7 +170,7 @@ struct ApplyMatrix : public KernelBase {
|
|||
unusedParameter(vecRhs); // Not needed in this matrix application
|
||||
|
||||
if (matrixA.size() != 4)
|
||||
errMsg("ConjugatedGrad: Invalid A matrix in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid A matrix in apply matrix step");
|
||||
Grid<Real> &A0 = *matrixA[0];
|
||||
Grid<Real> &Ai = *matrixA[1];
|
||||
Grid<Real> &Aj = *matrixA[2];
|
||||
|
@ -256,7 +256,7 @@ struct ApplyMatrix2D : public KernelBase {
|
|||
unusedParameter(vecRhs); // Not needed in this matrix application
|
||||
|
||||
if (matrixA.size() != 3)
|
||||
errMsg("ConjugatedGrad: Invalid A matrix in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid A matrix in apply matrix step");
|
||||
Grid<Real> &A0 = *matrixA[0];
|
||||
Grid<Real> &Ai = *matrixA[1];
|
||||
Grid<Real> &Aj = *matrixA[2];
|
||||
|
@ -338,7 +338,7 @@ struct ApplyMatrixViscosityU : public KernelBase {
|
|||
const std::vector<Grid<Real> *> vecRhs) const
|
||||
{
|
||||
if (matrixA.size() != 15)
|
||||
errMsg("ConjugatedGrad: Invalid A matrix in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid A matrix in apply matrix step");
|
||||
Grid<Real> &A0 = *matrixA[0];
|
||||
Grid<Real> &Aplusi = *matrixA[1];
|
||||
Grid<Real> &Aplusj = *matrixA[2];
|
||||
|
@ -348,7 +348,7 @@ struct ApplyMatrixViscosityU : public KernelBase {
|
|||
Grid<Real> &Aminusk = *matrixA[6];
|
||||
|
||||
if (vecRhs.size() != 2)
|
||||
errMsg("ConjugatedGrad: Invalid rhs vector in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid rhs vector in apply matrix step");
|
||||
Grid<Real> &srcV = *vecRhs[0];
|
||||
Grid<Real> &srcW = *vecRhs[1];
|
||||
|
||||
|
@ -450,7 +450,7 @@ struct ApplyMatrixViscosityV : public KernelBase {
|
|||
const std::vector<Grid<Real> *> vecRhs) const
|
||||
{
|
||||
if (matrixA.size() != 15)
|
||||
errMsg("ConjugatedGrad: Invalid A matrix in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid A matrix in apply matrix step");
|
||||
Grid<Real> &A0 = *matrixA[0];
|
||||
Grid<Real> &Aplusi = *matrixA[1];
|
||||
Grid<Real> &Aplusj = *matrixA[2];
|
||||
|
@ -460,7 +460,7 @@ struct ApplyMatrixViscosityV : public KernelBase {
|
|||
Grid<Real> &Aminusk = *matrixA[6];
|
||||
|
||||
if (vecRhs.size() != 2)
|
||||
errMsg("ConjugatedGrad: Invalid rhs vector in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid rhs vector in apply matrix step");
|
||||
Grid<Real> &srcU = *vecRhs[0];
|
||||
Grid<Real> &srcW = *vecRhs[1];
|
||||
|
||||
|
@ -562,7 +562,7 @@ struct ApplyMatrixViscosityW : public KernelBase {
|
|||
const std::vector<Grid<Real> *> vecRhs) const
|
||||
{
|
||||
if (matrixA.size() != 15)
|
||||
errMsg("ConjugatedGrad: Invalid A matrix in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid A matrix in apply matrix step");
|
||||
Grid<Real> &A0 = *matrixA[0];
|
||||
Grid<Real> &Aplusi = *matrixA[1];
|
||||
Grid<Real> &Aplusj = *matrixA[2];
|
||||
|
@ -572,7 +572,7 @@ struct ApplyMatrixViscosityW : public KernelBase {
|
|||
Grid<Real> &Aminusk = *matrixA[6];
|
||||
|
||||
if (vecRhs.size() != 2)
|
||||
errMsg("ConjugatedGrad: Invalid rhs vector in apply matrix step");
|
||||
errMsg("ConjugateGrad: Invalid rhs vector in apply matrix step");
|
||||
Grid<Real> &srcU = *vecRhs[0];
|
||||
Grid<Real> &srcV = *vecRhs[1];
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ struct KnEstimateVolumeFraction : public KernelBase {
|
|||
{
|
||||
const Vec3 centre = startCentre + Vec3(i, j, k) * 0.5;
|
||||
const Real offset = 0.5 * dx;
|
||||
const int order = 2;
|
||||
const int order = 1; // is sufficient
|
||||
|
||||
Real phi000 = phi.getInterpolatedHi(centre + Vec3(-offset, -offset, -offset), order);
|
||||
Real phi001 = phi.getInterpolatedHi(centre + Vec3(-offset, -offset, +offset), order);
|
||||
|
@ -1067,10 +1067,8 @@ void solveViscosity(const FlagGrid &flags,
|
|||
|
||||
Real viscTop = 0.25 * (viscosity(i, j, k) + viscosity(i, j, k - 1) + viscosity(i, j + 1, k) +
|
||||
viscosity(i, j + 1, k - 1));
|
||||
;
|
||||
Real viscBottom = 0.25 * (viscosity(i, j, k) + viscosity(i, j, k - 1) +
|
||||
viscosity(i, j - 1, k) + viscosity(i, j - 1, k - 1));
|
||||
;
|
||||
Real volTop = exVolLiquid(i, j + 1, k);
|
||||
Real volBottom = exVolLiquid(i, j, k);
|
||||
|
||||
|
@ -1224,7 +1222,7 @@ void solveViscosity(const FlagGrid &flags,
|
|||
uSolution, uRhs, uResidual, uSearch, flags, uTmp, uMatA, uVecRhs);
|
||||
}
|
||||
else {
|
||||
errMsg("2D Matrix application not yet supported in viscosity solver");
|
||||
errMsg("Viscosity: 2D Matrix application not yet supported in viscosity solver");
|
||||
}
|
||||
|
||||
// CG solver for V
|
||||
|
@ -1249,7 +1247,7 @@ void solveViscosity(const FlagGrid &flags,
|
|||
vSolution, vRhs, vResidual, vSearch, flags, vTmp, vMatA, vVecRhs);
|
||||
}
|
||||
else {
|
||||
errMsg("2D Matrix application not yet supported in viscosity solver");
|
||||
errMsg("Viscosity: 2D Matrix application not yet supported in viscosity solver");
|
||||
}
|
||||
|
||||
// CG solver for W
|
||||
|
@ -1274,7 +1272,7 @@ void solveViscosity(const FlagGrid &flags,
|
|||
wSolution, wRhs, wResidual, wSearch, flags, wTmp, wMatA, wVecRhs);
|
||||
}
|
||||
else {
|
||||
errMsg("2D Matrix application not yet supported in viscosity solver");
|
||||
errMsg("Viscosity: 2D Matrix application not yet supported in viscosity solver");
|
||||
}
|
||||
|
||||
// Same accuracy for all dimensions
|
||||
|
@ -1308,7 +1306,7 @@ void solveViscosity(const FlagGrid &flags,
|
|||
wRhs.copyFrom(wSearch);
|
||||
}
|
||||
debMsg(
|
||||
"Viscosity::solveViscosity done. "
|
||||
"Viscosity: solveViscosity() done. "
|
||||
"Iterations (u,v,w): ("
|
||||
<< uGcg->getIterations() << "," << vGcg->getIterations() << "," << wGcg->getIterations()
|
||||
<< "), "
|
||||
|
|
|
@ -1148,7 +1148,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||
split = layout.split(factor=0.65)
|
||||
|
||||
if ob:
|
||||
split.template_ID(ob, "active_material", new="material.new", duplicate="material.duplicate")
|
||||
split.template_ID(ob, "active_material", new="material.new")
|
||||
row = split.row()
|
||||
|
||||
if slot:
|
||||
|
|
|
@ -323,7 +323,7 @@ bool OSLShaderManager::osl_compile(const string &inputfile, const string &output
|
|||
string include_path_arg = string("-I") + shader_path;
|
||||
options.push_back(include_path_arg);
|
||||
|
||||
stdosl_path = path_get("shader/stdcycles.h");
|
||||
stdosl_path = path_join(shader_path, "stdcycles.h");
|
||||
|
||||
/* compile */
|
||||
OSL::OSLCompiler *compiler = new OSL::OSLCompiler(&OSL::ErrorHandler::default_handler());
|
||||
|
|
|
@ -836,7 +836,7 @@ const bTheme U_theme_default = {
|
|||
.nodeclass_filter = RGBA(0x584d80ff),
|
||||
.nodeclass_vector = RGBA(0x9b80ffff),
|
||||
.nodeclass_texture = RGBA(0xe68745ff),
|
||||
.nodeclass_shader = RGBA(0xea7581ff),
|
||||
.nodeclass_shader = RGBA(0x63c763ff),
|
||||
.nodeclass_script = RGBA(0x084d4dff),
|
||||
.nodeclass_pattern = RGBA(0x6c696fff),
|
||||
.nodeclass_layout = RGBA(0x6c696fff),
|
||||
|
|
|
@ -788,9 +788,9 @@ def km_outliner(params):
|
|||
("outliner.select_box", {"type": 'B', "value": 'PRESS'}, None),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("tweak", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True},
|
||||
{"properties": [("tweak", True), ("mode", "ADD")]}),
|
||||
{"properties": [("tweak", True), ("mode", 'ADD')]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
|
||||
{"properties": [("tweak", True), ("mode", "SUB")]}),
|
||||
{"properties": [("tweak", True), ("mode", 'SUB')]}),
|
||||
("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
|
||||
{"properties": [("direction", 'UP')]}),
|
||||
("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
|
||||
|
@ -1445,7 +1445,7 @@ def km_time_scrub(_params):
|
|||
)
|
||||
|
||||
items.extend([
|
||||
("anim.change_frame", {"type": "LEFTMOUSE", "value": 'PRESS'}, None),
|
||||
("anim.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
@ -1460,7 +1460,7 @@ def km_time_scrub_clip(_params):
|
|||
)
|
||||
|
||||
items.extend([
|
||||
("clip.change_frame", {"type": "LEFTMOUSE", "value": 'PRESS'}, None),
|
||||
("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
@ -4396,9 +4396,9 @@ def km_sculpt(params):
|
|||
("sculpt.mask_expand", {"type": 'W', "value": 'PRESS', "shift": True},
|
||||
{"properties": [("use_normals", False), ("keep_previous_mask", False), ("invert", False), ("smooth_iterations", 0), ("create_face_set", True)]}),
|
||||
("sculpt.face_set_edit", {"type": 'W', "value": 'PRESS', "ctrl": True},
|
||||
{"properties": [("mode", "GROW")]}),
|
||||
{"properties": [("mode", 'GROW')]}),
|
||||
("sculpt.face_set_edit", {"type": 'W', "value": 'PRESS', "ctrl": True, "alt": True},
|
||||
{"properties": [("mode", "SHRINK")]}),
|
||||
{"properties": [("mode", 'SHRINK')]}),
|
||||
# Subdivision levels
|
||||
*_template_items_object_subdivision_set(),
|
||||
("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True},
|
||||
|
|
|
@ -494,9 +494,9 @@ def km_outliner(params):
|
|||
{"properties": [("extend", True), ("extend_range", True), ("deselect_all", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("tweak", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True},
|
||||
{"properties": [("tweak", True), ("mode", "ADD")]}),
|
||||
{"properties": [("tweak", True), ("mode", 'ADD')]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True},
|
||||
{"properties": [("tweak", True), ("mode", "SUB")]}),
|
||||
{"properties": [("tweak", True), ("mode", 'SUB')]}),
|
||||
("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True},
|
||||
{"properties": [("direction", 'UP')]}),
|
||||
("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True},
|
||||
|
@ -586,7 +586,7 @@ def km_uv_editor(params):
|
|||
("uv.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True},
|
||||
{"properties": [("extend", True), ("deselect_all", False)]}),
|
||||
|
||||
("transform.translate", {"type": "EVT_TWEAK_L", "value": 'ANY'}, None),
|
||||
("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
|
||||
("uv.select_loop", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK', "shift": True},
|
||||
{"properties": [("extend", True)]}),
|
||||
("uv.select_loop", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'},
|
||||
|
|
|
@ -225,7 +225,7 @@ class ConstraintButtonsPanel(Panel):
|
|||
sub.active = con.use_limit_x
|
||||
sub.prop(con, "min_x", text="Min")
|
||||
sub.prop(con, "max_x", text="Max")
|
||||
row.label(icon="BLANK1")
|
||||
row.label(icon='BLANK1')
|
||||
|
||||
row = layout.row(heading="Y", align=True)
|
||||
row.use_property_decorate = False
|
||||
|
@ -234,7 +234,7 @@ class ConstraintButtonsPanel(Panel):
|
|||
sub.active = con.use_limit_y
|
||||
sub.prop(con, "min_y", text="Min")
|
||||
sub.prop(con, "max_y", text="Max")
|
||||
row.label(icon="BLANK1")
|
||||
row.label(icon='BLANK1')
|
||||
|
||||
row = layout.row(heading="Z", align=True)
|
||||
row.use_property_decorate = False
|
||||
|
@ -243,7 +243,7 @@ class ConstraintButtonsPanel(Panel):
|
|||
sub.active = con.use_limit_z
|
||||
sub.prop(con, "min_z", text="Min")
|
||||
sub.prop(con, "max_z", text="Max")
|
||||
row.label(icon="BLANK1")
|
||||
row.label(icon='BLANK1')
|
||||
|
||||
layout.prop(con, "use_transform_limit")
|
||||
self.space_template(layout, con, target=False, owner=True)
|
||||
|
@ -556,7 +556,7 @@ class ConstraintButtonsPanel(Panel):
|
|||
|
||||
row = layout.row()
|
||||
row.prop(con, "distance")
|
||||
row.operator("constraint.limitdistance_reset", text="", icon="X")
|
||||
row.operator("constraint.limitdistance_reset", text="", icon='X')
|
||||
|
||||
layout.prop(con, "limit_mode", text="Clamp Region")
|
||||
|
||||
|
@ -576,7 +576,7 @@ class ConstraintButtonsPanel(Panel):
|
|||
|
||||
row = layout.row()
|
||||
row.prop(con, "rest_length")
|
||||
row.operator("constraint.stretchto_reset", text="", icon="X")
|
||||
row.operator("constraint.stretchto_reset", text="", icon='X')
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
|
|
@ -592,7 +592,7 @@ class GreasePencilMaterialsPanel:
|
|||
if show_full_ui:
|
||||
row = layout.row()
|
||||
|
||||
row.template_ID(ob, "active_material", new="material.new", duplicate="material.duplicate", live_icon=True)
|
||||
row.template_ID(ob, "active_material", new="material.new", live_icon=True)
|
||||
|
||||
slot = context.material_slot
|
||||
if slot:
|
||||
|
|
|
@ -133,7 +133,7 @@ class EEVEE_MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
|
|||
row = layout.row()
|
||||
|
||||
if ob:
|
||||
row.template_ID(ob, "active_material", new="material.new", duplicate="material.duplicate")
|
||||
row.template_ID(ob, "active_material", new="material.new")
|
||||
|
||||
if slot:
|
||||
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
||||
|
|
|
@ -92,7 +92,7 @@ class PHYSICS_PT_add(PhysicButtonsPanel, Panel):
|
|||
if obj.type == 'MESH':
|
||||
row = physics_add(col, context.collision, "Collision", 'COLLISION', 'MOD_PHYSICS', False)
|
||||
if row and obj.collision:
|
||||
row.prop(obj.collision, "use", text="", icon="HIDE_OFF" if obj.collision.use else "HIDE_ON")
|
||||
row.prop(obj.collision, "use", text="", icon='HIDE_OFF' if obj.collision.use else 'HIDE_ON')
|
||||
|
||||
physics_add(col, context.cloth, "Cloth", 'CLOTH', 'MOD_CLOTH', True)
|
||||
physics_add(col, context.dynamic_paint, "Dynamic Paint", 'DYNAMIC_PAINT', 'MOD_DYNAMICPAINT', True)
|
||||
|
|
|
@ -51,7 +51,7 @@ class WORLD_PT_context_world(WorldButtonsPanel, Panel):
|
|||
space = context.space_data
|
||||
|
||||
if scene:
|
||||
layout.template_ID(scene, "world", new="world.new", duplicate="world.duplicate")
|
||||
layout.template_ID(scene, "world", new="world.new")
|
||||
elif world:
|
||||
layout.template_ID(space, "pin_id")
|
||||
|
||||
|
|
|
@ -303,11 +303,11 @@ class CLIP_MT_masking_editor_menus(Menu):
|
|||
|
||||
if clip:
|
||||
layout.menu("MASK_MT_select")
|
||||
layout.menu("CLIP_MT_clip") # XXX - remove?
|
||||
layout.menu("CLIP_MT_clip")
|
||||
layout.menu("MASK_MT_add")
|
||||
layout.menu("MASK_MT_mask")
|
||||
else:
|
||||
layout.menu("CLIP_MT_clip") # XXX - remove?
|
||||
layout.menu("CLIP_MT_clip")
|
||||
|
||||
|
||||
class CLIP_PT_clip_view_panel:
|
||||
|
@ -1330,10 +1330,17 @@ class CLIP_MT_clip(Menu):
|
|||
layout.operator("clip.open")
|
||||
|
||||
if clip:
|
||||
layout.operator("clip.set_scene_frames")
|
||||
layout.operator("clip.set_center_principal")
|
||||
layout.operator("clip.prefetch")
|
||||
layout.operator("clip.reload")
|
||||
layout.menu("CLIP_MT_proxy")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.set_viewport_background")
|
||||
layout.operator("clip.setup_tracking_scene")
|
||||
|
||||
|
||||
class CLIP_MT_proxy(Menu):
|
||||
bl_label = "Proxy"
|
||||
|
@ -1345,66 +1352,161 @@ class CLIP_MT_proxy(Menu):
|
|||
layout.operator("clip.delete_proxy")
|
||||
|
||||
|
||||
class CLIP_MT_track(Menu):
|
||||
bl_label = "Track"
|
||||
class CLIP_MT_track_transform(Menu):
|
||||
bl_label = "Transform"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("clip.clear_solution")
|
||||
layout.operator("clip.solve_camera")
|
||||
layout.operator("transform.translate")
|
||||
layout.operator("transform.rotate")
|
||||
layout.operator("transform.resize")
|
||||
|
||||
layout.separator()
|
||||
props = layout.operator("clip.clear_track_path", text="Clear After")
|
||||
props.clear_active = False
|
||||
props.action = 'REMAINED'
|
||||
|
||||
props = layout.operator("clip.clear_track_path", text="Clear Before")
|
||||
class CLIP_MT_track_motion(Menu):
|
||||
bl_label = "Track Motion"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Backwards")
|
||||
props.backwards = True
|
||||
props.sequence = True
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Frame Backwards")
|
||||
props.backwards = True
|
||||
props.sequence = False
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Forwards")
|
||||
props.backwards = False
|
||||
props.sequence = True
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Frame Forwards")
|
||||
props.backwards = False
|
||||
props.sequence = False
|
||||
|
||||
|
||||
class CLIP_MT_track_clear(Menu):
|
||||
bl_label = "Clear"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
props = layout.operator("clip.clear_track_path", text="Before")
|
||||
props.clear_active = False
|
||||
props.action = 'UPTO'
|
||||
|
||||
props = layout.operator("clip.clear_track_path", text="Clear Track Path")
|
||||
props = layout.operator("clip.clear_track_path", text="After")
|
||||
props.clear_active = False
|
||||
props.action = 'REMAINED'
|
||||
|
||||
props = layout.operator("clip.clear_track_path", text="Track Path")
|
||||
props.clear_active = False
|
||||
props.action = 'ALL'
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.clear_solution", text="Solution")
|
||||
|
||||
|
||||
class CLIP_MT_track_refine(Menu):
|
||||
bl_label = "Refine"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
props = layout.operator("clip.refine_markers", text="Backwards")
|
||||
props.backwards = True
|
||||
|
||||
props = layout.operator("clip.refine_markers", text="Fowards")
|
||||
props.backwards = False
|
||||
|
||||
|
||||
class CLIP_MT_track_animation(Menu):
|
||||
bl_label = "Animation"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("clip.keyframe_insert")
|
||||
layout.operator("clip.keyframe_delete")
|
||||
|
||||
|
||||
class CLIP_MT_track_visibility(Menu):
|
||||
bl_label = "Show/Hide"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("clip.hide_tracks_clear")
|
||||
layout.operator("clip.hide_tracks", text="Hide Selected").unselected = False
|
||||
layout.operator("clip.hide_tracks", text="Hide Unselected").unselected = True
|
||||
|
||||
|
||||
class CLIP_MT_track_cleanup(Menu):
|
||||
bl_label = "Clean Up"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("clip.clean_tracks")
|
||||
layout.operator("clip.filter_tracks")
|
||||
|
||||
|
||||
class CLIP_MT_track(Menu):
|
||||
bl_label = "Track"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
clip = context.space_data.clip
|
||||
tracking_object = clip.tracking.objects.active
|
||||
|
||||
layout.menu("CLIP_MT_track_transform")
|
||||
layout.menu("CLIP_MT_track_motion")
|
||||
layout.menu("CLIP_MT_track_clear")
|
||||
layout.menu("CLIP_MT_track_refine")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.add_marker_move", text="Add Marker")
|
||||
layout.operator("clip.detect_features")
|
||||
layout.operator("clip.create_plane_track")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.solve_camera",
|
||||
text="Solve Camera Motion" if tracking_object.is_camera
|
||||
else "Solve Object Motion")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.join_tracks")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("clip.clean_tracks")
|
||||
|
||||
layout.operator("clip.copy_tracks", icon='COPYDOWN')
|
||||
layout.operator("clip.paste_tracks", icon='PASTEDOWN')
|
||||
|
||||
layout.separator()
|
||||
layout.operator("clip.copy_tracks")
|
||||
layout.operator("clip.paste_tracks")
|
||||
|
||||
layout.operator("clip.track_settings_as_default", text="Copy Settings to Defaults")
|
||||
layout.operator("clip.track_settings_to_track", text="Apply Default Settings")
|
||||
|
||||
layout.separator()
|
||||
props = layout.operator("clip.track_markers", text="Track Frame Backwards")
|
||||
props.backwards = True
|
||||
props.sequence = False
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Track Backwards")
|
||||
props.backwards = True
|
||||
props.sequence = True
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Track Forwards")
|
||||
props.backwards = False
|
||||
props.sequence = True
|
||||
|
||||
props = layout.operator("clip.track_markers", text="Track Frame Forwards")
|
||||
props.backwards = False
|
||||
props.sequence = False
|
||||
layout.menu("CLIP_MT_track_animation")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("CLIP_MT_track_visibility")
|
||||
layout.menu("CLIP_MT_track_cleanup")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.delete_track")
|
||||
layout.operator("clip.delete_marker")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("clip.add_marker_move")
|
||||
|
||||
layout.separator()
|
||||
layout.menu("CLIP_MT_track_visibility")
|
||||
layout.menu("CLIP_MT_track_transform")
|
||||
|
||||
|
||||
class CLIP_MT_reconstruction(Menu):
|
||||
bl_label = "Reconstruction"
|
||||
|
@ -1420,6 +1522,7 @@ class CLIP_MT_reconstruction(Menu):
|
|||
layout.operator("clip.set_axis", text="Set Y Axis").axis = 'Y'
|
||||
|
||||
layout.operator("clip.set_scale")
|
||||
layout.operator("clip.apply_solution_scale")
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@ -1427,25 +1530,13 @@ class CLIP_MT_reconstruction(Menu):
|
|||
layout.operator("clip.bundles_to_mesh")
|
||||
|
||||
|
||||
class CLIP_MT_track_visibility(Menu):
|
||||
bl_label = "Show/Hide"
|
||||
class CLIP_MT_select_grouped(Menu):
|
||||
bl_label = "Select Grouped"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("clip.hide_tracks_clear")
|
||||
layout.operator("clip.hide_tracks", text="Hide Selected").unselected = False
|
||||
layout.operator("clip.hide_tracks", text="Hide Unselected").unselected = True
|
||||
|
||||
|
||||
class CLIP_MT_track_transform(Menu):
|
||||
bl_label = "Transform"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("transform.translate")
|
||||
layout.operator("transform.resize")
|
||||
layout.operator_enum("clip.select_grouped", "group")
|
||||
|
||||
|
||||
class CLIP_MT_select(Menu):
|
||||
|
@ -1459,21 +1550,15 @@ class CLIP_MT_select(Menu):
|
|||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.select_all"
|
||||
).action = 'TOGGLE'
|
||||
layout.operator("clip.select_all",
|
||||
text="Inverse").action = 'INVERT'
|
||||
layout.operator("clip.select_all").action = 'TOGGLE'
|
||||
layout.operator("clip.select_all", text="Inverse").action = 'INVERT'
|
||||
|
||||
layout.menu("CLIP_MT_select_grouped")
|
||||
|
||||
layout.separator()
|
||||
|
||||
class CLIP_MT_select_grouped(Menu):
|
||||
bl_label = "Select Grouped"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator_enum("clip.select_grouped", "group")
|
||||
layout.operator("clip.stabilize_2d_select")
|
||||
layout.operator("clip.stabilize_2d_rotation_select")
|
||||
|
||||
|
||||
class CLIP_MT_tracking_context_menu(Menu):
|
||||
|
@ -1746,7 +1831,6 @@ classes = (
|
|||
CLIP_PT_display,
|
||||
CLIP_PT_clip_display,
|
||||
CLIP_PT_marker_display,
|
||||
CLIP_MT_track,
|
||||
CLIP_MT_tracking_editor_menus,
|
||||
CLIP_MT_masking_editor_menus,
|
||||
CLIP_PT_track,
|
||||
|
@ -1786,8 +1870,14 @@ classes = (
|
|||
CLIP_MT_clip,
|
||||
CLIP_MT_proxy,
|
||||
CLIP_MT_reconstruction,
|
||||
CLIP_MT_track_visibility,
|
||||
CLIP_MT_track,
|
||||
CLIP_MT_track_transform,
|
||||
CLIP_MT_track_motion,
|
||||
CLIP_MT_track_clear,
|
||||
CLIP_MT_track_refine,
|
||||
CLIP_MT_track_animation,
|
||||
CLIP_MT_track_visibility,
|
||||
CLIP_MT_track_cleanup,
|
||||
CLIP_MT_select,
|
||||
CLIP_MT_select_grouped,
|
||||
CLIP_MT_tracking_context_menu,
|
||||
|
|
|
@ -248,7 +248,7 @@ class DOPESHEET_HT_editor_buttons:
|
|||
|
||||
layout.separator_spacer()
|
||||
|
||||
layout.template_ID(st, "action", new="action.new", duplicate="action.duplicate_assign", unlink="action.unlink")
|
||||
layout.template_ID(st, "action", new="action.new", unlink="action.unlink")
|
||||
|
||||
# Layer management
|
||||
if st.mode == 'GPENCIL':
|
||||
|
|
|
@ -40,7 +40,7 @@ class FILEBROWSER_HT_header(Header):
|
|||
row.prop(params, "asset_library", text="")
|
||||
# External libraries don't auto-refresh, add refresh button.
|
||||
if params.asset_library != 'LOCAL':
|
||||
row.operator("file.refresh", text="", icon="FILE_REFRESH")
|
||||
row.operator("file.refresh", text="", icon='FILE_REFRESH')
|
||||
|
||||
layout.separator_spacer()
|
||||
|
||||
|
@ -197,7 +197,8 @@ class FILEBROWSER_PT_filter(Panel):
|
|||
|
||||
sub = row.column(align=True)
|
||||
|
||||
sub.prop(params, "use_filter_asset_only")
|
||||
if context.preferences.experimental.use_asset_browser:
|
||||
sub.prop(params, "use_filter_asset_only")
|
||||
|
||||
filter_id = params.filter_id
|
||||
for identifier in dir(filter_id):
|
||||
|
@ -390,7 +391,8 @@ class FILEBROWSER_PT_advanced_filter(Panel):
|
|||
layout.separator()
|
||||
col = layout.column(align=True)
|
||||
|
||||
col.prop(params, "use_filter_asset_only")
|
||||
if context.preferences.experimental.use_asset_browser:
|
||||
col.prop(params, "use_filter_asset_only")
|
||||
|
||||
filter_id = params.filter_id
|
||||
for identifier in dir(filter_id):
|
||||
|
|
|
@ -93,10 +93,10 @@ class NODE_HT_header(Header):
|
|||
|
||||
# Show material.new when no active ID/slot exists
|
||||
if not id_from and ob_type in types_that_support_material:
|
||||
row.template_ID(ob, "active_material", new="material.new", duplicate="material.duplicate")
|
||||
row.template_ID(ob, "active_material", new="material.new")
|
||||
# Material ID, but not for Lights
|
||||
if id_from and ob_type != 'LIGHT':
|
||||
row.template_ID(id_from, "active_material", new="material.new", duplicate="material.duplicate")
|
||||
row.template_ID(id_from, "active_material", new="material.new")
|
||||
|
||||
if snode.shader_type == 'WORLD':
|
||||
NODE_MT_editor_menus.draw_collapsible(context, layout)
|
||||
|
@ -109,7 +109,7 @@ class NODE_HT_header(Header):
|
|||
|
||||
row = layout.row()
|
||||
row.enabled = not snode.pin
|
||||
row.template_ID(scene, "world", new="world.new", duplicate="world.duplicate")
|
||||
row.template_ID(scene, "world", new="world.new")
|
||||
|
||||
if snode.shader_type == 'LINESTYLE':
|
||||
view_layer = context.view_layer
|
||||
|
|
|
@ -375,11 +375,11 @@ class OUTLINER_PT_filter(Panel):
|
|||
row.label(icon='OBJECT_DATAMODE')
|
||||
row.prop(space, "use_filter_object", text="Objects")
|
||||
row = col.row(align=True)
|
||||
row.label(icon="BLANK1")
|
||||
row.label(icon='BLANK1')
|
||||
row.prop(space, "filter_state", text="")
|
||||
sub = row.row(align=True)
|
||||
sub.enabled = space.filter_state != 'ALL'
|
||||
sub.prop(space, "filter_invert", text="", icon="ARROW_LEFTRIGHT")
|
||||
sub.prop(space, "filter_invert", text="", icon='ARROW_LEFTRIGHT')
|
||||
|
||||
sub = col.column(align=True)
|
||||
sub.active = space.use_filter_object
|
||||
|
|
|
@ -542,7 +542,7 @@ class USERPREF_PT_animation_fcurves(AnimationPanel, CenterAlignMixIn, Panel):
|
|||
|
||||
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
|
||||
|
||||
flow.prop(edit, "fcurve_unselected_alpha", text="F-Curve Visibility")
|
||||
flow.prop(edit, "fcurve_unselected_alpha", text="Unselected Opacity")
|
||||
flow.prop(edit, "fcurve_new_auto_smoothing", text="Default Smoothing Mode")
|
||||
flow.prop(edit, "keyframe_new_interpolation_type", text="Default Interpolation")
|
||||
flow.prop(edit, "keyframe_new_handle_type", text="Default Handles")
|
||||
|
@ -1342,6 +1342,11 @@ class USERPREF_PT_saveload_autorun(FilePathsPanel, Panel):
|
|||
class USERPREF_PT_file_paths_asset_libraries(FilePathsPanel, Panel):
|
||||
bl_label = "Asset Libraries"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
prefs = context.preferences
|
||||
return prefs.experimental.use_asset_browser
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = False
|
||||
|
@ -2188,14 +2193,21 @@ class ExperimentalPanel:
|
|||
layout.use_property_split = False
|
||||
layout.use_property_decorate = False
|
||||
|
||||
for prop_keywords, task in items:
|
||||
for prop_keywords, reference in items:
|
||||
split = layout.split(factor=0.66)
|
||||
col = split.split()
|
||||
col.prop(experimental, **prop_keywords)
|
||||
|
||||
if task:
|
||||
if reference:
|
||||
if type(reference) is tuple:
|
||||
url_ext = reference[0]
|
||||
text = reference[1]
|
||||
else:
|
||||
url_ext = reference
|
||||
text = reference
|
||||
|
||||
col = split.split()
|
||||
col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task
|
||||
col.operator("wm.url_open", text=text, icon='URL').url = self.url_prefix + url_ext
|
||||
|
||||
|
||||
"""
|
||||
|
@ -2225,6 +2237,7 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel):
|
|||
({"property": "use_switch_object_operator"}, "T80402"),
|
||||
({"property": "use_sculpt_tools_tilt"}, "T82877"),
|
||||
({"property": "use_object_add_tool"}, "T57210"),
|
||||
({"property": "use_asset_browser"}, ("project/profile/124/", "Milestone 1")),
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -515,6 +515,8 @@ geometry_node_categories = [
|
|||
NodeItem("GeometryNodePointDistribute"),
|
||||
NodeItem("GeometryNodePointInstance"),
|
||||
NodeItem("GeometryNodePointSeparate"),
|
||||
NodeItem("GeometryNodePointScale"),
|
||||
NodeItem("GeometryNodePointTranslate"),
|
||||
NodeItem("GeometryNodeRotatePoints"),
|
||||
NodeItem("GeometryNodeAlignRotationToVector"),
|
||||
]),
|
||||
|
|
Before Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 604 B |
After Width: | Height: | Size: 918 B |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 604 B |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 604 B |
After Width: | Height: | Size: 918 B |
After Width: | Height: | Size: 918 B |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 404 B |
After Width: | Height: | Size: 582 B |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 744 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 404 B |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 744 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 404 B |
After Width: | Height: | Size: 582 B |
After Width: | Height: | Size: 582 B |
After Width: | Height: | Size: 5.6 KiB |